i make a plugins do this same as yours,it work fine for me.
Code:
/**
cvar:friends_talk 1 (default) // 0=sv_alltalk 0
// 1=sv_alltalk 1
// 2=dead listen all
// 3=team dead & alive listen
amx command:
amx_friends_talk (0-3) change talk mode in running time, same as (friends_talk)
adminspeak turn on/off admin speak to other player
**/
#define PLUGIN "Friends_Talk"
#define VERSION "0.2.16"
#define AUTHOR "iG_os"
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fun>
new g_talkMODE
new g_MAXPLAYERS
new g_adminspeak[33] = {false,...}
// 0=sv_alltalk 0
public player_listen_default()
{
for (new id = 1; id <= g_MAXPLAYERS; id++)
if (is_user_connected(id))
if (!g_adminspeak[id])
set_speak(id, SPEAK_NORMAL)
set_cvar_num( "sv_alltalk",0 )
}
// 1=sv_alltalk 1
public player_listen_all()
{
set_cvar_num( "sv_alltalk",1 )
}
// 2=dead listen all
public player_listen_team(id)
{
if( !is_user_connected(id) ) return
if (g_adminspeak[id]) return
new team = get_user_team(id)
if ( (team==1 || team==2) && is_user_alive(id) )
{
set_speak(id,SPEAK_NORMAL)
}
else
{
set_speak(id, SPEAK_LISTENALL)
}
}
// 3=team dead & alive listen
public player_listen_teamall(id)
{
if ( !is_user_connected(id) ) return
if (g_adminspeak[id]) return
new team = get_user_team(id)
if ( team!=1 && team!=2 )
{
set_speak(id, SPEAK_LISTENALL)
return
}
for( new other = 1;other<=g_MAXPLAYERS;other++)
{
if (is_user_connected(other))
if (!g_adminspeak[other])
if (other!=id)
if (team==get_user_team(other))
{
set_client_listen(id,other,1)
set_client_listen(other,id,1)
}
else
{
set_client_listen(id,other,0)
}
}
}
public player_spawn(id)
{
new param[1]
param[0] = id
set_task(0.3,"player_reset",123+id,param,1)
return PLUGIN_CONTINUE
}
public player_reset(param[])
{
new id = param[0]
if (g_adminspeak[id]) return
switch (g_talkMODE)
{
case 2: player_listen_team(id)
case 3: player_listen_teamall(id)
}
}
public death_event()
{
new param[1]
param[0] = read_data(2)
set_task(0.3,"player_reset",123+param[0],param,1)
return PLUGIN_CONTINUE
}
public joined_team()
{
new Arg1[64],name[32]
read_logargv(0,Arg1,63)
parse_loguser (Arg1, name, 31)
new id = get_user_index (name)
new param[1]
param[0] = id
set_task(0.3,"player_reset",123+id,param,1)
return PLUGIN_CONTINUE
}
public client_putinserver(id)
{
new param[1]
param[0] = id
set_task(0.3,"player_reset",123+id,param,1)
return PLUGIN_CONTINUE
}
public eRestart()
{
switch (g_talkMODE)
{
case 0: player_listen_default()
case 1: player_listen_all()
case 2:
{
set_cvar_num( "sv_alltalk",0 )
for (new id = 1; id <= g_MAXPLAYERS; id++)
player_listen_team(id)
}
case 3:
{
set_cvar_num( "sv_alltalk",0 )
for (new id = 1; id <= g_MAXPLAYERS; id++)
player_listen_teamall(id)
}
}
return PLUGIN_CONTINUE
}
public talkset(id,level,cid)
{
if (!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED
new arg[2]
read_argv(1,arg,2)
new res = str_to_num(arg)
if (res<0 || res>3)
return PLUGIN_HANDLED
g_talkMODE = res
new name[32]
get_user_name (id, name,31)
client_print(0,print_chat,"[%s] set friends_talk %d",name,g_talkMODE)
log_amx("[%s] set friends_talk %d", name,g_talkMODE)
eRestart()
return PLUGIN_CONTINUE
}
public admin_speak(id,level,cid)
{
if (!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED
new name[32]
get_user_name (id, name,31)
if (!g_adminspeak[id])
{
g_adminspeak[id] = true
set_speak(id, SPEAK_LISTENALL+SPEAK_ALL) //id 听,说所有
client_print(0,print_chat,"[%s] Admin speak: on",name)
}
else
{
g_adminspeak[id] = false
new param[1]
param[0] = id
set_task(0.1,"player_reset",123+id,param,1)
client_print(0,print_chat,"[%s] Admin speak: off",name)
}
return PLUGIN_CONTINUE
}
public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR)
register_event("ResetHUD", "player_spawn", "be")
register_event("DeathMsg", "death_event", "a")
register_event("TextMsg","eRestart","a","2&#Game_C","2&#Game_w")
register_logevent("joined_team", 3, "1=joined team")
register_concmd("adminspeak", "admin_speak", ADMIN_RESERVATION, "Admin speak is on/off")
register_concmd("amx_friends_talk","talkset",ADMIN_RESERVATION,"(0-3) Set friends_talk mode")
register_cvar("friends_talk","1")
g_talkMODE = get_cvar_num("friends_talk")
g_MAXPLAYERS = get_maxplayers()
return PLUGIN_CONTINUE
}