/* ============= G_Script_ScriptLoad Loads the script for the current level into the buffer ============= */ void G_Script_ScriptLoad(void) { char filename[MAX_QPATH]; vmCvar_t mapname; fileHandle_t f; int len; trap_Cvar_Register(&g_scriptDebug, "g_scriptDebug", "0", 0); level.scriptEntity = NULL; trap_Cvar_VariableStringBuffer("g_scriptName", filename, sizeof(filename)); if (strlen(filename) > 0) { trap_Cvar_Register(&mapname, "g_scriptName", "", CVAR_CHEAT); } else { trap_Cvar_Register(&mapname, "mapname", "", CVAR_SERVERINFO | CVAR_ROM); } Q_strncpyz(filename, "maps/", sizeof(filename)); Q_strcat(filename, sizeof(filename), mapname.string); if (g_gametype.integer == GT_WOLF_LMS) { Q_strcat(filename, sizeof(filename), "_lms"); } Q_strcat(filename, sizeof(filename), ".script"); len = trap_FS_FOpenFile(filename, &f, FS_READ); // make sure we clear out the temporary scriptname trap_Cvar_Set("g_scriptName", ""); if (len < 0) { return; } // END Mad Doc - TDF // Arnout: make sure we terminate the script with a '\0' to prevent parser from choking //level.scriptEntity = G_Alloc( len ); //trap_FS_Read( level.scriptEntity, len, f ); level.scriptEntity = G_Alloc(len + 1); trap_FS_Read(level.scriptEntity, len, f); *(level.scriptEntity + len) = '\0'; // Gordon: and make sure ppl haven't put stuff with uppercase in the string table.. G_Script_EventStringInit(); // Gordon: discard all the comments NOW, so we dont deal with them inside scripts // Gordon: disabling for a sec, wanna check if i can get proper line numbers from error output // COM_Compress( level.scriptEntity ); trap_FS_FCloseFile(f); }
/* ============= G_Script_ScriptLoad Loads the script for the current level into the buffer ============= */ void G_Script_ScriptLoad(void) { char filename[MAX_QPATH]; vmCvar_t mapname; fileHandle_t f = 0; int len = 0; qboolean found = qfalse; trap_Cvar_Register(&g_scriptDebug, "g_scriptDebug", "0", 0); trap_Cvar_VariableStringBuffer("g_scriptName", filename, sizeof (filename)); if (filename[0] != '\0') { trap_Cvar_Register(&mapname, "g_scriptName", "", CVAR_CHEAT); } else { trap_Cvar_Register(&mapname, "mapname", "", CVAR_SERVERINFO | CVAR_ROM); } // Nico, if API is used and if a mapscript was sent for this map don't load any local script if (g_useAPI.integer && level.useAPImapscript) { G_Printf("%s: using custom mapscript from API!\n", GAME_VERSION); return; } // Nico, API is not in use, check if this map a special mapscript in local mapscript directory if (!g_useAPI.integer && g_mapScriptDirectory.string[0]) { G_Printf("%s: checking for local custom mapscript...\n", GAME_VERSION); Q_strncpyz(filename, g_mapScriptDirectory.string, sizeof (filename)); Q_strcat(filename, sizeof (filename), "/"); Q_strcat(filename, sizeof (filename), mapname.string); Q_strcat(filename, sizeof (filename), ".script"); len = trap_FS_FOpenFile(filename, &f, FS_READ); if (len > 0) { found = qtrue; G_Printf("%s: found local file '%s'!\n", GAME_VERSION, filename); } else { G_Printf("%s: no local file found!\n", GAME_VERSION); } } // Nico, should we use default map script or custom one? if (!found) { Q_strncpyz(filename, "maps/", sizeof (filename)); Q_strcat(filename, sizeof (filename), mapname.string); Q_strcat(filename, sizeof (filename), ".script"); len = trap_FS_FOpenFile(filename, &f, FS_READ); G_Printf("%s: using default mapscript!\n", GAME_VERSION); } // make sure we clear out the temporary scriptname trap_Cvar_Set("g_scriptName", ""); if (len < 0) { return; } // END Mad Doc - TDF // Arnout: make sure we terminate the script with a '\0' to prevent parser from choking level.scriptEntity = NULL; level.scriptEntity = G_Alloc(len + 1); trap_FS_Read(level.scriptEntity, len, f); *(level.scriptEntity + len) = '\0'; // Gordon: and make sure ppl haven't put stuff with uppercase in the string table.. G_Script_EventStringInit(); trap_FS_FCloseFile(f); }
/* ============= G_Script_ScriptLoad Loads the script for the current level into the buffer Dini mapscripts support ============= */ void G_Script_ScriptLoad( void ) { char filename[MAX_QPATH]; vmCvar_t mapname; fileHandle_t f = 0; int len = 0; qboolean found = qfalse; trap_Cvar_Register( &g_scriptDebug, "g_scriptDebug", "0", 0 ); level.scriptEntity = NULL; trap_Cvar_VariableStringBuffer( "g_scriptName", filename, sizeof(filename) ); if (strlen( filename ) > 0) { trap_Cvar_Register( &mapname, "g_scriptName", "", CVAR_CHEAT ); } else { trap_Cvar_Register( &mapname, "mapname", "", CVAR_SERVERINFO | CVAR_ROM ); } // Dini, mapscript support if(tjg_mapScriptDirectory.string[0]) { G_Printf("%s: checking for custom mapscript...\n", GAMEVERSION); Q_strncpyz(filename, tjg_mapScriptDirectory.string, sizeof(filename)); Q_strcat(filename, sizeof(filename), "/"); Q_strcat( filename, sizeof(filename), mapname.string ); Q_strcat( filename, sizeof(filename), ".script" ); len = trap_FS_FOpenFile( filename, &f, FS_READ ); if(len > 0) { found = qtrue; G_Printf("%s: loaded custom mapscript!\n", GAMEVERSION); } } if(!found) { // Normal behaviour? Q_strncpyz( filename, "maps/", sizeof(filename) ); Q_strcat( filename, sizeof(filename), mapname.string ); Q_strcat( filename, sizeof(filename), ".script" ); len = trap_FS_FOpenFile( filename, &f, FS_READ ); G_Printf("%s: no custom mapscript, using default!\n", GAMEVERSION); } // make sure we clear out the temporary scriptname trap_Cvar_Set( "g_scriptName", "" ); if( len < 0 ) { return; } // END Mad Doc - TDF // Arnout: make sure we terminate the script with a '\0' to prevent parser from choking //level.scriptEntity = G_Alloc( len ); //trap_FS_Read( level.scriptEntity, len, f ); level.scriptEntity = G_Alloc( len + 1 ); trap_FS_Read( level.scriptEntity, len, f ); *(level.scriptEntity + len) = '\0'; // Gordon: and make sure ppl haven't put stuff with uppercase in the string table.. G_Script_EventStringInit(); // Gordon: discard all the comments NOW, so we dont deal with them inside scripts // Gordon: disabling for a sec, wanna check if i can get proper line numbers from error output // COM_Compress( level.scriptEntity ); trap_FS_FCloseFile( f ); }
/** * Get config handler */ static void *getConfigHandler(void *data) { int code; struct query_s *queryStruct = (struct query_s *)data; int config_strictSaveLoad; int config_physics; int config_disableDrowning; int config_holdDoorsOpen; int config_enableMapEntities; int config_script_size; code = API_query(queryStruct->cmd, queryStruct->result, queryStruct->query, sizeof (queryStruct->query)); if (code != 0) { G_Error("%s: error #1 while getting config from API!\n", GAME_VERSION); } code = sscanf(queryStruct->result, "%10d %10d %10d %10d %10d %10d %*s", // Nico, last field is ignored for the moment &config_strictSaveLoad, &config_physics, &config_disableDrowning, &config_holdDoorsOpen, &config_enableMapEntities, &config_script_size); if (code != 6) { G_Error("%s: error #2 while getting config from API!\n", GAME_VERSION); } if (config_script_size != 0) { int len; level.useAPImapscript = qtrue; level.scriptEntity = G_Alloc(config_script_size + 1); code = sscanf(queryStruct->result, "%*d %*d %*d %*d %*d %*d %512000c", level.scriptEntity); if (code != 1) { G_Error("%s: error #3 while getting config from API!\n", GAME_VERSION); } *(level.scriptEntity + config_script_size) = '\0'; // Nico, check script len len = strlen(level.scriptEntity); if (len != config_script_size) { G_Error("%s: error #4 while getting config from API (%d != %d)!\n", GAME_VERSION, config_script_size, len); } // Nico, do the same as G_Script_ScriptLoad do when loading from a local file trap_Cvar_Set("g_scriptName", ""); G_Script_EventStringInit(); } // Nico, check cvars from API if (config_strictSaveLoad != g_strictSaveLoad.integer) { G_Printf("%s: updating g_strictSaveLoad from %d to %d\n", GAME_VERSION, g_strictSaveLoad.integer, config_strictSaveLoad); trap_Cvar_Set("g_strictSaveLoad", va("%d", config_strictSaveLoad)); } if (config_physics != physics.integer) { G_DPrintf("%s: updating physics from %d to %d\n", GAME_VERSION, physics.integer, config_physics); trap_Cvar_Set("physics", va("%d", config_physics)); } if (config_disableDrowning != g_disableDrowning.integer) { G_DPrintf("%s: updating g_disableDrowning from %d to %d\n", GAME_VERSION, g_disableDrowning.integer, config_disableDrowning); // Nico, update the cvar g_disableDrowning.integer = config_disableDrowning; g_disableDrowning.modificationCount++; trap_Cvar_Set("g_disableDrowning", va("%d", config_disableDrowning)); } if (config_holdDoorsOpen != g_holdDoorsOpen.integer) { G_DPrintf("%s: updating g_holdDoorsOpen from %d to %d\n", GAME_VERSION, g_holdDoorsOpen.integer, config_holdDoorsOpen); // Nico, update this way to make sure the cvar value is updated earlier enough when map elements get spawned g_holdDoorsOpen.integer = config_holdDoorsOpen; g_holdDoorsOpen.modificationCount++; trap_Cvar_Set("g_holdDoorsOpen", va("%d", config_holdDoorsOpen)); } if (config_enableMapEntities != g_enableMapEntities.integer) { G_Printf("%s: updating g_enableMapEntities from %d to %d\n", GAME_VERSION, g_enableMapEntities.integer, config_enableMapEntities); // Nico, update this way to make sure the cvar value is updated earlier enough when map elements get spawned g_enableMapEntities.integer = config_enableMapEntities; g_enableMapEntities.modificationCount++; trap_Cvar_Set("g_enableMapEntities", va("%d", config_enableMapEntities)); } free(queryStruct->result); free(queryStruct); return NULL; }