diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-07-31 21:39:48 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-07-31 21:39:48 +0200 |
commit | 20f38369f30309e2c0cd53eca9cfe9c49376ed8c (patch) | |
tree | 35fd316599e09226241ecd946469ccd6e21c0fa7 | |
parent | 71e885cd4b0098f38ca360a35361a6e867556542 (diff) |
Core/PacketIO: Updated packet structures to 9.2.7
23 files changed, 96 insertions, 30 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index c3146b13bdc..b12c585a788 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -309,6 +309,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) { data << uint32(DynamicFlags2); + data << uint16(DEBUGItemLevel); } for (uint32 i = 0; i < ArtifactPowers.size(); ++i) { @@ -323,7 +324,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFC04E4FFu, 0x000000FFu }); + Mask allowedMaskForTarget({ 0xF804E4FFu, 0x000001FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -331,12 +332,12 @@ void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x03FB1B00u, 0x00000000u }; + allowedMaskForTarget |= { 0x07FB1B00u, 0x00000000u }; } void ItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFC04E4FFu, 0x000000FFu }); + Mask allowedMaskForTarget({ 0xF804E4FFu, 0x000001FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -460,26 +461,30 @@ void ItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor { data << uint32(DynamicFlags2); } + if (changesMask[20]) + { + data << uint16(DEBUGItemLevel); + } if (changesMask[18]) { Modifiers->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[20]) + if (changesMask[21]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[21 + i]) + if (changesMask[22 + i]) { data << int32(SpellCharges[i]); } } } - if (changesMask[26]) + if (changesMask[27]) { for (uint32 i = 0; i < 13; ++i) { - if (changesMask[27 + i]) + if (changesMask[28 + i]) { Enchantment[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } @@ -508,6 +513,7 @@ void ItemData::ClearChangesMask() Base::ClearChangesMask(ItemAppearanceModID); Base::ClearChangesMask(Modifiers); Base::ClearChangesMask(DynamicFlags2); + Base::ClearChangesMask(DEBUGItemLevel); Base::ClearChangesMask(SpellCharges); Base::ClearChangesMask(Enchantment); _changesMask.ResetAll(); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 5beb9c4b93a..b19fdebafb0 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -113,7 +113,7 @@ struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20> void ClearChangesMask(); }; -struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40> +struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41> { UpdateField<std::vector<int32>, 0, 1> BonusListIDs; DynamicUpdateField<UF::ArtifactPower, 0, 2> ArtifactPowers; @@ -134,8 +134,9 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40> UpdateField<uint8, 0, 17> ItemAppearanceModID; UpdateField<UF::ItemModList, 0, 18> Modifiers; UpdateField<uint32, 0, 19> DynamicFlags2; - UpdateFieldArray<int32, 5, 20, 21> SpellCharges; - UpdateFieldArray<UF::ItemEnchantment, 13, 26, 27> Enchantment; + UpdateField<uint16, 0, 20> DEBUGItemLevel; + UpdateFieldArray<int32, 5, 21, 22> SpellCharges; + UpdateFieldArray<UF::ItemEnchantment, 13, 27, 28> Enchantment; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1dab0e4b99c..b44260c7066 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6303,6 +6303,15 @@ TeamId Player::TeamIdForRace(uint8 race) return TEAM_NEUTRAL; } +uint8 Player::GetFactionGroupForRace(uint8 race) +{ + if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(race)) + if (FactionTemplateEntry const* faction = sFactionTemplateStore.LookupEntry(rEntry->FactionID)) + return faction->FactionGroup; + + return 1; +} + void Player::SetFactionForRace(uint8 race) { m_team = TeamForRace(race); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 40567b8533b..2f7d79c8781 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2200,6 +2200,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> static uint32 TeamForRace(uint8 race); static TeamId TeamIdForRace(uint8 race); + static uint8 GetFactionGroupForRace(uint8 race); uint32 GetTeam() const { return m_team; } TeamId GetTeamId() const { return m_team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; } void SetFactionForRace(uint8 race); diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 91acaad9a0e..8bcfa842993 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -61,7 +61,7 @@ Loot* Roll::getLoot() return getTarget(); } -Group::Group() : m_leaderGuid(), m_leaderName(""), m_groupFlags(GROUP_FLAG_NONE), m_groupCategory(GROUP_CATEGORY_HOME), +Group::Group() : m_leaderGuid(), m_leaderFactionGroup(0), m_leaderName(""), m_groupFlags(GROUP_FLAG_NONE), m_groupCategory(GROUP_CATEGORY_HOME), m_dungeonDifficulty(DIFFICULTY_NORMAL), m_raidDifficulty(DIFFICULTY_NORMAL_RAID), m_legacyRaidDifficulty(DIFFICULTY_10_N), m_bgGroup(nullptr), m_bfGroup(nullptr), m_lootMethod(FREE_FOR_ALL), m_lootThreshold(ITEM_QUALITY_UNCOMMON), m_looterGuid(), m_masterLooterGuid(), m_subGroupsCounts(nullptr), m_guid(), m_maxEnchantingLevel(0), m_dbStoreId(0), m_isLeaderOffline(false), @@ -161,6 +161,7 @@ bool Group::Create(Player* leader) m_guid = ObjectGuid::Create<HighGuid::Party>(sGroupMgr->GenerateGroupId()); m_leaderGuid = leaderGuid; + m_leaderFactionGroup = Player::GetFactionGroupForRace(leader->GetRace()); m_leaderName = leader->GetName(); leader->SetPlayerFlag(PLAYER_FLAGS_GROUP_LEADER); @@ -238,9 +239,12 @@ void Group::LoadGroupFromDB(Field* fields) m_leaderGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); // group leader not exist - if (!sCharacterCache->GetCharacterNameByGuid(m_leaderGuid, m_leaderName)) + CharacterCacheEntry const* leader = sCharacterCache->GetCharacterCacheByGuid(m_leaderGuid); + if (!leader) return; + m_leaderFactionGroup = Player::GetFactionGroupForRace(leader->Race); + m_leaderName = leader->Name; m_lootMethod = LootMethod(fields[1].GetUInt8()); m_looterGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt64()); m_lootThreshold = ItemQualities(fields[3].GetUInt8()); @@ -392,6 +396,7 @@ bool Group::AddLeaderInvite(Player* player) return false; m_leaderGuid = player->GetGUID(); + m_leaderFactionGroup = Player::GetFactionGroupForRace(player->GetRace()); m_leaderName = player->GetName(); return true; } @@ -791,6 +796,7 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid, int8 partyIndex) newLeader->SetPlayerFlag(PLAYER_FLAGS_GROUP_LEADER); m_leaderGuid = newLeader->GetGUID(); + m_leaderFactionGroup = Player::GetFactionGroupForRace(newLeader->GetRace()); m_leaderName = newLeader->GetName(); ToggleGroupMemberFlag(slot, MEMBER_FLAG_ASSISTANT, false); @@ -1539,6 +1545,7 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot) partyUpdate.PartyGUID = m_guid; partyUpdate.LeaderGUID = m_leaderGuid; + partyUpdate.LeaderFactionGroup = m_leaderFactionGroup; partyUpdate.SequenceNum = player->NextGroupUpdateSequenceNumber(m_groupCategory); @@ -1557,9 +1564,7 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot) playerInfos.Name = citr->name; playerInfos.Class = citr->_class; - ChrRacesEntry const* race = sChrRacesStore.AssertEntry(citr->race); - FactionTemplateEntry const* raceFaction = sFactionTemplateStore.AssertEntry(race->FactionID); - playerInfos.FactionGroup = raceFaction->FactionGroup; + playerInfos.FactionGroup = Player::GetFactionGroupForRace(citr->race); playerInfos.Status = MEMBER_STATUS_OFFLINE; if (member && member->GetSession() && !member->GetSession()->PlayerLogout()) diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 7f72e6e8d6a..fd671978055 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -440,6 +440,7 @@ class TC_GAME_API Group GroupRefManager m_memberMgr; InvitesList m_invitees; ObjectGuid m_leaderGuid; + uint8 m_leaderFactionGroup; std::string m_leaderName; GroupFlags m_groupFlags; GroupCategory m_groupCategory; diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp index cc8bdade761..08478565728 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.cpp +++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp @@ -450,6 +450,7 @@ void AuctionRemoveItem::Read() { _worldPacket >> Auctioneer; _worldPacket >> AuctionID; + _worldPacket >> ItemID; if (_worldPacket.ReadBit()) { TaintedBy.emplace(); @@ -585,6 +586,7 @@ WorldPacket const* AuctionFavoriteList::Write() WorldPacket const* AuctionHelloResponse::Write() { _worldPacket << Guid; + _worldPacket << uint32(DeliveryDelay); _worldPacket.WriteBit(OpenForBusiness); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h index 6f441c4b281..795565c6fa0 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.h +++ b/src/server/game/Server/Packets/AuctionHousePackets.h @@ -287,6 +287,7 @@ namespace WorldPackets ObjectGuid Auctioneer; int32 AuctionID = 0; + int32 ItemID = 0; Optional<Addon::AddOnInfo> TaintedBy; }; @@ -417,6 +418,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid Guid; + uint32 DeliveryDelay = 0; bool OpenForBusiness = true; }; diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index 7ba0c8b886d..f05643e807e 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -18,7 +18,7 @@ #include "AuthenticationPackets.h" #include "BigNumber.h" #include "CharacterTemplateDataStore.h" -#include "CryptoHash.h" +#include "Ed25519.h" #include "HMAC.h" #include "ObjectMgr.h" #include "RSA.h" @@ -205,7 +205,7 @@ WorldPacket const* WorldPackets::Auth::WaitQueueUpdate::Write() namespace { -std::string RSAPrivateKey = R"(-----BEGIN RSA PRIVATE KEY----- +std::string const RSAPrivateKey = R"(-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA7rPc1NPDtFRRzmZbyzK48PeSU8YZ8gyFL4omqXpFn2DE683q f41Z2FeyYHsJTJtouMft7x6ADeZrN1tTkOsYEw1/Q2SD2pjmrMIwooKlxsvH+4af n6kCagNJxTj7wMhVzMDOJZG+hc/R0TfOzIPS6jCAB3uAn51EVCIpvoba20jFqfkT @@ -234,7 +234,16 @@ OHYtKG3GK3GEcFDwZU2LPHq21EroUAdtRfbrJ4KW2yc8igtXKxTBYw== -----END RSA PRIVATE KEY----- )"; +std::array<uint8, 32> constexpr EnterEncryptedModePrivateKey = +{ + 0x08, 0xBD, 0xC7, 0xA3, 0xCC, 0xC3, 0x4F, 0x3F, + 0x6A, 0x0B, 0xFF, 0xCF, 0x31, 0xC1, 0xB6, 0x97, + 0x69, 0x1E, 0x72, 0x9A, 0x0A, 0xAB, 0x2C, 0x77, + 0xC3, 0x6F, 0x8A, 0xE7, 0x5A, 0x9A, 0xA7, 0xC9 +}; + std::unique_ptr<Trinity::Crypto::RsaSignature> ConnectToRSA; +std::unique_ptr<Trinity::Crypto::Ed25519> EnterEncryptedModeSigner; } bool WorldPackets::Auth::ConnectTo::InitializeEncryption() @@ -309,19 +318,34 @@ void WorldPackets::Auth::ConnectToFailed::Read() _worldPacket >> Con; } -uint8 constexpr EnableEncryptionSeed[16] = { 0x90, 0x9C, 0xD0, 0x50, 0x5A, 0x2C, 0x14, 0xDD, 0x5C, 0x2C, 0xC0, 0x64, 0x14, 0xF3, 0xFE, 0xC9 }; +bool WorldPackets::Auth::EnterEncryptedMode::InitializeEncryption() +{ + std::unique_ptr<Trinity::Crypto::Ed25519> ed25519 = std::make_unique<Trinity::Crypto::Ed25519>(); + if (!ed25519->LoadFromByteArray(EnterEncryptedModePrivateKey)) + return false; + + EnterEncryptedModeSigner = std::move(ed25519); + return true; +} + +void WorldPackets::Auth::EnterEncryptedMode::ShutdownEncryption() +{ + EnterEncryptedModeSigner.reset(); +} + +std::array<uint8, 16> constexpr EnableEncryptionSeed = { 0x90, 0x9C, 0xD0, 0x50, 0x5A, 0x2C, 0x14, 0xDD, 0x5C, 0x2C, 0xC0, 0x64, 0x14, 0xF3, 0xFE, 0xC9 }; +std::array<uint8, 16> constexpr EnableEncryptionContext = { 0xA7, 0x1F, 0xB6, 0x9B, 0xC9, 0x7C, 0xDD, 0x96, 0xE9, 0xBB, 0xB8, 0x21, 0x39, 0x8D, 0x5A, 0xD4 }; WorldPacket const* WorldPackets::Auth::EnterEncryptedMode::Write() { - std::array<uint8, 17> msg{}; - msg[0] = Enabled ? 1 : 0; - std::copy_n(std::begin(EnableEncryptionSeed), std::size(EnableEncryptionSeed), &msg[1]); + std::array<uint8, 32> toSign = Trinity::Crypto::HMAC_SHA256::GetDigestOf(EncryptionKey, + std::array<uint8, 1>{uint8(Enabled ? 1 : 0)}, + EnableEncryptionSeed); - Trinity::Crypto::RsaSignature rsa(*ConnectToRSA); - Trinity::Crypto::RsaSignature::HMAC_SHA256 digestGenerator(EncryptionKey, 16); + Trinity::Crypto::Ed25519 ed25519(*EnterEncryptedModeSigner); std::vector<uint8> signature; - rsa.Sign(msg, digestGenerator, signature); + ed25519.SignWithContext(toSign, { EnableEncryptionContext.begin(), EnableEncryptionContext.end() }, signature); _worldPacket.append(signature.data(), signature.size()); _worldPacket.WriteBit(Enabled); diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index aa4216ec30e..fae780f5835 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -288,14 +288,17 @@ namespace WorldPackets class EnterEncryptedMode final : public ServerPacket { public: - EnterEncryptedMode(uint8 const* encryptionKey, bool enabled) : ServerPacket(SMSG_ENTER_ENCRYPTED_MODE, 256 + 1), + static bool InitializeEncryption(); + static void ShutdownEncryption(); + + EnterEncryptedMode(std::array<uint8, 16> const& encryptionKey, bool enabled) : ServerPacket(SMSG_ENTER_ENCRYPTED_MODE, 256 + 1), EncryptionKey(encryptionKey), Enabled(enabled) { } WorldPacket const* Write() override; - uint8 const* EncryptionKey; + std::array<uint8, 16> const& EncryptionKey; bool Enabled = false; }; } diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp index ec0162d20f9..f0ee217503d 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp @@ -178,6 +178,7 @@ ByteBuffer& operator<<(ByteBuffer& data, ContentTuningParams const& contentTunin data << uint32(contentTuningParams.Flags); data << int32(contentTuningParams.PlayerContentTuningID); data << int32(contentTuningParams.TargetContentTuningID); + data << int32(contentTuningParams.Unused927); data.WriteBits(contentTuningParams.Type, 4); data.FlushBits(); return data; diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h index 1a1413c58e1..325338223c2 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h @@ -76,6 +76,7 @@ namespace WorldPackets uint32 Flags = NO_LEVEL_SCALING | NO_ITEM_LEVEL_SCALING; int32 PlayerContentTuningID = 0; int32 TargetContentTuningID = 0; + int32 Unused927 = 0; template<class T, class U> bool GenerateDataForUnits(T* attacker, U* target); diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 3041da8f2f1..bfbe9f748a4 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -178,7 +178,7 @@ void WorldPackets::Misc::TutorialSetFlag::Read() WorldPacket const* WorldPackets::Misc::WorldServerInfo::Write() { _worldPacket << uint32(DifficultyID); - _worldPacket << uint8(IsTournamentRealm); + _worldPacket.WriteBit(IsTournamentRealm); _worldPacket.WriteBit(XRealmPvpAlert); _worldPacket.WriteBit(BlockExitingLoadingScreen); _worldPacket.WriteBit(RestrictedAccountMaxLevel.has_value()); diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 7302fd6deb9..ead73143901 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -262,7 +262,7 @@ namespace WorldPackets WorldPacket const* Write() override; uint32 DifficultyID = 0; - uint8 IsTournamentRealm = 0; + bool IsTournamentRealm = false; bool XRealmPvpAlert = false; bool BlockExitingLoadingScreen = false; // when set to true, sending SMSG_UPDATE_OBJECT with CreateObject Self bit = true will not hide loading screen // instead it will be done after this packet is sent again with false in this bit and SMSG_UPDATE_OBJECT Values for player diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 2c831e6db8d..4b53c885e06 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -483,6 +483,7 @@ WorldPacket const* WorldPackets::Party::PartyUpdate::Write() _worldPacket << PartyGUID; _worldPacket << uint32(SequenceNum); _worldPacket << LeaderGUID; + _worldPacket << uint8(LeaderFactionGroup); _worldPacket << uint32(PlayerList.size()); _worldPacket.WriteBit(LfgInfos.has_value()); _worldPacket.WriteBit(LootSettings.has_value()); diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index d3dd89c06e3..355e576f95d 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -556,6 +556,7 @@ namespace WorldPackets ObjectGuid PartyGUID; ObjectGuid LeaderGUID; + uint8 LeaderFactionGroup = 0; int32 MyIndex = 0; int32 SequenceNum = 0; diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index 992e031d039..5f6304d4bee 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -81,6 +81,7 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << uint32(GameRuleValues.size()); _worldPacket << int16(MaxPlayerNameQueriesPerPacket); + _worldPacket << int16(PlayerNameQueryTelemetryInterval); for (GameRuleValuePair const& gameRuleValue : GameRuleValues) _worldPacket << gameRuleValue; @@ -208,6 +209,7 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket << int32(ActiveSeason); _worldPacket << uint32(GameRuleValues.size()); _worldPacket << int16(MaxPlayerNameQueriesPerPacket); + _worldPacket << int16(PlayerNameQueryTelemetryInterval); if (LaunchETA) _worldPacket << int32(*LaunchETA); diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index b55ad06e5a1..f6a3d37c133 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -130,6 +130,7 @@ namespace WorldPackets uint32 KioskSessionMinutes = 0; int32 ActiveSeason = 0; ///< Currently active Classic season int16 MaxPlayerNameQueriesPerPacket = 50; + int16 PlayerNameQueryTelemetryInterval = 600; bool ItemRestorationButtonEnabled = false; bool CharUndeleteEnabled = false; ///< Implemented bool BpayStoreDisabledByParentalControls = false; @@ -203,6 +204,7 @@ namespace WorldPackets int32 ActiveSeason = 0; // Currently active Classic season std::vector<GameRuleValuePair> GameRuleValues; int16 MaxPlayerNameQueriesPerPacket = 50; + int16 PlayerNameQueryTelemetryInterval = 600; Optional<int32> LaunchETA; }; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index c9e1bb8b16a..9782e06dc85 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -994,6 +994,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_CLOSED_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_DISABLE_POSTING_BEFORE_MAINTENANCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_FAVORITE_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_HELLO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 9b46b07f36b..02507572377 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -900,6 +900,7 @@ enum OpcodeServer : uint16 SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27C5, SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26E7, SMSG_AUCTION_COMMAND_RESULT = 0x26E4, + SMSG_AUCTION_DISABLE_POSTING_BEFORE_MAINTENANCE = 0x287F, SMSG_AUCTION_FAVORITE_LIST = 0x285F, SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x2856, SMSG_AUCTION_HELLO_RESPONSE = 0x26E2, diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 35e87c0e86f..f762e100f3d 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -884,7 +884,7 @@ void WorldSocket::LoadSessionPermissionsCallback(PreparedQueryResult result) // RBAC must be loaded before adding session to check for skip queue permission _worldSession->GetRBACData()->LoadFromDBCallback(result); - SendPacketAndLogOpcode(*WorldPackets::Auth::EnterEncryptedMode(_encryptKey.data(), true).Write()); + SendPacketAndLogOpcode(*WorldPackets::Auth::EnterEncryptedMode(_encryptKey, true).Write()); } void WorldSocket::HandleAuthContinuedSession(std::shared_ptr<WorldPackets::Auth::AuthContinuedSession> authSession) @@ -947,7 +947,7 @@ void WorldSocket::HandleAuthContinuedSessionCallback(std::shared_ptr<WorldPacket // only first 16 bytes of the hmac are used memcpy(_encryptKey.data(), encryptKeyGen.GetDigest().data(), 16); - SendPacketAndLogOpcode(*WorldPackets::Auth::EnterEncryptedMode(_encryptKey.data(), true).Write()); + SendPacketAndLogOpcode(*WorldPackets::Auth::EnterEncryptedMode(_encryptKey, true).Write()); AsyncRead(); } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 6dab922968a..33ca3786630 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2431,6 +2431,7 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Initializing Opcodes..."); opcodeTable.Initialize(); WorldPackets::Auth::ConnectTo::InitializeEncryption(); + WorldPackets::Auth::EnterEncryptedMode::InitializeEncryption(); TC_LOG_INFO("server.loading", "Starting Arena Season..."); sGameEventMgr->StartArenaSeason(); diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index a6da765c21c..c78b42f152d 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -403,6 +403,7 @@ extern int main(int argc, char** argv) // Shutdown starts here WorldPackets::Auth::ConnectTo::ShutdownEncryption(); + WorldPackets::Auth::EnterEncryptedMode::ShutdownEncryption(); threadPool.reset(); |