diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index d0d7086e..a4d72600 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -3,9 +3,11 @@ Core::InstanceContent::InstanceContent( boost::shared_ptr< Core::Data::InstanceContent > pInstanceContent, uint32_t guId, const std::string& internalName, - const std::string& placeName ) + const std::string& placeName, + const uint32_t instanceContentId ) : Zone( pInstanceContent->territoryType, guId, internalName, placeName ), - m_instanceContentRow( pInstanceContent ) + m_instanceContentRow( pInstanceContent ), + m_instanceContentId( instanceContentId ) { } diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.h b/src/servers/sapphire_zone/Zone/InstanceContent.h index f3bc5fc3..1478eb7b 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.h +++ b/src/servers/sapphire_zone/Zone/InstanceContent.h @@ -21,7 +21,8 @@ public: InstanceContent( boost::shared_ptr< Core::Data::InstanceContent > pInstanceContent, uint32_t guId, const std::string& internalName, - const std::string& placeName ); + const std::string& placeName, + const uint32_t instanceContentId ); virtual ~InstanceContent(); boost::shared_ptr< Core::Data::InstanceContent > getInstanceContentRow() const @@ -29,9 +30,15 @@ public: return m_instanceContentRow; } + const uint32_t getInstanceContentId() + { + return m_instanceContentId; + } + private: Event::DirectorPtr m_pDirector; boost::shared_ptr< Core::Data::InstanceContent > m_instanceContentRow; + uint32_t m_instanceContentId; }; diff --git a/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp b/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp index 47300066..015c9122 100644 --- a/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp +++ b/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp @@ -174,7 +174,7 @@ Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t instanceConten g_log.debug( "Starting instance for InstanceContent id: " + std::to_string( instanceContentId ) + " (" + pPlaceName->name + ")" ); - ZonePtr pZone = ZonePtr( new InstanceContent( pInstanceContent, getNextInstanceId(), pTeri->name, pPlaceName->name ) ); + ZonePtr pZone = ZonePtr( new InstanceContent( pInstanceContent, getNextInstanceId(), pTeri->name, pPlaceName->name, instanceContentId ) ); pZone->init(); m_instanceContentToInstanceMap[instanceContentId][pZone->getGuId()] = pZone; @@ -185,12 +185,20 @@ Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t instanceConten bool Core::TerritoryMgr::removeTerritoryInstance( uint32_t instanceId ) { - ZonePtr instance; - if( ( instance = getInstanceZonePtr( instanceId ) ) == nullptr ) + ZonePtr pZone; + if( ( pZone = getInstanceZonePtr( instanceId ) ) == nullptr ) return false; - m_instanceIdToZonePtrMap.erase( instance->getGuId() ); - m_territoryInstanceMap[instance->getTerritoryId()].erase( instance->getGuId() ); + m_instanceIdToZonePtrMap.erase( pZone->getGuId() ); + + if( isInstanceContentTerritory( pZone->getTerritoryId() ) ) + { + auto instance = boost::dynamic_pointer_cast< InstanceContent >( pZone ); + m_instanceContentToInstanceMap[instance->getInstanceContentId()].erase( pZone->getGuId() ); + } + else + m_territoryInstanceMap[pZone->getTerritoryId()].erase( pZone->getGuId() ); + return true; }