SelfMute: Added mute exempting

This commit is contained in:
BotoX 2016-08-10 01:26:39 +02:00
parent 387da4b623
commit 5090fd7412

View File

@ -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;
}