SelfMute: add !su menu after 10000 years in development

This commit is contained in:
BotoX 2019-09-01 18:21:07 +02:00
parent 17fac0b9ec
commit a3ec778ff7

View File

@ -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++)
{
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:
if(SpecialMute & MUTE_ALL)
{
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;
}
/*