diff --git a/SelfMute/scripting/SelfMute.sp b/SelfMute/scripting/SelfMute.sp index 0a5f46d7..66fc309a 100644 --- a/SelfMute/scripting/SelfMute.sp +++ b/SelfMute/scripting/SelfMute.sp @@ -284,47 +284,40 @@ void FormatSpecialMutes(int SpecialMute, char[] aBuf, int BufLen) } bool Status = false; - int MuteCount = RoundFloat(Logarithm(float(MUTE_LAST), 2.0)); - for(int i = 0; i <= MuteCount; i++) + if(SpecialMute & MUTE_ALL) { - 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; - } - } + StrCat(aBuf, BufLen, "Everyone, "); + Status = true; + } + if(SpecialMute & MUTE_SPEC) + { + StrCat(aBuf, BufLen, "Spectators, "); + Status = true; + } + if(SpecialMute & MUTE_CT) + { + StrCat(aBuf, BufLen, "Counter-Terrorists, "); + Status = true; + } + if(SpecialMute & MUTE_T) + { + StrCat(aBuf, BufLen, "Terrorists, "); + Status = true; + } + if(SpecialMute & MUTE_DEAD) + { + StrCat(aBuf, BufLen, "Dead players, "); + Status = true; + } + if(SpecialMute & MUTE_ALIVE) + { + StrCat(aBuf, BufLen, "Alive players, "); + Status = true; + } + if(SpecialMute & MUTE_NOTFRIENDS) + { + StrCat(aBuf, BufLen, "Not Steam friends, "); + Status = true; } // Cut off last ', ' @@ -705,7 +698,7 @@ void DisplayMuteMenu(int client) menu.AddItem("@dead", "Dead players"); menu.AddItem("@alive", "Alive players"); if(g_Plugin_AdvancedTargeting) - menu.AddItem("@!friends", "Not Steam friend"); + menu.AddItem("@!friends", "Not Steam friends"); else menu.AddItem("", "", ITEMDRAW_RAWLINE); @@ -900,7 +893,175 @@ public int MenuHandler_MuteMenu(Menu menu, MenuAction action, int param1, int pa void DisplayUnMuteMenu(int client) { - // TODO: Implement me + Menu menu = new Menu(MenuHandler_UnMuteMenu, MenuAction_Select|MenuAction_Cancel|MenuAction_End|MenuAction_DrawItem|MenuAction_DisplayItem); + menu.SetTitle("[Self-UnMute]"); + menu.ExitButton = true; + + if(g_SpecialMutes[client] & MUTE_ALL) + menu.AddItem("@all", "Everyone"); + if(g_SpecialMutes[client] & MUTE_SPEC) + menu.AddItem("@spec", "Spectators"); + if(g_SpecialMutes[client] & MUTE_CT) + menu.AddItem("@ct", "Counter-Terrorists"); + if(g_SpecialMutes[client] & MUTE_T) + menu.AddItem("@t", "Terrorists"); + if(g_SpecialMutes[client] & MUTE_DEAD) + menu.AddItem("@dead", "Dead players"); + if(g_SpecialMutes[client] & MUTE_ALIVE) + menu.AddItem("@alive", "Alive players"); + if(g_SpecialMutes[client] & MUTE_NOTFRIENDS) + menu.AddItem("@!friends", "Not Steam friends"); + if(g_SpecialMutes[client]) + menu.AddItem("", "", ITEMDRAW_RAWLINE); + + int[] aClients = new int[MaxClients + 1]; + + // 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) && (GetIgnored(client, i) || GetExempt(client, 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]]); + } + + if(!menu.ItemCount) + { + delete menu; + PrintToChat(client, "\x04[Self-Mute]\x01 You haven't muted or exempted anyone."); + return; + } + + menu.Display(client, MENU_TIME_FOREVER); +} + + +public int MenuHandler_UnMuteMenu(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); + + menu.RemoveItem(GetMenuSelectionPosition()); + 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); + } + + menu.RemoveItem(GetMenuSelectionPosition()); + 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] == '@') + 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)); + + if(!aItem[0]) + 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(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); + } + + return 0; + } + } + + return 0; } /*