Flagi
DarkGL
18.09.2011
Flagi dostępne standardowo :
żeby ich używać trzeba dodać do pluginu
sprawdzenie czy gracz ma flage
sprawdzanie czy gracz nie ma flagi
sprawdzanie czy gracz ma kilka flag
Przyklady:
Jak ma dzialac na - a lub b lub c - to dajemy
Gracz musi mieć wszystkie 3 flagi
Inne przykłady:
ADMIN_ALL - wszystkie ADMIN_IMMUNITY - flaga "a" ADMIN_RESERVATION - flaga "b" ADMIN_KICK - flaga "c" ADMIN_BAN - flaga "d" ADMIN_SLAY - flaga "e" ADMIN_MAP - flaga "f" ADMIN_CVAR - flaga "g" ADMIN_CFG - flaga "h" ADMIN_CHAT - flaga "i" * ADMIN_VOTE - flaga "j" ADMIN_PASSWORD - flaga "k" ADMIN_RCON - flaga "l" ADMIN_LEVEL_A - flaga "m" ADMIN_LEVEL_B - flaga "n" ADMIN_LEVEL_C - flaga "o" ADMIN_LEVEL_D - flaga "p" ADMIN_LEVEL_E - flaga "q" ADMIN_LEVEL_F - flaga "r" ADMIN_LEVEL_G - flaga "s" ADMIN_LEVEL_H - flaga "t" ADMIN_MENU - flaga "u" ADMIN_ADMIN - flaga "y" ADMIN_USER - flaga "z"Flagi dodatkowe :
ADMIN_FLAG_V - flaga "v" ADMIN_FLAG_W - flaga "w" ADMIN_FLAG_X - flaga "x"
żeby ich używać trzeba dodać do pluginu
#define ADMIN_FLAG_V (1<<21) #define ADMIN_FLAG_W (1<<22) #define ADMIN_FLAG_X (1<<23)
sprawdzenie czy gracz ma flage
if(get_user_flags(id) & ADMIN_LEVEL_A){ //gracz ma flage m }
sprawdzanie czy gracz nie ma flagi
if( !(get_user_flags(id) & ADMIN_LEVEL_A) ){ //gracz nie ma flagi m }
sprawdzanie czy gracz ma kilka flag
public has_flags(id,string[]) { new ret=1 new byte new len = strlen(string) new p_flag = get_user_flags(id) for(new i=0;i<=len;i++) { if(string[i]>='a' && string[i]<='z') byte = (1<<(string[i]-'a')) else if(string[i]>='A' && string[i]<='Z') byte = (1<<(string[i]-'A')) else if(string[i]==',' && ret==1) return 1 else if(string[i]==',') ret=1 if(byte!=0 && !(p_flag & byte)) ret=0 byte=0 } return ret }
Przyklady:
Jak ma dzialac na - a lub b lub c - to dajemy
has_flag(id,"a,b,c")Jak ma dzialac tylko gdy user ma flage - a i b i c - to dajemy
has_flag(id,"abc")Jak ma dzialac w przypadkach - a i b lub a i c lub b i c - to dajemy
has_flag(id,"ab,ac,bc")
Gracz musi mieć wszystkie 3 flagi
new flaga = (ADMIN_LEVEL_A | ADMIN_LEVEL_B | ADMIN_LEVEL_C) if((get_user_flags(id) & flaga) == flaga) { // KOD }lub inaczej
new sprawdz = get_user_flags(id) if(sprawdz & ADMIN_LEVEL_A && sprawdz & ADMIN_LEVEL_B && sprawdz & ADMIN_LEVEL_C) { // KOD }
Inne przykłady:
if (get_user_flags(id) & DEFINICJA_FLAGI) { //osoba ma jakas tam flage } else { //osoba nie ma jakies tam flagi }
public client_authorized(id) { if( get_user_flags(id) & ADMIN_BAN) client_print(0,print_chat,"Admin wchodzi na server") }
Vertricus
18.09.2011
public client_putinserver(id)
{
if( get_user_flags(id) & ADMIN_BAN)
client_print(0,print_chat,"Admin wchodzi na server")
}
putinserver nie zawsze wykonuje się przed client_authorized


BaQStiC
18.09.2011
Byl juz taki z flagami ale nie tak rtozwiniety. Thx na pewno pomocny.
Ps. Cos Ci obiecali ze taki poradniki robisz?
Ps. Cos Ci obiecali ze taki poradniki robisz?

zryty
08.10.2011
Dlatego używa się authorized do akcji związanych z flagami. Po za tym admini zazwyczaj są anonimowi, bo lubią sobie pobanowaćputinserver nie zawsze wykonuje się przed client_authorized

Tutek fajny, krótko i zwięźle


Redux
01.07.2012
Niee, DOSTEP to po prostu przykładowana nazwa define'aDOSTEP w sensie jakaś flaga
którego chcesz ( ofc oprócz has_flag )

#define DOSTEP ADMIN_CFG | ADMIN_IMMUNE | ADMIN_RCON
Tak, czy inaczej?
Użytkownik Redux edytował ten post 01.07.2012 22:31
sebul
01.07.2012
Ogólnie, chyba wychodzi na to, że te dwa warunki wyżej są inne. Pierwszy warunek jest spełniony, gdy gracz posiada dokładnie te 3 flagi, a w drugim, może mieć tych flag więcej, niż podane 3.Gracz musi mieć wszystkie 3 flagi
new flaga = (ADMIN_LEVEL_A | ADMIN_LEVEL_B | ADMIN_LEVEL_C) if((get_user_flags(id) & flaga) == flaga) { // KOD }lub inaczejnew sprawdz = get_user_flags(id) if(sprawdz & ADMIN_LEVEL_A && sprawdz & ADMIN_LEVEL_B && sprawdz & ADMIN_LEVEL_C) { // KOD }