bool	CLevel::net_start_client3				()
{
	if(connected_to_server){
		LPCSTR					level_name = NULL;
		if(psNET_direct_connect)
		{
			level_name	= ai().get_alife() ? *name() : Server->level_name( Server->GetConnectOptions() ).c_str();
		}else
			level_name	= ai().get_alife() ? *name() : net_SessionName	();

		// Determine internal level-ID
		int						level_id = pApp->Level_ID(level_name);
		if (level_id<0)	{
			Disconnect			();
			pApp->LoadEnd		();
			connected_to_server = FALSE;
			m_name				= level_name;
			m_connect_server_err = xrServer::ErrNoLevel;
			return				false;
		}
		pApp->Level_Set			(level_id);
		m_name					= level_name;
		// Load level
		R_ASSERT2				(Load(level_id),"Loading failed.");

	}
	return true;
}
Пример #2
0
BOOL CLevel::Load_GameSpecific_Before()
{
	// AI space
	g_pGamePersistent->LoadTitle		("st_loading_ai_objects");
	string_path							fn_game;
	
	if (GamePersistent().GameType() == GAME_SINGLE && !ai().get_alife() && FS.exist(fn_game,"$level$","level.ai"))
		ai().load						(net_SessionName());

	if (!g_dedicated_server && !ai().get_alife() && ai().get_game_graph() && FS.exist(fn_game, "$level$", "level.game")) {
		IReader							*stream = FS.r_open		(fn_game);
		ai().patrol_path_storage_raw	(*stream);
		FS.r_close						(stream);
	}

	return								(TRUE);
}
Пример #3
0
void	CLevel::net_Save				(LPCSTR name)		// Game Save
{
	if (0==Server)		{
		Msg("KERNEL::Can't save game on pure client");
		return;
	}

	// 1. Create stream
	CMemoryWriter			fs;

	// 2. Description
	fs.open_chunk		(fsSLS_Description);
	fs.w_stringZ		(net_SessionName());
	fs.close_chunk		();

	// 3. Server state
	fs.open_chunk		(fsSLS_ServerState);
	Server->SLS_Save	(fs);
	fs.close_chunk		();

	// Save it to file
	fs.save_to			(name);
}