Parent Directory | Revision Log
/*Lib Targets * Version 0.8.2 * * by Don Juan-jello * www.jello-net.com * * This file is provided as is (no warranties). */ #if defined _lib_targets #endinput #endif #define _lib_targets #define DEBUGLOG 0 #include <amxmisc> #include <fakemeta> #include <engine> //Flags: #define IMMUNITY 1 //obey immunity #define SELF 2 //allow yourself #define DEAD 4 //must be dead #define ALIVE 16 //must be alive #define NOBOT 8 //can't be bot #define BOT 32 //must be bot #define LEVEL 64 //can execute on players with equal or lower immunity //define NOSPEC # /* The following combinations of flags are incompatible and will error out. * DEAD(4) and ALIVE(16) * BOT(32) and NOBOT(8) * SELF(2) and LEVEL(64) * IMMUNITY(1) is the only flag without an incompatible counter-part. * * targtype * arg# -replace # with argument id to read from cmd line * str... -replace ... with string to use as search criteria */ //2nd lvl immunity stock targets_find(id,&targnum,flags=IMMUNITY+SELF,targtype[100]="arg1",wild_card_access=ADMIN_RCON){ new targets[32]//,bool:multexpr=false if(!(flags&BOT&&flags&NOBOT)&&!(flags&DEAD&&flags&ALIVE)&&!(flags&SELF&&flags&LEVEL)){//Conflicting flags #if DEBUGLOG == 1 log_to_file("lib_debug.log","---------- CMD START ----------") new tmplayers[32],temp1[91],tmpnum get_players(tmplayers,tmpnum) for(new i=0;i<tmpnum;i++){ get_user_name(tmplayers[i],temp1,90) log_to_file("lib_debug.log","%d %d %d %d %s",tmplayers[i],is_user_alive(tmplayers[i]),is_user_bot(tmplayers[i]),get_user_team(tmplayers[i]),temp1) } log_to_file("lib_debug.log"," ") read_args(temp1,90) read_argv(0,tmplayers,31) log_to_file("lib_debug.log","cmdline: %s %s",tmplayers,temp1) log_to_file("lib_debug.log"," ") #endif targnum=0 new args[100],expr[100] if(equali(targtype,"str",3))copy(args,sizeof(args)-1,targtype[3]) else if(equali(targtype,"arg",3))read_argv(strtonum(targtype[3]),args,sizeof(args)-1) else { if(id!=0)client_print(0,print_chat,"[AMX - lib_targets] Invalid value in argument 4 function targets_find") else server_print("[AMX - lib_targets] Invalid value in argument 4 function targets_find") log_message("[AMX - lib_targets] Invalid value in argument 4 function targets_find") return targets } #if DEBUGLOG == 1 new temp2=0 #endif while(strlen(args)){ #if DEBUGLOG == 1 temp2++ #endif new cpos=contain(args,",") if(cpos!=-1){//Comma delimited list //multexpr=true copy(expr,cpos,args) format(args,sizeof(args)-1,args[cpos+1]) } else{ expr=args args="" } if(!(equali(expr,"!@all")||equali(expr,"!*"))){//Conflicting expr if((equal(expr,"!",1)||equal(expr,"@",1)||equal(expr,"*",1))?get_user_flags(id)&wild_card_access:1){ new bool:invert=false,ntargs[32],ntargnum=0,gpflags[4] if(equal(expr,"!",1)){ invert=true format(expr,sizeof(expr)-1,expr[1])//Trim "!" from string. } if(equal(expr,"^^")){ new body get_user_aiming(id,ntargs[0],body,99999); if(ntargs[0])ntargnum=1 else{ if(id!=0)client_print(id,print_console,"[AMX] No client in your aim.") else server_print("[AMX] No client in your aim.") gpflags="s" } } else if(equal(expr,".",1)){ ntargs[0]=id ntargnum=1 } else if(equal(expr,"#",1)){ ntargs[0]=find_player("k",strtonum(expr[1])) if(ntargs[0])ntargnum=1 else{ if(id!=0)client_print(id,print_console,"[AMX] No client with that UID: %s",expr) else server_print("[AMX] No client with that UID: %s",expr) gpflags="s" } } else if(equal(expr,"@",1)){ if(equali(expr,"@t")||equali(expr,"@terrorist")||equali(expr,"@ct")||equali(expr,"@all")){ //multexpr=true format(expr,sizeof(expr)-1,expr[1]) if(equali(expr,"t"))expr="terrorist" strtoupper(expr) gpflags="e" if(equal(expr,"ALL")){ gpflags="" } else if(invert){ if(equal(expr,"TERRORIST"))expr="CT" else expr="TERRORIST" invert=false } } else{ if(id!=0)client_print(id,print_console,"[AMX] Expression matched no teams: %s",expr) else server_print("[AMX] Expression matched no teams: %s",expr) } } else if(equal(expr,"*",1)){ format(expr,sizeof(expr)-1,expr[1]) if(strlen(expr))gpflags="f" } else{ ntargs[0]=find_player("bl",expr) if(ntargs[0]!=find_player("blj",expr)){ if(id!=0)client_print(id,print_console,"[AMX] Expression matched multiple clients: %s",expr) else server_print("[AMX] Expression matched multiple clients: %s",expr) gpflags="s" } else if(!ntargs[0]){ if(id!=0)client_print(id,print_console,"[AMX] Expression matched no client: %s",expr) else server_print("[AMX] Expression matched no client: %s",expr) gpflags="s" } else ntargnum=1 } if(!ntargnum&&!equal(gpflags,"s")){ //multexpr=true get_players(ntargs,ntargnum,gpflags,expr) } #if DEBUGLOG == 1 log_to_file("lib_debug.log","Iteration #%d - %s",temp2,expr) for(new i=0;i<ntargnum;i++){ get_user_name(ntargs[i],temp1,90) log_to_file("lib_debug.log","%d %d %d %d %s",ntargs[i],is_user_alive(ntargs[i]),is_user_bot(ntargs[i]),get_user_team(ntargs[i]),temp1) } #endif if(invert&&ntargnum>0){//Invert new players[32],num get_players(players,num) for(new i=0;i<ntargnum;i++){ for(new j=0;j<num;j++){ if(ntargs[i]==players[j]){ for(new k=j;k<num--;k++){ players[k]=players[k+1] } break } } } ntargs=players ntargnum=num #if DEBUGLOG == 1 log_to_file("lib_debug.log","inversion") for(new i=0;i<ntargnum;i++){ get_user_name(ntargs[i],temp1,90) log_to_file("lib_debug.log","%d %d %d %d %s",ntargs[i],is_user_alive(ntargs[i]),is_user_bot(ntargs[i]),get_user_team(ntargs[i]),temp1) } #endif } if(ntargnum>0){ //Merge with final list if(targnum>0){ for(new i=0;i<ntargnum;i++){ for(new j=0;j<targnum;j++){ if(ntargs[i]==targets[j])break if(j+1==targnum){ targets[j+1]=ntargs[i] targnum++ break } } } } else if(targnum==0){ for(new i=0;i<ntargnum;i++){ targets[i]=ntargs[i] targnum++ } } } #if DEBUGLOG == 1 log_to_file("lib_debug.log","merge") for(new i=0;i<targnum;i++){ get_user_name(targets[i],temp1,90) log_to_file("lib_debug.log","%d %d %d %d %s",targets[i],is_user_alive(targets[i]),is_user_bot(targets[i]),get_user_team(targets[i]),temp1) } #endif } else{ if(id!=0)client_print(id,print_console,"[AMX] You don't have access to use wild cards: %s",expr) else server_print("[AMX] You don't have access to use wild cards: %s",expr) } } else{ if(id!=0)client_print(id,print_console,"[AMX] Conflicting inputs: %s",expr) else server_print("[AMX] Conflicting inputs: %s",expr) } } if(targnum>0){ new rtargnum=0,names[332],tmp[11] if(flags&DEAD||flags&ALIVE){ names="";rtargnum=0; for(new i=0;i<targnum;i++){ if((flags&DEAD&&is_user_alive(targets[i]))||(flags&ALIVE&&!is_user_alive(targets[i]))){ get_user_name(targets[i],tmp,sizeof(tmp)-1) format(names,sizeof(names)-1,"%s%s%s",names,rtargnum>0?",":"",tmp) targnum-- for(new j=i;j<targnum;j++)targets[j]=targets[j+1] rtargnum++ i-- } } if(rtargnum>0){ if(id!=0)client_print(id,print_console,"[AMX] Ignoring %d %s clients: %s",rtargnum,flags&DEAD?"living":flags&ALIVE?"dead":"",names) else server_print("[AMX] Ignoring %d %s clients: %s",rtargnum,flags&DEAD?"living":flags&ALIVE?"dead":"",names) } #if DEBUGLOG == 1 log_to_file("lib_debug.log","filter dead/alive") for(new i=0;i<targnum;i++){ get_user_name(targets[i],temp1,90) log_to_file("lib_debug.log","%d %d %d %d %s",targets[i],is_user_alive(targets[i]),is_user_bot(targets[i]),get_user_team(targets[i]),temp1) } #endif } if(flags&BOT||flags&NOBOT){ names="";rtargnum=0; for(new i=0;i<targnum;i++){ if((flags&BOT&&!is_user_bot(targets[i]))||(flags&NOBOT&&is_user_bot(targets[i]))){ get_user_name(targets[i],tmp,sizeof(tmp)-1) format(names,sizeof(names)-1,"%s%s%s",names,rtargnum>0?",":"",tmp) targnum-- for(new j=i;j<targnum;j++)targets[j]=targets[j+1] rtargnum++ i-- } } if(rtargnum>0){ if(id!=0)client_print(id,print_console,"[AMX] Ignoring %d %s clients: %s",rtargnum,flags&BOT?"non bot":flags&NOBOT?"bot":"",names) else server_print("[AMX] Ignoring %d %s clients: %s",rtargnum,flags&BOT?"non bot":flags&NOBOT?"bot":"",names) } #if DEBUGLOG == 1 log_to_file("lib_debug.log","filter bot/not bot") for(new i=0;i<targnum;i++){ get_user_name(targets[i],temp1,90) log_to_file("lib_debug.log","%d %d %d %d %s",targets[i],is_user_alive(targets[i]),is_user_bot(targets[i]),get_user_team(targets[i]),temp1) } #endif } if(flags&IMMUNITY){ names="";rtargnum=0; for(new i=0;i<targnum;i++){ if((get_user_flags(targets[i])&ADMIN_IMMUNITY)&&((flags&SELF)?(targets[i]!=id):true)&&((flags&LEVEL)?(get_user_flags(id)&ADMIN_IMMUNITY==1):true)){ get_user_name(targets[i],tmp,sizeof(tmp)-1) format(names,sizeof(names)-1,"%s%s%s",names,rtargnum>0?",":"",tmp) targnum-- for(new j=i;j<targnum;j++)targets[j]=targets[j+1] rtargnum++ i-- } } if(rtargnum>0)console_print(id,"[AMX] Ignoring %d immune clients: %s",rtargnum,names) } } } else{ if(id!=0)client_print(id,print_console,"[AMX] Invalid flag combination: This problem most likely exist within the plugin's code.") else server_print("[AMX] Invalid flag combination: This problem most likely exist within the plugin's code.") } //if(targnum<1&&!multexpr)client_print(id,print_console,"[AMX] No clients matched given expression(s).") //else //if(multexpr)client_print(id,print_console,"[AMX] %d clients matched.",targnum) return targets } /* Show admins activity - amx_show_activity * 0 - disabled * 1 - show without admin name * 2 - show with name */ /*To do: * Log to amx admin log. * */ //max 381 //msg 59 //names 322 - numnames(for comma) : target name length //3 line max stock targets_activity(id,targets[32],targnum,cmdname[21]="",show_act=-1,log_act=1){ new showtype=(show_act==-1)?get_cvar_num("amx_show_activity"):show_act if(targnum>0&&!(showtype==0)){ new msg[382] msg="ADMIN" new adminname[16] get_user_name(id,adminname,sizeof(adminname)-1) if(showtype==2)format(msg,sizeof(msg),"%s %s",msg,adminname) if(strlen(cmdname)==0){ read_argv(0,cmdname,sizeof(cmdname)-1) if(equali(cmdname,"amx_",4))copy(cmdname,sizeof(cmdname)-1,cmdname[4]) } format(msg,sizeof(msg),"%s: %s on %d clients: ",msg,cmdname,targnum) new namelen=clamp(340-targnum/targnum,9,15) for(new i=0;i<targnum;i++){ new tmp[16] get_user_name(targets[i],tmp,namelen) format(msg,sizeof(msg)-1,"%s%s%s",msg,i>0?",":"",tmp) } for(new i=0;i<strlen(msg);i+=127)client_print(0,print_chat,msg[i]) if(log_act){ new logfile[16] get_logfile(logfile,15) new neid=contain(msg,":") new authid[32] get_user_authid(id,authid,31) log_to_file(logfile,"Debug") log_to_file(logfile,"Cmd: ^"%s<%d><%s><>^"%s",adminname,get_user_userid(id),authid,msg[neid+1]) } //log_to_file(g_logFile,"Kick: ^"%s<%d><%s><>^" kick ^"%s<%d><%s><>^" (reason ^"%s^")", //name,get_user_userid(id),authid, name2,userid2,authid2,arg2 ) } return PLUGIN_HANDLED }
Contact | ViewVC Help |
Powered by ViewVC 1.0.4 |