From 0939c4c4162a638b6079b87ff75e8f53ca67b210 Mon Sep 17 00:00:00 2001 From: ModoX Date: Thu, 30 Jan 2025 20:20:30 +0100 Subject: Core/Auras: Send scene complete if a SPELL_AURA_PLAY_SCENE aura is removed by expiration (cherry picked from commit e58fa4c35eaf24cfa4866b8ca24a61d45a3382d2) --- src/server/game/Entities/Player/SceneMgr.cpp | 10 ++++++++++ src/server/game/Entities/Player/SceneMgr.h | 1 + src/server/game/Spells/Auras/SpellAuraEffects.cpp | 7 +++++++ 3 files changed, 18 insertions(+) (limited to 'src') 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 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 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 sceneInstanceId = player->GetSceneMgr().GetInstanceIdBySceneId(GetMiscValue())) + player->GetSceneMgr().OnSceneComplete(*sceneInstanceId); + } player->GetSceneMgr().CancelSceneBySceneId(GetMiscValue()); + } } void AuraEffect::HandleCreateAreaTrigger(AuraApplication const* aurApp, uint8 mode, bool apply) const -- cgit v1.2.3