From e290febcc4f78757760e3a55bf67e1ec2d16bf2d Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 2 Dec 2018 18:05:50 +1100 Subject: [PATCH] remove house instances that haven't had a player for 60 seconds --- .../sapphire_zone/Manager/TerritoryMgr.cpp | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/servers/sapphire_zone/Manager/TerritoryMgr.cpp b/src/servers/sapphire_zone/Manager/TerritoryMgr.cpp index 5b4de6b8..7859f7cf 100644 --- a/src/servers/sapphire_zone/Manager/TerritoryMgr.cpp +++ b/src/servers/sapphire_zone/Manager/TerritoryMgr.cpp @@ -446,6 +446,29 @@ void Sapphire::World::Manager::TerritoryMgr::updateTerritoryInstances( uint32_t { zone->update( currentTime ); } + + auto pLog = g_fw.get< Logger >(); + + // remove internal house zones with nobody in them + for( auto it = m_landIdentToZonePtrMap.begin(); it != m_landIdentToZonePtrMap.end(); ) + { + auto zone = std::dynamic_pointer_cast< Territory::Housing::HousingInteriorTerritory >( it->second ); + assert( zone ); // wtf?? + + auto diff = std::difftime( currentTime, zone->getLastActivityTime() ); + + // todo: make this timeout configurable, though should be pretty relaxed in any case + if( diff > 60 ) + { + pLog->info( "Removing HousingInteriorTerritory#" + std::to_string( zone->getGuId() ) + " - has been inactive for 60 seconds" ); + + // remove zone from maps + m_zoneSet.erase( zone ); + it = m_landIdentToZonePtrMap.erase( it ); + } + else + it++; + } } Sapphire::World::Manager::TerritoryMgr::InstanceIdList Sapphire::World::Manager::TerritoryMgr::getInstanceContentIdList( uint16_t instanceContentId ) const