SelfMute: Added mute exempting
This commit is contained in:
		
							parent
							
								
									387da4b623
								
							
						
					
					
						commit
						5090fd7412
					
				| @ -45,6 +45,7 @@ enum | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| bool g_Ignored[(MAXPLAYERS + 1) * (MAXPLAYERS + 1)]; | bool g_Ignored[(MAXPLAYERS + 1) * (MAXPLAYERS + 1)]; | ||||||
|  | bool g_Exempt[MAXPLAYERS + 1][MAXPLAYERS + 1]; | ||||||
| int g_SpecialMutes[MAXPLAYERS + 1]; | int g_SpecialMutes[MAXPLAYERS + 1]; | ||||||
| 
 | 
 | ||||||
| char g_PlayerNames[MAXPLAYERS+1][MAX_NAME_LENGTH]; | char g_PlayerNames[MAXPLAYERS+1][MAX_NAME_LENGTH]; | ||||||
| @ -96,25 +97,29 @@ public void OnAllPluginsLoaded() | |||||||
| public void OnClientPutInServer(int client) | public void OnClientPutInServer(int client) | ||||||
| { | { | ||||||
| 	g_SpecialMutes[client] = MUTE_NONE; | 	g_SpecialMutes[client] = MUTE_NONE; | ||||||
| 	for(int i = 1; i <= MaxClients; i++) | 	for(int i = 1; i < MAXPLAYERS; i++) | ||||||
|  | 	{ | ||||||
| 		SetIgnored(client, i, false); | 		SetIgnored(client, i, false); | ||||||
|  | 		SetExempt(client, i, false); | ||||||
|  | 
 | ||||||
|  | 		SetIgnored(i, client, false); | ||||||
|  | 		SetExempt(i, client, false); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	UpdateSpecialMutesOtherClients(client); | 	UpdateSpecialMutesOtherClients(client); | ||||||
| 	UpdateIgnored(); | 	UpdateIgnored(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| public void OnClientPostAdminCheck(int client) |  | ||||||
| { |  | ||||||
| 	UpdateSpecialMutesOtherClients(client); |  | ||||||
| 	UpdateSpecialMutesThisClient(client); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public void OnClientDisconnect(int client) | public void OnClientDisconnect(int client) | ||||||
| { | { | ||||||
| 	g_SpecialMutes[client] = MUTE_NONE; | 	g_SpecialMutes[client] = MUTE_NONE; | ||||||
| 	for(int i = 1; i <= MaxClients; i++) | 	for(int i = 1; i < MAXPLAYERS; i++) | ||||||
| 	{ | 	{ | ||||||
| 		SetIgnored(client, i, false); | 		SetIgnored(client, i, false); | ||||||
|  | 		SetExempt(client, i, false); | ||||||
|  | 
 | ||||||
|  | 		SetIgnored(i, client, false); | ||||||
|  | 		SetExempt(i, client, false); | ||||||
| 
 | 
 | ||||||
| 		if(IsClientInGame(i) && !IsFakeClient(i) && i != client) | 		if(IsClientInGame(i) && !IsFakeClient(i) && i != client) | ||||||
| 			SetListenOverride(i, client, Listen_Yes); | 			SetListenOverride(i, client, Listen_Yes); | ||||||
| @ -188,7 +193,7 @@ void UpdateSpecialMutesOtherClients(int client) | |||||||
| 		else if(g_SpecialMutes[i] & MUTE_ALL) | 		else if(g_SpecialMutes[i] & MUTE_ALL) | ||||||
| 			Flags |= MUTE_ALL; | 			Flags |= MUTE_ALL; | ||||||
| 
 | 
 | ||||||
| 		if(Flags) | 		if(Flags && !GetExempt(i, client)) | ||||||
| 			SetListenOverride(i, client, Listen_No); | 			SetListenOverride(i, client, Listen_No); | ||||||
| 		else if(!GetIgnored(i, client)) | 		else if(!GetIgnored(i, client)) | ||||||
| 			SetListenOverride(i, client, Listen_Yes); | 			SetListenOverride(i, client, Listen_Yes); | ||||||
| @ -234,7 +239,7 @@ void UpdateSpecialMutesThisClient(int client) | |||||||
| 		else if(g_SpecialMutes[client] & MUTE_ALL) | 		else if(g_SpecialMutes[client] & MUTE_ALL) | ||||||
| 			Flags |= MUTE_ALL; | 			Flags |= MUTE_ALL; | ||||||
| 
 | 
 | ||||||
| 		if(Flags) | 		if(Flags && !GetExempt(client, i)) | ||||||
| 			SetListenOverride(client, i, Listen_No); | 			SetListenOverride(client, i, Listen_No); | ||||||
| 		else if(!GetIgnored(client, i)) | 		else if(!GetIgnored(client, i)) | ||||||
| 			SetListenOverride(client, i, Listen_Yes); | 			SetListenOverride(client, i, Listen_Yes); | ||||||
| @ -405,6 +410,18 @@ void UnIgnore(int client, int target) | |||||||
| 	SetListenOverride(client, target, Listen_Yes); | 	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 |  * CHAT COMMANDS | ||||||
| */ | */ | ||||||
| @ -430,12 +447,6 @@ public Action Command_SelfMute(int client, int args) | |||||||
| 	StripQuotes(Filtered); | 	StripQuotes(Filtered); | ||||||
| 	TrimString(Filtered); | 	TrimString(Filtered); | ||||||
| 
 | 
 | ||||||
| 	if(StrEqual(Filtered, "@me", false)) |  | ||||||
| 	{ |  | ||||||
| 		PrintToChat(client, "\x04[Self-Mute]\x01 You can't mute yourself, don't be silly."); |  | ||||||
| 		return Plugin_Handled; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if(MuteSpecial(client, Filtered)) | 	if(MuteSpecial(client, Filtered)) | ||||||
| 		return Plugin_Handled; | 		return Plugin_Handled; | ||||||
| 
 | 
 | ||||||
| @ -458,10 +469,30 @@ public Action Command_SelfMute(int client, int args) | |||||||
| 		return Plugin_Handled; | 		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++) | 	for(int i = 0; i < TargetCount; i++) | ||||||
| 	{ | 	{ | ||||||
| 		if(aTargetList[i] != client) | 		if(aTargetList[i] == client) | ||||||
| 			Ignore(client, aTargetList[i]); | 			continue; | ||||||
|  | 
 | ||||||
|  | 		Ignore(client, aTargetList[i]); | ||||||
| 	} | 	} | ||||||
| 	UpdateIgnored(); | 	UpdateIgnored(); | ||||||
| 
 | 
 | ||||||
| @ -492,12 +523,6 @@ public Action Command_SelfUnMute(int client, int args) | |||||||
| 	StripQuotes(Filtered); | 	StripQuotes(Filtered); | ||||||
| 	TrimString(Filtered); | 	TrimString(Filtered); | ||||||
| 
 | 
 | ||||||
| 	if(StrEqual(Filtered, "@me", false)) |  | ||||||
| 	{ |  | ||||||
| 		PrintToChat(client, "\x04[Self-Mute]\x01 Unmuting won't work either."); |  | ||||||
| 		return Plugin_Handled; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if(UnMuteSpecial(client, Filtered)) | 	if(UnMuteSpecial(client, Filtered)) | ||||||
| 		return Plugin_Handled; | 		return Plugin_Handled; | ||||||
| 
 | 
 | ||||||
| @ -520,10 +545,30 @@ public Action Command_SelfUnMute(int client, int args) | |||||||
| 		return Plugin_Handled; | 		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++) | 	for(int i = 0; i < TargetCount; i++) | ||||||
| 	{ | 	{ | ||||||
| 		if(aTargetList[i] != client) | 		if(aTargetList[i] == client) | ||||||
| 			UnIgnore(client, aTargetList[i]); | 			continue; | ||||||
|  | 
 | ||||||
|  | 		UnIgnore(client, aTargetList[i]); | ||||||
| 	} | 	} | ||||||
| 	UpdateIgnored(); | 	UpdateIgnored(); | ||||||
| 
 | 
 | ||||||
| @ -540,32 +585,48 @@ public Action Command_CheckMutes(int client, int args) | |||||||
| 		return Plugin_Handled; | 		return Plugin_Handled; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	char aBuf[1024]; | 	char aMuted[1024]; | ||||||
| 	char aBuf2[MAX_NAME_LENGTH]; | 	char aExempted[1024]; | ||||||
|  | 	char aName[MAX_NAME_LENGTH]; | ||||||
| 	for(int i = 1; i <= MaxClients; i++) | 	for(int i = 1; i <= MaxClients; i++) | ||||||
| 	{ | 	{ | ||||||
|  | 		if(!IsClientInGame(i)) | ||||||
|  | 			continue; | ||||||
|  | 
 | ||||||
|  | 		GetClientName(i, aName, sizeof(aName)); | ||||||
|  | 
 | ||||||
| 		if(GetIgnored(client, i)) | 		if(GetIgnored(client, i)) | ||||||
| 		{ | 		{ | ||||||
| 			GetClientName(i, aBuf2, sizeof(aBuf2)); | 			StrCat(aMuted, sizeof(aMuted), aName); | ||||||
| 			StrCat(aBuf, sizeof(aBuf), aBuf2); | 			StrCat(aMuted, sizeof(aMuted), ", "); | ||||||
| 			StrCat(aBuf, sizeof(aBuf), ", "); | 		} | ||||||
|  | 
 | ||||||
|  | 		if(GetExempt(client, i)) | ||||||
|  | 		{ | ||||||
|  | 			StrCat(aExempted, sizeof(aExempted), aName); | ||||||
|  | 			StrCat(aExempted, sizeof(aExempted), ", "); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Cut off last ', ' | 	if(strlen(aMuted)) | ||||||
| 	if(strlen(aBuf)) |  | ||||||
| 	{ | 	{ | ||||||
| 		aBuf[strlen(aBuf) - 2] = 0; | 		aMuted[strlen(aMuted) - 2] = 0; | ||||||
| 		PrintToChat(client, "\x04[Self-Mute]\x01 You have self-muted:\x04 %s", aBuf); | 		PrintToChat(client, "\x04[Self-Mute]\x01 You have self-muted:\x04 %s", aMuted); | ||||||
| 	} | 	} | ||||||
| 	else if(!g_SpecialMutes[client]) |  | ||||||
| 		PrintToChat(client, "\x04[Self-Mute]\x01 You have not self-muted anyone!\x04", aBuf); |  | ||||||
| 
 | 
 | ||||||
| 	if(g_SpecialMutes[client]) | 	if(g_SpecialMutes[client] != MUTE_NONE) | ||||||
| 	{ | 	{ | ||||||
| 		aBuf[0] = 0; | 		aMuted[0] = 0; | ||||||
| 		FormatSpecialMutes(g_SpecialMutes[client], aBuf, sizeof(aBuf)); | 		FormatSpecialMutes(g_SpecialMutes[client], aMuted, sizeof(aMuted)); | ||||||
| 		PrintToChat(client, "\x04[Self-Mute]\x01 You have self-muted group:\x04 %s", aBuf); | 		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; | 	return Plugin_Handled; | ||||||
| @ -601,7 +662,7 @@ void DisplayMuteMenu(int client) | |||||||
| 			SortCustom1D(aClients, CurrentlyTalking, SortByPlayerName); | 			SortCustom1D(aClients, CurrentlyTalking, SortByPlayerName); | ||||||
| 
 | 
 | ||||||
| 			// insert players sorted | 			// insert players sorted | ||||||
| 			char aBuf[11]; | 			char aBuf[12]; | ||||||
| 			for(int i = 0; i < CurrentlyTalking; i++) | 			for(int i = 0; i < CurrentlyTalking; i++) | ||||||
| 			{ | 			{ | ||||||
| 				IntToString(GetClientUserId(aClients[i]), aBuf, sizeof(aBuf)); | 				IntToString(GetClientUserId(aClients[i]), aBuf, sizeof(aBuf)); | ||||||
| @ -700,6 +761,11 @@ public int MenuHandler_MuteMenu(Menu menu, MenuAction action, int param1, int pa | |||||||
| 				UnIgnore(param1, client); | 				UnIgnore(param1, client); | ||||||
| 				PrintToChat(param1, "\x04[Self-Mute]\x01 You have self-unmuted:\x04 %N", 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 | 			else | ||||||
| 			{ | 			{ | ||||||
| 				Ignore(param1, client); | 				Ignore(param1, client); | ||||||
| @ -788,6 +854,14 @@ public int MenuHandler_MuteMenu(Menu menu, MenuAction action, int param1, int pa | |||||||
| 				if(!StrEqual(aDisp, aBuf)) | 				if(!StrEqual(aDisp, aBuf)) | ||||||
| 					return RedrawMenuItem(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 | 			else | ||||||
| 			{ | 			{ | ||||||
| 				GetClientName(client, g_PlayerNames[client], sizeof(g_PlayerNames[])); | 				GetClientName(client, g_PlayerNames[client], sizeof(g_PlayerNames[])); | ||||||
| @ -978,3 +1052,13 @@ void SetIgnored(int client, int target, bool ignored) | |||||||
| { | { | ||||||
| 	g_Ignored[(client * (MAXPLAYERS + 1) + target)] = 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; | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user