aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
authorJason Dove <1695733+jasongdove@users.noreply.github.com>2025-07-08 22:26:37 +0000
committerGitHub <noreply@github.com>2025-07-09 00:26:37 +0200
commitc7f5696479bb85c8fc7ee0d9fdaeb92e2b32213f (patch)
tree5eb2e7ad82f88dd089a58aad31f54c996d9edba3 /src/server/game/Maps/Map.cpp
parent04d44bd3a081fdf1b13ff20cd97a399f0fdfc477 (diff)
Core/Scenarios: Allow scripts to set instance scenario by id (#31104)
* add example at Stratholme service entrance
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r--src/server/game/Maps/Map.cpp20
1 files changed, 18 insertions, 2 deletions
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<uint32> 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)