Core/Scenes: Defined more flags and implemented FadeToBlackscreenOnCancel

Port From (https://github.com/TrinityCore/TrinityCore/commit/00dd4629bd6c8de4466925bb4a3d2a0e82e4f004)
This commit is contained in:
hondacrx
2021-10-05 18:19:26 -04:00
parent 428ce318e8
commit f21eed617c
4 changed files with 14 additions and 11 deletions
+6 -5
View File
@@ -2778,12 +2778,13 @@ namespace Framework.Constants
public enum SceneFlags public enum SceneFlags
{ {
Unk1 = 0x01, None = 0x00,
CancelAtEnd = 0x02, PlayerNonInteractablePhased = 0x01, // Sets UNIT_FLAG_IMMUNE_TO_PC + UNIT_FLAG_IMMUNE_TO_NPC + UNIT_FLAG_PACIFIED
FadeToBlackscreenOnComplete = 0x02,
NotCancelable = 0x04, NotCancelable = 0x04,
Unk8 = 0x08, FadeToBlackscreenOnCancel = 0x08,
Unk16 = 0x10, // 16, most common value
Unk32 = 0x20 IgnoreTransport = 0x20
} }
public enum WorldMapTransformsFlags public enum WorldMapTransformsFlags
+1 -1
View File
@@ -89,7 +89,7 @@ namespace Game.Chat
uint scenePackageId = args.NextUInt32(); uint scenePackageId = args.NextUInt32();
if (!uint.TryParse(args.NextString(""), out uint flags)) if (!uint.TryParse(args.NextString(""), out uint flags))
flags = (uint)SceneFlags.Unk16; flags = (uint)SceneFlags.None;
Player target = handler.GetSelectedPlayerOrSelf(); Player target = handler.GetSelectedPlayerOrSelf();
if (!target) if (!target)
+6 -4
View File
@@ -85,7 +85,7 @@ namespace Game.Entities
return sceneInstanceID; 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 sceneTemplate = new();
sceneTemplate.SceneId = 0; sceneTemplate.SceneId = 0;
@@ -128,6 +128,8 @@ namespace Game.Entities
GetPlayer().SendSysMessage(CypherStrings.CommandSceneDebugCancel, sceneInstanceID); GetPlayer().SendSysMessage(CypherStrings.CommandSceneDebugCancel, sceneInstanceID);
SceneTemplate sceneTemplate = GetSceneTemplateFromInstanceId(sceneInstanceID); SceneTemplate sceneTemplate = GetSceneTemplateFromInstanceId(sceneInstanceID);
if (sceneTemplate.PlaybackFlags.HasFlag(SceneFlags.NotCancelable))
return;
// Must be done before removing aura // Must be done before removing aura
RemoveSceneInstanceId(sceneInstanceID); RemoveSceneInstanceId(sceneInstanceID);
@@ -137,7 +139,7 @@ namespace Game.Entities
Global.ScriptMgr.OnSceneCancel(GetPlayer(), sceneInstanceID, sceneTemplate); Global.ScriptMgr.OnSceneCancel(GetPlayer(), sceneInstanceID, sceneTemplate);
if (sceneTemplate.PlaybackFlags.HasAnyFlag(SceneFlags.CancelAtEnd)) if (sceneTemplate.PlaybackFlags.HasFlag(SceneFlags.FadeToBlackscreenOnCancel))
CancelScene(sceneInstanceID, false); CancelScene(sceneInstanceID, false);
} }
@@ -159,7 +161,7 @@ namespace Game.Entities
Global.ScriptMgr.OnSceneComplete(GetPlayer(), sceneInstanceID, sceneTemplate); Global.ScriptMgr.OnSceneComplete(GetPlayer(), sceneInstanceID, sceneTemplate);
if (sceneTemplate.PlaybackFlags.HasAnyFlag(SceneFlags.CancelAtEnd)) if (sceneTemplate.PlaybackFlags.HasFlag(SceneFlags.FadeToBlackscreenOnComplete))
CancelScene(sceneInstanceID, false); CancelScene(sceneInstanceID, false);
} }
@@ -246,7 +248,7 @@ namespace Game.Entities
Player GetPlayer() { return _player; } 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); CancelSceneByPackageId(sceneScriptPackageId);
PlaySceneByPackageId(sceneScriptPackageId, playbackflags, position); PlaySceneByPackageId(sceneScriptPackageId, playbackflags, position);
+1 -1
View File
@@ -5586,7 +5586,7 @@ namespace Game.Spells
if (!m_caster.IsTypeId(TypeId.Player)) if (!m_caster.IsTypeId(TypeId.Player))
return; 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)] [SpellEffectHandler(SpellEffectName.PlayScene)]