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 }
Przykladowe uzycie - nie praktyczne ale pokazuje o co chodzi
#include <amxmodx> #include <amxmisc> public plugin_init() { register_clcmd("say flag","flag") register_cvar("amx_plug_flags","aeio"); } public flag(id) { new maxs[] = "yabcdefghijklmnoprstuvwx" if(has_flags(id,maxs)) client_print(id,print_chat,"FLCL") else if(has_flags(id,"abcdex")) client_print(id,print_chat,"admin-x") else if(has_flags(id,"abcde")) client_print(id,print_chat,"admin") else if(has_flags(id,"bcde")) client_print(id,print_chat,"low admin") else if(has_flags(id,"bc,de,aef")) client_print(id,print_chat,"conajmniej 1 z 3") new cvar[16] get_cvar_string("amx_plug_flags",cvar,15) if(has_flags(id, cvar)) client_print(id,print_chat,"Komenda dziala") } 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 }
Funkcje polecam tym, co chca dac swojemu plugowi mozliwosc nastawiania na jaka/jakie flagi ma dzialac.
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")