mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Split PT_SAY handling into its own method
This commit is contained in:
parent
167f5f40ed
commit
c924228444
1 changed files with 64 additions and 59 deletions
123
src/d_clisrv.c
123
src/d_clisrv.c
|
|
@ -4944,6 +4944,69 @@ static boolean CheckForSpeedHacks(UINT8 p)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void PT_Say(int node)
|
||||||
|
{
|
||||||
|
if (client)
|
||||||
|
return; // Only sent to servers, why are we receiving this?
|
||||||
|
|
||||||
|
say_pak say = netbuffer->u.say;
|
||||||
|
|
||||||
|
if (playernode[say.source] != node)
|
||||||
|
return; // Spoofed source!
|
||||||
|
|
||||||
|
if ((cv_mute.value || say.flags & (HU_CSAY|HU_SHOUT)) && say.source != serverplayer && !(IsPlayerAdmin(say.source)))
|
||||||
|
{
|
||||||
|
CONS_Debug(DBG_NETPLAY,"Received SAY cmd from Player %d (%s), but cv_mute is on.\n", say.source+1, player_names[say.source]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((say.flags & HU_PRIVNOTICE) && !(IsPlayerAdmin(say.source)))
|
||||||
|
{
|
||||||
|
CONS_Debug(DBG_NETPLAY,"Received SAY cmd from Player %d (%s) with an illegal HU_PRIVNOTICE flag.\n", say.source+1, player_names[say.source]);
|
||||||
|
SendKick(say.source, KICK_MSG_CON_FAIL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
const size_t j = strlen(say.message);
|
||||||
|
for (i = 0; i < j; i++)
|
||||||
|
{
|
||||||
|
if (say.message[i] & 0x80)
|
||||||
|
{
|
||||||
|
CONS_Alert(CONS_WARNING, M_GetText("Illegal say command received from %s containing invalid characters\n"), player_names[say.source]);
|
||||||
|
SendKick(say.source, KICK_MSG_CON_FAIL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stop_spamming[say.source] != 0 && consoleplayer != say.source && cv_chatspamprotection.value && !(say.flags & (HU_CSAY|HU_SHOUT)))
|
||||||
|
{
|
||||||
|
CONS_Debug(DBG_NETPLAY,"Received SAY cmd too quickly from Player %d (%s), assuming as spam and blocking message.\n", say.source+1, player_names[say.source]);
|
||||||
|
stop_spamming[say.source] = 4;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_spamming[say.source] = 4;
|
||||||
|
|
||||||
|
serverplayer_t *stats = SV_GetStatsByPlayerIndex(say.source);
|
||||||
|
int remainingGames = cv_gamestochat.value - stats->finishedrounds;
|
||||||
|
|
||||||
|
if (remainingGames > 0 && !(IsPlayerAdmin(say.source)))
|
||||||
|
{
|
||||||
|
CONS_Debug(DBG_NETPLAY,"Received SAY cmd from Player %d (%s), but they aren't permitted to chat yet.\n", say.source+1, player_names[say.source]);
|
||||||
|
|
||||||
|
char rejectmsg[256];
|
||||||
|
strlcpy(rejectmsg, va("Please play %d more games to use chat.", remainingGames), 256);
|
||||||
|
SendServerNotice(say.source, rejectmsg);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DoSayCommand(say.message, say.target, say.flags, say.source);
|
||||||
|
}
|
||||||
|
|
||||||
static char NodeToSplitPlayer(int node, int split)
|
static char NodeToSplitPlayer(int node, int split)
|
||||||
{
|
{
|
||||||
if (split == 0)
|
if (split == 0)
|
||||||
|
|
@ -5246,65 +5309,7 @@ static void HandlePacketFromPlayer(SINT8 node)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PT_SAY:
|
case PT_SAY:
|
||||||
if (client)
|
PT_Say(node);
|
||||||
break; // Only sent to servers, why are we receiving this?
|
|
||||||
|
|
||||||
say_pak say = netbuffer->u.say;
|
|
||||||
|
|
||||||
if (playernode[say.source] != node)
|
|
||||||
break; // Spoofed source!
|
|
||||||
|
|
||||||
if ((cv_mute.value || say.flags & (HU_CSAY|HU_SHOUT)) && say.source != serverplayer && !(IsPlayerAdmin(say.source)))
|
|
||||||
{
|
|
||||||
CONS_Debug(DBG_NETPLAY,"Received SAY cmd from Player %d (%s), but cv_mute is on.\n", say.source+1, player_names[say.source]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((say.flags & HU_PRIVNOTICE) && !(IsPlayerAdmin(say.source)))
|
|
||||||
{
|
|
||||||
CONS_Debug(DBG_NETPLAY,"Received SAY cmd from Player %d (%s) with an illegal HU_PRIVNOTICE flag.\n", say.source+1, player_names[say.source]);
|
|
||||||
SendKick(say.source, KICK_MSG_CON_FAIL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
const size_t j = strlen(say.message);
|
|
||||||
for (i = 0; i < j; i++)
|
|
||||||
{
|
|
||||||
if (say.message[i] & 0x80)
|
|
||||||
{
|
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal say command received from %s containing invalid characters\n"), player_names[say.source]);
|
|
||||||
SendKick(say.source, KICK_MSG_CON_FAIL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stop_spamming[say.source] != 0 && consoleplayer != say.source && cv_chatspamprotection.value && !(say.flags & (HU_CSAY|HU_SHOUT)))
|
|
||||||
{
|
|
||||||
CONS_Debug(DBG_NETPLAY,"Received SAY cmd too quickly from Player %d (%s), assuming as spam and blocking message.\n", say.source+1, player_names[say.source]);
|
|
||||||
stop_spamming[say.source] = 4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
stop_spamming[say.source] = 4;
|
|
||||||
|
|
||||||
serverplayer_t *stats = SV_GetStatsByPlayerIndex(say.source);
|
|
||||||
int remainingGames = cv_gamestochat.value - stats->finishedrounds;
|
|
||||||
|
|
||||||
if (remainingGames > 0 && !(IsPlayerAdmin(say.source)))
|
|
||||||
{
|
|
||||||
CONS_Debug(DBG_NETPLAY,"Received SAY cmd from Player %d (%s), but they aren't permitted to chat yet.\n", say.source+1, player_names[say.source]);
|
|
||||||
|
|
||||||
char rejectmsg[256];
|
|
||||||
strlcpy(rejectmsg, va("Please play %d more games to use chat.", remainingGames), 256);
|
|
||||||
SendServerNotice(say.source, rejectmsg);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoSayCommand(say.message, say.target, say.flags, say.source);
|
|
||||||
break;
|
break;
|
||||||
case PT_LOGIN:
|
case PT_LOGIN:
|
||||||
if (client)
|
if (client)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue