From c92ee8b7cd70a7bf033e4cd2aef2e1ae42e8e08c Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 17 Mar 2018 11:36:56 +0100 Subject: [PATCH] Fixed an issue where players were removed from the wrong zone --- .../sapphire_zone/Zone/InstanceContent.cpp | 8 ++------ src/servers/sapphire_zone/Zone/Zone.cpp | 20 ++++++++++++------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index 6e66f22c..69cd5c20 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -107,17 +107,13 @@ void Core::InstanceContent::onUpdate( uint32_t currTime ) if( m_boundPlayerIds.size() == 0 ) return; - for( const auto playerId : m_boundPlayerIds ) + for( auto playerId : m_boundPlayerIds ) { auto it = m_playerMap.find( playerId ); if( it == m_playerMap.end() ) return; - } - - for( const auto& playerIt : m_playerMap ) - { - const auto& player = playerIt.second; + auto player = it->second; if( !player->isLoadingComplete() || !player->isDirectorInitialized() || !player->isOnEnterEventDone() || diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index 85c8db59..ad76612c 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -226,19 +226,21 @@ void Core::Zone::pushActor( Entity::ActorPtr pActor ) void Core::Zone::removeActor( Entity::ActorPtr pActor ) { - auto pCell = pActor->getCellPtr(); - if( pCell ) - { - pCell->removeActor( pActor ); - pCell = nullptr; - } + /* TODO: have to wait and see if removal of this actually breaks anything + this however is potentially removing a player from a zone he does not belong to */ + //auto pCell = pActor->getCellPtr(); + //if( pCell ) + //{ + // pCell->removeActor( pActor ); + // pCell = nullptr; + //} if( pActor->isPlayer() ) { // If it's a player and he's inside boundaries - update his nearby cells if( pActor->getPos().x <= _maxX && pActor->getPos().x >= _minX && - pActor->getPos().z <= _maxY && pActor->getPos().z >= _minY ) + pActor->getPos().z <= _maxY && pActor->getPos().z >= _minY ) { uint32_t x = getPosX( pActor->getPos().x ); uint32_t y = getPosY( pActor->getPos().z ); @@ -539,7 +541,11 @@ void Core::Zone::updateActorPosition( Entity::Actor &actor ) { if( pOldCell ) + { + auto pLog = g_fw.get< Logger >(); + pLog->debug( std::string( __FUNCTION__ ) + "removeActor" ); pOldCell->removeActor( actor.shared_from_this() ); + } pCell->addActor( actor.shared_from_this() ); actor.setCell( pCell );