コード例 #1
0
ファイル: g_script.c プロジェクト: morsik/war-territory
/*
=============
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);
}
コード例 #2
0
ファイル: g_script.c プロジェクト: ETrun/ETrun
/*
=============
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);
}
コード例 #3
0
ファイル: g_script.c プロジェクト: leakcim1324/ETrun
/*
=============
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 );
}
コード例 #4
0
ファイル: g_api.c プロジェクト: ETrun/ETrun
/**
 * 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;
}