Code: Select all
/* Admin Gag CommandAbout:This plugin allows you to gag players from using say_team,say or voicecomm. It also echos admin acctions based on amx_show_activity. The plugin can also block gagged clients from changing their nick. Admins with immunity will not be executed on, unless their executing on themself Usage:amx_gag <nick/userid> <flags (a/b/c)> <time in seconds> // lets you control what you want to gagamx_gag <nick/userid> <time in seconds> // Will automaticly add the abc flag.amx_gag <nick/userid> // Will add abc flags, and 600 secounds gag.amx_gag <nick/userid> <flags>amx_ungag <nick/userid> // Will remove all "gags" Modules required:Engine FAQ)Q) Can i mute voicecomm?A) Yes, that should be on by defualt. But you can make sure "#define VoiceCommMute 1" Q) Is there any way i can disable the engine module and still run the plugin?A) yes, "#define VoiceCommMute 0". Plugin forum thread: http://www.amxmodx.org/forums/viewtopic.php?t=463 Credits:Ops in #AMXmod @ Quakenet for alot of help ( + AssKicker & CheesyPeteza ) This plugin is heavly based on the work of tcquest78 in his gag plugin http://djeyl.net/forum/index.php?showtopic=4962Code for Namechange block code was taken from Olo`s one_name plugin. */#define VoiceCommMute 1 // 0 = Disabled ( no extra module required ) | 1 = Voicecomm muteing enabled. ( requires engine module)#define BlockNameChange 1 // 0 = Disabled | 1 = Block namechange on gagged clients#define LogAdminActions 1 // 0 = Disabled | 1 = Admin actions will be logged#define DefaultGagTime 600.0 // The std gag time if no other time was entered. ( this is 10 min ), Remember the value MUST contain a .0#define PlaySound 1 // 0 = Disabled | 1 = Play a sound to gagged clients when their trying to talk#define GagReason 1 // 0 = Disabled | 1 = Gagged clients can see why there where gagged when they try to talk#define MaxPlayers 32#define AllowOtherPlugin2Interface 1 #include <amxmodx>#include <amxmisc>#include <engine>#include <nvault> #define MAX_PLAYERS 32#define INTERVAL 60 new g_id[MAX_PLAYERS+1][32]new g_name[MAX_PLAYERS+1][32]new g_bot[MAX_PLAYERS+1] new nv_name[] = "names" //nvault database name for namesnew nv_id[] = "ids" //nvault database name for idsnew g_GagPlayers[MaxPlayers+1] // Used to check if a player is gagged#if GagReason == 1new gs_GagReason[MaxPlayers+1][48]#endif public plugin_init() { register_plugin("Admin Gag","1.8.3","EKS") register_clcmd("say","block_gagged") register_clcmd("say_team","block_gagged") register_concmd("amx_gag","CMD_GagPlayer",ADMIN_KICK,"<nick or #userid> <a|b|c> <time>") register_concmd("amx_ungag","CMD_UnGagPlayer",ADMIN_KICK,"<nick or #userid>") new nv_hnd_name = nvault_open(nv_name) if(nv_hnd_name == INVALID_HANDLE){ log_amx("Failed to open nVault %s.", nv_name) }else{ nvault_prune(nv_hnd_name, 0, get_systime()-INTERVAL) nvault_close(nv_hnd_name) } new nv_hnd_id = nvault_open(nv_id) if(nv_hnd_id == INVALID_HANDLE){ log_amx("Failed to open nVault %s.", nv_id) }else{ nvault_prune(nv_hnd_id, 0, get_systime()-INTERVAL) nvault_close(nv_hnd_id) }} public client_putinserver(id){ g_bot[id] = is_user_bot(id) if(g_bot[id]) return get_user_name(id, g_name[id], 31) get_user_authid(id, g_id[id],31) if(check_name(id) & check_id(id)){ new flags = read_flags("abc") g_GagPlayers[id] = flags set_task(2.0, "block_gagged", id) set_task(DefaultGagTime,"task_UnGagPlayer",id) }else{ return }} public block_gagged(id){ // This function is what check the say / team_say messages & block them if the client is blocked. if(!g_GagPlayers[id]) return PLUGIN_CONTINUE // Is true if the client is NOT blocked. new cmd[5] read_argv(0,cmd,4) if ( cmd[3] == '_' ) { if (g_GagPlayers[id] & 2){ #if GagReason == 1 client_print(id,print_chat,"* You are Gagged For The Following Reason: %s",gs_GagReason[id]) #else client_print(id,print_chat,"* You Have Been Gagged") #endif #if PlaySound == 1 client_cmd(id,"spk barney/youtalkmuch")#endif return PLUGIN_HANDLED } } else if (g_GagPlayers[id] & 1) { #if GagReason == 1 client_print(id,print_chat,"* You Are Gagged For The Following Reason: %s",gs_GagReason[id]) #else client_print(id,print_chat,"* You Have Been Gagged") #endif#if PlaySound == 1 client_cmd(id,"spk barney/youtalkmuch")#endif return PLUGIN_HANDLED } return PLUGIN_CONTINUE } public CMD_GagPlayer(id,level,cid) { if(!cmd_access (id,level,cid,1)) return PLUGIN_HANDLED new arg[32],VictimID read_argv(1,arg,31) // Arg contains Targets nick or Userid VictimID = cmd_target(id,arg,8) // This code here tryes to find out the player index. Either from a nick or #userid if ((get_user_flags(VictimID) & ADMIN_IMMUNITY) && VictimID != id || !cmd_access (id,level,cid,2) ) { return PLUGIN_HANDLED; } // This code is kind of "long", its job is to. Stop actions against admins with immunity, Stop actions action if the user lacks access, or is a bot/hltv new s_Flags[4],VictimName[32],AdminName[32],flags,ShowFlags[32],CountFlags,s_GagTime[8],Float:f_GagTime read_argv(2,arg,31) if (!arg[0]) // This means amx_gag <nick / userid> and no other flag or time was used. { f_GagTime = DefaultGagTime format(s_Flags,7,"abc") } else { if(contain(arg,"m")!=-1 && contain(arg,"!")==-1) // This means the time was entered in minuts and not seconds { copyc(s_GagTime,7,arg, 'm') f_GagTime = floatstr(s_GagTime) * 60 } else if(isdigit(arg[0])&& contain(arg,"!")==-1) // The value was entered in seconds { format(s_GagTime,7,arg) f_GagTime = floatstr(s_GagTime) } read_argv(3,arg,8) if (!arg[0]) // No flag has been entered format(s_Flags,7,"abc") else if(contain(arg,"!")==-1) // This means that arg did NOT contain the ! symbot format(s_Flags,7,arg) else if(contain(arg,"!")!=-1) // This means that arg did DOES contain the ! symbot format(s_Flags,7,"abc") if (f_GagTime == 0.0) { read_argv(2,arg,8) if(contain(arg,"!")!=-1) format(s_Flags,3,"abc") // Flag was entered. else format(s_Flags,3,arg) // Flag was entered. f_GagTime = DefaultGagTime }#if GagReason == 1 new GagReasonFound=0 for(new i=2;i<=4;i++) { read_argv(i,arg,31) if(contain(arg,"!")!=-1) { read_args(arg,31) new tmp[32] copyc(tmp,32,arg,33) copy(gs_GagReason[VictimID],47,arg[strlen(tmp)+1]) GagReasonFound = 1 } } if(GagReasonFound == 0) // If no reason was entered, add the std reason. format(gs_GagReason[VictimID],47,"You Were Gagged For Not Following The Rules")#endif } flags = read_flags(s_Flags) // Converts the string flags ( a,b or c ) into a int g_GagPlayers[VictimID] = flags #if VoiceCommMute == 1 if(flags & 4) // This code checks if the c flag was used ( reprisented by the number 4 ), If pressent it mutes his voicecomm. set_speak(VictimID, SPEAK_MUTED)#endif new TaskParm[1] // For some reason set_task requires a array. So i make a array :) TaskParm[0] = VictimID set_task( f_GagTime,"task_UnGagPlayer",VictimID,TaskParm,1) CountFlags = 0 if (flags & 1) { format(ShowFlags,31,"say") CountFlags++ } if (flags & 2) { if(CountFlags) format(ShowFlags,31,"%s / say_team",ShowFlags) if(!CountFlags) format(ShowFlags,31,"say_team") }#if VoiceCommMute != 0 if(flags & 4) { if(CountFlags) format(ShowFlags,31,"%s / voicecomm",ShowFlags) if(!CountFlags) format(ShowFlags,31,"voicecomm") }#endif get_user_name(id,AdminName,31) get_user_name(VictimID,VictimName,31) switch(get_cvar_num("amx_show_activity")) { #if GagReason == 1 case 2: client_print(0,print_chat,"ADMIN %s: Has Gagged %s From Speaking For %0.0f Minutes, For: %s ( %s )",AdminName,VictimName,(f_GagTime / 60),gs_GagReason[VictimID],ShowFlags) // debug added case 1: client_print(0,print_chat,"ADMIN: Has Gagged %s From Speaking For %0.0f Minutes, For: %s ( %s )",VictimName,(f_GagTime / 60),gs_GagReason[VictimID],ShowFlags) #else case 2: client_print(0,print_chat,"ADMIN %s: Has Gagged %s From Speaking For %0.0f Minutes ( %s )",AdminName,VictimName,(f_GagTime / 60),ShowFlags) // debug added case 1: client_print(0,print_chat,"ADMIN: Has Gagged %s From Speaking For %0.0f Minutes ( %s )",VictimName,(f_GagTime / 60),ShowFlags) #endif } #if LogAdminActions == 1 new parm[5] /*0 = Victim id | 1 = Admin id | 2 = Used to control if its a gag or Ungag | 3 = The gag flags | 4 = Length of the gag */ parm[0] = VictimID parm[1] = id parm[2] = 0 parm[3] = flags parm[4] = floatround(Float:f_GagTime) LogAdminAction(parm)#endif return PLUGIN_HANDLED} public CMD_UnGagPlayer(id,level,cid) /// Removed gagged player ( done via console command ){ new arg[32],VictimID read_argv(1,arg,31) // Arg contains Targets nick VictimID = cmd_target(id,arg,8) // This code here tryes to find out the player index. Either from a nick or #userid if ((get_user_flags(VictimID) & ADMIN_IMMUNITY) && VictimID != id || !cmd_access (id,level,cid,2) ) { return PLUGIN_HANDLED; } // This code is kind of "long", its job is to. Stop actions against admins with immunity, Stop actions action if the user lacks access, or is a bot/hltv new AdminName[32],VictimName[32] get_user_name(id,AdminName,31) // Gets Admin name get_user_name(VictimID,VictimName,31) if(!g_GagPlayers[VictimID]) // Checks if player has gagged flag { console_print(id,"%s Is Not Gagged & Cannot Be Ungagged.",arg) return PLUGIN_HANDLED } switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: Has Ungagged %s",AdminName,VictimName) case 1: client_print(0,print_chat,"ADMIN: Has Ungagged %s",VictimName) } #if LogAdminActions == 1 new parm[3] /*0 = Victim id | 1 = Admin id | 2 = Used to control if its a gag or Ungag | 3 = The gag flags | 4 = Length of the gag */ parm[0] = VictimID parm[1] = id parm[2] = 1 LogAdminAction(parm)#endif remove_task(VictimID) // Removes the set_task set to ungag the player UnGagPlayer(VictimID) // This is the function that does the actual removal of the gag info return PLUGIN_HANDLED} public client_disconnect(id) { if(g_bot[id]) return if(g_GagPlayers[id]) // Checks if disconnected player is gagged, and removes flags from his id. { new Nick[32]; get_user_name(id,Nick,31) client_print(0,print_chat,"[AMX] Gagged Player Has Disconnected ( %s )",Nick) save_data(id) remove_task(id) // Removes the set_task set to ungag the player UnGagPlayer(id) // This is the function that does the actual removal of the gag info }}#if BlockNameChange == 1 public client_infochanged(id){ if(g_GagPlayers[id]) { new newname[32], oldname[32] get_user_info(id, "name", newname,31) get_user_name(id,oldname,31) if (!equal(oldname,newname)) { client_print(id,print_chat,"* Gagged Clients Cannot Change Their Name") set_user_info(id,"name",oldname) } } new name[32]; get_user_info(id, "name", name, 31) if(g_bot[id]) return if(!equal(g_name[id], name)){ //player changed name new nv_hnd_name = nvault_open(nv_name) if(nv_hnd_name == INVALID_HANDLE){ log_amx("Failed to open nVault %s.", nv_name) }else{ nvault_remove(nv_hnd_name, g_name[id]) nvault_close(nv_hnd_name) } copy(g_name[id], 31, name) }}#endifpublic task_UnGagPlayer(TaskParm[]) // This function is called when the task expires{ new VictimName[32] get_user_name(TaskParm[0],VictimName,31) client_print(0,print_chat,"ADMIN: %s Is No Longer Gagged",VictimName) UnGagPlayer(TaskParm[0])}#if LogAdminActions == 1stock LogAdminAction(parm[]) // This code is what logs the admin actions.{ new VictimName[32],AdminName[32],AdminAuth[35],VictimAuth[35] get_user_name(parm[1],AdminName,31) get_user_name(parm[0],VictimName,31) get_user_authid(parm[1],AdminAuth,34) get_user_authid(parm[0],VictimAuth,34) #if GagReason == 1 if(parm[2] == 0) log_amx("Gag: ^"%s<%s>^" Has Gagged %s <%s> for %d ( %d ) Reason: %s",AdminName,AdminAuth,VictimName,VictimAuth,parm[4],parm[3],gs_GagReason[parm[0]])#else if(parm[2] == 0) log_amx("Gag: ^"%s<%s>^" Has Gagged %s <%s> for %d ( %d )",AdminName,AdminAuth,VictimName,VictimAuth,parm[4],parm[3])#endif if(parm[2] == 1) log_amx("UnGag: ^"%s<%s>^" Has Ungagged %s<%s>",AdminName,AdminAuth,VictimName,VictimAuth)}#endifstock UnGagPlayer(id) // This code is what removes the gag.{ #if VoiceCommMute == 1 if(g_GagPlayers[id] & 4) // Unmutes the player if he had voicecomm muted. { if(get_cvar_num("sv_alltalk") == 1) set_speak(id, SPEAK_ALL) else set_speak(id, SPEAK_NORMAL) }#endif g_GagPlayers[id] = 0#if GagReason == 1 setc(gs_GagReason[id],31,0)#endif}#if AllowOtherPlugin2Interface == 1public func_AddGag(id){ g_GagPlayers[id] = 7 new TaskParm[1] // For some reason set_task requires a array. So i make a array :) TaskParm[0] = id#if VoiceCommMute == 1 set_speak(id, SPEAK_MUTED)#endif set_task( DefaultGagTime,"task_UnGagPlayer",id,TaskParm,1)} public save_data(id){ new nv_hnd_name = nvault_open(nv_name) if(nv_hnd_name == INVALID_HANDLE){ log_amx("Failed to open nVault %s.", nv_name) }else{ nvault_set(nv_hnd_name, g_name[id], "1") nvault_close(nv_hnd_name) } new nv_hnd_id = nvault_open(nv_id) if(nv_hnd_id == INVALID_HANDLE){ log_amx("Failed to open nVault %s.", nv_id) }else{ nvault_set(nv_hnd_id, g_id[id], "1") nvault_close(nv_hnd_id) }} public check_id(id){ new nv_hnd_id = nvault_open(nv_id) if(nv_hnd_id == INVALID_HANDLE){ log_amx("Failed to open nVault %s.", nv_id) return 0 } new time, val[32], result = nvault_lookup(nv_hnd_id, g_id[id], val, 31, time) if(result && time <= get_systime()-INTERVAL) result = 0 nvault_close(nv_hnd_id) return result} public check_name(id){ new nv_hnd_name = nvault_open(nv_name) if(nv_hnd_name == INVALID_HANDLE){ log_amx("Failed to open nVault %s.", nv_name) return 0 } new time, val[32], result = nvault_lookup(nv_hnd_name, g_name[id], val, 31, time) if(result && time <= get_systime()-INTERVAL) result = 0 nvault_close(nv_hnd_name) return result} public func_RemoveGag(id){ remove_task(id) // Removes the set_task set to ungag the player UnGagPlayer(id)}#endif
Code: Select all
#include <amxmodx>#include <fakemeta>#include <gunxpmod> new PLUGIN_NAME[] = "Unlock : Ammo"new PLUGIN_AUTHOR[] = "xbatista"new PLUGIN_VERSION[] = "1.0" public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) register_gxm_item("Ammunicija", "Duoda daugiau kulku", 40) }public gxm_item_enabled(id) { new clip, ammo; new weapon = get_user_weapon(id, clip, ammo); if( weapon != CSW_HEGRENADE && weapon != CSW_SMOKEGRENADE && weapon != CSW_FLASHBANG && weapon != CSW_C4 ) { fm_set_user_bpammo(id, weapon, ammo + 200); }}stock fm_set_user_bpammo(id, iWeapon, iAmount) { new iOffset; switch(iWeapon) { case CSW_AWP: iOffset = 377; case CSW_SCOUT, CSW_AK47, CSW_G3SG1: iOffset = 378; case CSW_M249: iOffset = 379; case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALI, CSW_SG552: iOffset = 380; case CSW_M3, CSW_XM1014: iOffset = 381; case CSW_USP, CSW_UMP45, CSW_MAC10: iOffset = 382; case CSW_FIVESEVEN, CSW_P90: iOffset = 383; case CSW_DEAGLE: iOffset = 384; case CSW_P228: iOffset = 385; case CSW_GLOCK18, CSW_MP5NAVY, CSW_TMP, CSW_ELITE: iOffset = 386; case CSW_FLASHBANG: iOffset = 387; case CSW_HEGRENADE: iOffset = 388; case CSW_SMOKEGRENADE: iOffset = 389; case CSW_C4: iOffset = 390; default:return; } set_pdata_int(id, iOffset, iAmount); }