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")


Dodatki SourceMod












