Revert netvars after leaving a netgame
This commit is contained in:
parent
dbd79a29a4
commit
b3d8ed7d43
|
@ -1280,6 +1280,7 @@ void CV_RegisterVar(consvar_t *variable)
|
||||||
consvar_vars = variable;
|
consvar_vars = variable;
|
||||||
}
|
}
|
||||||
variable->string = variable->zstring = NULL;
|
variable->string = variable->zstring = NULL;
|
||||||
|
memset(&variable->revert, 0, sizeof variable->revert);
|
||||||
variable->changed = 0; // new variable has not been modified by the user
|
variable->changed = 0; // new variable has not been modified by the user
|
||||||
|
|
||||||
#ifdef PARANOIA
|
#ifdef PARANOIA
|
||||||
|
@ -1676,8 +1677,19 @@ static void CV_LoadVars(UINT8 **p,
|
||||||
serverloading = true;
|
serverloading = true;
|
||||||
|
|
||||||
for (cvar = consvar_vars; cvar; cvar = cvar->next)
|
for (cvar = consvar_vars; cvar; cvar = cvar->next)
|
||||||
|
{
|
||||||
if (cvar->flags & CV_NETVAR)
|
if (cvar->flags & CV_NETVAR)
|
||||||
|
{
|
||||||
|
if (client && cvar->revert.v.string == NULL)
|
||||||
|
{
|
||||||
|
cvar->revert.v.const_munge = cvar->string;
|
||||||
|
cvar->revert.allocated = ( cvar->zstring != NULL );
|
||||||
|
cvar->zstring = NULL;/* don't free this */
|
||||||
|
}
|
||||||
|
|
||||||
Setvalue(cvar, cvar->defaultvalue, true);
|
Setvalue(cvar, cvar->defaultvalue, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
count = READUINT16(*p);
|
count = READUINT16(*p);
|
||||||
while (count--)
|
while (count--)
|
||||||
|
@ -1691,6 +1703,26 @@ static void CV_LoadVars(UINT8 **p,
|
||||||
serverloading = false;
|
serverloading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CV_RevertNetVars(void)
|
||||||
|
{
|
||||||
|
consvar_t * cvar;
|
||||||
|
|
||||||
|
for (cvar = consvar_vars; cvar; cvar = cvar->next)
|
||||||
|
{
|
||||||
|
if (cvar->revert.v.string != NULL)
|
||||||
|
{
|
||||||
|
Setvalue(cvar, cvar->revert.v.string, false);
|
||||||
|
|
||||||
|
if (cvar->revert.allocated)
|
||||||
|
{
|
||||||
|
Z_Free(cvar->revert.v.string);
|
||||||
|
}
|
||||||
|
|
||||||
|
cvar->revert.v.string = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CV_LoadNetVars(UINT8 **p)
|
void CV_LoadNetVars(UINT8 **p)
|
||||||
{
|
{
|
||||||
CV_LoadVars(p, ReadNetVar);
|
CV_LoadVars(p, ReadNetVar);
|
||||||
|
|
|
@ -138,6 +138,16 @@ typedef struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NUL
|
||||||
const char *string; // value in string
|
const char *string; // value in string
|
||||||
char *zstring; // Either NULL or same as string.
|
char *zstring; // Either NULL or same as string.
|
||||||
// If non-NULL, must be Z_Free'd later.
|
// If non-NULL, must be Z_Free'd later.
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
char allocated; // whether to Z_Free
|
||||||
|
union
|
||||||
|
{
|
||||||
|
char * string;
|
||||||
|
const char * const_munge;
|
||||||
|
} v;
|
||||||
|
} revert; // value of netvar before joining netgame
|
||||||
|
|
||||||
UINT16 netid; // used internaly : netid for send end receive
|
UINT16 netid; // used internaly : netid for send end receive
|
||||||
// used only with CV_NETVAR
|
// used only with CV_NETVAR
|
||||||
char changed; // has variable been changed by the user? 0 = no, 1 = yes
|
char changed; // has variable been changed by the user? 0 = no, 1 = yes
|
||||||
|
@ -146,7 +156,7 @@ typedef struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NUL
|
||||||
|
|
||||||
/* name, defaultvalue, flags, PossibleValue, func */
|
/* name, defaultvalue, flags, PossibleValue, func */
|
||||||
#define CVAR_INIT( ... ) \
|
#define CVAR_INIT( ... ) \
|
||||||
{ __VA_ARGS__, 0, NULL, NULL, 0U, (char)0, NULL }
|
{ __VA_ARGS__, 0, NULL, NULL, {0}, 0U, (char)0, NULL }
|
||||||
|
|
||||||
#ifdef OLD22DEMOCOMPAT
|
#ifdef OLD22DEMOCOMPAT
|
||||||
typedef struct old_demo_var old_demo_var_t;
|
typedef struct old_demo_var old_demo_var_t;
|
||||||
|
@ -206,6 +216,9 @@ void CV_SaveVars(UINT8 **p, boolean in_demo);
|
||||||
#define CV_SaveNetVars(p) CV_SaveVars(p, false)
|
#define CV_SaveNetVars(p) CV_SaveVars(p, false)
|
||||||
void CV_LoadNetVars(UINT8 **p);
|
void CV_LoadNetVars(UINT8 **p);
|
||||||
|
|
||||||
|
// then revert after leaving a netgame
|
||||||
|
void CV_RevertNetVars(void);
|
||||||
|
|
||||||
#define CV_SaveDemoVars(p) CV_SaveVars(p, true)
|
#define CV_SaveDemoVars(p) CV_SaveVars(p, true)
|
||||||
void CV_LoadDemoVars(UINT8 **p);
|
void CV_LoadDemoVars(UINT8 **p);
|
||||||
|
|
||||||
|
|
|
@ -3208,6 +3208,7 @@ void CL_Reset(void)
|
||||||
doomcom->numslots = 1;
|
doomcom->numslots = 1;
|
||||||
SV_StopServer();
|
SV_StopServer();
|
||||||
SV_ResetServer();
|
SV_ResetServer();
|
||||||
|
CV_RevertNetVars();
|
||||||
|
|
||||||
// make sure we don't leave any fileneeded gunk over from a failed join
|
// make sure we don't leave any fileneeded gunk over from a failed join
|
||||||
fileneedednum = 0;
|
fileneedednum = 0;
|
||||||
|
|
Loading…
Reference in New Issue