From 18f23dbc64f80b3dad6b0330d87e2a5a0eb8150d Mon Sep 17 00:00:00 2001 From: mordred Date: Fri, 25 Jan 2019 08:45:00 +0100 Subject: [PATCH] Navmeshes should now work again using bgpath --- src/world/Actor/BNpc.cpp | 2 +- src/world/Manager/NaviMgr.cpp | 18 ++++++++++++++---- src/world/Manager/TerritoryMgr.cpp | 7 +------ src/world/Territory/Zone.cpp | 6 ++++++ src/world/Territory/Zone.h | 3 +++ 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/world/Actor/BNpc.cpp b/src/world/Actor/BNpc.cpp index 1a9a3f0d..e5cb110e 100644 --- a/src/world/Actor/BNpc.cpp +++ b/src/world/Actor/BNpc.cpp @@ -205,7 +205,7 @@ bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos ) if( Util::getTimeMs() - m_naviLastUpdate > 500 ) { auto pNaviMgr = m_pFw->get< World::Manager::NaviMgr >(); - auto pNaviProvider = pNaviMgr->getNaviProvider( m_pCurrentZone->getInternalName() ); + auto pNaviProvider = pNaviMgr->getNaviProvider( m_pCurrentZone->getBgPath() ); if( !pNaviProvider ) { diff --git a/src/world/Manager/NaviMgr.cpp b/src/world/Manager/NaviMgr.cpp index c6cc789c..3c56a74a 100644 --- a/src/world/Manager/NaviMgr.cpp +++ b/src/world/Manager/NaviMgr.cpp @@ -10,11 +10,16 @@ Sapphire::World::Manager::NaviMgr::NaviMgr( FrameworkPtr pFw ) : bool Sapphire::World::Manager::NaviMgr::setupTerritory( const std::string& internalName ) { - auto provider = Navi::make_NaviProvider( internalName, m_pFw ); + std::string bg; + auto findPos = internalName.find_last_of( "/" ); + if( findPos != std::string::npos ) + bg = internalName.substr( findPos + 1 ); + + auto provider = Navi::make_NaviProvider( bg, m_pFw ); if( provider->init() ) { - m_naviProviderTerritoryMap.insert( std::make_pair( internalName, provider ) ); + m_naviProviderTerritoryMap.insert( std::make_pair( bg, provider ) ); return true; } @@ -23,8 +28,13 @@ bool Sapphire::World::Manager::NaviMgr::setupTerritory( const std::string& inter Sapphire::World::Navi::NaviProviderPtr Sapphire::World::Manager::NaviMgr::getNaviProvider( const std::string& internalName ) { - if( m_naviProviderTerritoryMap.find( internalName ) != m_naviProviderTerritoryMap.end() ) - return m_naviProviderTerritoryMap[ internalName ]; + std::string bg; + auto findPos = internalName.find_last_of( "/" ); + if( findPos != std::string::npos ) + bg = internalName.substr( findPos + 1 ); + + if( m_naviProviderTerritoryMap.find( bg ) != m_naviProviderTerritoryMap.end() ) + return m_naviProviderTerritoryMap[ bg ]; return nullptr; } diff --git a/src/world/Manager/TerritoryMgr.cpp b/src/world/Manager/TerritoryMgr.cpp index a6c0e452..2c2edb83 100644 --- a/src/world/Manager/TerritoryMgr.cpp +++ b/src/world/Manager/TerritoryMgr.cpp @@ -166,12 +166,7 @@ bool Sapphire::World::Manager::TerritoryMgr::createDefaultTerritories() auto pNaviMgr = framework()->get< Manager::NaviMgr >(); std::string bgPath = territoryInfo->bg; - std::string bg; - auto findPos = bgPath.find_last_of( "/" ); - if( findPos != std::string::npos ) - bg = bgPath.substr( findPos + 1 ); - - bool hasNaviMesh = pNaviMgr->setupTerritory( bg ); + bool hasNaviMesh = pNaviMgr->setupTerritory( bgPath ); Logger::info( "{0}\t{1}\t{2}\t{3:<10}\t{4}\t{5}\t{6}", territoryTypeId, diff --git a/src/world/Territory/Zone.cpp b/src/world/Territory/Zone.cpp index dc5559dd..77c8c30d 100644 --- a/src/world/Territory/Zone.cpp +++ b/src/world/Territory/Zone.cpp @@ -79,6 +79,7 @@ Sapphire::Zone::Zone( uint16_t territoryTypeId, uint32_t guId, m_weatherOverride = Weather::None; m_territoryTypeInfo = pExdData->get< Sapphire::Data::TerritoryType >( territoryTypeId ); + m_bgPath = m_territoryTypeInfo->bg; loadWeatherRates(); loadSpawnGroups(); @@ -352,6 +353,11 @@ const std::string& Sapphire::Zone::getInternalName() const return m_internalName; } +const std::string& Sapphire::Zone::getBgPath() const +{ + return m_bgPath; +} + std::size_t Sapphire::Zone::getPopCount() const { return m_playerMap.size(); diff --git a/src/world/Territory/Zone.h b/src/world/Territory/Zone.h index 657b99c9..ee37ce0a 100644 --- a/src/world/Territory/Zone.h +++ b/src/world/Territory/Zone.h @@ -38,6 +38,7 @@ namespace Sapphire std::string m_placeName; std::string m_internalName; + std::string m_bgPath; std::unordered_map< int32_t, Entity::PlayerPtr > m_playerMap; std::unordered_map< int32_t, Entity::BNpcPtr > m_bNpcMap; @@ -135,6 +136,8 @@ namespace Sapphire const std::string& getInternalName() const; + const std::string& getBgPath() const; + std::size_t getPopCount() const; void loadWeatherRates();