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 )
{
auto pNaviMgr = m_pFw->get< World::Manager::NaviMgr >();
auto pNaviProvider = pNaviMgr->getNaviProvider( m_pCurrentZone->getInternalName() );
auto pNaviProvider = pNaviMgr->getNaviProvider( m_pCurrentZone->getBgPath() );
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 )
{
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;
}

View file

@ -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,

View file

@ -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();

View file

@ -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();