diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-02-27 21:49:35 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-02-27 21:49:35 +0100 |
commit | 3e3b93b509b7546894dd098ae68d4f416f572a4e (patch) | |
tree | a8dbb324755bdcf3e45179dcdffb3dbc13ca844f | |
parent | ee2ebfe87db6e43fc0ee2e27d760d656eadf9526 (diff) |
Core/Scenes: Add support for encrypted scenes
-rw-r--r-- | sql/updates/world/master/2021_02_27_07_world.sql | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Player/SceneMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 9 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ScenePackets.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ScenePackets.h | 6 |
6 files changed, 17 insertions, 12 deletions
diff --git a/sql/updates/world/master/2021_02_27_07_world.sql b/sql/updates/world/master/2021_02_27_07_world.sql new file mode 100644 index 00000000000..64699db193a --- /dev/null +++ b/sql/updates/world/master/2021_02_27_07_world.sql @@ -0,0 +1 @@ +ALTER TABLE `scene_template` ADD `Encrypted` tinyint(1) unsigned NOT NULL DEFAULT '0' AFTER `ScriptPackageID`; diff --git a/src/server/game/Entities/Player/SceneMgr.cpp b/src/server/game/Entities/Player/SceneMgr.cpp index bcadb1a29d0..7239d3428dc 100644 --- a/src/server/game/Entities/Player/SceneMgr.cpp +++ b/src/server/game/Entities/Player/SceneMgr.cpp @@ -62,6 +62,7 @@ uint32 SceneMgr::PlaySceneByTemplate(SceneTemplate const* sceneTemplate, Positio playScene.SceneScriptPackageID = sceneTemplate->ScenePackageId; playScene.Location = *position; playScene.TransportGUID = GetPlayer()->GetTransGUID(); + playScene.Encrypted = sceneTemplate->Encrypted; GetPlayer()->SendDirectMessage(playScene.Write()); @@ -78,6 +79,7 @@ uint32 SceneMgr::PlaySceneByPackageId(uint32 sceneScriptPackageId, uint32 playba sceneTemplate.SceneId = 0; sceneTemplate.ScenePackageId = sceneScriptPackageId; sceneTemplate.PlaybackFlags = playbackflags; + sceneTemplate.Encrypted = false; sceneTemplate.ScriptId = 0; return PlaySceneByTemplate(&sceneTemplate, position); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index c40f145691e..cfecba63541 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -10426,7 +10426,7 @@ void ObjectMgr::LoadSceneTemplates() uint32 oldMSTime = getMSTime(); _sceneTemplateStore.clear(); - QueryResult templates = WorldDatabase.Query("SELECT SceneId, Flags, ScriptPackageID, ScriptName FROM scene_template"); + QueryResult templates = WorldDatabase.Query("SELECT SceneId, Flags, ScriptPackageID, Encrypted, ScriptName FROM scene_template"); if (!templates) { @@ -10445,7 +10445,8 @@ void ObjectMgr::LoadSceneTemplates() sceneTemplate.SceneId = sceneId; sceneTemplate.PlaybackFlags = fields[1].GetUInt32(); sceneTemplate.ScenePackageId = fields[2].GetUInt32(); - sceneTemplate.ScriptId = sObjectMgr->GetScriptId(fields[3].GetCString()); + sceneTemplate.Encrypted = fields[3].GetUInt8() != 0; + sceneTemplate.ScriptId = sObjectMgr->GetScriptId(fields[4].GetCString()); } while (templates->NextRow()); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 5ac3b87fff5..e2011eaf227 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -788,10 +788,11 @@ typedef std::unordered_map<uint32, std::string> RealmNameContainer; struct SceneTemplate { - uint32 SceneId; - uint32 PlaybackFlags; - uint32 ScenePackageId; - uint32 ScriptId; + uint32 SceneId = 0; + uint32 PlaybackFlags = 0; + uint32 ScenePackageId = 0; + bool Encrypted = false; + uint32 ScriptId = 0; }; typedef std::unordered_map<uint32, SceneTemplate> SceneTemplateContainer; diff --git a/src/server/game/Server/Packets/ScenePackets.cpp b/src/server/game/Server/Packets/ScenePackets.cpp index 3720a9c576c..8622a80f949 100644 --- a/src/server/game/Server/Packets/ScenePackets.cpp +++ b/src/server/game/Server/Packets/ScenePackets.cpp @@ -20,12 +20,12 @@ WorldPacket const* WorldPackets::Scenes::PlayScene::Write() { _worldPacket << int32(SceneID); - _worldPacket << int32(PlaybackFlags); - _worldPacket << int32(SceneInstanceID); + _worldPacket << uint32(PlaybackFlags); + _worldPacket << uint32(SceneInstanceID); _worldPacket << int32(SceneScriptPackageID); _worldPacket << TransportGUID; _worldPacket << Location.PositionXYZOStream(); - _worldPacket.WriteBit(PerformTactCallbacks); + _worldPacket.WriteBit(Encrypted); _worldPacket.FlushBits(); return &_worldPacket; diff --git a/src/server/game/Server/Packets/ScenePackets.h b/src/server/game/Server/Packets/ScenePackets.h index 08e6c6a1381..c851d61f29f 100644 --- a/src/server/game/Server/Packets/ScenePackets.h +++ b/src/server/game/Server/Packets/ScenePackets.h @@ -33,12 +33,12 @@ namespace WorldPackets WorldPacket const* Write() override; int32 SceneID = 0; - int32 PlaybackFlags = 0; - int32 SceneInstanceID = 0; + uint32 PlaybackFlags = 0; + uint32 SceneInstanceID = 0; int32 SceneScriptPackageID = 0; ObjectGuid TransportGUID; Position Location; - bool PerformTactCallbacks = false; + bool Encrypted = false; }; class TC_GAME_API CancelScene final : public ServerPacket |