aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/SceneDefines.h37
-rw-r--r--src/server/game/Entities/Player/SceneMgr.cpp12
-rw-r--r--src/server/game/Entities/Player/SceneMgr.h15
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.h3
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-rw-r--r--src/server/scripts/Commands/cs_scene.cpp2
7 files changed, 52 insertions, 21 deletions
diff --git a/src/server/game/Entities/Player/SceneDefines.h b/src/server/game/Entities/Player/SceneDefines.h
new file mode 100644
index 00000000000..cc02301a4c5
--- /dev/null
+++ b/src/server/game/Entities/Player/SceneDefines.h
@@ -0,0 +1,37 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef SceneDefines_h__
+#define SceneDefines_h__
+
+#include "Define.h"
+#include "EnumFlag.h"
+
+enum class SceneFlag : uint32
+{
+ None = 0x00,
+ PlayerNonInteractablePhased = 0x01, // Sets UNIT_FLAG_IMMUNE_TO_PC + UNIT_FLAG_IMMUNE_TO_NPC + UNIT_FLAG_PACIFIED
+ FadeToBlackscreenOnComplete = 0x02,
+ NotCancelable = 0x04,
+ FadeToBlackscreenOnCancel = 0x08,
+
+ IgnoreTransport = 0x20
+};
+
+DEFINE_ENUM_FLAG(SceneFlag);
+
+#endif // SceneDefines_h__
diff --git a/src/server/game/Entities/Player/SceneMgr.cpp b/src/server/game/Entities/Player/SceneMgr.cpp
index 342b4e6cbb2..d44182fb9eb 100644
--- a/src/server/game/Entities/Player/SceneMgr.cpp
+++ b/src/server/game/Entities/Player/SceneMgr.cpp
@@ -55,11 +55,11 @@ uint32 SceneMgr::PlaySceneByTemplate(SceneTemplate const* sceneTemplate, Positio
uint32 sceneInstanceID = GetNewStandaloneSceneInstanceID();
if (_isDebuggingScenes)
- ChatHandler(GetPlayer()->GetSession()).PSendSysMessage(LANG_COMMAND_SCENE_DEBUG_PLAY, sceneInstanceID, sceneTemplate->ScenePackageId, sceneTemplate->PlaybackFlags);
+ ChatHandler(GetPlayer()->GetSession()).PSendSysMessage(LANG_COMMAND_SCENE_DEBUG_PLAY, sceneInstanceID, sceneTemplate->ScenePackageId, sceneTemplate->PlaybackFlags.AsUnderlyingType());
WorldPackets::Scenes::PlayScene playScene;
playScene.SceneID = sceneTemplate->SceneId;
- playScene.PlaybackFlags = sceneTemplate->PlaybackFlags;
+ playScene.PlaybackFlags = sceneTemplate->PlaybackFlags.AsUnderlyingType();
playScene.SceneInstanceID = sceneInstanceID;
playScene.SceneScriptPackageID = sceneTemplate->ScenePackageId;
playScene.Location = *position;
@@ -79,7 +79,7 @@ uint32 SceneMgr::PlaySceneByTemplate(SceneTemplate const* sceneTemplate, Positio
return sceneInstanceID;
}
-uint32 SceneMgr::PlaySceneByPackageId(uint32 sceneScriptPackageId, uint32 playbackflags /*= SCENEFLAG_UNK16*/, Position const* position /*= nullptr*/)
+uint32 SceneMgr::PlaySceneByPackageId(uint32 sceneScriptPackageId, EnumFlag<SceneFlag> playbackflags /*= SCENEFLAG_UNK16*/, Position const* position /*= nullptr*/)
{
SceneTemplate sceneTemplate;
sceneTemplate.SceneId = 0;
@@ -122,6 +122,8 @@ void SceneMgr::OnSceneCancel(uint32 sceneInstanceID)
ChatHandler(GetPlayer()->GetSession()).PSendSysMessage(LANG_COMMAND_SCENE_DEBUG_CANCEL, sceneInstanceID);
SceneTemplate const* sceneTemplate = GetSceneTemplateFromInstanceId(sceneInstanceID);
+ if (sceneTemplate->PlaybackFlags.HasFlag(SceneFlag::NotCancelable))
+ return;
// Must be done before removing aura
RemoveSceneInstanceId(sceneInstanceID);
@@ -131,7 +133,7 @@ void SceneMgr::OnSceneCancel(uint32 sceneInstanceID)
sScriptMgr->OnSceneCancel(GetPlayer(), sceneInstanceID, sceneTemplate);
- if (sceneTemplate->PlaybackFlags & SCENEFLAG_CANCEL_AT_END)
+ if (sceneTemplate->PlaybackFlags.HasFlag(SceneFlag::FadeToBlackscreenOnCancel))
CancelScene(sceneInstanceID, false);
}
@@ -153,7 +155,7 @@ void SceneMgr::OnSceneComplete(uint32 sceneInstanceID)
sScriptMgr->OnSceneComplete(GetPlayer(), sceneInstanceID, sceneTemplate);
- if (sceneTemplate->PlaybackFlags & SCENEFLAG_CANCEL_AT_END)
+ if (sceneTemplate->PlaybackFlags.HasFlag(SceneFlag::FadeToBlackscreenOnComplete))
CancelScene(sceneInstanceID, false);
}
diff --git a/src/server/game/Entities/Player/SceneMgr.h b/src/server/game/Entities/Player/SceneMgr.h
index add721b4931..4cb6db547fb 100644
--- a/src/server/game/Entities/Player/SceneMgr.h
+++ b/src/server/game/Entities/Player/SceneMgr.h
@@ -19,19 +19,10 @@
#define SceneMgr_h__
#include "Common.h"
+#include "SceneDefines.h"
#include <map>
#include <vector>
-enum SceneFlags
-{
- SCENEFLAG_UNK1 = 0x01,
- SCENEFLAG_CANCEL_AT_END = 0x02,
- SCENEFLAG_NOT_CANCELABLE = 0x04,
- SCENEFLAG_UNK8 = 0x08,
- SCENEFLAG_UNK16 = 0x10, // 16, most common value
- SCENEFLAG_UNK32 = 0x20,
-};
-
class Player;
class WorldPacket;
struct Position;
@@ -52,14 +43,14 @@ public:
uint32 PlayScene(uint32 sceneId, Position const* position = nullptr);
uint32 PlaySceneByTemplate(SceneTemplate const* sceneTemplate, Position const* position = nullptr);
- uint32 PlaySceneByPackageId(uint32 sceneScriptPackageId, uint32 playbackflags = SCENEFLAG_UNK16, Position const* position = nullptr);
+ uint32 PlaySceneByPackageId(uint32 sceneScriptPackageId, EnumFlag<SceneFlag> playbackflags, Position const* position = nullptr);
void CancelScene(uint32 sceneInstanceID, bool removeFromMap = true);
void OnSceneTrigger(uint32 sceneInstanceID, std::string const& triggerName);
void OnSceneCancel(uint32 sceneInstanceID);
void OnSceneComplete(uint32 sceneInstanceID);
- void RecreateScene(uint32 sceneScriptPackageId, uint32 playbackflags = SCENEFLAG_UNK16, Position const* position = nullptr)
+ void RecreateScene(uint32 sceneScriptPackageId, EnumFlag<SceneFlag> playbackflags, Position const* position = nullptr)
{
CancelSceneByPackageId(sceneScriptPackageId);
PlaySceneByPackageId(sceneScriptPackageId, playbackflags, position);
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index fa12c26614e..e1391f9b3e5 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -10492,7 +10492,7 @@ void ObjectMgr::LoadSceneTemplates()
uint32 sceneId = fields[0].GetUInt32();
SceneTemplate& sceneTemplate = _sceneTemplateStore[sceneId];
sceneTemplate.SceneId = sceneId;
- sceneTemplate.PlaybackFlags = fields[1].GetUInt32();
+ sceneTemplate.PlaybackFlags = static_cast<SceneFlag>(fields[1].GetUInt32());
sceneTemplate.ScenePackageId = fields[2].GetUInt32();
sceneTemplate.Encrypted = fields[3].GetUInt8() != 0;
sceneTemplate.ScriptId = sObjectMgr->GetScriptId(fields[4].GetCString());
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 3abb550b9a2..5f0614bf1af 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -32,6 +32,7 @@
#include "Position.h"
#include "QuestDef.h"
#include "RaceMask.h"
+#include "SceneDefines.h"
#include "SharedDefines.h"
#include "Trainer.h"
#include "VehicleDefines.h"
@@ -796,7 +797,7 @@ typedef std::unordered_map<uint32, std::string> RealmNameContainer;
struct SceneTemplate
{
uint32 SceneId = 0;
- uint32 PlaybackFlags = 0;
+ EnumFlag<SceneFlag> PlaybackFlags = SceneFlag::None;
uint32 ScenePackageId = 0;
bool Encrypted = false;
uint32 ScriptId = 0;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 49936e0ed15..d92a72f0cb8 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5767,7 +5767,7 @@ void Spell::EffectPlaySceneScriptPackage()
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return;
- m_caster->ToPlayer()->GetSceneMgr().PlaySceneByPackageId(effectInfo->MiscValue, SCENEFLAG_UNK1, destTarget);
+ m_caster->ToPlayer()->GetSceneMgr().PlaySceneByPackageId(effectInfo->MiscValue, SceneFlag::PlayerNonInteractablePhased, destTarget);
}
void Spell::EffectPlayScene()
diff --git a/src/server/scripts/Commands/cs_scene.cpp b/src/server/scripts/Commands/cs_scene.cpp
index 5b8ef5bee10..9d1bd83e6a1 100644
--- a/src/server/scripts/Commands/cs_scene.cpp
+++ b/src/server/scripts/Commands/cs_scene.cpp
@@ -95,7 +95,7 @@ public:
return false;
uint32 scenePackageId = atoi(scenePackageIdStr);
- uint32 flags = flagsStr ? atoi(flagsStr) : SCENEFLAG_UNK16;
+ EnumFlag<SceneFlag> flags = flagsStr ? static_cast<SceneFlag>(atoi(flagsStr)) : SceneFlag::None;
Player* target = handler->getSelectedPlayerOrSelf();
if (!target)