aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-02-27 21:49:35 +0100
committerShauren <shauren.trinity@gmail.com>2021-02-27 21:49:35 +0100
commit3e3b93b509b7546894dd098ae68d4f416f572a4e (patch)
treea8dbb324755bdcf3e45179dcdffb3dbc13ca844f
parentee2ebfe87db6e43fc0ee2e27d760d656eadf9526 (diff)
Core/Scenes: Add support for encrypted scenes
-rw-r--r--sql/updates/world/master/2021_02_27_07_world.sql1
-rw-r--r--src/server/game/Entities/Player/SceneMgr.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp5
-rw-r--r--src/server/game/Globals/ObjectMgr.h9
-rw-r--r--src/server/game/Server/Packets/ScenePackets.cpp6
-rw-r--r--src/server/game/Server/Packets/ScenePackets.h6
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