try to get this ccname chat rank stuff not racing

This commit is contained in:
rtldg 2022-07-11 11:06:58 +00:00
parent 5c14dfcc60
commit d78393f084

View File

@ -102,6 +102,7 @@ bool gB_ChatRanksMenuOnlyUnlocked[MAXPLAYERS+1];
bool gB_ChangedSinceLogin[MAXPLAYERS+1]; bool gB_ChangedSinceLogin[MAXPLAYERS+1];
bool gB_CCQueried[MAXPLAYERS+1];
bool gB_CCAccess[MAXPLAYERS+1]; bool gB_CCAccess[MAXPLAYERS+1];
char gS_CustomName[MAXPLAYERS+1][128]; char gS_CustomName[MAXPLAYERS+1][128];
char gS_CustomMessage[MAXPLAYERS+1][16]; char gS_CustomMessage[MAXPLAYERS+1][16];
@ -619,6 +620,22 @@ public void OnLibraryRemoved(const char[] name)
} }
} }
void DoChatRankValidation(int client)
{
if (!AreClientCookiesCached(client))
return;
// we want ccname checks to only happen after admin is queried & ccname sql query...
if (gI_ChatSelection[client] != -1 || (gB_AdminChecked[client] && gB_CCQueried[client]))
{
if (!HasRankAccess(client, gI_ChatSelection[client]))
{
SetClientCookie(client, gH_ChatCookie, "-2"); // auto
gI_ChatSelection[client] = -2;
}
}
}
public void OnClientCookiesCached(int client) public void OnClientCookiesCached(int client)
{ {
char sChatSettings[8]; char sChatSettings[8];
@ -631,17 +648,14 @@ public void OnClientCookiesCached(int client)
else else
{ {
gI_ChatSelection[client] = StringToInt(sChatSettings); gI_ChatSelection[client] = StringToInt(sChatSettings);
if (gB_AdminChecked[client] && !HasRankAccess(client, gI_ChatSelection[client]))
{
SetClientCookie(client, gH_ChatCookie, "-2");
gI_ChatSelection[client] = -2;
}
} }
DoChatRankValidation(client);
} }
public void OnClientConnected(int client) public void OnClientConnected(int client)
{ {
gB_CCQueried[client] = false;
gB_CCAccess[client] = false; gB_CCAccess[client] = false;
strcopy(gS_CustomName[client], sizeof(gS_CustomName[]), "{team}{name}"); strcopy(gS_CustomName[client], sizeof(gS_CustomName[]), "{team}{name}");
strcopy(gS_CustomMessage[client], sizeof(gS_CustomMessage[]), "{default}"); strcopy(gS_CustomMessage[client], sizeof(gS_CustomMessage[]), "{default}");
@ -668,22 +682,14 @@ public void OnClientAuthorized(int client, const char[] auth)
public void OnClientPostAdminCheck(int client) public void OnClientPostAdminCheck(int client)
{ {
gB_AdminChecked[client] = true; gB_AdminChecked[client] = true;
DoChatRankValidation(client);
if (AreClientCookiesCached(client))
{
if (!HasRankAccess(client, gI_ChatSelection[client]))
{
SetClientCookie(client, gH_ChatCookie, "-2");
gI_ChatSelection[client] = -2;
}
}
} }
Action Timer_RefreshAdmins(Handle timer, any data) Action Timer_RefreshAdmins(Handle timer, any data)
{ {
for (int i = 1; i <= MaxClients; i++) for (int i = 1; i <= MaxClients; i++)
{ {
if (IsValidClient(i) && !IsFakeClient(i) && IsClientAuthorized(i)) if (IsValidClient(i) && !IsFakeClient(i) && gB_AdminChecked[i])
{ {
OnClientPostAdminCheck(i); OnClientPostAdminCheck(i);
} }
@ -1496,6 +1502,7 @@ public void SQL_GetChat_Callback(Database db, DBResultSet results, const char[]
} }
gB_ChangedSinceLogin[client] = false; gB_ChangedSinceLogin[client] = false;
gB_CCQueried[client] = true;
while(results.FetchRow()) while(results.FetchRow())
{ {
@ -1503,6 +1510,8 @@ public void SQL_GetChat_Callback(Database db, DBResultSet results, const char[]
results.FetchString(1, gS_CustomName[client], 128); results.FetchString(1, gS_CustomName[client], 128);
results.FetchString(3, gS_CustomMessage[client], 16); results.FetchString(3, gS_CustomMessage[client], 16);
} }
DoChatRankValidation(client);
} }
void RemoveFromString(char[] buf, char[] thing, int extra) void RemoveFromString(char[] buf, char[] thing, int extra)