engine: client: Add svc_exec support (#671)

* Add svc_exec support

* engine: client: add gamedir check for svc_exec
This commit is contained in:
Bohdan Shulyar 2021-11-13 23:55:15 +02:00 committed by GitHub
parent a5a66f6c3e
commit 8ab97fbbf0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 2 deletions

View File

@ -86,6 +86,7 @@ const char *svc_strings[svc_lastmsg+1] =
"svc_resourcelocation",
"svc_querycvarvalue",
"svc_querycvarvalue2",
"svc_exec",
};
typedef struct

View File

@ -1925,6 +1925,53 @@ void CL_ParseCvarValue2( sizebuf_t *msg )
}
}
/*
==============
CL_ParseExec
Exec map/class specific configs
==============
*/
void CL_ParseExec( sizebuf_t *msg )
{
qboolean is_class;
int class_idx;
string mapname;
const char *class_cfgs[] = {
"",
"exec scout.cfg\n",
"exec sniper.cfg\n",
"exec soldier.cfg\n",
"exec demoman.cfg\n",
"exec medic.cfg\n",
"exec hwguy.cfg\n",
"exec pyro.cfg\n",
"exec spy.cfg\n",
"exec engineer.cfg\n",
"",
"exec civilian.cfg\n"
};
is_class = MSG_ReadByte( msg );
if ( is_class )
{
class_idx = MSG_ReadByte( msg );
if ( class_idx >= 0 && class_idx <= 11 && !Q_stricmp( GI->gamefolder, "tfc" ) )
Cbuf_AddText( class_cfgs[class_idx] );
}
else if ( !Q_stricmp( GI->gamefolder, "tfc" ) )
{
Cbuf_AddText( "exec mapdefault.cfg\n" );
COM_FileBase( clgame.mapname, mapname );
if ( COM_CheckString( mapname ) )
Cbuf_AddText( va( "exec %s.cfg\n", mapname ) );
}
}
/*
==============
CL_DispatchUserMessage
@ -2334,6 +2381,9 @@ void CL_ParseServerMessage( sizebuf_t *msg, qboolean normal_message )
case svc_querycvarvalue2:
CL_ParseCvarValue2( msg );
break;
case svc_exec:
CL_ParseExec( msg );
break;
default:
CL_ParseUserMessage( msg, cmd );
cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart;

View File

@ -80,7 +80,7 @@ const char *svc_strings[256] =
"svc_unused56",
"svc_querycvarvalue",
"svc_querycvarvalue2",
"svc_unused59",
"svc_exec",
"svc_unused60",
"svc_unused61",
"svc_unused62",

View File

@ -78,7 +78,8 @@ GNU General Public License for more details.
#define svc_resourcelocation 56 // [string]
#define svc_querycvarvalue 57 // [string]
#define svc_querycvarvalue2 58 // [string][int] (context)
#define svc_lastmsg 58 // start user messages at this point
#define svc_exec 59 // [byte][...]
#define svc_lastmsg 59 // start user messages at this point
// client to server
#define clc_bad 0 // immediately drop client when received