// Если раскомментировано, живые НЕ будут слышать мёртвых, и наоборот
register_plugin("Team Voice Chat", "0.1", "mx?!")
RegisterHookChain(RG_CSGameRules_CanPlayerHearPlayer, "CanPlayerHearPlayer_Pre")
register_forward(FM_Voice_SetClientListening, "OnSetClientListening_Pre")
register_clcmd("+teamvoice", "func_AdminVoiceOn")
register_clcmd("-teamvoice", "func_AdminVoiceOff")
public CanPlayerHearPlayer_Pre(iReceiver, iSender) {
SetHookChainReturn(ATYPE_BOOL, func_CheckListening(iReceiver, iSender) ? true : false)
public OnSetClientListening_Pre(iReceiver, iSender, bool:bCanHear) {
engfunc(EngFunc_SetClientListening, iReceiver, iSender, func_CheckListening(iReceiver, iSender) ? true : false)
bool:func_CheckListening(iReceiver, iSender) {
return (get_user_team(iReceiver) == get_user_team(iSender) && is_user_alive(iReceiver) == is_user_alive(iSender))
return (get_user_team(iReceiver) == get_user_team(iSender))
public func_AdminVoiceOn(id) {
client_cmd(id, "+voicerecord")
public func_AdminVoiceOff(id) {
client_cmd(id, "-voicerecord")
public client_disconnected(id) {
stock SetSpeak(id) (g_iSpeakBitSum |= (1 << id))
stock IsSpeak(id) return (g_iSpeakBitSum & (1 << id))
stock ClearSpeak(id) (g_iSpeakBitSum &= ~(1 << id))