// Required admin access level #define ADMIN_VOICE ADMIN_CHAT // Delay before a connected player see the text announce // Comment this out if you don't want that a "no sound" player can hear admins using +adminvoice // All other player settings are respected whatever this is commented or not. #define SUPER_ADMIN_PRIORITY /* ** END OF EDITABLE ** */ /* Changelog * * v1.0.2 (04/19/08) * -few code corrections * -updated player spawn detection * -added HLTV & BOT checks * * v1.0.1 (03/31/08) * -added colored chat * -added chat command /vm that display voices settings * -inform new players about /vm command * -display adminlisten status when toggle_adminlisten command is used * -added support for amx_show_activity cvar on amx_(un)mute command * * v1.0.0 (03/26/08) * First release * */ #include #include #include #define VERSION "1.0.2" #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_iAdminVoice new bool:g_bAdmin[MAX_PLAYERS+1] new bool:g_bInterAdminVoice[MAX_PLAYERS+1] new bool:g_bAdminListen[MAX_PLAYERS+1] new bool:g_bMuted[MAX_PLAYERS+1] new g_szClientsIp[MAX_PLAYERS+1][22] new Array:g_aMutedPlayersIps new g_iMaxPlayers new g_msgidSayText new g_pcvarAlivesHear, g_pcvarDeadsHear new g_amx_show_activity 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("+adminvoice", "AdminCommand_VoiceOn") register_clcmd("-adminvoice", "AdminCommand_VoiceOff") register_clcmd("+interadminvoice", "AdminCommand_InterAdminOn") register_clcmd("-interadminvoice", "AdminCommand_InterAdminOff") register_clcmd("+adminlisten", "AdminCommand_ListenOn") register_clcmd("-adminlisten", "AdminCommand_ListenOff") register_clcmd("toggle_adminlisten", "AdminCommand_ListenToggle") register_concmd("amx_mute", "AdminCommand_Mute", ADMIN_VOICE, "") register_concmd("amx_unmute", "AdminCommand_UnMute", ADMIN_VOICE, "") 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_aMutedPlayersIps = ArrayCreate(22) g_msgidSayText = get_user_msgid("SayText") g_amx_show_activity = get_cvar_pointer("amx_show_activity") } 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) } 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_authorized(id) { g_bAdmin[id] = bool:(get_user_flags(id) & ADMIN_VOICE) } public client_putinserver(id) { g_bAlive[id] = false g_bAdminListen[id] = false g_bInterAdminVoice[id] = false if(is_user_bot(id) || is_user_hltv(id)) return static szIp[22] get_user_ip(id, szIp, 21) g_szClientsIp[id] = szIp static szTempIp[22], iArraySize iArraySize = ArraySize(g_aMutedPlayersIps) for(new i; i