Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#define ADMIN_ACCESS ADMIN_LEVEL_B // Flag "n". Define here.
#define SPEAK_NORMAL 0
#define SPEAK_MUTED 1
#define SPEAK_ALL 2
#define SPEAK_LISTENALL 4
new fm_plinfo[33]
public FM_SetListen(iReceiver, iSender, bListen)
{
if( (fm_plinfo[iSender] & SPEAK_MUTED) != 0)
{
engfunc(EngFunc_SetClientListening, iReceiver, iSender, 0)
forward_return(FMV_CELL,0)
return FMRES_SUPERCEDE;
}
if( (fm_plinfo[iSender] & SPEAK_ALL) != 0)
{
engfunc(EngFunc_SetClientListening, iReceiver, iSender, 1)
forward_return(FMV_CELL,1)
return FMRES_SUPERCEDE;
}
if( (fm_plinfo[iReceiver] & SPEAK_LISTENALL) != 0)
{
engfunc(EngFunc_SetClientListening, iReceiver, iSender, 1)
forward_return(FMV_CELL,1)
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED
}
stock fm_set_speak(id,tmp) (fm_plinfo[id] = tmp)
new count[32][32]
new g_voice_status[2]
public plugin_init()
{
register_plugin("AdminListen","2.5","/dev/ urandom V I R U S Hoboman")
register_srvcmd("amx_adminlisten_voice","voice_status")
register_event("SayText","catch_say","b")
register_forward(FM_Voice_SetClientListening,"FM_SetListen");
return PLUGIN_CONTINUE
}
public catch_say(id)
{
new reciever = read_data(0)
new sender = read_data(1)
new message[151]
new channel[151]
new sender_name[32]
if (is_running("czero")||is_running("cstrike"))
{
read_data(2,channel,150)
read_data(4,message,150)
get_user_name(sender, sender_name, 31)
}
else
{
read_data(2,message,150)
}
count[sender][reciever] = 1
if (sender == reciever)
{
new player_count = get_playersnum()
new players[32]
get_players(players, player_count, "c")
for (new i = 0; i < player_count; i++)
{
if (get_user_flags(players[i]) & ADMIN_ACCESS)
{
if (count[sender][players[i]] != 1)
{
message_begin(MSG_ONE, get_user_msgid("SayText"),{0,0,0},players[i])
write_byte(sender)
if (is_running("czero")||is_running("cstrike"))
{
write_string(channel)
write_string(sender_name)
}
write_string(message)
message_end()
}
}
count[sender][players[i]] = 0
}
}
return PLUGIN_CONTINUE
}
public client_infochanged(id)
{
if ((get_user_flags(id) & ADMIN_ACCESS) && equal(g_voice_status,"1") && is_user_connected(id)) fm_set_speak(id, SPEAK_LISTENALL)
}
public client_connect(id)
{
if ((get_user_flags(id) & ADMIN_ACCESS) && equal(g_voice_status,"1") && is_user_connected(id)) fm_set_speak(id, SPEAK_LISTENALL)
}
public voice_status(id){
read_argv(1,g_voice_status,1)
new player_count = get_playersnum()
new players[32]
get_players(players, player_count, "c")
for (new i = 0; i < player_count; i++) {
if ((get_user_flags(players[i]) & ADMIN_ACCESS)) {
if (equal(g_voice_status,"0")) {
fm_set_speak(players[i], SPEAK_NORMAL)
}
if (equal(g_voice_status,"1")) {
fm_set_speak(players[i], SPEAK_LISTENALL)
}
}
}
}