Con_Printf ("^3%s^7 is \"%s\" [\"%s\"] %s\n", cvar->name, cvar->string, cvar->defstring, cvar->description);
}
+// check if a cvar is held by some progs
+static qboolean Cvar_IsAutoCvar(cvar_t *var)
+{
+ int i;
+ prvm_prog_t *prog;
+ for (i = 0;i < PRVM_PROG_MAX;i++)
+ {
+ prog = &prvm_prog_list[i];
+ if (prog->loaded && var->globaldefindex[i] >= 0)
+ return true;
+ }
+ return false;
+}
+
// we assume that prog is already set to the target progs
static void Cvar_UpdateAutoCvar(cvar_t *var)
{
for (i = 0;i < PRVM_PROG_MAX;i++)
{
prog = &prvm_prog_list[i];
- if (prog->loaded && var->globaldefindex_progid[i] == prog->id)
+ if (prog->loaded && var->globaldefindex[i] >= 0)
{
// MUST BE SYNCED WITH prvm_edict.c PRVM_LoadProgs
switch(prog->globaldefs[var->globaldefindex[i]].type & ~DEF_SAVEGLOBAL)
}
else if (!strcmp(var->name, "_cl_rate"))
CL_SetInfo("rate", va(vabuf, sizeof(vabuf), "%i", var->integer), true, false, false, false);
+ else if (!strcmp(var->name, "_cl_rate_burstsize"))
+ CL_SetInfo("rate_burstsize", va(vabuf, sizeof(vabuf), "%i", var->integer), true, false, false, false);
else if (!strcmp(var->name, "_cl_playerskin"))
CL_SetInfo("playerskin", var->string, true, false, false, false);
else if (!strcmp(var->name, "_cl_playermodel"))
if(var->integer <= 0)
Cvar_Set("rcon_password", "");
}
+#ifdef CONFIG_MENU
else if (!strcmp(var->name, "net_slist_favorites"))
NetConn_UpdateFavorites();
+#endif
}
Cvar_UpdateAutoCvar(var);
cvar_t *current, *next, *cvar;
char *oldstr;
size_t alloclen;
+ int i;
if (developer_extra.integer)
Con_DPrintf("Cvar_RegisterVariable({\"%s\", \"%s\", %i});\n", variable->name, variable->string, variable->flags);
variable->defstring = cvar->defstring;
variable->value = atof (variable->string);
variable->integer = (int) variable->value;
+ // Preserve autocvar status.
+ memcpy(variable->globaldefindex, cvar->globaldefindex, sizeof(variable->globaldefindex));
+ memcpy(variable->globaldefindex_stringno, cvar->globaldefindex_stringno, sizeof(variable->globaldefindex_stringno));
// replace cvar with this one...
variable->next = cvar->next;
if (cvar_vars == cvar)
variable->value = atof (variable->string);
variable->integer = (int) variable->value;
+ // Mark it as not an autocvar.
+ for (i = 0;i < PRVM_PROG_MAX;i++)
+ variable->globaldefindex[i] = -1;
+
// link the variable in
// alphanumerical order
for( current = NULL, next = cvar_vars ; next && strcmp( next->name, variable->name ) < 0 ; current = next, next = next->next )
{
int hashindex;
cvar_t *current, *next, *cvar;
+ int i;
if (developer_extra.integer)
Con_DPrintf("Cvar_Get(\"%s\", \"%s\", %i);\n", name, value, flags);
else
cvar->description = cvar_dummy_description; // actually checked by VM_cvar_type
+ // Mark it as not an autocvar.
+ for (i = 0;i < PRVM_PROG_MAX;i++)
+ cvar->globaldefindex[i] = -1;
+
// link the variable in
// alphanumerical order
for( current = NULL, next = cvar_vars ; next && strcmp( next->name, cvar->name ) < 0 ; current = next, next = next->next )
if (!(c->flags & CVAR_ALLOCATED))
{
Con_DPrintf("Cvar_RestoreInitState: Unable to destroy cvar \"%s\", it was registered after init!\n", c->name);
+ // In this case, at least reset it to the default.
+ if((c->flags & CVAR_NORESETTODEFAULTS) == 0)
+ Cvar_SetQuick(c, c->defstring);
+ cp = &c->next;
+ continue;
+ }
+ if (Cvar_IsAutoCvar(c))
+ {
+ Con_DPrintf("Cvar_RestoreInitState: Unable to destroy cvar \"%s\", it is an autocvar used by running progs!\n", c->name);
+ // In this case, at least reset it to the default.
+ if((c->flags & CVAR_NORESETTODEFAULTS) == 0)
+ Cvar_SetQuick(c, c->defstring);
+ cp = &c->next;
continue;
}
// remove this cvar, it did not exist at init
{
partial = Cmd_Argv (1);
len = strlen(partial);
+ ispattern = (strchr(partial, '*') || strchr(partial, '?'));
}
else
{
partial = NULL;
len = 0;
+ ispattern = false;
}
- ispattern = partial && (strchr(partial, '*') || strchr(partial, '?'));
-
count = 0;
for (cvar = cvar_vars; cvar; cvar = cvar->next)
{