1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-28 23:27:45 +00:00

Merge pull request #559 from NotAdam/develop

fix a crash where !instance bind is used incorrectly, better getter name
This commit is contained in:
Mordred 2019-05-07 14:58:41 +02:00 committed by GitHub
commit 1a5ab3ec10
5 changed files with 19 additions and 12 deletions

View file

@ -430,7 +430,7 @@ bool Sapphire::Entity::Player::setInstance( uint32_t instanceContentId )
m_onEnterEventDone = false; m_onEnterEventDone = false;
auto pTeriMgr = m_pFw->get< TerritoryMgr >(); auto pTeriMgr = m_pFw->get< TerritoryMgr >();
auto instance = pTeriMgr->getInstanceZonePtr( instanceContentId ); auto instance = pTeriMgr->getTerritoryByGuId( instanceContentId );
if( !instance ) if( !instance )
return false; return false;

View file

@ -822,10 +822,16 @@ void Sapphire::World::Manager::DebugCommandMgr::instance( char* data, Entity::Pl
uint32_t instanceId; uint32_t instanceId;
sscanf( params.c_str(), "%d", &instanceId ); sscanf( params.c_str(), "%d", &instanceId );
auto instance = pTeriMgr->getInstanceZonePtr( instanceId ); auto terri = pTeriMgr->getTerritoryByGuId( instanceId );
if( instance ) 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() ); pInstanceContent->bindPlayer( player.getId() );
player.sendDebug( player.sendDebug(
"Now bound to instance with id: " + std::to_string( pInstanceContent->getGuId() ) + "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; uint32_t instanceId;
sscanf( params.c_str(), "%d", &instanceId ); sscanf( params.c_str(), "%d", &instanceId );
auto instance = pTeriMgr->getInstanceZonePtr( instanceId ); auto instance = pTeriMgr->getTerritoryByGuId( instanceId );
if( !instance ) if( !instance )
{ {
player.sendDebug( "Unknown instance with id#{0} ", instanceId ); player.sendDebug( "Unknown instance with id#{0} ", instanceId );

View file

@ -261,8 +261,9 @@ Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::createTerritoryInstanc
if( !isValidTerritory( territoryTypeId ) ) if( !isValidTerritory( territoryTypeId ) )
return nullptr; return nullptr;
if( isInstanceContentTerritory( territoryTypeId ) ) // nb: disabled for now because there's not a real reason to have this constraint, makes testing some stuff easier too
return nullptr; // if( isInstanceContentTerritory( territoryTypeId ) )
// return nullptr;
auto pExdData = framework()->get< Data::ExdDataGenerated >(); auto pExdData = framework()->get< Data::ExdDataGenerated >();
auto pTeri = getTerritoryDetail( territoryTypeId ); auto pTeri = getTerritoryDetail( territoryTypeId );
@ -436,7 +437,7 @@ Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::findOrCreateHousingInt
bool Sapphire::World::Manager::TerritoryMgr::removeTerritoryInstance( uint32_t guId ) bool Sapphire::World::Manager::TerritoryMgr::removeTerritoryInstance( uint32_t guId )
{ {
ZonePtr pZone; ZonePtr pZone;
if( ( pZone = getInstanceZonePtr( guId ) ) == nullptr ) if( ( pZone = getTerritoryByGuId( guId ) ) == nullptr )
return false; return false;
m_guIdToZonePtrMap.erase( pZone->getGuId() ); m_guIdToZonePtrMap.erase( pZone->getGuId() );
@ -455,7 +456,7 @@ bool Sapphire::World::Manager::TerritoryMgr::removeTerritoryInstance( uint32_t g
return true; 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 ); auto it = m_guIdToZonePtrMap.find( guId );
if( it == m_guIdToZonePtrMap.end() ) if( it == m_guIdToZonePtrMap.end() )
@ -646,7 +647,7 @@ Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::getLinkedInstance( uin
auto it = m_playerIdToInstanceMap.find( playerId ); auto it = m_playerIdToInstanceMap.find( playerId );
if( it != m_playerIdToInstanceMap.end() ) if( it != m_playerIdToInstanceMap.end() )
{ {
return getInstanceZonePtr( it->second ); return getTerritoryByGuId( it->second );
} }
return nullptr; return nullptr;
} }

View file

@ -116,7 +116,7 @@ namespace Sapphire::World::Manager
bool removeTerritoryInstance( uint32_t guId ); bool removeTerritoryInstance( uint32_t guId );
/*! returns a ZonePtr to the instance or nullptr if not found */ /*! 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 */ /*! returns the cached detail of a territory, nullptr if not found */
Data::TerritoryTypePtr getTerritoryDetail( uint32_t territoryTypeId ) const; Data::TerritoryTypePtr getTerritoryDetail( uint32_t territoryTypeId ) const;

View file

@ -465,7 +465,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw,
case GmCommand::Teri: case GmCommand::Teri:
{ {
auto pTeriMgr = pFw->get< TerritoryMgr >(); 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 ); player.sendDebug( "Found instance: {0}, id#{1}", instance->getName(), param1 );