←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Indexy graczy i zmienne

  • +
  • -
KRAKOW - zdjęcie KRAKOW 08.02.2017

Witam.

Piszę plugin na FFa i mam zagwozdkę z indexami i zmiennymi. Dla każdego gracza wywołującego komendę przypisywana jest zmienna (zwykle 1 lub 0 oznaczająca stan danej rzeczy) i tu pojawia się pytanie.

Tworzę jedną zmienną w pluginie - czy dla każdego gracza będzie się tworzyć osobna czy np. jeden gracz ustawi dla siebie 1, drugi 0 i dla pierwszego też wtedy będzie 0?

No i też indexy - czy serwer będzie rozpoznawał indexy graczy wywołujących komendę czy przy każdym wywołaniu będzie się on zmieniał?

 

Ogólnie rzecz ujmując - czy to co się dzieje w pluginie dzieje się niezależnie dla wielu graczy?

 

Mam nadzieję, że wiecie o co mi chodzi :)

Pozdrawiam

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 08.02.2017

Jest to zależne od samego typu zmiennej (zmienna, czy tablica zmiennych) oraz sposobu jej modyfikacji.

Najlepiej będzie, jak przedstawisz przykładowy kod ilustrujący Twój problem.

Odpowiedz

  • +
  • -
Robiin - zdjęcie Robiin 08.02.2017

Index gracza wpisujacego komende bedzie za kazdym razem inny.
Mozesz ustawic/pokazac cos wszystkim graczom, kiedy jeden z nich wpisuje komende.

To,co komenda wywoluje mozesz ustawic sam, albo dla wszystkich np. Pętlą for lub indexem 0.
Odpowiedz

  • +
  • -
KRAKOW - zdjęcie KRAKOW 08.02.2017

public zaczep1(index,menuh,item){
	switch(item){
		case 0:{
			id=index;
			if(m1==0){
				m1=1;
				set_hudmessage(0, 255, 0, 0.1, 0.1, 0, 0.0, 3600.0, 0.0, 0.0, 3);
				show_hudmessage(id,"m1 jest aktywne")
			}
		}
...
}
public newRound(){
	if(m1==1){
		set_hudmessage(0, 255, 0, 0.1, 0.1, 0, 0.0, 3600.0, 0.0, 0.0, 3);
		show_hudmessage(id,"m1 jest aktywne");
	}
	else
	{
		set_hudmessage(0, 255, 0, 0.1, 0.1, 0, 0.0, 3600.0, 0.0, 0.0, 3);
		show_hudmessage(id,"m1 nie aktywne");
	}
}

Mam takie coś i tu pytanie : czy to będzie działać tak jak powinno? Czyli jeśli dany gracz wybierze pierwszą opcję z danego menu to tylko wtedy mu pokaże "m1 jest aktywne", czy wystarczy, że jeden gracz ją wybierze a wszyscy z serwera będą mieli "m1 jest aktywne"?


Użytkownik KRAKOW edytował ten post 08.02.2017 18:27
Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 08.02.2017

new bool:m1[33]; //bool: oszczędność pamięci - zmienna tak/nie. Domyślnie jest 0 = nie.

public zaczep1(id,menuh,item)
{
	switch(item)
	{
		case 0:
		{
			if(m1[id]==0){
				m1[id]=1;
				set_hudmessage(0, 255, 0, 0.1, 0.1, 0, 0.0, 3600.0, 0.0, 0.0, 3);
				show_hudmessage(id,"m1 jest aktywne")
			}
			
		}
		...
	}
}

public newRound()
{
	new maxP = get_maxplayers();
	for(new i = 1; i<=maxP; i++)
	{
		if(m1[i]==1)
		{
			set_hudmessage(0, 255, 0, 0.1, 0.1, 0, 0.0, 3600.0, 0.0, 0.0, 3);
			show_hudmessage(i,"m1 jest aktywne");
		}
		else
		{
			set_hudmessage(0, 255, 0, 0.1, 0.1, 0, 0.0, 3600.0, 0.0, 0.0, 3);
			show_hudmessage(i,"m1 nieaktywne");
		}
	}
}

Powyższy kod modyfikuje zmienną osobno dla każdego gracza.

Należy pamiętać o zerowaniu stanu zmiennej przy wyjściu danego gracza z serwera ;)


Użytkownik _McHappy edytował ten post 08.02.2017 18:37
Odpowiedz

  • +
  • -
KRAKOW - zdjęcie KRAKOW 08.02.2017

Dzięki, nigdzie nie mogłem doczytać, jak to jest :)

Do zamknięcia

Odpowiedz