cvar_hash_t *hash;
// use hash lookup to minimize search time
- hashindex = CRC_Block((const unsigned char *)var_name, strlen(var_name));
+ hashindex = CRC_Block((const unsigned char *)var_name, strlen(var_name)) % CVAR_HASHSIZE;
if(parent) *parent = NULL;
if(prev_alpha) *prev_alpha = NULL;
if(link) *link = &cvars->hashtable[hashindex];
void Cvar_PrintHelp(cvar_t *cvar, const char *name, qboolean full)
{
- Con_Printf("^3%s^7", name);
+ // Aliases are purple, cvars are yellow
if (strcmp(cvar->name, name))
- Con_Printf(" (now ^3%s^7)", cvar->name);
- Con_Printf(" is \"%s\" [\"%s\"] ", ((cvar->flags & CVAR_PRIVATE) ? "********"/*hunter2*/ : cvar->string), cvar->defstring);
-
+ Con_Printf("^6");
+ else
+ Con_Printf("^3");
+ Con_Printf("%s^7 is \"%s\" [\"%s\"]", name, ((cvar->flags & CVAR_PRIVATE) ? "********"/*hunter2*/ : cvar->string), cvar->defstring);
+ if (strcmp(cvar->name, name))
+ Con_Printf(" (also ^3%s^7)", cvar->name);
if (full)
- Con_Printf("%s", cvar->description);
+ Con_Printf(" %s", cvar->description);
Con_Printf("\n");
}
extern cvar_t sv_disablenotify;
static void Cvar_SetQuick_Internal (cvar_t *var, const char *value)
{
- cvar_state_t *cvars = &cvars_all;
qboolean changed;
size_t valuelen;
- char vabuf[1024];
char new_value[MAX_INPUTLINE];
changed = strcmp(var->string, value) != 0;
var->value = atof (var->string);
var->integer = (int) var->value;
if ((var->flags & CVAR_NOTIFY) && changed && sv.active && !sv_disablenotify.integer)
- SV_BroadcastPrintf("\001^3Server cvar \"%s\" changed to \"%s\"\n", var->name, var->string);
+ SV_BroadcastPrintf("\003^3Server cvar \"%s\" changed to \"%s\"\n", var->name, var->string);
#if 0
// TODO: add infostring support to the server?
if ((var->flags & CVAR_SERVERINFO) && changed && sv.active)
}
}
#endif
- if ((var->flags & CVAR_USERINFO) && cls.state != ca_dedicated)
+ if (var->flags & CVAR_USERINFO)
CL_SetInfo(var->name, var->string, true, false, false, false);
- else if ((var->flags & CVAR_NQUSERINFOHACK) && cls.state != ca_dedicated)
- {
- // update the cls.userinfo to have proper values for the
- // silly nq config variables.
- //
- // this is done when these variables are changed rather than at
- // connect time because if the user or code checks the userinfo and it
- // holds weird values it may cause confusion...
- if (!strcmp(var->name, "_cl_color"))
- {
- int top = (var->integer >> 4) & 15, bottom = var->integer & 15;
- CL_SetInfo("topcolor", va(vabuf, sizeof(vabuf), "%i", top), true, false, false, false);
- CL_SetInfo("bottomcolor", va(vabuf, sizeof(vabuf), "%i", bottom), true, false, false, false);
- if (cls.protocol != PROTOCOL_QUAKEWORLD && cls.netcon)
- {
- MSG_WriteByte(&cls.netcon->message, clc_stringcmd);
- MSG_WriteString(&cls.netcon->message, va(vabuf, sizeof(vabuf), "color %i %i", top, bottom));
- }
- }
- 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"))
- CL_SetInfo("playermodel", var->string, true, false, false, false);
- else if (!strcmp(var->name, "_cl_name"))
- CL_SetInfo("name", var->string, true, false, false, false);
- else if (!strcmp(var->name, "rcon_secure"))
- {
- // whenever rcon_secure is changed to 0, clear rcon_password for
- // security reasons (prevents a send-rcon-password-as-plaintext
- // attack based on NQ protocol session takeover and svc_stufftext)
- if(var->integer <= 0)
- Cvar_Set(cvars, "rcon_password", "");
- }
-#ifdef CONFIG_MENU
- else if (!strcmp(var->name, "net_slist_favorites"))
- NetConn_UpdateFavorites();
-#endif
- }
Cvar_UpdateAutoCvar(var);
}
Cvar_SetQuick(var, value);
}
+void Cvar_Set_NoCallback(cvar_t *var, const char *value)
+{
+ void (*callback_save)(char *) = var->callback;
+ var->callback = NULL;
+ Cvar_SetQuick_Internal(var, value);
+ var->callback = callback_save;
+}
+
/*
============
Cvar_SetValue
cvar_state_t *cvars = cmd->cvars;
cvar_t *cvar;
const char *partial;
- size_t len;
int count;
qboolean ispattern;
+ char vabuf[1024];
if (Cmd_Argc(cmd) > 1)
{
partial = Cmd_Argv(cmd, 1);
- len = strlen(partial);
ispattern = (strchr(partial, '*') || strchr(partial, '?'));
+ if(!ispattern)
+ partial = va(vabuf, sizeof(vabuf), "%s*", partial);
}
else
{
- partial = NULL;
- len = 0;
+ partial = va(vabuf, sizeof(vabuf), "*");
ispattern = false;
}
count = 0;
for (cvar = cvars->vars; cvar; cvar = cvar->next)
{
- if (len && (ispattern ? !matchpattern_with_separator(cvar->name, partial, false, "", false) : strncmp (partial,cvar->name,len)))
- continue;
-
- Cvar_PrintHelp(cvar, cvar->name, true);
- count++;
+ if (matchpattern_with_separator(cvar->name, partial, false, "", false))
+ {
+ Cvar_PrintHelp(cvar, cvar->name, true);
+ count++;
+ }
+ for (int i = 0; i < cvar->aliasindex; i++)
+ {
+ if (matchpattern_with_separator(cvar->aliases[i], partial, false, "", false))
+ {
+ Cvar_PrintHelp(cvar, cvar->aliases[i], true);
+ count++;
+ }
+ }
}
- if (len)
+ if (Cmd_Argc(cmd) > 1)
{
if(ispattern)
Con_Printf("%i cvar%s matching \"%s\"\n", count, (count > 1) ? "s" : "", partial);
else
- Con_Printf("%i cvar%s beginning with \"%s\"\n", count, (count > 1) ? "s" : "", partial);
+ Con_Printf("%i cvar%s beginning with \"%s\"\n", count, (count > 1) ? "s" : "", Cmd_Argv(cmd,1));
}
else
Con_Printf("%i cvar(s)\n", count);