The code below is to block voice from dead players. Admins can use the bind +adminvoice which is handled by another plugin (amx_super-serious.axx). Dead players are getting a HUD message and when admins using +adminvoice to talk to other admins they shouldn't get that message. Everything works fine theoretically, but when a admin repeatedly press the key bind to +adminvoice, they eventually get the HUD message.
Is there a way to code something that set a delay for g_bAdminVoice? Like: if it get true with +adminvoice, wait 2 seconds before it get false with -adminvoice only in case it get's true again.
Edit: I can probably fixing this issue with set_task. Some help or other suggestions are still appreciated.
The code:
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <reapi>
#define PLUGIN "No Dead Mic ReAPI"
#define AUTHOR "fatal"
#define VERSION "0.2"
#define MAX_PLAYERS 32
new bool:g_bAdmin[MAX_PLAYERS+1]
new bool:g_bEnforcer[MAX_PLAYERS+1]
new bool:g_bAdminVoice[MAX_PLAYERS+1]
public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR)
register_forward(FM_Voice_SetClientListening,"VoiceSetListening")
register_clcmd("+adminvoice","AdminVoiceOn")
register_clcmd("-adminvoice","AdminVoiceOff")
set_cvar_num("sv_alltalk",1)
}
public client_authorized(id)
{
g_bAdmin[id] = bool:(get_user_flags(id) & ADMIN_LEVEL_G)
g_bEnforcer[id] = bool:(get_user_flags(id) & ADMIN_IMMUNITY)
}
public client_putinserver(id)
{
g_bAdminVoice[id] = false
}
public AdminVoiceOn(id)
{
if( !g_bAdmin[id] )
{
return PLUGIN_CONTINUE
}
g_bAdminVoice[id] = true
client_print(0, print_chat, "ON") // debug
return PLUGIN_CONTINUE
}
public AdminVoiceOff(id)
{
if(!g_bAdminVoice[id])
return PLUGIN_CONTINUE
g_bAdminVoice[id] = false
client_print(0, print_chat, "OFF") // debug
return PLUGIN_CONTINUE
}
public VoiceSetListening(iReceiver,iSender)
{
if(is_user_alive(iSender) || g_bEnforcer[iSender]) return 1
engfunc(EngFunc_SetClientListening,iReceiver,iSender, 0)
return 4;
}
public VTC_OnClientStartSpeak(const index)
{
if(!is_user_alive(index) && !g_bAdminVoice[index] && !g_bEnforcer[index])
{
set_hudmessage(0,255,0,-1.0,0.35,1,6.0,4.0,0.5,0.15,-1)
show_hudmessage(index,"Dead people can't talk on mic.")
client_cmd(index,"spk fvox/blip.wav")
}
}