Core/Scenes: Defined more flags and implemented FadeToBlackscreenOnCancel
Port From (https://github.com/TrinityCore/TrinityCore/commit/00dd4629bd6c8de4466925bb4a3d2a0e82e4f004)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)]
|
||||||
|
|||||||
Reference in New Issue
Block a user