aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/SceneMgr.cpp10
-rw-r--r--src/server/game/Entities/Player/SceneMgr.h1
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp7
3 files changed, 18 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/SceneMgr.cpp b/src/server/game/Entities/Player/SceneMgr.cpp
index 9276b4f3956..357ca2483dd 100644
--- a/src/server/game/Entities/Player/SceneMgr.cpp
+++ b/src/server/game/Entities/Player/SceneMgr.cpp
@@ -238,6 +238,16 @@ uint32 SceneMgr::GetActiveSceneCount(uint32 sceneScriptPackageId /*= 0*/) const
return activeSceneCount;
}
+Optional<uint32> SceneMgr::GetInstanceIdBySceneId(uint32 sceneId) const
+{
+ for (auto const& itr : _scenesByInstance)
+ {
+ if (itr.second->SceneId == sceneId)
+ return itr.first;
+ }
+ return std::nullopt;
+}
+
void SceneMgr::TriggerDelayedScenes()
{
for (WorldPacket& playScene : _delayedScenes)
diff --git a/src/server/game/Entities/Player/SceneMgr.h b/src/server/game/Entities/Player/SceneMgr.h
index 34366459ef8..38988fef5ed 100644
--- a/src/server/game/Entities/Player/SceneMgr.h
+++ b/src/server/game/Entities/Player/SceneMgr.h
@@ -68,6 +68,7 @@ public:
SceneTemplate const* GetSceneTemplateFromInstanceId(uint32 sceneInstanceID) const;
uint32 GetActiveSceneCount(uint32 sceneScriptPackageId = 0) const;
SceneTemplateByInstance const& GetSceneTemplateByInstanceMap() const { return _scenesByInstance; }
+ Optional<uint32> GetInstanceIdBySceneId(uint32 sceneId) const;
uint32 GetNewStandaloneSceneInstanceID() { return ++_standaloneSceneInstanceID; }
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 867f05a6a33..35acfade8ff 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -6245,7 +6245,14 @@ void AuraEffect::HandlePlayScene(AuraApplication const* aurApp, uint8 mode, bool
if (apply)
player->GetSceneMgr().PlayScene(GetMiscValue());
else
+ {
+ if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
+ {
+ if (Optional<uint32> sceneInstanceId = player->GetSceneMgr().GetInstanceIdBySceneId(GetMiscValue()))
+ player->GetSceneMgr().OnSceneComplete(*sceneInstanceId);
+ }
player->GetSceneMgr().CancelSceneBySceneId(GetMiscValue());
+ }
}
void AuraEffect::HandleCreateAreaTrigger(AuraApplication const* aurApp, uint8 mode, bool apply) const