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

#48 - Fixed bnpcs not despawning properly, aswell as not updating cell as they go

This commit is contained in:
Mordred 2019-01-30 22:37:58 +01:00
parent 839cca0d25
commit c5882e0ed9
3 changed files with 10 additions and 3 deletions

View file

@ -260,6 +260,7 @@ bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos )
step(); step();
m_pCurrentZone->updateActorPosition( *this );
return false; return false;
} }

View file

@ -240,8 +240,6 @@ bool Sapphire::Entity::Chara::face( const Common::FFXIVARR_POSITION3& p )
float rot = Util::calcAngFrom( getPos().x, getPos().z, p.x, p.z ); float rot = Util::calcAngFrom( getPos().x, getPos().z, p.x, p.z );
float newRot = PI - rot + ( PI / 2 ); float newRot = PI - rot + ( PI / 2 );
m_pCell = nullptr;
setRot( newRot ); setRot( newRot );
return oldRot != newRot; return oldRot != newRot;

View file

@ -408,6 +408,9 @@ void Sapphire::Zone::updateBNpcs( int64_t tickCount )
} }
} }
// Update loop may move actors from cell to cell, breaking iterator validity
std::vector< Entity::BNpcPtr > m_activeBNpc;
for( uint32_t y = 0; y < _sizeY; ++y ) for( uint32_t y = 0; y < _sizeY; ++y )
{ {
for( uint32_t x = 0; x < _sizeX; ++x ) for( uint32_t x = 0; x < _sizeX; ++x )
@ -426,10 +429,15 @@ void Sapphire::Zone::updateBNpcs( int64_t tickCount )
for( const auto& actor : cell->m_actors ) for( const auto& actor : cell->m_actors )
{ {
if( actor->isBattleNpc() ) if( actor->isBattleNpc() )
actor->getAsBNpc()->update( tickCount ); m_activeBNpc.push_back( actor->getAsBNpc() );
} }
} }
} }
// iterate the cached active bnpcs
for( const auto& actor : m_activeBNpc )
actor->update( tickCount );
} }