mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-02-02 18:14:26 +00:00
Implement ggm_save/ggm_load
This commit is contained in:
parent
ec0a0a3699
commit
3c9b8b9d4b
@ -41,6 +41,8 @@ cvar_t mp_maxdecals = { "mp_maxdecals", "-1", FCVAR_SERVER };
|
||||
cvar_t mp_enttools_checkmodels = { "mp_enttools_checkmodels", "0", FCVAR_SERVER };
|
||||
cvar_t mp_errormdl = { "mp_errormdl", "0", FCVAR_SERVER };
|
||||
cvar_t mp_errormdlpath = { "mp_errormdlpath", "models/error.mdl", FCVAR_SERVER };
|
||||
|
||||
cvar_t *zombietime = NULL;
|
||||
static char gamedir[MAX_PATH];
|
||||
void Ent_RunGC_f( void );
|
||||
|
||||
@ -647,6 +649,77 @@ void GGM_LoadPlayers_f( void )
|
||||
ALERT( at_error, "Failed to load player states from %s\n", CMD_ARGV( 1 ) );
|
||||
}
|
||||
|
||||
// hack to make save work when client 0 not connected
|
||||
void GGM_Save( const char *savename )
|
||||
{
|
||||
edict_t *client0 = INDEXENT( 1 );
|
||||
edict_t *bot = NULL;
|
||||
char cmd[33] = "";
|
||||
float health = client0->v.health;
|
||||
int deadflag = client0->v.deadflag;
|
||||
float zombietime_old;
|
||||
SERVER_EXECUTE();
|
||||
|
||||
// save even with dead player
|
||||
if( health <= 0 )
|
||||
client0->v.health = 1;
|
||||
|
||||
client0->v.deadflag = 0;
|
||||
|
||||
if( zombietime )
|
||||
zombietime_old = zombietime->value;
|
||||
|
||||
// hack to make save work when client 0 not connected
|
||||
if( !(g_engfuncs.pfnGetInfoKeyBuffer( client0 )[0]) || !(g_engfuncs.pfnGetPhysicsInfoString( client0 )[0]) || !client0->v.netname )
|
||||
{
|
||||
snprintf( cmd, 32, "kick #%d\n", GETPLAYERUSERID( client0 ) );
|
||||
SERVER_COMMAND(cmd);
|
||||
SERVER_EXECUTE();
|
||||
bot = g_engfuncs.pfnCreateFakeClient("_save_bot");
|
||||
if( bot != client0 )
|
||||
ALERT( at_warning, "Bot is not player 1\n" );
|
||||
bot->v.health = 1;
|
||||
bot->v.deadflag = 0;
|
||||
}
|
||||
|
||||
snprintf( cmd, 32, "save %s\n", savename);
|
||||
SERVER_COMMAND(cmd);
|
||||
if( bot )
|
||||
SERVER_COMMAND( "kick _save_bot\n");
|
||||
SERVER_EXECUTE();
|
||||
client0->v.deadflag = deadflag;
|
||||
client0->v.health = health;
|
||||
if( zombietime )
|
||||
zombietime->value = zombietime_old;
|
||||
snprintf( cmd, 32, "%s/save/%s.players", gamedir, savename );
|
||||
GGM_WritePlayers( cmd );
|
||||
}
|
||||
|
||||
void GGM_Save_f( void )
|
||||
{
|
||||
char savename[33] = "";
|
||||
strncpy( savename, CMD_ARGV(1), 32);
|
||||
GGM_Save( savename );
|
||||
}
|
||||
|
||||
void GGM_Load( const char *savename )
|
||||
{
|
||||
char cmd[33] = "";
|
||||
|
||||
snprintf( cmd, 32, "load %s\n", savename);
|
||||
SERVER_COMMAND( cmd );
|
||||
SERVER_EXECUTE();
|
||||
snprintf( cmd, 32, "%s/save/%s.players", gamedir, savename );
|
||||
GGM_ReadPlayers( cmd );
|
||||
}
|
||||
|
||||
void GGM_Load_f( void )
|
||||
{
|
||||
char savename[33] = "";
|
||||
strncpy( savename, CMD_ARGV(1), 32);
|
||||
GGM_Load( savename );
|
||||
}
|
||||
|
||||
struct GGMPlayerState *GGM_GetRegistration( const char *name )
|
||||
{
|
||||
struct GGMPlayerState *pState = GGM_FindState( registered_list, name );
|
||||
@ -2017,6 +2090,9 @@ void GGM_RegisterCVars( void )
|
||||
g_engfuncs.pfnAddServerCommand( "ent_chown", Ent_Chown_f );
|
||||
g_engfuncs.pfnAddServerCommand( "saveplayers", GGM_SavePlayers_f );
|
||||
g_engfuncs.pfnAddServerCommand( "loadplayers", GGM_LoadPlayers_f );
|
||||
g_engfuncs.pfnAddServerCommand( "ggm_save", GGM_Save_f );
|
||||
g_engfuncs.pfnAddServerCommand( "ggm_load", GGM_Load_f );
|
||||
zombietime = CVAR_GET_POINTER("zombietime");
|
||||
|
||||
|
||||
GET_GAME_DIR(gamedir);
|
||||
|
Loading…
x
Reference in New Issue
Block a user