1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-28 15:17:46 +00:00

Navmeshes should now work again using bgpath

This commit is contained in:
mordred 2019-01-25 08:45:00 +01:00
parent e572acc011
commit 18f23dbc64
5 changed files with 25 additions and 11 deletions

View file

@ -205,7 +205,7 @@ bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos )
if( Util::getTimeMs() - m_naviLastUpdate > 500 ) if( Util::getTimeMs() - m_naviLastUpdate > 500 )
{ {
auto pNaviMgr = m_pFw->get< World::Manager::NaviMgr >(); auto pNaviMgr = m_pFw->get< World::Manager::NaviMgr >();
auto pNaviProvider = pNaviMgr->getNaviProvider( m_pCurrentZone->getInternalName() ); auto pNaviProvider = pNaviMgr->getNaviProvider( m_pCurrentZone->getBgPath() );
if( !pNaviProvider ) if( !pNaviProvider )
{ {

View file

@ -10,11 +10,16 @@ Sapphire::World::Manager::NaviMgr::NaviMgr( FrameworkPtr pFw ) :
bool Sapphire::World::Manager::NaviMgr::setupTerritory( const std::string& internalName ) 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() ) if( provider->init() )
{ {
m_naviProviderTerritoryMap.insert( std::make_pair( internalName, provider ) ); m_naviProviderTerritoryMap.insert( std::make_pair( bg, provider ) );
return true; 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 ) Sapphire::World::Navi::NaviProviderPtr Sapphire::World::Manager::NaviMgr::getNaviProvider( const std::string& internalName )
{ {
if( m_naviProviderTerritoryMap.find( internalName ) != m_naviProviderTerritoryMap.end() ) std::string bg;
return m_naviProviderTerritoryMap[ internalName ]; 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; return nullptr;
} }

View file

@ -166,12 +166,7 @@ bool Sapphire::World::Manager::TerritoryMgr::createDefaultTerritories()
auto pNaviMgr = framework()->get< Manager::NaviMgr >(); auto pNaviMgr = framework()->get< Manager::NaviMgr >();
std::string bgPath = territoryInfo->bg; std::string bgPath = territoryInfo->bg;
std::string bg; bool hasNaviMesh = pNaviMgr->setupTerritory( bgPath );
auto findPos = bgPath.find_last_of( "/" );
if( findPos != std::string::npos )
bg = bgPath.substr( findPos + 1 );
bool hasNaviMesh = pNaviMgr->setupTerritory( bg );
Logger::info( "{0}\t{1}\t{2}\t{3:<10}\t{4}\t{5}\t{6}", Logger::info( "{0}\t{1}\t{2}\t{3:<10}\t{4}\t{5}\t{6}",
territoryTypeId, territoryTypeId,

View file

@ -79,6 +79,7 @@ Sapphire::Zone::Zone( uint16_t territoryTypeId, uint32_t guId,
m_weatherOverride = Weather::None; m_weatherOverride = Weather::None;
m_territoryTypeInfo = pExdData->get< Sapphire::Data::TerritoryType >( territoryTypeId ); m_territoryTypeInfo = pExdData->get< Sapphire::Data::TerritoryType >( territoryTypeId );
m_bgPath = m_territoryTypeInfo->bg;
loadWeatherRates(); loadWeatherRates();
loadSpawnGroups(); loadSpawnGroups();
@ -352,6 +353,11 @@ const std::string& Sapphire::Zone::getInternalName() const
return m_internalName; return m_internalName;
} }
const std::string& Sapphire::Zone::getBgPath() const
{
return m_bgPath;
}
std::size_t Sapphire::Zone::getPopCount() const std::size_t Sapphire::Zone::getPopCount() const
{ {
return m_playerMap.size(); return m_playerMap.size();

View file

@ -38,6 +38,7 @@ namespace Sapphire
std::string m_placeName; std::string m_placeName;
std::string m_internalName; std::string m_internalName;
std::string m_bgPath;
std::unordered_map< int32_t, Entity::PlayerPtr > m_playerMap; std::unordered_map< int32_t, Entity::PlayerPtr > m_playerMap;
std::unordered_map< int32_t, Entity::BNpcPtr > m_bNpcMap; std::unordered_map< int32_t, Entity::BNpcPtr > m_bNpcMap;
@ -135,6 +136,8 @@ namespace Sapphire
const std::string& getInternalName() const; const std::string& getInternalName() const;
const std::string& getBgPath() const;
std::size_t getPopCount() const; std::size_t getPopCount() const;
void loadWeatherRates(); void loadWeatherRates();