From 0d0ad0d41dc61ec750228043e60ba0171bbbd3ad Mon Sep 17 00:00:00 2001 From: DoganGFL Date: Sun, 16 Dec 2018 00:21:36 +0100 Subject: [PATCH] move to shared --- SelfMute/scripting/SelfMute.sp | 1066 -------------------------------- 1 file changed, 1066 deletions(-) delete mode 100644 SelfMute/scripting/SelfMute.sp diff --git a/SelfMute/scripting/SelfMute.sp b/SelfMute/scripting/SelfMute.sp deleted file mode 100644 index 1746c112..00000000 --- a/SelfMute/scripting/SelfMute.sp +++ /dev/null @@ -1,1066 +0,0 @@ -#pragma semicolon 1 - -#include -#include -#include -#include - -#undef REQUIRE_PLUGIN -#include -#include -#tryinclude -#include -#define REQUIRE_PLUGIN - -#pragma newdecls required - -bool g_Plugin_ccc = false; -bool g_Plugin_zombiereloaded = false; -bool g_Plugin_voiceannounce_ex = false; -bool g_Plugin_AdvancedTargeting = false; -bool g_bIsProtoBuf = false; - -#define PLUGIN_VERSION "2.2" - -public Plugin myinfo = -{ - name = "SelfMute", - author = "BotoX", - description = "Ignore other players in text and voicechat.", - version = PLUGIN_VERSION, - url = "" -}; - -enum -{ - MUTE_NONE = 0, - MUTE_SPEC = 1, - MUTE_CT = 2, - MUTE_T = 4, - MUTE_DEAD = 8, - MUTE_ALIVE = 16, - MUTE_NOTFRIENDS = 32, - MUTE_ALL = 64, - MUTE_LAST = 64 -}; - -bool g_Ignored[(MAXPLAYERS + 1) * (MAXPLAYERS + 1)]; -bool g_Exempt[MAXPLAYERS + 1][MAXPLAYERS + 1]; -int g_SpecialMutes[MAXPLAYERS + 1]; - -char g_PlayerNames[MAXPLAYERS+1][MAX_NAME_LENGTH]; - -public void OnPluginStart() -{ - LoadTranslations("common.phrases"); - - CreateConVar("sm_selfmute_version", PLUGIN_VERSION, "Version of Self-Mute", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY); - - RegConsoleCmd("sm_sm", Command_SelfMute, "Mute player by typing !sm [playername]"); - RegConsoleCmd("sm_su", Command_SelfUnMute, "Unmute player by typing !su [playername]"); - RegConsoleCmd("sm_cm", Command_CheckMutes, "Check who you have self-muted"); - - HookEvent("round_start", Event_Round); - HookEvent("round_end", Event_Round); - HookEvent("player_team", Event_TeamChange); - - if(GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available && GetUserMessageType() == UM_Protobuf) - g_bIsProtoBuf = true; - - UserMsg RadioText = GetUserMessageId("RadioText"); - if(RadioText == INVALID_MESSAGE_ID) - SetFailState("This game doesn't support RadioText user messages."); - - HookUserMessage(RadioText, Hook_UserMessageRadioText, true); - - UserMsg SendAudio = GetUserMessageId("SendAudio"); - if(SendAudio == INVALID_MESSAGE_ID) - SetFailState("This game doesn't support SendAudio user messages."); - - HookUserMessage(SendAudio, Hook_UserMessageSendAudio, true); -} - -public void OnAllPluginsLoaded() -{ - g_Plugin_ccc = LibraryExists("ccc"); - g_Plugin_zombiereloaded = LibraryExists("zombiereloaded"); - g_Plugin_voiceannounce_ex = LibraryExists("voiceannounce_ex"); - g_Plugin_AdvancedTargeting = LibraryExists("AdvancedTargeting"); - LogMessage("SelfMute capabilities:\nProtoBuf: %s\nCCC: %s\nZombieReloaded: %s\nVoiceAnnounce: %s\nAdvancedTargeting: %s", - (g_bIsProtoBuf ? "yes" : "no"), - (g_Plugin_ccc ? "loaded" : "not loaded"), - (g_Plugin_zombiereloaded ? "loaded" : "not loaded"), - (g_Plugin_voiceannounce_ex ? "loaded" : "not loaded"), - (g_Plugin_AdvancedTargeting ? "loaded" : "not loaded")); -} - -public void OnClientPutInServer(int client) -{ - g_SpecialMutes[client] = MUTE_NONE; - for(int i = 1; i < MAXPLAYERS; i++) - { - SetIgnored(client, i, false); - SetExempt(client, i, false); - - SetIgnored(i, client, false); - SetExempt(i, client, false); - } - - UpdateSpecialMutesOtherClients(client); - UpdateIgnored(); -} - -public void OnClientDisconnect(int client) -{ - g_SpecialMutes[client] = MUTE_NONE; - for(int i = 1; i < MAXPLAYERS; i++) - { - SetIgnored(client, i, false); - SetExempt(client, i, false); - - SetIgnored(i, client, false); - SetExempt(i, client, false); - - if(IsClientInGame(i) && !IsFakeClient(i) && i != client) - SetListenOverride(i, client, Listen_Yes); - } - - UpdateIgnored(); -} - -public void Event_Round(Handle event, const char[] name, bool dontBroadcast) -{ - for(int i = 1; i <= MaxClients; i++) - { - if(IsClientInGame(i) && !IsFakeClient(i)) - UpdateSpecialMutesThisClient(i); - } -} - -public void Event_TeamChange(Handle event, const char[] name, bool dontBroadcast) -{ - int client = GetClientOfUserId(GetEventInt(event, "userid")); - - UpdateSpecialMutesOtherClients(client); -} - -public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) -{ - UpdateSpecialMutesOtherClients(client); -} - -public void ZR_OnClientHumanPost(int client, bool respawn, bool protect) -{ - UpdateSpecialMutesOtherClients(client); -} - -/* - * Mutes this client on other players -*/ -void UpdateSpecialMutesOtherClients(int client) -{ - bool Alive = IsPlayerAlive(client); - int Team = GetClientTeam(client); - - for(int i = 1; i <= MaxClients; i++) - { - if(i == client || !IsClientInGame(i) || IsFakeClient(i)) - continue; - - int Flags = MUTE_NONE; - - if(g_SpecialMutes[i] & MUTE_SPEC && Team == CS_TEAM_SPECTATOR) - Flags |= MUTE_SPEC; - - else if(g_SpecialMutes[i] & MUTE_CT && Alive && - ((g_Plugin_zombiereloaded && ZR_IsClientHuman(client)) || (!g_Plugin_zombiereloaded && Team == CS_TEAM_CT))) - Flags |= MUTE_CT; - - else if(g_SpecialMutes[i] & MUTE_T && Alive && - ((g_Plugin_zombiereloaded && ZR_IsClientZombie(client)) || (!g_Plugin_zombiereloaded && Team == CS_TEAM_T))) - Flags |= MUTE_T; - - else if(g_SpecialMutes[i] & MUTE_DEAD && !Alive) - Flags |= MUTE_DEAD; - - else if(g_SpecialMutes[i] & MUTE_ALIVE && Alive) - Flags |= MUTE_ALIVE; - - else if(g_SpecialMutes[i] & MUTE_NOTFRIENDS && - g_Plugin_AdvancedTargeting && IsClientFriend(i, client) == 0) - Flags |= MUTE_NOTFRIENDS; - - else if(g_SpecialMutes[i] & MUTE_ALL) - Flags |= MUTE_ALL; - - if(Flags && !GetExempt(i, client)) - SetListenOverride(i, client, Listen_No); - else if(!GetIgnored(i, client)) - SetListenOverride(i, client, Listen_Yes); - } -} - -/* - * Mutes other players on this client -*/ -void UpdateSpecialMutesThisClient(int client) -{ - for(int i = 1; i <= MaxClients; i++) - { - if(i == client || !IsClientInGame(i) || IsFakeClient(i)) - continue; - - bool Alive = IsPlayerAlive(i); - int Team = GetClientTeam(i); - - int Flags = MUTE_NONE; - - if(g_SpecialMutes[client] & MUTE_SPEC && Team == CS_TEAM_SPECTATOR) - Flags |= MUTE_SPEC; - - else if(g_SpecialMutes[client] & MUTE_CT && Alive && - ((g_Plugin_zombiereloaded && ZR_IsClientHuman(i) || (!g_Plugin_zombiereloaded) && Team == CS_TEAM_CT))) - Flags |= MUTE_CT; - - else if(g_SpecialMutes[client] & MUTE_T && Alive && - ((g_Plugin_zombiereloaded && ZR_IsClientZombie(i) || (!g_Plugin_zombiereloaded) && Team == CS_TEAM_T))) - Flags |= MUTE_T; - - else if(g_SpecialMutes[client] & MUTE_DEAD && !Alive) - Flags |= MUTE_DEAD; - - else if(g_SpecialMutes[client] & MUTE_ALIVE && Alive) - Flags |= MUTE_ALIVE; - - else if(g_SpecialMutes[client] & MUTE_NOTFRIENDS && - g_Plugin_AdvancedTargeting && IsClientFriend(client, i) == 0) - Flags |= MUTE_NOTFRIENDS; - - else if(g_SpecialMutes[client] & MUTE_ALL) - Flags |= MUTE_ALL; - - if(Flags && !GetExempt(client, i)) - SetListenOverride(client, i, Listen_No); - else if(!GetIgnored(client, i)) - SetListenOverride(client, i, Listen_Yes); - } -} - -int GetSpecialMutesFlags(char[] Argument) -{ - int SpecialMute = MUTE_NONE; - if(StrEqual(Argument, "@spec", false) || StrEqual(Argument, "@!ct", false) || StrEqual(Argument, "@!t", false)) - SpecialMute |= MUTE_SPEC; - if(StrEqual(Argument, "@ct", false) || StrEqual(Argument, "@!t", false) || StrEqual(Argument, "@!spec", false)) - SpecialMute |= MUTE_CT; - if(StrEqual(Argument, "@t", false) || StrEqual(Argument, "@!ct", false) || StrEqual(Argument, "@!spec", false)) - SpecialMute |= MUTE_T; - if(StrEqual(Argument, "@dead", false) || StrEqual(Argument, "@!alive", false)) - SpecialMute |= MUTE_DEAD; - if(StrEqual(Argument, "@alive", false) || StrEqual(Argument, "@!dead", false)) - SpecialMute |= MUTE_ALIVE; - if(g_Plugin_AdvancedTargeting && StrEqual(Argument, "@!friends", false)) - SpecialMute |= MUTE_NOTFRIENDS; - if(StrEqual(Argument, "@all", false)) - SpecialMute |= MUTE_ALL; - - return SpecialMute; -} - -void FormatSpecialMutes(int SpecialMute, char[] aBuf, int BufLen) -{ - if(!SpecialMute) - { - StrCat(aBuf, BufLen, "none"); - return; - } - - bool Status = false; - int MuteCount = RoundFloat(Logarithm(float(MUTE_LAST), 2.0)); - for(int i = 0; i <= MuteCount; i++) - { - switch(SpecialMute & RoundFloat(Pow(2.0, float(i)))) - { - case MUTE_SPEC: - { - StrCat(aBuf, BufLen, "Spectators, "); - Status = true; - } - case MUTE_CT: - { - StrCat(aBuf, BufLen, "CTs, "); - Status = true; - } - case MUTE_T: - { - StrCat(aBuf, BufLen, "Ts, "); - Status = true; - } - case MUTE_DEAD: - { - StrCat(aBuf, BufLen, "Dead players, "); - Status = true; - } - case MUTE_ALIVE: - { - StrCat(aBuf, BufLen, "Alive players, "); - Status = true; - } - case MUTE_NOTFRIENDS: - { - StrCat(aBuf, BufLen, "Not Steam friends, "); - Status = true; - } - case MUTE_ALL: - { - StrCat(aBuf, BufLen, "Everyone, "); - Status = true; - } - } - } - - // Cut off last ', ' - if(Status) - aBuf[strlen(aBuf) - 2] = 0; -} - -bool MuteSpecial(int client, char[] Argument) -{ - bool RetValue = false; - int SpecialMute = GetSpecialMutesFlags(Argument); - - if(SpecialMute & MUTE_NOTFRIENDS && g_Plugin_AdvancedTargeting && ReadClientFriends(client) != 1) - { - PrintToChat(client, "\x04[Self-Mute]\x01 Could not read your friendslist, your profile must be set to public!"); - SpecialMute &= ~MUTE_NOTFRIENDS; - RetValue = true; - } - - if(SpecialMute) - { - if(SpecialMute & MUTE_ALL || g_SpecialMutes[client] & MUTE_ALL) - { - g_SpecialMutes[client] = MUTE_ALL; - SpecialMute = MUTE_ALL; - } - else - g_SpecialMutes[client] |= SpecialMute; - - UpdateSpecialMutesThisClient(client); - - char aBuf[128]; - FormatSpecialMutes(SpecialMute, aBuf, sizeof(aBuf)); - - PrintToChat(client, "\x04[Self-Mute]\x01 You have self-muted group:\x04 %s", aBuf); - RetValue = true; - } - - return RetValue; -} - -bool UnMuteSpecial(int client, char[] Argument) -{ - int SpecialMute = GetSpecialMutesFlags(Argument); - - if(SpecialMute) - { - if(SpecialMute & MUTE_ALL) - { - if(g_SpecialMutes[client]) - { - SpecialMute = g_SpecialMutes[client]; - g_SpecialMutes[client] = MUTE_NONE; - } - else - { - for(int i = 1; i <= MaxClients; i++) - { - if(IsClientInGame(i) && !IsFakeClient(i)) - UnIgnore(client, i); - - PrintToChat(client, "\x04[Self-Mute]\x01 You have self-unmuted:\x04 all players"); - return true; - } - } - } - else - g_SpecialMutes[client] &= ~SpecialMute; - - UpdateSpecialMutesThisClient(client); - - char aBuf[256]; - FormatSpecialMutes(SpecialMute, aBuf, sizeof(aBuf)); - - PrintToChat(client, "\x04[Self-Mute]\x01 You have self-unmuted group:\x04 %s", aBuf); - return true; - } - - return false; -} - -void Ignore(int client, int target) -{ - SetIgnored(client, target, true); - SetListenOverride(client, target, Listen_No); -} - -void UnIgnore(int client, int target) -{ - SetIgnored(client, target, false); - SetListenOverride(client, target, Listen_Yes); -} - -void Exempt(int client, int target) -{ - SetExempt(client, target, true); - UpdateSpecialMutesThisClient(client); -} - -void UnExempt(int client, int target) -{ - SetExempt(client, target, false); - UpdateSpecialMutesThisClient(client); -} - -/* - * CHAT COMMANDS -*/ -public Action Command_SelfMute(int client, int args) -{ - if(client == 0) - { - PrintToServer("[SM] Cannot use command from server console."); - return Plugin_Handled; - } - - if(args < 1) - { - DisplayMuteMenu(client); - return Plugin_Handled; - } - - char Argument[65]; - GetCmdArg(1, Argument, sizeof(Argument)); - - char Filtered[65]; - strcopy(Filtered, sizeof(Filtered), Argument); - StripQuotes(Filtered); - TrimString(Filtered); - - if(MuteSpecial(client, Filtered)) - return Plugin_Handled; - - char sTargetName[MAX_TARGET_LENGTH]; - int aTargetList[MAXPLAYERS]; - int TargetCount; - bool TnIsMl; - - if((TargetCount = ProcessTargetString( - Argument, - client, - aTargetList, - MAXPLAYERS, - COMMAND_FILTER_CONNECTED|COMMAND_FILTER_NO_IMMUNITY, - sTargetName, - sizeof(sTargetName), - TnIsMl)) <= 0) - { - ReplyToTargetError(client, TargetCount); - return Plugin_Handled; - } - - if(TargetCount == 1) - { - if(aTargetList[0] == client) - { - PrintToChat(client, "\x04[Self-Mute]\x01 You can't mute yourself, don't be silly."); - return Plugin_Handled; - } - - if(GetExempt(client, aTargetList[0])) - { - UnExempt(client, aTargetList[0]); - - PrintToChat(client, "\x04[Self-Mute]\x01 You have removed exempt from self-mute:\x04 %s", sTargetName); - - return Plugin_Handled; - } - } - - for(int i = 0; i < TargetCount; i++) - { - if(aTargetList[i] == client) - continue; - - Ignore(client, aTargetList[i]); - } - UpdateIgnored(); - - PrintToChat(client, "\x04[Self-Mute]\x01 You have self-muted:\x04 %s", sTargetName); - - return Plugin_Handled; -} - -public Action Command_SelfUnMute(int client, int args) -{ - if(client == 0) - { - PrintToServer("[SM] Cannot use command from server console."); - return Plugin_Handled; - } - - if(args < 1) - { - DisplayUnMuteMenu(client); - return Plugin_Handled; - } - - char Argument[65]; - GetCmdArg(1, Argument, sizeof(Argument)); - - char Filtered[65]; - strcopy(Filtered, sizeof(Filtered), Argument); - StripQuotes(Filtered); - TrimString(Filtered); - - if(UnMuteSpecial(client, Filtered)) - return Plugin_Handled; - - char sTargetName[MAX_TARGET_LENGTH]; - int aTargetList[MAXPLAYERS]; - int TargetCount; - bool TnIsMl; - - if((TargetCount = ProcessTargetString( - Argument, - client, - aTargetList, - MAXPLAYERS, - COMMAND_FILTER_CONNECTED|COMMAND_FILTER_NO_IMMUNITY, - sTargetName, - sizeof(sTargetName), - TnIsMl)) <= 0) - { - ReplyToTargetError(client, TargetCount); - return Plugin_Handled; - } - - if(TargetCount == 1) - { - if(aTargetList[0] == client) - { - PrintToChat(client, "\x04[Self-Mute]\x01 Unmuting won't work either."); - return Plugin_Handled; - } - - if(!GetIgnored(client, aTargetList[0])) - { - Exempt(client, aTargetList[0]); - - PrintToChat(client, "\x04[Self-Mute]\x01 You have exempted from self-mute:\x04 %s", sTargetName); - - return Plugin_Handled; - } - } - - for(int i = 0; i < TargetCount; i++) - { - if(aTargetList[i] == client) - continue; - - UnIgnore(client, aTargetList[i]); - } - UpdateIgnored(); - - PrintToChat(client, "\x04[Self-Mute]\x01 You have self-unmuted:\x04 %s", sTargetName); - - return Plugin_Handled; -} - -public Action Command_CheckMutes(int client, int args) -{ - if(client == 0) - { - PrintToServer("[SM] Cannot use command from server console."); - return Plugin_Handled; - } - - char aMuted[1024]; - char aExempted[1024]; - char aName[MAX_NAME_LENGTH]; - for(int i = 1; i <= MaxClients; i++) - { - if(!IsClientInGame(i)) - continue; - - GetClientName(i, aName, sizeof(aName)); - - if(GetIgnored(client, i)) - { - StrCat(aMuted, sizeof(aMuted), aName); - StrCat(aMuted, sizeof(aMuted), ", "); - } - - if(GetExempt(client, i)) - { - StrCat(aExempted, sizeof(aExempted), aName); - StrCat(aExempted, sizeof(aExempted), ", "); - } - } - - if(strlen(aMuted)) - { - aMuted[strlen(aMuted) - 2] = 0; - PrintToChat(client, "\x04[Self-Mute]\x01 You have self-muted:\x04 %s", aMuted); - } - - if(g_SpecialMutes[client] != MUTE_NONE) - { - aMuted[0] = 0; - FormatSpecialMutes(g_SpecialMutes[client], aMuted, sizeof(aMuted)); - PrintToChat(client, "\x04[Self-Mute]\x01 You have self-muted group:\x04 %s", aMuted); - } - else if(!strlen(aMuted) && !strlen(aExempted)) - PrintToChat(client, "\x04[Self-Mute]\x01 You have not self-muted anyone!"); - - if(strlen(aExempted)) - { - aExempted[strlen(aExempted) - 2] = 0; - PrintToChat(client, "\x04[Self-Mute]\x01 You have exempted from self-mute:\x04 %s", aExempted); - } - - return Plugin_Handled; -} - -/* - * MENU -*/ -void DisplayMuteMenu(int client) -{ - Menu menu = new Menu(MenuHandler_MuteMenu, MenuAction_Select|MenuAction_Cancel|MenuAction_End|MenuAction_DrawItem|MenuAction_DisplayItem); - menu.ExitButton = true; - - int[] aClients = new int[MaxClients + 1]; - - #if defined _voiceannounceex_included_ - if(g_Plugin_voiceannounce_ex) - { - // Count talking players and insert id's into aClients array - int CurrentlyTalking = 0; - for(int i = 1; i <= MaxClients; i++) - { - if(i != client && IsClientInGame(i) && !IsFakeClient(i) && IsClientSpeaking(i)) - aClients[CurrentlyTalking++] = i; - } - - if(CurrentlyTalking > 0) - { - // insert player names into g_PlayerNames array - for(int i = 0; i < CurrentlyTalking; i++) - GetClientName(aClients[i], g_PlayerNames[aClients[i]], sizeof(g_PlayerNames[])); - - // sort aClients array by player name - SortCustom1D(aClients, CurrentlyTalking, SortByPlayerName); - - // insert players sorted - char aBuf[12]; - for(int i = 0; i < CurrentlyTalking; i++) - { - IntToString(GetClientUserId(aClients[i]), aBuf, sizeof(aBuf)); - menu.AddItem(aBuf, g_PlayerNames[aClients[i]]); - } - - // insert spacers - int Entries = 7 - CurrentlyTalking % 7; - while(Entries--) - menu.AddItem("", "", ITEMDRAW_RAWLINE); - } - } - #endif - - menu.AddItem("@all", "Everyone"); - menu.AddItem("@spec", "Spectators"); - menu.AddItem("@ct", "Counter-Terrorists"); - menu.AddItem("@t", "Terrorists"); - menu.AddItem("@dead", "Dead players"); - menu.AddItem("@alive", "Alive players"); - if(g_Plugin_AdvancedTargeting) - menu.AddItem("@!friends", "Not Steam friend"); - else - menu.AddItem("", "", ITEMDRAW_RAWLINE); - - // Count valid players and insert id's into aClients array - int Players = 0; - for(int i = 1; i <= MaxClients; i++) - { - if(i != client && IsClientInGame(i) && !IsFakeClient(i)) - aClients[Players++] = i; - } - - // insert player names into g_PlayerNames array - for(int i = 0; i < Players; i++) - GetClientName(aClients[i], g_PlayerNames[aClients[i]], sizeof(g_PlayerNames[])); - - // sort aClients array by player name - SortCustom1D(aClients, Players, SortByPlayerName); - - // insert players sorted - char aBuf[12]; - for(int i = 0; i < Players; i++) - { - IntToString(GetClientUserId(aClients[i]), aBuf, sizeof(aBuf)); - menu.AddItem(aBuf, g_PlayerNames[aClients[i]]); - } - - menu.Display(client, MENU_TIME_FOREVER); -} - -public int MenuHandler_MuteMenu(Menu menu, MenuAction action, int param1, int param2) -{ - switch(action) - { - case MenuAction_End: - { - if(param1 != MenuEnd_Selected) - CloseHandle(menu); - } - case MenuAction_Select: - { - int Style; - char aItem[32]; - char aDisp[MAX_NAME_LENGTH + 4]; - menu.GetItem(param2, aItem, sizeof(aItem), Style, aDisp, sizeof(aDisp)); - - if(Style != ITEMDRAW_DEFAULT || !aItem[0]) - { - PrintToChat(param1, "Internal error: aItem[0] -> %d | Style -> %d", aItem[0], Style); - return 0; - } - - if(aItem[0] == '@') - { - int Flag = GetSpecialMutesFlags(aItem); - if(Flag && g_SpecialMutes[param1] & Flag) - UnMuteSpecial(param1, aItem); - else - MuteSpecial(param1, aItem); - - menu.DisplayAt(param1, GetMenuSelectionPosition(), MENU_TIME_FOREVER); - return 0; - } - - int UserId = StringToInt(aItem); - int client = GetClientOfUserId(UserId); - if(!client) - { - PrintToChat(param1, "\x04[Self-Mute]\x01 Player no longer available."); - menu.DisplayAt(param1, GetMenuSelectionPosition(), MENU_TIME_FOREVER); - return 0; - } - - if(GetIgnored(param1, client)) - { - UnIgnore(param1, client); - PrintToChat(param1, "\x04[Self-Mute]\x01 You have self-unmuted:\x04 %N", client); - } - else if(GetExempt(param1, client)) - { - UnExempt(param1, client); - PrintToChat(param1, "\x04[Self-Mute]\x01 You have removed exempt from self-mute:\x04 %N", client); - } - else - { - Ignore(param1, client); - PrintToChat(param1, "\x04[Self-Mute]\x01 You have self-muted:\x04 %N", client); - } - menu.DisplayAt(param1, GetMenuSelectionPosition(), MENU_TIME_FOREVER); - return 0; - } - case MenuAction_DrawItem: - { - int Style; - char aItem[32]; - menu.GetItem(param2, aItem, sizeof(aItem), Style); - - if(!aItem[0]) - return ITEMDRAW_DISABLED; - - if(aItem[0] == '@') - { - int Flag = GetSpecialMutesFlags(aItem); - if(Flag & MUTE_ALL) - return Style; - else if(g_SpecialMutes[param1] & MUTE_ALL) - return ITEMDRAW_DISABLED; - - return Style; - } - - int UserId = StringToInt(aItem); - int client = GetClientOfUserId(UserId); - if(!client) // Player disconnected - return ITEMDRAW_DISABLED; - - return Style; - } - case MenuAction_DisplayItem: - { - int Style; - char aItem[32]; - char aDisp[MAX_NAME_LENGTH + 4]; - menu.GetItem(param2, aItem, sizeof(aItem), Style, aDisp, sizeof(aDisp)); - - // Start of current page - if((param2 + 1) % 7 == 1) - { - if(aItem[0] == '@') - menu.SetTitle("[Self-Mute] Groups"); - else if(param2 == 0) - menu.SetTitle("[Self-Mute] Talking players"); - else - menu.SetTitle("[Self-Mute] All players"); - } - - if(!aItem[0]) - return 0; - - if(aItem[0] == '@') - { - int Flag = GetSpecialMutesFlags(aItem); - if(Flag && g_SpecialMutes[param1] & Flag) - { - char aBuf[32] = "[M] "; - FormatSpecialMutes(Flag, aBuf, sizeof(aBuf)); - if(!StrEqual(aDisp, aBuf)) - return RedrawMenuItem(aBuf); - } - - return 0; - } - - int UserId = StringToInt(aItem); - int client = GetClientOfUserId(UserId); - if(!client) // Player disconnected - { - char aBuf[MAX_NAME_LENGTH + 4] = "[D] "; - StrCat(aBuf, sizeof(aBuf), aDisp); - if(!StrEqual(aDisp, aBuf)) - return RedrawMenuItem(aBuf); - } - - if(GetIgnored(param1, client)) - { - char aBuf[MAX_NAME_LENGTH + 4] = "[M] "; - GetClientName(client, g_PlayerNames[client], sizeof(g_PlayerNames[])); - StrCat(aBuf, sizeof(aBuf), g_PlayerNames[client]); - if(!StrEqual(aDisp, aBuf)) - return RedrawMenuItem(aBuf); - } - else if(GetExempt(param1, client)) - { - char aBuf[MAX_NAME_LENGTH + 4] = "[E] "; - GetClientName(client, g_PlayerNames[client], sizeof(g_PlayerNames[])); - StrCat(aBuf, sizeof(aBuf), g_PlayerNames[client]); - if(!StrEqual(aDisp, aBuf)) - return RedrawMenuItem(aBuf); - } - else - { - GetClientName(client, g_PlayerNames[client], sizeof(g_PlayerNames[])); - if(!StrEqual(aDisp, g_PlayerNames[client])) - return RedrawMenuItem(g_PlayerNames[client]); - } - - return 0; - } - } - - return 0; -} - -void DisplayUnMuteMenu(int client) -{ - // TODO: Implement me -} - -/* - * HOOKS -*/ -int g_MsgDest; -int g_MsgClient; -char g_MsgName[256]; -char g_MsgParam1[256]; -char g_MsgParam2[256]; -char g_MsgParam3[256]; -char g_MsgParam4[256]; -char g_MsgRadioSound[256]; -int g_MsgPlayersNum; -int g_MsgPlayers[MAXPLAYERS + 1]; - -public Action Hook_UserMessageRadioText(UserMsg msg_id, Handle bf, const int[] players, int playersNum, bool reliable, bool init) -{ - if(g_bIsProtoBuf) - { - g_MsgDest = PbReadInt(bf, "msg_dst"); - g_MsgClient = PbReadInt(bf, "client"); - PbReadString(bf, "msg_name", g_MsgName, sizeof(g_MsgName)); - PbReadString(bf, "params", g_MsgParam1, sizeof(g_MsgParam1), 0); - PbReadString(bf, "params", g_MsgParam2, sizeof(g_MsgParam2), 1); - PbReadString(bf, "params", g_MsgParam3, sizeof(g_MsgParam3), 2); - PbReadString(bf, "params", g_MsgParam4, sizeof(g_MsgParam4), 3); - } - else - { - g_MsgDest = BfReadByte(bf); - g_MsgClient = BfReadByte(bf); - BfReadString(bf, g_MsgName, sizeof(g_MsgName), false); - BfReadString(bf, g_MsgParam1, sizeof(g_MsgParam1), false); - BfReadString(bf, g_MsgParam2, sizeof(g_MsgParam2), false); - BfReadString(bf, g_MsgParam3, sizeof(g_MsgParam3), false); - BfReadString(bf, g_MsgParam4, sizeof(g_MsgParam4), false); - } - - // Check which clients need to be excluded. - g_MsgPlayersNum = 0; - for(int i = 0; i < playersNum; i++) - { - int client = players[i]; - if(!GetIgnored(client, g_MsgClient)) - g_MsgPlayers[g_MsgPlayersNum++] = client; - } - - // No clients were excluded. - if(g_MsgPlayersNum == playersNum) - { - g_MsgClient = -1; - return Plugin_Continue; - } - else if(g_MsgPlayersNum == 0) // All clients were excluded and there is no need to broadcast. - { - g_MsgClient = -2; - return Plugin_Handled; - } - - return Plugin_Handled; -} - -public Action Hook_UserMessageSendAudio(UserMsg msg_id, Handle bf, const int[] players, int playersNum, bool reliable, bool init) -{ - if(g_MsgClient == -1) - return Plugin_Continue; - else if(g_MsgClient == -2) - return Plugin_Handled; - - if(g_bIsProtoBuf) - PbReadString(bf, "radio_sound", g_MsgRadioSound, sizeof(g_MsgRadioSound)); - else - BfReadString(bf, g_MsgRadioSound, sizeof(g_MsgRadioSound), false); - - if(StrEqual(g_MsgRadioSound, "radio.locknload")) - return Plugin_Continue; - - DataPack pack = new DataPack(); - pack.WriteCell(g_MsgDest); - pack.WriteCell(g_MsgClient); - pack.WriteString(g_MsgName); - pack.WriteString(g_MsgParam1); - pack.WriteString(g_MsgParam2); - pack.WriteString(g_MsgParam3); - pack.WriteString(g_MsgParam4); - pack.WriteString(g_MsgRadioSound); - pack.WriteCell(g_MsgPlayersNum); - - for(int i = 0; i < g_MsgPlayersNum; i++) - pack.WriteCell(g_MsgPlayers[i]); - - RequestFrame(OnPlayerRadio, pack); - - return Plugin_Handled; -} - -public void OnPlayerRadio(DataPack pack) -{ - pack.Reset(); - g_MsgDest = pack.ReadCell(); - g_MsgClient = pack.ReadCell(); - pack.ReadString(g_MsgName, sizeof(g_MsgName)); - pack.ReadString(g_MsgParam1, sizeof(g_MsgParam1)); - pack.ReadString(g_MsgParam2, sizeof(g_MsgParam2)); - pack.ReadString(g_MsgParam3, sizeof(g_MsgParam3)); - pack.ReadString(g_MsgParam4, sizeof(g_MsgParam4)); - pack.ReadString(g_MsgRadioSound, sizeof(g_MsgRadioSound)); - g_MsgPlayersNum = pack.ReadCell(); - - int playersNum = 0; - for(int i = 0; i < g_MsgPlayersNum; i++) - { - int client_ = pack.ReadCell(); - if(IsClientInGame(client_)) - g_MsgPlayers[playersNum++] = client_; - } - CloseHandle(pack); - - Handle RadioText = StartMessage("RadioText", g_MsgPlayers, playersNum, USERMSG_RELIABLE); - if(g_bIsProtoBuf) - { - PbSetInt(RadioText, "msg_dst", g_MsgDest); - PbSetInt(RadioText, "client", g_MsgClient); - PbSetString(RadioText, "msg_name", g_MsgName); - PbSetString(RadioText, "params", g_MsgParam1, 0); - PbSetString(RadioText, "params", g_MsgParam2, 1); - PbSetString(RadioText, "params", g_MsgParam3, 2); - PbSetString(RadioText, "params", g_MsgParam4, 3); - } - else - { - BfWriteByte(RadioText, g_MsgDest); - BfWriteByte(RadioText, g_MsgClient); - BfWriteString(RadioText, g_MsgName); - BfWriteString(RadioText, g_MsgParam1); - BfWriteString(RadioText, g_MsgParam2); - BfWriteString(RadioText, g_MsgParam3); - BfWriteString(RadioText, g_MsgParam4); - } - EndMessage(); - - Handle SendAudio = StartMessage("SendAudio", g_MsgPlayers, playersNum, USERMSG_RELIABLE); - if(g_bIsProtoBuf) - PbSetString(SendAudio, "radio_sound", g_MsgRadioSound); - else - BfWriteString(SendAudio, g_MsgRadioSound); - EndMessage(); -} - -/* - * HELPERS -*/ -void UpdateIgnored() -{ - if(g_Plugin_ccc) - CCC_UpdateIgnoredArray(g_Ignored); -} - -public int SortByPlayerName(int elem1, int elem2, const int[] array, Handle hndl) -{ - return strcmp(g_PlayerNames[elem1], g_PlayerNames[elem2], false); -} - -bool GetIgnored(int client, int target) -{ - return g_Ignored[(client * (MAXPLAYERS + 1) + target)]; -} - -void SetIgnored(int client, int target, bool ignored) -{ - g_Ignored[(client * (MAXPLAYERS + 1) + target)] = ignored; -} - -bool GetExempt(int client, int target) -{ - return g_Exempt[client][target]; -} - -void SetExempt(int client, int target, bool exempt) -{ - g_Exempt[client][target] = exempt; -}