diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 605492be2..4994df179 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -2778,12 +2778,13 @@ namespace Framework.Constants public enum SceneFlags { - Unk1 = 0x01, - CancelAtEnd = 0x02, + None = 0x00, + PlayerNonInteractablePhased = 0x01, // Sets UNIT_FLAG_IMMUNE_TO_PC + UNIT_FLAG_IMMUNE_TO_NPC + UNIT_FLAG_PACIFIED + FadeToBlackscreenOnComplete = 0x02, NotCancelable = 0x04, - Unk8 = 0x08, - Unk16 = 0x10, // 16, most common value - Unk32 = 0x20 + FadeToBlackscreenOnCancel = 0x08, + + IgnoreTransport = 0x20 } public enum WorldMapTransformsFlags diff --git a/Source/Game/Chat/Commands/SceneCommands.cs b/Source/Game/Chat/Commands/SceneCommands.cs index 91b5f2f7b..b3961bb79 100644 --- a/Source/Game/Chat/Commands/SceneCommands.cs +++ b/Source/Game/Chat/Commands/SceneCommands.cs @@ -89,7 +89,7 @@ namespace Game.Chat uint scenePackageId = args.NextUInt32(); if (!uint.TryParse(args.NextString(""), out uint flags)) - flags = (uint)SceneFlags.Unk16; + flags = (uint)SceneFlags.None; Player target = handler.GetSelectedPlayerOrSelf(); if (!target) diff --git a/Source/Game/Entities/Player/SceneMgr.cs b/Source/Game/Entities/Player/SceneMgr.cs index b9cbd39be..b2767ca60 100644 --- a/Source/Game/Entities/Player/SceneMgr.cs +++ b/Source/Game/Entities/Player/SceneMgr.cs @@ -85,7 +85,7 @@ namespace Game.Entities return sceneInstanceID; } - public uint PlaySceneByPackageId(uint sceneScriptPackageId, SceneFlags playbackflags = SceneFlags.Unk16, Position position = null) + public uint PlaySceneByPackageId(uint sceneScriptPackageId, SceneFlags playbackflags, Position position = null) { SceneTemplate sceneTemplate = new(); sceneTemplate.SceneId = 0; @@ -128,6 +128,8 @@ namespace Game.Entities GetPlayer().SendSysMessage(CypherStrings.CommandSceneDebugCancel, sceneInstanceID); SceneTemplate sceneTemplate = GetSceneTemplateFromInstanceId(sceneInstanceID); + if (sceneTemplate.PlaybackFlags.HasFlag(SceneFlags.NotCancelable)) + return; // Must be done before removing aura RemoveSceneInstanceId(sceneInstanceID); @@ -137,7 +139,7 @@ namespace Game.Entities Global.ScriptMgr.OnSceneCancel(GetPlayer(), sceneInstanceID, sceneTemplate); - if (sceneTemplate.PlaybackFlags.HasAnyFlag(SceneFlags.CancelAtEnd)) + if (sceneTemplate.PlaybackFlags.HasFlag(SceneFlags.FadeToBlackscreenOnCancel)) CancelScene(sceneInstanceID, false); } @@ -159,7 +161,7 @@ namespace Game.Entities Global.ScriptMgr.OnSceneComplete(GetPlayer(), sceneInstanceID, sceneTemplate); - if (sceneTemplate.PlaybackFlags.HasAnyFlag(SceneFlags.CancelAtEnd)) + if (sceneTemplate.PlaybackFlags.HasFlag(SceneFlags.FadeToBlackscreenOnComplete)) CancelScene(sceneInstanceID, false); } @@ -246,7 +248,7 @@ namespace Game.Entities Player GetPlayer() { return _player; } - void RecreateScene(uint sceneScriptPackageId, SceneFlags playbackflags = SceneFlags.Unk16, Position position = null) + void RecreateScene(uint sceneScriptPackageId, SceneFlags playbackflags, Position position = null) { CancelSceneByPackageId(sceneScriptPackageId); PlaySceneByPackageId(sceneScriptPackageId, playbackflags, position); diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 142d35c8c..ee97b6122 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -5586,7 +5586,7 @@ namespace Game.Spells if (!m_caster.IsTypeId(TypeId.Player)) return; - m_caster.ToPlayer().GetSceneMgr().PlaySceneByPackageId((uint)effectInfo.MiscValue, SceneFlags.Unk1, destTarget); + m_caster.ToPlayer().GetSceneMgr().PlaySceneByPackageId((uint)effectInfo.MiscValue, SceneFlags.PlayerNonInteractablePhased, destTarget); } [SpellEffectHandler(SpellEffectName.PlayScene)]