const LSL::UnitsyncMap& IBattle::LoadMap() { if (( !m_map_loaded ) && (!m_host_map.name.empty())) { try { ASSERT_EXCEPTION( MapExists(), _T("Map does not exist: ") + TowxString(m_host_map.name) ); m_local_map = LSL::usync().GetMap( m_host_map.name ); bool options_loaded = CustomBattleOptions().loadOptions( LSL::OptionsWrapper::MapOption, m_host_map.name ); ASSERT_EXCEPTION( options_loaded, _T("couldn't load the map options") ); m_map_loaded = true; } catch (...) {} } return m_local_map; }
bool MapSystem::LoadMap(const std::string& path) { if(IsMapLoaded(path)) { LOG_ERROR("Map already loaded: " + path); return false; } if(!MapExists(path)) { LOG_ERROR("Map not found: " + path); return false; } MapEncoder* enc = GetEncoderForMap(GetFileExtension(path)); if(!enc) { LOG_ERROR("Could not load map: Loader not found for extension " << GetFileExtension(path)); return false; } // get data path containing this map std::string abspath = GetSystemInterface()->FindDataFile(path); std::string mapdatapath = dtEntity::GetSystemInterface()->GetDataFilePathFromFilePath(abspath); assert(mapdatapath != ""); LoadedMaps::size_type mapsaveorder = mLoadedMaps.size(); MapBeginLoadMessage msg; msg.SetMapPath(path); msg.SetDataPath(mapdatapath); msg.SetSaveOrder(mapsaveorder); GetEntityManager().EmitMessage(msg); bool success = enc->LoadMapFromFile(path); if(success) { mLoadedMaps.push_back(MapData(path, mapdatapath, static_cast<unsigned int>(mLoadedMaps.size()))); MapLoadedMessage msg1; msg1.SetMapPath(path); msg1.SetDataPath(mapdatapath); msg1.SetSaveOrder(mapsaveorder); GetEntityManager().EmitMessage(msg1); } return success; }
bool IBattle::IsSynced() { LoadMod(); LoadMap(); bool synced = true; if ( !m_host_map.hash.empty() && m_host_map.hash != "0" && m_host_map.hash != m_local_map.hash ) { synced = false; } else if ( !m_host_map.name.empty() && m_local_map.name != m_host_map.name) { synced = false; } else if ( !m_host_mod.hash.empty() && m_host_mod.hash != "0" && m_host_mod.hash != m_local_mod.hash ) { synced = false; } else if ( !m_host_mod.name.empty() && m_local_mod.name != m_host_mod.name) { synced = false; } else if ( !MapExists() || !ModExists() ) { synced = false; } return synced; }