// Force settings to predefined state. void G_configSet(int dwMode, qboolean doComp) { unsigned int dwGameType; const modeCvarTable_t *pModeCvars; if(dwMode < 0 || dwMode >= GT_MAX_GAME_TYPE) return; dwGameType = 1 << dwMode; G_wipeCvars(); for(pModeCvars=((doComp)?aCompSettings:aPubSettings); pModeCvars->cvar_name; pModeCvars++) { if(pModeCvars->modes & dwGameType) { trap_Cvar_Set(pModeCvars->cvar_name, pModeCvars->cvar_value); G_Printf("set %s %s\n", pModeCvars->cvar_name, pModeCvars->cvar_value); } } G_UpdateCvars(); G_Printf(">> %s settings loaded!\n", (doComp)?"Competition":"Public"); if(doComp && g_gamestate.integer == GS_WARMUP_COUNTDOWN) { level.lastRestartTime = level.time; trap_SendConsoleCommand(EXEC_APPEND, va( "map_restart 0 %i\n", GS_WARMUP)); } else { trap_SendConsoleCommand( EXEC_APPEND, va( "map_restart 0 %i\n", GS_WARMUP ) ); } }
void G_configLoadAndSet(const char *name) { pc_token_t token; int handle; config_t *config; qboolean parseOK = qtrue; handle = trap_PC_LoadSource(va("configs/%s.config", name)); if (!handle) { Com_Printf(S_COLOR_RED "ERROR: File not found: %s\n", name); return; } memset(&level.config, 0, sizeof(config_t)); G_wipeCvars(); config = &level.config; config->publicConfig = qfalse; while (1) { if (!trap_PC_ReadToken(handle, &token)) { break; } if (!Q_stricmp(token.string, "configname")) { if (!PC_String_ParseNoAlloc(handle, config->name, sizeof(config->name))) { G_Printf("expected config name\n"); parseOK = qfalse; break; } G_Printf("Config name is: %s\n", config->name); } else if (!Q_stricmp(token.string, "version")) { if (!PC_String_ParseNoAlloc(handle, config->version, sizeof(config->name))) { G_Printf("expected config version\n"); parseOK = qfalse; break; } } else if (!Q_stricmp(token.string, "init")) { if (!G_ParseSettings(handle, qtrue, config)) { G_Printf("Reading settings failed\n"); parseOK = qfalse; break; } } else if (!Q_stricmp(token.string, "map")) { if (!G_ParseMapSettings(handle, config)) { G_Printf("Reading map settings failed\n"); parseOK = qfalse; break; } } else if (!Q_stricmp(token.string, "signature")) { if (!PC_String_ParseNoAlloc(handle, config->signature, sizeof(config->signature))) { G_Printf("expected config signature\n"); parseOK = qfalse; break; } } else if (!Q_stricmp(token.string, "public")) { config->publicConfig = qtrue; } else { G_Printf("unknown token %s\n", token.string); parseOK = qfalse; break; } } trap_PC_FreeSource(handle); if (parseOK) { trap_SetConfigstring(CS_CONFIGNAME, config->name); if (level.config.version[0] && level.config.name[0]) { trap_SendServerCommand(-1, va("cp \"^7Config '%s^7' version '%s'^7 loaded\"", level.config.name, level.config.version)); } else if (level.config.name[0]) { trap_SendServerCommand(-1, va("cp \"^7Config '%s^7' loaded\"", level.config.name)); } } else { trap_SetConfigstring(CS_CONFIGNAME, ""); trap_SendServerCommand(-1, va("cp \"^7Config '%s^7' ^1FAILED ^7to load\"", name)); } G_UpdateCvars(); }