From 5ae1a99769ba081b3e211d51e2bcb6fdb8bbc30e Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 6 Mar 2018 14:26:21 +1100 Subject: [PATCH] if player already zoned into instance, don't teleport them back to start on zonein --- .../sapphire_zone/Zone/InstanceContent.cpp | 23 ++++++++++++------- .../sapphire_zone/Zone/InstanceContent.h | 1 + 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index 39f02174..ed4e63c7 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -286,15 +286,22 @@ void Core::InstanceContent::onRegisterEObj( Entity::EventObjectPtr object ) void Core::InstanceContent::onBeforePlayerZoneIn( Core::Entity::Player& player ) { - if( m_pEntranceEObj != nullptr ) + // if a player has already spawned once inside this instance, don't move them if they happen to zone in again + auto it = m_spawnedPlayers.find( player.getId() ); + if( it == m_spawnedPlayers.end() ) { - player.setRot( PI ); - player.setPos( m_pEntranceEObj->getPos() ); - } - else - { - player.setRot( PI ); - player.setPos( { 0.f, 0.f, 0.f } ); + if( m_pEntranceEObj != nullptr ) + { + player.setRot( PI ); + player.setPos( m_pEntranceEObj->getPos() ); + } + else + { + player.setRot( PI ); + player.setPos( { 0.f, 0.f, 0.f } ); + } + + m_spawnedPlayers.insert( player.getId() ); } player.resetObjSpawnIndex( ); diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.h b/src/servers/sapphire_zone/Zone/InstanceContent.h index 8f210f9b..e58e4abd 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.h +++ b/src/servers/sapphire_zone/Zone/InstanceContent.h @@ -68,6 +68,7 @@ private: std::map< std::string, Entity::EventObjectPtr > m_eventObjectMap; std::unordered_map< uint32_t, Entity::EventObjectPtr > m_eventIdToObjectMap; + std::set< uint32_t > m_spawnedPlayers; }; }