diff --git a/RadioMuteCmd/scripting/RadioMuteCmd.sp b/RadioMuteCmd/scripting/RadioMuteCmd.sp new file mode 100644 index 00000000..705243a3 --- /dev/null +++ b/RadioMuteCmd/scripting/RadioMuteCmd.sp @@ -0,0 +1,127 @@ +#pragma semicolon 1 + +#include +#include +#include +#include + +#define PLUGIN_VERSION "2.0" + +#pragma newdecls required + +bool g_bProtoBuf; +bool g_bBlocked[MAXPLAYERS + 1]; +bool g_bIsEnabled[MAXPLAYERS + 1]; + +int g_iMessageClient = -1; + +public Plugin myinfo = +{ + name = "Toggle radio mute command", + author = "Nano", + description = "You can enable or disable the radio voice/text messages using a command", + version = PLUGIN_VERSION, + url = "http://steamcommunity.com/id/marianzet1" +}; + +public void OnPluginStart() +{ + LoadTranslations("common.phrases"); + + if(GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available && GetUserMessageType() == UM_Protobuf) + g_bProtoBuf = true; + + UserMsg RadioText = GetUserMessageId("RadioText"); + + if (RadioText == INVALID_MESSAGE_ID) + SetFailState("This game does not support the \"RadioText\" UserMessage."); + + UserMsg SendAudio = GetUserMessageId("SendAudio"); + + if (SendAudio == INVALID_MESSAGE_ID) + SetFailState("This game does not support the \"SendAudio\" UserMessage."); + + RegConsoleCmd("sm_radio", Command_RadioMute); + RegConsoleCmd("sm_smradio", Command_RadioMute); + //RegConsoleCmd("sm_mr", Command_RadioMute); + + HookUserMessage(RadioText, _hkRadioText, true); + HookUserMessage(SendAudio, _hkSendAudio, true); +} + +public void OnClientPostAdminCheck(int client) +{ + g_bIsEnabled[client] = false; +} + +public void OnClientDisconnect(int client) +{ + g_bIsEnabled[client] = false; + g_bBlocked[client] = false; +} + +public Action Command_RadioMute(int client, int args) +{ + if(!g_bIsEnabled[client]) + { + g_bIsEnabled[client] = true; + g_bBlocked[client] = true; + CPrintToChat(client, "{green}[{lightgreen}Mute-Radio{green}]{default} You have {purple}disabled the radio messages."); + return Plugin_Handled; + } + else + { + g_bIsEnabled[client] = false; + g_bBlocked[client] = false; + CPrintToChat(client, "{green}[{lightgreen}Mute-Radio{green}]{default} You have {purple}enabled the radio messages."); + return Plugin_Handled; + } +} + + +public Action _hkRadioText(UserMsg msg_id, Handle bf, const int[] players, int playersNum, bool reliable, bool init) +{ + if (g_bProtoBuf) + { + g_iMessageClient = PbReadInt(bf, "client"); + } + else + { + BfReadByte(bf); + g_iMessageClient = BfReadByte(bf); + } + + if (g_bBlocked[g_iMessageClient]) + { + return Plugin_Handled; + } + + return Plugin_Continue; +} + +public Action _hkSendAudio(UserMsg msg_id, Handle bf, const int[] players, int playersNum, bool reliable, bool init) +{ + if (g_iMessageClient == -1) + return Plugin_Continue; + + char sSound[128]; + + if(g_bProtoBuf) + PbReadString(bf, "radio_sound", sSound, sizeof(sSound)); + else + BfReadString(bf, sSound, sizeof(sSound), false); + + if (strncmp(sSound[6], "lock", 4, false) == 0) + return Plugin_Continue; + + if (g_bBlocked[g_iMessageClient]) + { + g_iMessageClient = -1; + + return Plugin_Handled; + } + + g_iMessageClient = -1; + + return Plugin_Continue; +} \ No newline at end of file