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; }
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); }
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); }