Здравствуйте форумчане, нужно переделать плагин голосового чата.
В плагине уже реализовано следующие:
живые СТ слышат живых СТ, Т
живые Т слышат живых Т, СТ
мертвые СТ слышат мертвых СТ, Т
мертвые Т слышат мертвых Т, СТ
И еще в плагине есть функция для того чтобы дать инфу. То-есть в момент смерти дается 5 сек для того чтобы сказать инфу, эти 5 сек вас еще продолжают слышать живые игроки. И после истечения 5 сек игроку пишется сообщение в чат "[VM] Время для инфы ИСТЕКЛО"
Нужно сделать чтобы:
живые СТ слышали только живых СТ
живые Т слышали только живых Т
мертвые СТ слышали мертвых СТ, Т
мертвые Т слышали мертвых Т, СТ
И при этом оставить функцию для инфы, То-есть чтобы в момент смерти первые 5 сек игрока слышали его живые тимейты.
Готов заплатить 100-150 руб.
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define client_print_color ColorChat
#define print_team_red RED
#endif
#define PLUGIN "Voice Manager"
#define VERSION "1.3 final"
#define AUTHOR "Stimul"
#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define reset_bit(%1,%2) (%1 &= ~(1 << (%2 & 31)))
new g_bIsConnected;
new g_bIsAlive;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", true);
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled_Post", true);
register_forward(FM_Voice_SetClientListening, "fw_Voice_SetClientListening");
}
public fw_PlayerSpawn_Post(id)
if(is_user_alive(id))
set_bit(g_bIsAlive, id);
public fw_PlayerKilled_Post(id)
set_task(5.0, "DelaySetDeath", id);
public DelaySetDeath(id)
{
if(!is_user_alive(id))
{
reset_bit(g_bIsAlive, id);
client_print_color(id, print_team_red, "^1[^4VM^1] ^4Время для инфы ^3ИСТЕКЛО.");
}
}
public client_putinserver(id)
set_bit(g_bIsConnected, id);
public client_disconnect(id)
{
reset_bit(g_bIsConnected, id);
reset_bit(g_bIsAlive, id);
}
public fw_Voice_SetClientListening(receiver, sender, listen)
{
if(get_bit(g_bIsConnected, receiver) && get_bit(g_bIsConnected, sender) && receiver != sender)
{
if((get_bit(g_bIsAlive, receiver) && !get_bit(g_bIsAlive, sender)) || (!get_bit(g_bIsAlive, receiver) && get_bit(g_bIsAlive, sender)))
{
engfunc(EngFunc_SetClientListening, receiver, sender, false);
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}