diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 85ce815e0..415934cc7 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4981,8 +4981,18 @@ static void PT_Say(int node) say_pak say = netbuffer->u.say; - if (playernode[say.source] != node) - return; // Spoofed source! + // Check for a spoofed source. + if (say.source == serverplayer) + { + // Servers aren't guaranteed to have a playernode, dedis exist. + if (node != servernode) + return; + } + else + { + if (playernode[say.source] != node) + return; + } if ((cv_mute.value || say.flags & (HU_CSAY|HU_SHOUT)) && say.source != serverplayer && !(IsPlayerAdmin(say.source))) { diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 05be35f39..fa366bd36 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -511,7 +511,7 @@ void DoSayCommand(char *message, SINT8 target, UINT8 flags, UINT8 source) char *msg = &buf[3]; // Enforce shout for the dedicated server. - if (dedicated && !(flags & HU_CSAY)) + if (dedicated && source == serverplayer && !(flags & HU_CSAY)) { flags |= HU_SHOUT; }