From e8ab570502fe96e48978ff32d02e5d5e8ed96b1a Mon Sep 17 00:00:00 2001 From: Mordred Date: Wed, 14 Feb 2018 20:44:35 +0100 Subject: [PATCH] refactoring of session update loop in zone --- src/servers/sapphire_zone/Zone/Zone.cpp | 28 ++++++++++++++----------- src/servers/sapphire_zone/Zone/Zone.h | 2 ++ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index 4f24f064..eee90859 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -481,8 +481,18 @@ bool Core::Zone::update( uint32_t currTime ) { int64_t tickCount = Util::getTimeMs(); + //TODO: this should be moved to a updateWeather call and pulled out of updateSessions bool changedWeather = checkWeather(); + updateSessions( changedWeather ); + updateBnpcs( tickCount ); + onUpdate( currTime ); + + return true; +} + +void Core::Zone::updateSessions( bool changedWeather ) +{ auto it = m_sessionSet.begin(); // update sessions in this zone @@ -493,24 +503,24 @@ bool Core::Zone::update( uint32_t currTime ) if( !pSession ) { - it = m_sessionSet.erase( it ); + it = m_sessionSet.erase(it ); continue; } // this session is not linked to this area anymore, remove it from zone session list - if( ( !pSession->getPlayer()->getCurrentZone() ) - || ( pSession->getPlayer()->getCurrentZone() != shared_from_this() ) ) + if( ( !pSession->getPlayer()->getCurrentZone() ) || + ( pSession->getPlayer()->getCurrentZone() != shared_from_this() ) ) { if( pSession->getPlayer()->getCell() ) - removeActor( pSession->getPlayer() ); + removeActor(pSession->getPlayer() ); - it = m_sessionSet.erase( it ); + it = m_sessionSet.erase(it ); continue; } if( changedWeather ) { - Network::Packets::ZoneChannelPacket< Network::Packets::Server::FFXIVIpcWeatherChange > + Core::Network::Packets::ZoneChannelPacket< Core::Network::Packets::Server::FFXIVIpcWeatherChange > weatherChangePacket( pSession->getPlayer()->getId() ); weatherChangePacket.data().weatherId = m_currentWeather; weatherChangePacket.data().delay = 5.0f; @@ -521,12 +531,6 @@ bool Core::Zone::update( uint32_t currTime ) pSession->update(); ++it; } - - updateBnpcs( tickCount ); - - onUpdate( currTime ); - - return true; } bool Core::Zone::isCellActive( uint32_t x, uint32_t y ) diff --git a/src/servers/sapphire_zone/Zone/Zone.h b/src/servers/sapphire_zone/Zone/Zone.h index dedf6e3a..a9b09ecc 100644 --- a/src/servers/sapphire_zone/Zone/Zone.h +++ b/src/servers/sapphire_zone/Zone/Zone.h @@ -111,6 +111,8 @@ public: bool update( uint32_t currTime ); + void updateSessions( bool changedWeather ); + void registerInstanceObj( Entity::InstanceObjectPtr object ); Entity::InstanceObjectPtr getInstanceObject( uint32_t objId ); void updateInstanceObj( Entity::InstanceObjectPtr object );