Ejemplo n.º 1
0
/*
============
Cvar_Get

If the variable already exists, the value will not be set
The flags will be or'ed in if the variable exists.
============
*/
cvar_t * EXPORT Cvar_Get (const char *var_name, const char *var_value, int flags)
{
	cvar_t	*var;

	Q_assert (var_name != NULL);
	
	if (flags & (CVAR_USERINFO | CVAR_SERVERINFO))
	{
		if (!Cvar_InfoValidate (var_name))
		{
			Com_Printf("invalid info cvar name\n", LOG_GENERAL);
			return NULL;
		}
	}

	var = Cvar_FindVar (var_name);
	if (var)
	{
		var->flags |= flags;
		return var;
	}

	if (!var_value)
		return NULL;

	if (flags & (CVAR_USERINFO | CVAR_SERVERINFO))
	{
		if (!Cvar_InfoValidate (var_value))
		{
			Com_Printf("invalid info cvar value\n", LOG_GENERAL);
			return NULL;
		}
	}

	return Cvar_Add (var_name, var_value, flags);
}
Ejemplo n.º 2
0
Archivo: cvar.c Proyecto: jdolan/quetoo
/**
 * @brief
 */
static cvar_t *Cvar_Set_(const char *name, const char *value, int32_t flags, _Bool force) {

	cvar_t *var = Cvar_Get(name);
	if (!var) { // create it
		return Cvar_Add(name, value, flags, NULL);
	}

	if (var->flags & (CVAR_USER_INFO | CVAR_SERVER_INFO)) {
		if (!Cvar_InfoValidate(value)) {
			Com_Print("Invalid info value for %s: %s\n", var->name, value);
			return var;
		}
	}

	// if not forced, honor flags-based logic
	if (!force) {

		// command line variables retain their value through initialization
		if (var->flags & CVAR_CLI) {
			if (!Com_WasInit(QUETOO_CLIENT) && !Com_WasInit(QUETOO_SERVER)) {
				Com_Debug(DEBUG_CONSOLE, "%s: retaining value \"%s\" from command line.\n", name, var->string);
				return var;
			}
		}

		// developer variables can not be modified when in multiplayer mode
		if (var->flags & CVAR_DEVELOPER) {
			if (!Com_WasInit(QUETOO_SERVER)) {
				Com_Print("%s is only available offline.\n", name);
				return var;
			}
		}

		// write-protected variables can never be modified
		if (var->flags & CVAR_NO_SET) {
			Com_Print("%s is write protected.\n", name);
			return var;
		}

		// while latched variables can only be changed on map load
		if (var->flags & CVAR_LATCH) {
			if (var->latched_string) {
				if (!g_strcmp0(value, var->latched_string)) {
					return var;
				}
				Mem_Free(var->latched_string);
			} else {
				if (!g_strcmp0(value, var->string)) {
					return var;
				}
			}

			if (Com_WasInit(QUETOO_SERVER)) {
				Com_Print("%s will be changed for next game.\n", name);
				var->latched_string = Mem_Link(Mem_TagCopyString(value, MEM_TAG_CVAR), var);
			} else {
				if (var->string) {
					Mem_Free(var->string);
				}
				var->string = Mem_Link(Mem_TagCopyString(value, MEM_TAG_CVAR), var);
				var->value = strtof(var->string, NULL);
				var->integer = (int32_t) strtol(var->string, NULL, 0);
				var->modified = true;
			}
			return var;
		}
	} else {
		if (var->latched_string) {
			Mem_Free(var->latched_string);
			var->latched_string = NULL;
		}
	}

	if (!g_strcmp0(var->string, value)) {
		return var; // not changed
	}

	if (!force) {

		if (var->flags & CVAR_R_MASK) {
			Com_Print("%s will be changed on ^3r_restart^7.\n", name);
		}

		if (var->flags & CVAR_S_MASK) {
			Com_Print("%s will be changed on ^3s_restart^7.\n", name);
		}
	}

	if (var->flags & CVAR_USER_INFO) {
		cvar_user_info_modified = true; // transmit at next opportunity
	}

	Mem_Free(var->string);

	var->string = Mem_Link(Mem_CopyString(value), var);
	var->value = strtof(var->string, NULL);
	var->integer = (int32_t) strtol(var->string, NULL, 0);
	var->modified = true;

	return var;
}
Ejemplo n.º 3
0
/**
 * @brief
 */
static void Init(void) {

	SDL_Init(SDL_INIT_TIMER);

	Mem_Init();

	Cmd_Init();

	Cvar_Init();

	verbose = Cvar_Add("verbose", "0", 0, "Print verbose debugging information");

	dedicated = Cvar_Add("dedicated", "0", CVAR_NO_SET, "Run a dedicated server");
	if (strstr(Sys_ExecutablePath(), "-dedicated")) {
		Cvar_ForceSet("dedicated", "1");
	}

	if (dedicated->value) {
		Cvar_ForceSet("threads", "0");
	}

	game = Cvar_Add("game", DEFAULT_GAME, CVAR_LATCH | CVAR_SERVER_INFO, "The game module name");
	game->modified = g_strcmp0(game->string, DEFAULT_GAME);

	threads = Cvar_Add("threads", "0", CVAR_ARCHIVE, "Specifies the number of threads to create");
	threads->modified = false;

	time_demo = Cvar_Add("time_demo", "0", CVAR_LO_ONLY, "Benchmark and stress test");
	time_scale = Cvar_Add("time_scale", "1.0", CVAR_LO_ONLY, "Controls time lapse");

	const char *s = va("Quetoo %s %s %s", VERSION, __DATE__, BUILD_HOST);
	Cvar_Add("version", s, CVAR_SERVER_INFO | CVAR_NO_SET, NULL);

	quetoo.Debug = Debug;
	quetoo.Error = Error;
	quetoo.Print = Print;
	quetoo.Verbose = Verbose;
	quetoo.Warn = Warn;

	Fs_Init(true);

	Thread_Init(threads->integer);

	Con_Init();

	Cmd_Add("mem_stats", MemStats_f, CMD_SYSTEM, "Print memory stats");
	Cmd_Add("debug", Debug_f, CMD_SYSTEM, "Control debugging output");
	Cmd_Add("quit", Quit_f, CMD_SYSTEM, "Quit Quetoo");

	Netchan_Init();

	Sv_Init();

	Cl_Init();

	Com_Print("Quetoo %s %s %s initialized\n", VERSION, __DATE__, BUILD_HOST);

	// reset debug value since Cbuf may change it from Com's "all" init
	Com_SetDebug("0");

	// execute any +commands specified on the command line
	Cbuf_InsertFromDefer();
	Cbuf_Execute();

	// dedicated server, nothing specified, use Edge
	if (dedicated->value && !Com_WasInit(QUETOO_SERVER)) {
		Cbuf_AddText("map edge\n");
		Cbuf_Execute();
	}
}