| GhostMan |
04-26-2013 13:37 |
AMXX Gag & Voices Management
All i need from Voices Management plugin is that alive players would hear alive player and dead would hear all players, that's the only function i need from this plugin.
PHP Code:
#include <amxmodx> #include <amxmisc> #include <fakemeta>
#define VERSION "1.1"
#define MAX_PLAYERS 32
#define OFFSET_TEAM 114
new g_iClientSettings[MAX_PLAYERS+1][2] new bool:g_bPlayerNonSpawnEvent[MAX_PLAYERS+1] new g_iFwFmClientCommandPost new bool:g_bAlive[MAX_PLAYERS+1]
new g_iMaxPlayers new g_msgidSayText new g_pcvarAlivesHear, g_pcvarDeadsHear
public plugin_init() { register_plugin("Voices Management", VERSION, "ConnorMcLeod") register_dictionary("voicesmanagement.txt") register_dictionary("common.txt")
g_pcvarAlivesHear = register_cvar("vm_alives", "1") // 0:alive teamates , 1:alives , 2:all g_pcvarDeadsHear = register_cvar("vm_deads", "2") // 0:dead teamates , 1:deads , 2:all
register_forward(FM_Voice_SetClientListening, "Forward_SetClientListening") register_event("VoiceMask", "Event_VoiceMask", "b")
register_event("TextMsg", "Event_TextMsg_Restart", "a", "2=#Game_will_restart_in") register_event("ResetHUD", "Event_ResetHUD", "b") register_event("DeathMsg", "Event_DeathMsg", "a")
register_clcmd("say /vm", "ClientCommand_SayStatus") register_clcmd("say_team /vm", "ClientCommand_SayStatus")
register_clcmd("fullupdate", "ClientCommand_fullupdate") }
public plugin_cfg() { server_cmd("sv_alltalk 1;alias sv_alltalk") server_exec() g_iMaxPlayers = get_maxplayers() g_msgidSayText = get_user_msgid("SayText") }
public ClientCommand_SayStatus(id) { new iDeads = get_pcvar_num(g_pcvarDeadsHear), iAlives = get_pcvar_num(g_pcvarAlivesHear)
new szDeadsStatus[18], szAlivesStatus[19]
switch(iAlives) { case 0:szAlivesStatus = "VM_ALIVES_TEAMATES" case 1:szAlivesStatus = "VM_ALIVES" case 2:szAlivesStatus = "VM_ALL" }
switch(iDeads) { case 0:szDeadsStatus = "VM_DEADS_TEAMATES" case 1:szDeadsStatus = "VM_DEADS" case 2:szDeadsStatus = "VM_ALL" }
col_mess(id, id, "%L", id, "VM_ALIVES_STATUS", id, szAlivesStatus) col_mess(id, id, "%L", id, "VM_DEADS_STATUS", id, szDeadsStatus) }
public ClientCommand_fullupdate(id) { g_bPlayerNonSpawnEvent[id] = true static const szFwFmClientCommandPost[] = "fwFmClientCommandPost" g_iFwFmClientCommandPost = register_forward(FM_ClientCommand, szFwFmClientCommandPost, 1) return PLUGIN_CONTINUE }
public fwFmClientCommandPost(iPlayerId) { unregister_forward(FM_ClientCommand, g_iFwFmClientCommandPost, 1) g_bPlayerNonSpawnEvent[iPlayerId] = false return FMRES_HANDLED }
public Event_TextMsg_Restart() { for(new id=1; id <= g_iMaxPlayers; ++id) { if(g_bAlive[id]) { g_bPlayerNonSpawnEvent[id] = true } } }
public Event_ResetHUD(id) { if(!is_user_alive(id)) { return }
if(g_bPlayerNonSpawnEvent[id]) { g_bPlayerNonSpawnEvent[id] = false return } g_bAlive[id] = true }
public client_putinserver(id) { g_bAlive[id] = false }
public Event_DeathMsg() { g_bAlive[read_data(2)] = false }
public Event_VoiceMask(id) { g_iClientSettings[id][0] = read_data(1) g_iClientSettings[id][1] = read_data(2) }
public Forward_SetClientListening(iReceiver, iSender, bool:bListen) { if(!g_iClientSettings[iReceiver][0] || g_iClientSettings[iReceiver][1] & (1<<(iSender-1))) { return FMRES_IGNORED } if(g_bAlive[iReceiver]) { switch(get_pcvar_num(g_pcvarAlivesHear)) { case 0: { if(g_bAlive[iSender] && get_pdata_int(iReceiver, OFFSET_TEAM) == get_pdata_int(iSender, OFFSET_TEAM)) { engfunc(EngFunc_SetClientListening, iReceiver, iSender, true) forward_return(FMV_CELL, true) return FMRES_SUPERCEDE } } case 1: { if(g_bAlive[iSender]) { engfunc(EngFunc_SetClientListening, iReceiver, iSender, true) forward_return(FMV_CELL, true) return FMRES_SUPERCEDE } } case 2: { engfunc(EngFunc_SetClientListening, iReceiver, iSender, true) forward_return(FMV_CELL, true) return FMRES_SUPERCEDE } } } else { switch(get_pcvar_num(g_pcvarDeadsHear)) { case 0: { if(!g_bAlive[iSender] && get_pdata_int(iReceiver, OFFSET_TEAM) == get_pdata_int(iSender, OFFSET_TEAM)) { engfunc(EngFunc_SetClientListening, iReceiver, iSender, true) forward_return(FMV_CELL, true) return FMRES_SUPERCEDE } } case 1: { if(!g_bAlive[iSender]) { engfunc(EngFunc_SetClientListening, iReceiver, iSender, true) forward_return(FMV_CELL, true) return FMRES_SUPERCEDE } } case 2: { engfunc(EngFunc_SetClientListening, iReceiver, iSender, true) forward_return(FMV_CELL, true) return FMRES_SUPERCEDE } } }
engfunc(EngFunc_SetClientListening, iReceiver, iSender, false) forward_return(FMV_CELL, false) return FMRES_SUPERCEDE }
col_mess(id, sender, string[], any:...) { static szMessage[128] szMessage[0] = 0x01 vformat(szMessage[1], 127, string, 4)
replace_all(szMessage, 127, "!n", "^x01") replace_all(szMessage, 127, "!t", "^x03") replace_all(szMessage, 127, "!g", "^x04")
message_begin(MSG_ONE_UNRELIABLE, g_msgidSayText, _, id) write_byte(sender) write_string(szMessage) message_end() }
I also use AMXX Gag plugin and from this plugin i need all functions (gag from chat and voice commands).
But if i use both plugins at once so with amx_gag i can't mute players from voice commands, if i disable Voices Management then everything works fine. Any suggestions how to fix this?
|