mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Auras: Send scene complete if a SPELL_AURA_PLAY_SCENE aura is removed by expiration
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
@@ -6304,7 +6304,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
|
||||
|
||||
Reference in New Issue
Block a user