diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/SceneDefines.h | 37 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/SceneMgr.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/SceneMgr.h | 15 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 3 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_scene.cpp | 2 |
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) |
