SelfMute: add !su menu after 10000 years in development
This commit is contained in:
		
							parent
							
								
									17fac0b9ec
								
							
						
					
					
						commit
						a3ec778ff7
					
				@ -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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user