From 68cf700178d8918abf7cf6d9ae352532e1ee4dc9 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 9 Jan 2023 11:42:15 +0100 Subject: [PATCH] Core/Maps: Made instance_template no longer required to create and enter instance maps --- src/server/game/Globals/ObjectMgr.cpp | 23 ++++++++----------- src/server/game/Handlers/MovementHandler.cpp | 6 ++--- src/server/game/Instances/InstanceSaveMgr.cpp | 6 ----- src/server/game/Instances/InstanceSaveMgr.h | 1 - src/server/game/Maps/MapManager.cpp | 11 ++------- src/server/game/Maps/MapManager.h | 8 +++---- src/server/game/Spells/Spell.cpp | 3 --- 7 files changed, 17 insertions(+), 41 deletions(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 2d79b087e2..28c624b877 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -5536,7 +5536,7 @@ void ObjectMgr::LoadInstanceTemplate() uint16 mapID = fields[0].GetUInt16(); - if (!MapManager::IsValidMAP(mapID, true)) + if (!MapManager::IsValidMAP(mapID)) { TC_LOG_ERROR("sql.sql", "ObjectMgr::LoadInstanceTemplate: bad mapid %d for template!", mapID); continue; @@ -6753,31 +6753,26 @@ void ObjectMgr::LoadAccessRequirements() */ AreaTriggerStruct const* ObjectMgr::GetGoBackTrigger(uint32 Map) const { - bool useParentDbValue = false; - uint32 parentId = 0; + Optional parentId; MapEntry const* mapEntry = sMapStore.LookupEntry(Map); if (!mapEntry || mapEntry->CorpseMapID < 0) return nullptr; if (mapEntry->IsDungeon()) - { - InstanceTemplate const* iTemplate = sObjectMgr->GetInstanceTemplate(Map); + if (InstanceTemplate const* iTemplate = sObjectMgr->GetInstanceTemplate(Map)) + parentId = iTemplate->Parent; - if (!iTemplate) - return nullptr; + uint32 entrance_map = parentId.value_or(mapEntry->CorpseMapID); - parentId = iTemplate->Parent; - useParentDbValue = true; - } - - uint32 entrance_map = uint32(mapEntry->CorpseMapID); for (AreaTriggerContainer::const_iterator itr = _areaTriggerStore.begin(); itr != _areaTriggerStore.end(); ++itr) - if ((!useParentDbValue && itr->second.target_mapId == entrance_map) || (useParentDbValue && itr->second.target_mapId == parentId)) + { + if (itr->second.target_mapId == entrance_map) { AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(itr->first); - if (atEntry && atEntry->ContinentID == Map) + if (atEntry && atEntry->ContinentID == int32(Map)) return &itr->second; } + } return nullptr; } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 072a98cfe6..37a2ad4c6c 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -34,7 +34,6 @@ #include "Transport.h" #include "Battleground.h" #include "InstanceSaveMgr.h" -#include "ObjectMgr.h" #include "Vehicle.h" #include "GameTime.h" #include "GameClient.h" @@ -70,10 +69,9 @@ void WorldSession::HandleMoveWorldportAck() // get the destination map entry, not the current one, this will fix homebind and reset greeting MapEntry const* mEntry = sMapStore.LookupEntry(loc.GetMapId()); - InstanceTemplate const* mInstance = sObjectMgr->GetInstanceTemplate(loc.GetMapId()); // reset instance validity, except if going to an instance inside an instance - if (GetPlayer()->m_InstanceValid == false && !mInstance) + if (GetPlayer()->m_InstanceValid == false && !!mEntry->IsDungeon()) GetPlayer()->m_InstanceValid = true; Map* oldMap = GetPlayer()->GetMap(); @@ -177,7 +175,7 @@ void WorldSession::HandleMoveWorldportAck() } } - if (mInstance) + if (mEntry->IsDungeon()) { // check if this instance has a reset time and send it to player if so Difficulty diff = newMap->GetDifficulty(); diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index d78d34ad19..f536a6dd40 100644 --- a/src/server/game/Instances/InstanceSaveMgr.cpp +++ b/src/server/game/Instances/InstanceSaveMgr.cpp @@ -227,12 +227,6 @@ time_t InstanceSave::GetResetTimeForDB() return GetResetTime(); } -// to cache or not to cache, that is the question -InstanceTemplate const* InstanceSave::GetTemplate() -{ - return sObjectMgr->GetInstanceTemplate(m_mapid); -} - MapEntry const* InstanceSave::GetMapEntry() { return sMapStore.LookupEntry(m_mapid); diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index 9efad6bbd1..56de3b9e36 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -74,7 +74,6 @@ class TC_GAME_API InstanceSave void SetResetTime(time_t resetTime) { m_resetTime = resetTime; } time_t GetResetTimeForDB(); - InstanceTemplate const* GetTemplate(); MapEntry const* GetMapEntry(); /* online players bound to the instance (perm/solo) diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index f587a13c02..b0a899dea8 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -391,16 +391,9 @@ bool MapManager::DestroyMap(Map* map) return true; } -bool MapManager::IsValidMAP(uint32 mapid, bool startUp) +bool MapManager::IsValidMAP(uint32 mapId) { - MapEntry const* mEntry = sMapStore.LookupEntry(mapid); - - if (startUp) - return mEntry ? true : false; - else - return mEntry && (!mEntry->IsDungeon() || sObjectMgr->GetInstanceTemplate(mapid)); - - /// @todo add check for battleground template + return sMapStore.LookupEntry(mapId) != nullptr; } void MapManager::UnloadAll() diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index b23f8148b2..f1219e7b84 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -73,21 +73,21 @@ class TC_GAME_API MapManager void UnloadAll(); - static bool IsValidMAP(uint32 mapid, bool startUp); + static bool IsValidMAP(uint32 mapId); static bool IsValidMapCoord(uint32 mapid, float x, float y) { - return IsValidMAP(mapid, false) && Trinity::IsValidMapCoord(x, y); + return IsValidMAP(mapid) && Trinity::IsValidMapCoord(x, y); } static bool IsValidMapCoord(uint32 mapid, float x, float y, float z) { - return IsValidMAP(mapid, false) && Trinity::IsValidMapCoord(x, y, z); + return IsValidMAP(mapid) && Trinity::IsValidMapCoord(x, y, z); } static bool IsValidMapCoord(uint32 mapid, float x, float y, float z, float o) { - return IsValidMAP(mapid, false) && Trinity::IsValidMapCoord(x, y, z, o); + return IsValidMAP(mapid) && Trinity::IsValidMapCoord(x, y, z, o); } static bool IsValidMapCoord(uint32 mapid, Position const& pos) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index d7f441bba8..0782a72e40 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -6277,9 +6277,6 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint if (targetBind->perm && targetBind->save != casterBind->save) return SPELL_FAILED_TARGET_LOCKED_TO_RAID_INSTANCE; - InstanceTemplate const* instance = sObjectMgr->GetInstanceTemplate(mapId); - if (!instance) - return SPELL_FAILED_TARGET_NOT_IN_INSTANCE; if (!target->Satisfy(sObjectMgr->GetAccessRequirement(mapId, difficulty), mapId)) return SPELL_FAILED_BAD_TARGETS; }