←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Funkcja dla flagi i gracza z danym ID

Locked

AztekHQS's Photo AztekHQS 31.12.2012

Witam,

Mam pewien problem, nie wiem czemu jak zrobię tak:
if(((!(get_user_flags(id) & 8)) || Prowadzacy != id)) return 1;

//jakis kod


To ta funkcja nie chce działać dla gracza z daną flagą oraz dla gracza z danym ID.
Quote

  • +
  • -
speedkill's Photo speedkill 01.01.2013

Sprawdź:
if((get_user_flags(id) & 8 == 8) && Prowadzacy == id){
    //Kod
}
return 1;
Quote

  • +
  • -
d0naciak's Photo d0naciak 01.01.2013

Sprawdź:

if((get_user_flags(id) & 8 == 8) && Prowadzacy == id){
	//Kod
}
return 1;


Zamiast || daj && w if() ;]

@up poprawił się ;]
speedkill (01.01.2013 02:55):
Poprawiłem szybciej niż napisałeś ;)

Edited by d0n tHe Pr0oo, 01.01.2013 02:52.
Quote

AztekHQS's Photo AztekHQS 01.01.2013

Czemu ADMIN_BAN == ADMIN_BAN ?

ID gracza (Prowadzący) to CT a z flagą ADMIN_BAN to TT, czyli nie będzie działać.
Quote

Gość_21977_* 07.01.2013

Iloczyn bitowy jest wykonywany w pierwszej kolejności.
Dopiero potem dokonywane jest porównanie wartości.

Porównywanie iloczynu uprawnień gracza i sumy flag z potęgą dwójki faktycznie jest zbędne.
Warunek Prowadzacy == id warto podać na lewą stronę koniunkcji.
if(Prowadzacy == id && get_user_flags(id) & 8){
//Kod
}
return 1;
Quote

  • +
  • -
GwynBleidD's Photo GwynBleidD 10.01.2013

Zacznijmy od tego jaką flagą jest 8 ;) Jest to 4ty bit zaświecony, czyli flaga d.

Wszystkie z kodów zadziałają poprawnie, łącznie z Twoim (tylko dałeś w nim o jedną parę nawiasów za dużo, ale to nie ma znaczenia). W Twoim kodzie dobrze sobie jest rozbić to na 2 warunki:


if (!(get_user_flags(id) & ADMIN_BAN))
return 1;
if (Prowadzacy != id)
return 1;

Wtedy możesz lepiej kontrolować na którym warunku Ci się wysypuje. Myślę, że problem leżał w tym, iż nie do końca wiesz jaka flaga kryje się pod tą ósemką :)
Quote
Locked