Core/Scenes: Add support for encrypted scenes

This commit is contained in:
Shauren
2021-02-27 21:49:35 +01:00
parent ee2ebfe87d
commit 3e3b93b509
6 changed files with 17 additions and 12 deletions

View File

@@ -0,0 +1 @@
ALTER TABLE `scene_template` ADD `Encrypted` tinyint(1) unsigned NOT NULL DEFAULT '0' AFTER `ScriptPackageID`;

View File

@@ -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);

View File

@@ -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());

View File

@@ -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;

View File

@@ -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;

View File

@@ -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