@@ -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+
761780static void NetMsg_Parser_ParseServerInfo (mvd_info_t * mvd )
762781{
763782 char * tmp = NULL ;
0 commit comments