- #include <amxmodx> 
- #tryinclude <reapi> 
-   
- #if !defined _reapi_included 
- 	#include <fakemeta> 
- #endif 
-   
- #if AMXX_VERSION_NUM < 183 
- 	#define client_disconnected client_disconnect 
- #endif 
-   
- const ACCESS_FLAG = ADMIN_BAN // 'd' 
-   
- new g_iSpeakBitSum 
-   
- public plugin_init() { 
- 	register_plugin("Admin Voice Chat", "0.3", "mx?!") 
-   
- #if defined _reapi_included 
- 	RegisterHookChain(RG_CSGameRules_CanPlayerHearPlayer, "CanPlayerHearPlayer_Pre") 
- #else 
- 	register_forward(FM_Voice_SetClientListening, "OnSetClientListening_Pre") 
- #endif 
-   
- 	register_clcmd("+adminvoice", "func_AdminVoiceOn") 
- 	register_clcmd("-adminvoice", "func_AdminVoiceOff") 
- } 
-   
- #if defined _reapi_included 
- 	public CanPlayerHearPlayer_Pre(iReceiver, iSender) { 
- 		if(!IsSpeak(iSender)) { 
- 			return HC_CONTINUE 
- 		} 
-   
- 		SetHookChainReturn(ATYPE_BOOL, (get_user_flags(iReceiver) & ACCESS_FLAG) ? true : false) 
- 		return HC_SUPERCEDE 
- 	} 
- #else 
- 	public OnSetClientListening_Pre(iReceiver, iSender, bool:bCanHear) { 
- 		if(!IsSpeak(iSender)) { 
- 			return FMRES_IGNORED 
- 		} 
-   
- 		engfunc(EngFunc_SetClientListening, iReceiver, iSender, (get_user_flags(iReceiver) & ACCESS_FLAG) ? true : false) 
- 		return FMRES_SUPERCEDE 
- 	} 
- #endif 
-   
- public func_AdminVoiceOn(id) { 
- 	if((get_user_flags(id) & ACCESS_FLAG) && !IsSpeak(id)) { 
- 		SetSpeak(id) 
- 		client_cmd(id, "+voicerecord") 
- 	} 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public func_AdminVoiceOff(id) { 
- 	if((get_user_flags(id) & ACCESS_FLAG) && IsSpeak(id)) { 
- 		ClearSpeak(id) 
- 		client_cmd(id, "-voicerecord") 
- 	} 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public client_disconnected(id) { 
- 	ClearSpeak(id) 
- } 
-   
- stock SetSpeak(id) (g_iSpeakBitSum |= (1 << id)) 
- stock IsSpeak(id) return (g_iSpeakBitSum & (1 << id)) 
- stock ClearSpeak(id) (g_iSpeakBitSum &= ~(1 << id)) 
-