From 591f57cec2476d67de0cc9bf39d3daac66269dd1 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Tue, 7 May 2019 22:10:55 +1000 Subject: [PATCH] fix a crash where !instance bind is used incorrectly, better getter name --- src/world/Actor/Player.cpp | 2 +- src/world/Manager/DebugCommandMgr.cpp | 14 ++++++++++---- src/world/Manager/TerritoryMgr.cpp | 6 +++--- src/world/Manager/TerritoryMgr.h | 2 +- src/world/Network/Handlers/GMCommandHandlers.cpp | 2 +- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 925f7e11..3a96b640 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -430,7 +430,7 @@ bool Sapphire::Entity::Player::setInstance( uint32_t instanceContentId ) m_onEnterEventDone = false; auto pTeriMgr = m_pFw->get< TerritoryMgr >(); - auto instance = pTeriMgr->getInstanceZonePtr( instanceContentId ); + auto instance = pTeriMgr->getTerritoryByGuId( instanceContentId ); if( !instance ) return false; diff --git a/src/world/Manager/DebugCommandMgr.cpp b/src/world/Manager/DebugCommandMgr.cpp index a9687604..f414c1bd 100644 --- a/src/world/Manager/DebugCommandMgr.cpp +++ b/src/world/Manager/DebugCommandMgr.cpp @@ -822,10 +822,16 @@ void Sapphire::World::Manager::DebugCommandMgr::instance( char* data, Entity::Pl uint32_t instanceId; sscanf( params.c_str(), "%d", &instanceId ); - auto instance = pTeriMgr->getInstanceZonePtr( instanceId ); - if( instance ) + auto terri = pTeriMgr->getTerritoryByGuId( instanceId ); + if( terri ) { - auto pInstanceContent = instance->getAsInstanceContent(); + auto pInstanceContent = terri->getAsInstanceContent(); + if( !pInstanceContent ) + { + player.sendDebug( "Instance id#{} is not an InstanceContent territory.", instanceId ); + return; + } + pInstanceContent->bindPlayer( player.getId() ); player.sendDebug( "Now bound to instance with id: " + std::to_string( pInstanceContent->getGuId() ) + @@ -839,7 +845,7 @@ void Sapphire::World::Manager::DebugCommandMgr::instance( char* data, Entity::Pl uint32_t instanceId; sscanf( params.c_str(), "%d", &instanceId ); - auto instance = pTeriMgr->getInstanceZonePtr( instanceId ); + auto instance = pTeriMgr->getTerritoryByGuId( instanceId ); if( !instance ) { player.sendDebug( "Unknown instance with id#{0} ", instanceId ); diff --git a/src/world/Manager/TerritoryMgr.cpp b/src/world/Manager/TerritoryMgr.cpp index a43ce775..6c3d2769 100644 --- a/src/world/Manager/TerritoryMgr.cpp +++ b/src/world/Manager/TerritoryMgr.cpp @@ -436,7 +436,7 @@ Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::findOrCreateHousingInt bool Sapphire::World::Manager::TerritoryMgr::removeTerritoryInstance( uint32_t guId ) { ZonePtr pZone; - if( ( pZone = getInstanceZonePtr( guId ) ) == nullptr ) + if( ( pZone = getTerritoryByGuId( guId ) ) == nullptr ) return false; m_guIdToZonePtrMap.erase( pZone->getGuId() ); @@ -455,7 +455,7 @@ bool Sapphire::World::Manager::TerritoryMgr::removeTerritoryInstance( uint32_t g return true; } -Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::getInstanceZonePtr( uint32_t guId ) const +Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::getTerritoryByGuId( uint32_t guId ) const { auto it = m_guIdToZonePtrMap.find( guId ); if( it == m_guIdToZonePtrMap.end() ) @@ -646,7 +646,7 @@ Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::getLinkedInstance( uin auto it = m_playerIdToInstanceMap.find( playerId ); if( it != m_playerIdToInstanceMap.end() ) { - return getInstanceZonePtr( it->second ); + return getTerritoryByGuId( it->second ); } return nullptr; } diff --git a/src/world/Manager/TerritoryMgr.h b/src/world/Manager/TerritoryMgr.h index b9628756..67b0229b 100644 --- a/src/world/Manager/TerritoryMgr.h +++ b/src/world/Manager/TerritoryMgr.h @@ -116,7 +116,7 @@ namespace Sapphire::World::Manager bool removeTerritoryInstance( uint32_t guId ); /*! returns a ZonePtr to the instance or nullptr if not found */ - ZonePtr getInstanceZonePtr( uint32_t guId ) const; + ZonePtr getTerritoryByGuId( uint32_t guId ) const; /*! returns the cached detail of a territory, nullptr if not found */ Data::TerritoryTypePtr getTerritoryDetail( uint32_t territoryTypeId ) const; diff --git a/src/world/Network/Handlers/GMCommandHandlers.cpp b/src/world/Network/Handlers/GMCommandHandlers.cpp index 4b8fb084..9b806521 100644 --- a/src/world/Network/Handlers/GMCommandHandlers.cpp +++ b/src/world/Network/Handlers/GMCommandHandlers.cpp @@ -465,7 +465,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, case GmCommand::Teri: { auto pTeriMgr = pFw->get< TerritoryMgr >(); - if( auto instance = pTeriMgr->getInstanceZonePtr( param1 ) ) + if( auto instance = pTeriMgr->getTerritoryByGuId( param1 ) ) { player.sendDebug( "Found instance: {0}, id#{1}", instance->getName(), param1 );