From c7f5696479bb85c8fc7ee0d9fdaeb92e2b32213f Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Tue, 8 Jul 2025 22:26:37 +0000 Subject: Core/Scenarios: Allow scripts to set instance scenario by id (#31104) * add example at Stratholme service entrance --- src/server/game/Maps/Map.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/server/game/Maps/Map.cpp') diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 41d19ba4e4c..2382850e9f8 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2809,7 +2809,7 @@ template TC_GAME_API void Map::RemoveFromMap(Conversation*, bool); InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty SpawnMode, TeamId InstanceTeam, InstanceLock* instanceLock, Optional lfgDungeonsId) : Map(id, expiry, InstanceId, SpawnMode), - i_data(nullptr), i_script_id(0), i_scenario(nullptr), i_instanceLock(instanceLock), i_lfgDungeonsId(lfgDungeonsId) + i_data(nullptr), i_script_id(0), i_instanceLock(instanceLock), i_lfgDungeonsId(lfgDungeonsId) { //lets initialize visibility distance for dungeons InstanceMap::InitVisibilityDistance(); @@ -2834,7 +2834,6 @@ InstanceMap::~InstanceMap() i_instanceLock->SetInUse(false); delete i_data; - delete i_scenario; } void InstanceMap::InitVisibilityDistance() @@ -3081,6 +3080,23 @@ std::string const& InstanceMap::GetScriptName() const return sObjectMgr->GetScriptName(i_script_id); } +void InstanceMap::SetInstanceScenario(InstanceScenario* scenario) +{ + i_scenario.reset(); // sends exit packets to all players + + if (scenario) + { + i_scenario.reset(scenario); + + scenario->LoadInstanceData(); + + DoOnPlayers([scenario](Player* player) + { + scenario->OnPlayerEnter(player); + }); + } +} + void InstanceMap::UpdateInstanceLock(UpdateBossStateSaveDataEvent const& updateSaveDataEvent) { if (i_instanceLock) -- cgit v1.2.3