Don't send or display chat messages which are whitespace only (#180)

This commit is contained in:
CommonLoon102 2019-09-20 10:23:07 +00:00 committed by Christoph Oelckers
parent c0b3e6f99f
commit 247655a3d7
3 changed files with 36 additions and 13 deletions

View file

@ -518,7 +518,7 @@ void CGameMessageMgr::SortMessagesByTime(messageStruct** messages, int count) {
void CPlayerMsg::Clear(void) void CPlayerMsg::Clear(void)
{ {
at4[0] = 0; text[0] = 0;
at0 = 0; at0 = 0;
} }
@ -531,7 +531,7 @@ void CPlayerMsg::Term(void)
void CPlayerMsg::Draw(void) void CPlayerMsg::Draw(void)
{ {
char buffer[44]; char buffer[44];
strcpy(buffer, at4); strcpy(buffer, text);
if ((int)totalclock & 16) if ((int)totalclock & 16)
strcat(buffer, "_"); strcat(buffer, "_");
int x = gViewMode == 3 ? gViewX0S : 0; int x = gViewMode == 3 ? gViewX0S : 0;
@ -546,8 +546,8 @@ bool CPlayerMsg::AddChar(char ch)
{ {
if (at0 < 40) if (at0 < 40)
{ {
at4[at0++] = ch; text[at0++] = ch;
at4[at0] = 0; text[at0] = 0;
return true; return true;
} }
return false; return false;
@ -556,20 +556,32 @@ bool CPlayerMsg::AddChar(char ch)
void CPlayerMsg::DelChar(void) void CPlayerMsg::DelChar(void)
{ {
if (at0 > 0) if (at0 > 0)
at4[--at0] = 0; text[--at0] = 0;
} }
void CPlayerMsg::Set(const char * pzString) void CPlayerMsg::Set(const char * pzString)
{ {
strncpy(at4, pzString, 40); strncpy(text, pzString, 40);
at0 = ClipHigh(strlen(pzString), 40); at0 = ClipHigh(strlen(pzString), 40);
at4[at0] = 0; text[at0] = 0;
} }
void CPlayerMsg::Send(void) void CPlayerMsg::Send(void)
{ {
netBroadcastMessage(myconnectindex, at4); if (VanillaMode() || !IsWhitespaceOnly(text))
viewSetMessage(at4); {
netBroadcastMessage(myconnectindex, text);
if (!VanillaMode())
{
char *myName = gProfile[myconnectindex].name;
char szTemp[128];
sprintf(szTemp, "%s: %s", myName, text);
viewSetMessage(szTemp, 10); // 10: dark blue
}
else
viewSetMessage(text);
}
Term(); Term();
keyFlushScans(); keyFlushScans();
} }
@ -611,7 +623,7 @@ void CPlayerMsg::ProcessKeys(void)
break; break;
case sc_Enter: case sc_Enter:
case sc_kpad_Enter: case sc_kpad_Enter:
if (gCheatMgr.Check(at4)) if (gCheatMgr.Check(text))
Term(); Term();
else else
Send(); Send();
@ -629,6 +641,15 @@ void CPlayerMsg::ProcessKeys(void)
} }
} }
bool CPlayerMsg::IsWhitespaceOnly(const char * const pzString)
{
const char *p = pzString;
while (*p != 0)
if (*p++ > 32)
return false;
return true;
}
CCheatMgr::CHEATINFO CCheatMgr::s_CheatInfo[] = { CCheatMgr::CHEATINFO CCheatMgr::s_CheatInfo[] = {
{"NQLGB", kCheatMpkfa, 0 }, // MPKFA (Invincibility) {"NQLGB", kCheatMpkfa, 0 }, // MPKFA (Invincibility)
{"DBQJONZBTT", kCheatCapInMyAss, 0 }, // CAPINMYASS (Disable invincibility ) {"DBQJONZBTT", kCheatCapInMyAss, 0 }, // CAPINMYASS (Disable invincibility )

View file

@ -81,8 +81,8 @@ class CPlayerMsg
{ {
public: public:
int at0; int at0;
char at4[41]; char text[41];
CPlayerMsg() { at0 = 0; at4[0] = 0; } CPlayerMsg() { at0 = 0; text[0] = 0; }
void Clear(void); void Clear(void);
void Term(void); void Term(void);
void Draw(void); void Draw(void);
@ -91,6 +91,8 @@ public:
void Set(const char *pzString); void Set(const char *pzString);
void Send(void); void Send(void);
void ProcessKeys(void); void ProcessKeys(void);
private:
bool IsWhitespaceOnly(const char* const pzString);
}; };
class CCheatMgr class CCheatMgr

View file

@ -501,7 +501,7 @@ void netGetPackets(void)
pPacket += 4; pPacket += 4;
if (*pPacket != '/' || (*pPacket == 0 && *(pPacket+1) == 0) || (*(pPacket+1) >= '1' && *(pPacket+1) <= '8' && *(pPacket+1)-'1' == myconnectindex)) if (*pPacket != '/' || (*pPacket == 0 && *(pPacket+1) == 0) || (*(pPacket+1) >= '1' && *(pPacket+1) <= '8' && *(pPacket+1)-'1' == myconnectindex))
{ {
sprintf(buffer, "%s: %s", gProfile[nPlayer].name, pPacket); sprintf(buffer, VanillaMode() ? "%s : %s" : "%s: %s", gProfile[nPlayer].name, pPacket);
viewSetMessage(buffer, VanillaMode() ? 0 : 10); // 10: dark blue viewSetMessage(buffer, VanillaMode() ? 0 : 10); // 10: dark blue
sndStartSample("DMRADIO", 128, -1); sndStartSample("DMRADIO", 128, -1);
} }