Skip to content

Commit e58fa4c

Browse files
committed
Core/Auras: Send scene complete if a SPELL_AURA_PLAY_SCENE aura is removed by expiration
1 parent 444a981 commit e58fa4c

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

src/server/game/Entities/Player/SceneMgr.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,16 @@ uint32 SceneMgr::GetActiveSceneCount(uint32 sceneScriptPackageId /*= 0*/) const
238238
return activeSceneCount;
239239
}
240240

241+
Optional<uint32> SceneMgr::GetInstanceIdBySceneId(uint32 sceneId) const
242+
{
243+
for (auto const& itr : _scenesByInstance)
244+
{
245+
if (itr.second->SceneId == sceneId)
246+
return itr.first;
247+
}
248+
return std::nullopt;
249+
}
250+
241251
void SceneMgr::TriggerDelayedScenes()
242252
{
243253
for (WorldPacket& playScene : _delayedScenes)

src/server/game/Entities/Player/SceneMgr.h

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class TC_GAME_API SceneMgr
6868
SceneTemplate const* GetSceneTemplateFromInstanceId(uint32 sceneInstanceID) const;
6969
uint32 GetActiveSceneCount(uint32 sceneScriptPackageId = 0) const;
7070
SceneTemplateByInstance const& GetSceneTemplateByInstanceMap() const { return _scenesByInstance; }
71+
Optional<uint32> GetInstanceIdBySceneId(uint32 sceneId) const;
7172

7273
uint32 GetNewStandaloneSceneInstanceID() { return ++_standaloneSceneInstanceID; }
7374

src/server/game/Spells/Auras/SpellAuraEffects.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -6304,7 +6304,14 @@ void AuraEffect::HandlePlayScene(AuraApplication const* aurApp, uint8 mode, bool
63046304
if (apply)
63056305
player->GetSceneMgr().PlayScene(GetMiscValue());
63066306
else
6307+
{
6308+
if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
6309+
{
6310+
if (Optional<uint32> sceneInstanceId = player->GetSceneMgr().GetInstanceIdBySceneId(GetMiscValue()))
6311+
player->GetSceneMgr().OnSceneComplete(*sceneInstanceId);
6312+
}
63076313
player->GetSceneMgr().CancelSceneBySceneId(GetMiscValue());
6314+
}
63086315
}
63096316

63106317
void AuraEffect::HandleCreateAreaTrigger(AuraApplication const* aurApp, uint8 mode, bool apply) const

0 commit comments

Comments
 (0)