Skip to content

Commit 8b6e9fd

Browse files
author
Daniel Svensson
committed
Add support for multi-line fragstats matches.
1 parent d459949 commit 8b6e9fd

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

src/netmsg_parser.c

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -649,21 +649,8 @@ static void NetMsg_Parser_Parse_svc_sound(mvd_info_t *mvd)
649649
Sys_PrintDebug(5, "svc_sound: %s (x: %g y: %g z: %g)\n", mvd->sndlist[soundnum], loc[0], loc[1], loc[2]);
650650
}
651651

652-
static void NetMsg_Parser_Parse_svc_print(mvd_info_t *mvd)
652+
static void NetMsg_Parser_Parse_svc_print_match(mvd_info_t *mvd, int level, char *str)
653653
{
654-
int level = MSG_ReadByte();
655-
char str[MAX_INFO_STRING];
656-
657-
strlcpy(str, MSG_ReadString(), sizeof(str));
658-
659-
// TODO : Check for frag messages spread over several svc_prints older mods/servers does this crap :(
660-
if (str[strlen(str) - 1] == '\n') {
661-
str[strlen(str) - 1] = '\0';
662-
}
663-
664-
Sys_PrintDebug(5, "svc_print: (%s) RAW: %s\n", print_strings[level], str);
665-
Sys_PrintDebug(1, "svc_print: (%s) %s\n", print_strings[level], Sys_RedToWhite(str));
666-
667654
// Parse frags.
668655
Frags_Parse(mvd, str, level);
669656

@@ -758,6 +745,38 @@ static void NetMsg_Parser_Parse_svc_print(mvd_info_t *mvd)
758745
}
759746
}
760747

748+
// For keeping track of old messages if future matches span multiple lines.
749+
static char svc_print_buf[4096] = {0};
750+
751+
static void NetMsg_Parser_Parse_svc_print(mvd_info_t *mvd)
752+
{
753+
int level = MSG_ReadByte();
754+
char *msg = MSG_ReadString();
755+
char *ptr;
756+
757+
if (strlen(svc_print_buf) + strlen(msg) > sizeof(svc_print_buf)) {
758+
strlcpy(svc_print_buf, msg, sizeof(svc_print_buf));
759+
} else {
760+
strcat(svc_print_buf, msg);
761+
}
762+
763+
while ((ptr = strchr(svc_print_buf, '\n')) || (ptr = strchr(svc_print_buf, '\r')))
764+
{
765+
char n = ptr[1];
766+
ptr[1] = '\0';
767+
768+
Sys_PrintDebug(5, "svc_print: (%s) RAW: %s\n", print_strings[level], svc_print_buf);
769+
Sys_PrintDebug(1, "svc_print: (%s) %s\n", print_strings[level], Sys_RedToWhite(svc_print_buf));
770+
771+
NetMsg_Parser_Parse_svc_print_match(mvd, level, svc_print_buf);
772+
773+
ptr[1] = n;
774+
ptr++;
775+
776+
memmove(svc_print_buf, ptr, strlen(ptr) + 1);
777+
}
778+
}
779+
761780
static void NetMsg_Parser_ParseServerInfo(mvd_info_t *mvd)
762781
{
763782
char *tmp = NULL;

0 commit comments

Comments
 (0)