aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-05-18 22:21:17 +0200
committerShauren <shauren.trinity@gmail.com>2019-06-08 17:03:15 +0200
commit31fda79556e55375962a3c9e46f6dbdbf6e90d18 (patch)
tree36ee91cb16772fa58e0a1eac973f82b437306af9 /src/server/game/Server/Packets
parent9685c9346dfe06ad1d248ff4e128e0d0b8dbfcea (diff)
Core/PacketIO: Updated packet structures to 8.1.5
Diffstat (limited to 'src/server/game/Server/Packets')
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.h5
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp16
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h9
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp3
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.h1
-rw-r--r--src/server/game/Server/Packets/DuelPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.h6
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h3
-rw-r--r--src/server/game/Server/Packets/HotfixPackets.cpp55
-rw-r--r--src/server/game/Server/Packets/HotfixPackets.h24
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp81
-rw-r--r--src/server/game/Server/Packets/InspectPackets.h80
-rw-r--r--src/server/game/Server/Packets/InstancePackets.h2
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.cpp14
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.h2
-rw-r--r--src/server/game/Server/Packets/LFGPackets.cpp13
-rw-r--r--src/server/game/Server/Packets/LFGPackets.h3
-rw-r--r--src/server/game/Server/Packets/LootPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/LootPackets.h3
-rw-r--r--src/server/game/Server/Packets/MailPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/MailPackets.h4
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h3
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h2
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h1
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h10
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h3
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp13
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h7
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.h2
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp37
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h31
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h2
-rw-r--r--src/server/game/Server/Packets/TokenPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/TokenPackets.h2
-rw-r--r--src/server/game/Server/Packets/ToyPackets.cpp23
-rw-r--r--src/server/game/Server/Packets/ToyPackets.h10
46 files changed, 314 insertions, 214 deletions
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp
index 37d63a5e939..f4cd72123db 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.cpp
+++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp
@@ -21,6 +21,7 @@ WorldPacket const* WorldPackets::Battleground::PVPSeason::Write()
{
_worldPacket << uint32(CurrentSeason);
_worldPacket << uint32(PreviousSeason);
+ _worldPacket << uint32(PvpSeasonID);
return &_worldPacket;
}
@@ -125,10 +126,11 @@ WorldPacket const* WorldPackets::Battleground::PVPLogData::Write()
void WorldPackets::Battleground::BattlemasterJoin::Read()
{
- _worldPacket >> QueueID;
+ QueueIDs.resize(_worldPacket.read<uint32>());
_worldPacket >> Roles;
_worldPacket >> BlacklistMap[0] >> BlacklistMap[1];
- JoinAsGroup = _worldPacket.ReadBit();
+ for (uint64& queueId : QueueIDs)
+ _worldPacket >> queueId;
}
void WorldPackets::Battleground::BattlemasterJoinArena::Read()
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h
index 60d1d5ee210..c470ad7bbf6 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.h
+++ b/src/server/game/Server/Packets/BattlegroundPackets.h
@@ -22,6 +22,7 @@
#include "LFGPacketsCommon.h"
#include "ObjectGuid.h"
#include "Optional.h"
+#include "PacketUtilities.h"
#include "Position.h"
namespace WorldPackets
@@ -37,6 +38,7 @@ namespace WorldPackets
uint32 PreviousSeason = 0;
uint32 CurrentSeason = 0;
+ uint32 PvpSeasonID = 0;
};
class AreaSpiritHealerQuery final : public ClientPacket
@@ -220,9 +222,8 @@ namespace WorldPackets
void Read() override;
- bool JoinAsGroup = false;
+ Array<uint64, 1> QueueIDs;
uint8 Roles = 0;
- uint64 QueueID = 0;
int32 BlacklistMap[2] = { };
};
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index afd7b7bb87c..1739ef13eb9 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -117,7 +117,7 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(Class, fields[29].GetUInt8()))
SpecID = spec->ID;
- LastLoginBuild = fields[30].GetUInt32();
+ LastLoginVersion = fields[30].GetUInt32();
for (uint8 slot = 0; slot < INVENTORY_SLOT_BAG_END; ++slot)
{
@@ -172,7 +172,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharacters
data << uint32(charInfo.LastPlayedTime);
data << uint16(charInfo.SpecID);
data << uint32(charInfo.Unknown703);
- data << uint32(charInfo.LastLoginBuild);
+ data << uint32(charInfo.LastLoginVersion);
data << uint32(charInfo.Flags4);
data.WriteBits(charInfo.Name.length(), 6);
data.WriteBit(charInfo.FirstLogin);
@@ -196,6 +196,14 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharacters
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::UnlockedConditionalAppearance const& unlockedConditionalAppearance)
+{
+ data << int32(unlockedConditionalAppearance.AchievementID);
+ data << int32(unlockedConditionalAppearance.Unused);
+
+ return data;
+}
+
WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write()
{
_worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock));
@@ -210,10 +218,14 @@ WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write()
_worldPacket << uint32(Characters.size());
_worldPacket << int32(MaxCharacterLevel);
_worldPacket << uint32(RaceUnlockData.size());
+ _worldPacket << uint32(UnlockedConditionalAppearances.size());
if (DisabledClassesMask)
_worldPacket << uint32(*DisabledClassesMask);
+ for (UnlockedConditionalAppearance const& unlockedConditionalAppearance : UnlockedConditionalAppearances)
+ _worldPacket << unlockedConditionalAppearance;
+
for (CharacterInfo const& charInfo : Characters)
_worldPacket << charInfo;
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index d21c38b2afc..90f460b298d 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -148,7 +148,7 @@ namespace WorldPackets
uint32 LastPlayedTime = 0;
uint16 SpecID = 0;
uint32 Unknown703 = 0;
- uint32 LastLoginBuild = 0;
+ uint32 LastLoginVersion = 0;
struct PetInfo
{
@@ -178,6 +178,12 @@ namespace WorldPackets
bool HasHeritageArmor = false;
};
+ struct UnlockedConditionalAppearance
+ {
+ int32 AchievementID = 0;
+ int32 Unused = 0;
+ };
+
EnumCharactersResult() : ServerPacket(SMSG_ENUM_CHARACTERS_RESULT) { }
WorldPacket const* Write() override;
@@ -194,6 +200,7 @@ namespace WorldPackets
std::vector<CharacterInfo> Characters; ///< all characters on the list
std::vector<RaceUnlock> RaceUnlockData; ///<
+ std::vector<UnlockedConditionalAppearance> UnlockedConditionalAppearances;
};
class CreateCharacter final : public ClientPacket
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp
index 8b9a1a05c76..4bfc5d5062f 100644
--- a/src/server/game/Server/Packets/ChatPackets.cpp
+++ b/src/server/game/Server/Packets/ChatPackets.cpp
@@ -242,7 +242,7 @@ WorldPacket const* WorldPackets::Chat::ChatPlayerNotfound::Write()
WorldPacket const* WorldPackets::Chat::ChatServerMessage::Write()
{
- _worldPacket << MessageID;
+ _worldPacket << int32(MessageID);
_worldPacket.WriteBits(StringParam.length(), 11);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index 86c999ddd83..fbc37cf5bf1 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -68,6 +68,7 @@ namespace WorldPackets
Type = TYPE_CREATURE_TO_PLAYER_DAMAGE;
PlayerLevelDelta = target->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
PlayerItemLevel = target->GetAverageItemLevel();
+ TargetItemLevel = 0;
ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID);
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
@@ -85,6 +86,7 @@ namespace WorldPackets
Type = TYPE_PLAYER_TO_CREATURE_DAMAGE;
PlayerLevelDelta = attacker->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
PlayerItemLevel = attacker->GetAverageItemLevel();
+ TargetItemLevel = 0;
ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID);
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
@@ -171,6 +173,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::ContentTuningPara
{
data << int16(contentTuningParams.PlayerLevelDelta);
data << uint16(contentTuningParams.PlayerItemLevel);
+ data << uint16(contentTuningParams.TargetItemLevel);
data << uint16(contentTuningParams.ScalingHealthItemLevelCurveID);
data << uint8(contentTuningParams.TargetLevel);
data << uint8(contentTuningParams.Expansion);
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
index 40d317e7e02..10fcf040b09 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
@@ -62,6 +62,7 @@ namespace WorldPackets
uint32 Type = 0;
int16 PlayerLevelDelta = 0;
uint16 PlayerItemLevel = 0;
+ uint16 TargetItemLevel = 0;
uint16 ScalingHealthItemLevelCurveID = 0;
uint8 TargetLevel = 0;
uint8 Expansion = 0;
diff --git a/src/server/game/Server/Packets/DuelPackets.cpp b/src/server/game/Server/Packets/DuelPackets.cpp
index 7d2602c4e41..dd358c8cee8 100644
--- a/src/server/game/Server/Packets/DuelPackets.cpp
+++ b/src/server/game/Server/Packets/DuelPackets.cpp
@@ -41,7 +41,7 @@ WorldPacket const* WorldPackets::Duel::DuelComplete::Write()
WorldPacket const* WorldPackets::Duel::DuelCountdown::Write()
{
- _worldPacket << Countdown;
+ _worldPacket << uint32(Countdown);
return &_worldPacket;
}
@@ -67,8 +67,8 @@ WorldPacket const* WorldPackets::Duel::DuelWinner::Write()
_worldPacket.WriteBits(BeatenName.size(), 6);
_worldPacket.WriteBits(WinnerName.size(), 6);
_worldPacket.WriteBit(Fled);
- _worldPacket << BeatenVirtualRealmAddress;
- _worldPacket << WinnerVirtualRealmAddress;
+ _worldPacket << uint32(BeatenVirtualRealmAddress);
+ _worldPacket << uint32(WinnerVirtualRealmAddress);
_worldPacket.WriteString(BeatenName);
_worldPacket.WriteString(WinnerName);
diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp
index 48732b43aba..ec37ad28893 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.cpp
+++ b/src/server/game/Server/Packets/GarrisonPackets.cpp
@@ -110,7 +110,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMission
return data;
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMissionAreaBonus const& areaBonus)
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonMissionBonusAbility const& areaBonus)
{
data << uint32(areaBonus.GarrMssnBonusAbilityID);
data << uint32(areaBonus.StartTime);
@@ -169,7 +169,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Garrison::GarrisonInfo co
data << missionRewardItem;
}
- for (WorldPackets::Garrison::GarrisonMissionAreaBonus const* areaBonus : garrison.MissionAreaBonuses)
+ for (WorldPackets::Garrison::GarrisonMissionBonusAbility const* areaBonus : garrison.MissionAreaBonuses)
data << *areaBonus;
for (WorldPackets::Garrison::GarrisonTalent const& talent : garrison.Talents)
diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h
index 7ec0b01c3e6..7eddbb46cf9 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.h
+++ b/src/server/game/Server/Packets/GarrisonPackets.h
@@ -122,7 +122,7 @@ namespace WorldPackets
int32 Unknown = 0;
};
- struct GarrisonMissionAreaBonus
+ struct GarrisonMissionBonusAbility
{
uint32 GarrMssnBonusAbilityID = 0;
time_t StartTime = time_t(0);
@@ -148,7 +148,7 @@ namespace WorldPackets
std::vector<GarrisonMission const*> Missions;
std::vector<std::vector<GarrisonMissionReward>> MissionRewards;
std::vector<std::vector<GarrisonMissionReward>> MissionOvermaxRewards;
- std::vector<GarrisonMissionAreaBonus const*> MissionAreaBonuses;
+ std::vector<GarrisonMissionBonusAbility const*> MissionAreaBonuses;
std::vector<GarrisonTalent> Talents;
std::vector<bool> CanStartMission;
std::vector<int32> ArchivedMissions;
@@ -353,7 +353,7 @@ namespace WorldPackets
class GarrisonRemoveFollowerResult final : public ServerPacket
{
public:
- GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 8 + 4) { }
+ GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 8 + 4 + 4) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 0a2868685af..56768fafe8f 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -29,6 +29,7 @@ WorldPackets::Guild::QueryGuildInfoResponse::QueryGuildInfoResponse()
WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write()
{
_worldPacket << GuildGuid;
+ _worldPacket << PlayerGuid;
_worldPacket.WriteBit(Info.is_initialized());
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index 919fed8a88b..b72d4857d48 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -78,6 +78,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid GuildGuid;
+ ObjectGuid PlayerGuid;
Optional<GuildInfo> Info;
};
@@ -883,7 +884,7 @@ namespace WorldPackets
class GuildBankTextQueryResult : public ServerPacket
{
public:
- GuildBankTextQueryResult() : ServerPacket(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, 5) { }
+ GuildBankTextQueryResult() : ServerPacket(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, 4 + 2) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/HotfixPackets.cpp b/src/server/game/Server/Packets/HotfixPackets.cpp
index aee733ab4db..cf147b91031 100644
--- a/src/server/game/Server/Packets/HotfixPackets.cpp
+++ b/src/server/game/Server/Packets/HotfixPackets.cpp
@@ -47,36 +47,64 @@ WorldPacket const* WorldPackets::Hotfix::DBReply::Write()
WorldPacket const* WorldPackets::Hotfix::AvailableHotfixes::Write()
{
_worldPacket << int32(HotfixCacheVersion);
- _worldPacket << uint32(Hotfixes.size());
+ _worldPacket << uint32(HotfixCount);
for (auto const& hotfixEntry : Hotfixes)
- _worldPacket << uint64(hotfixEntry.first);
+ {
+ for (auto const& tableRecord : hotfixEntry.second)
+ {
+ _worldPacket << uint32(tableRecord.first);
+ _worldPacket << int32(tableRecord.second);
+ _worldPacket << int32(hotfixEntry.first);
+ }
+ }
return &_worldPacket;
}
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Hotfix::HotfixRecord& hotfixRecord)
+{
+ data >> hotfixRecord.TableHash;
+ data >> hotfixRecord.RecordID;
+ data >> hotfixRecord.HotfixID;
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Hotfix::HotfixRecord const& hotfixRecord)
+{
+ data << uint32(hotfixRecord.TableHash);
+ data << int32(hotfixRecord.RecordID);
+ data << int32(hotfixRecord.HotfixID);
+ return data;
+}
+
void WorldPackets::Hotfix::HotfixRequest::Read()
{
+ _worldPacket >> ClientBuild;
+ _worldPacket >> DataBuild;
+
uint32 hotfixCount = _worldPacket.read<uint32>();
- if (hotfixCount > sDB2Manager.GetHotfixData().size())
- throw PacketArrayMaxCapacityException(hotfixCount, sDB2Manager.GetHotfixData().size());
+ if (hotfixCount > sDB2Manager.GetHotfixCount())
+ throw PacketArrayMaxCapacityException(hotfixCount, sDB2Manager.GetHotfixCount());
Hotfixes.resize(hotfixCount);
- for (uint64& hotfixId : Hotfixes)
- _worldPacket >> hotfixId;
+ for (HotfixRecord& hotfixRecord : Hotfixes)
+ _worldPacket >> hotfixRecord;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Hotfix::HotfixResponse::HotfixData const& hotfixData)
{
- data << uint64(hotfixData.ID);
- data << int32(hotfixData.RecordID);
- data.WriteBit(hotfixData.Data.is_initialized());
- if (hotfixData.Data)
+ data << hotfixData.Record;
+ if (hotfixData.Size)
{
- data << uint32(hotfixData.Data->size());
- data.append(*hotfixData.Data);
+ data << uint32(*hotfixData.Size);
+ data.WriteBit(true);
}
else
+ {
data << uint32(0);
+ data.WriteBit(false);
+ }
+ data.FlushBits();
return data;
}
@@ -87,5 +115,8 @@ WorldPacket const* WorldPackets::Hotfix::HotfixResponse::Write()
for (HotfixData const& hotfix : Hotfixes)
_worldPacket << hotfix;
+ _worldPacket << uint32(HotfixContent.size());
+ _worldPacket.append(HotfixContent);
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/HotfixPackets.h b/src/server/game/Server/Packets/HotfixPackets.h
index 9f0a4a1176f..100b51a5fb2 100644
--- a/src/server/game/Server/Packets/HotfixPackets.h
+++ b/src/server/game/Server/Packets/HotfixPackets.h
@@ -62,13 +62,21 @@ namespace WorldPackets
class AvailableHotfixes final : public ServerPacket
{
public:
- AvailableHotfixes(int32 hotfixCacheVersion, std::map<uint64, int32> const& hotfixes)
- : ServerPacket(SMSG_AVAILABLE_HOTFIXES), HotfixCacheVersion(hotfixCacheVersion), Hotfixes(hotfixes) { }
+ AvailableHotfixes(int32 hotfixCacheVersion, uint32 hotfixCount, DB2Manager::HotfixContainer const& hotfixes)
+ : ServerPacket(SMSG_AVAILABLE_HOTFIXES), HotfixCacheVersion(hotfixCacheVersion), HotfixCount(hotfixCount), Hotfixes(hotfixes) { }
WorldPacket const* Write() override;
int32 HotfixCacheVersion;
- std::map<uint64, int32> const& Hotfixes;
+ uint32 HotfixCount;
+ DB2Manager::HotfixContainer const& Hotfixes;
+ };
+
+ struct HotfixRecord
+ {
+ uint32 TableHash = 0;
+ int32 RecordID = 0;
+ int32 HotfixID = 0;
};
class HotfixRequest final : public ClientPacket
@@ -78,7 +86,9 @@ namespace WorldPackets
void Read() override;
- std::vector<uint64> Hotfixes;
+ uint32 ClientBuild = 0;
+ uint32 DataBuild = 0;
+ std::vector<HotfixRecord> Hotfixes;
};
class HotfixResponse final : public ServerPacket
@@ -86,9 +96,8 @@ namespace WorldPackets
public:
struct HotfixData
{
- uint64 ID = 0;
- int32 RecordID = 0;
- Optional<ByteBuffer> Data;
+ HotfixRecord Record;
+ Optional<uint32> Size;
};
HotfixResponse() : ServerPacket(SMSG_HOTFIX_RESPONSE) { }
@@ -96,6 +105,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
std::vector<HotfixData> Hotfixes;
+ ByteBuffer HotfixContent;
};
}
}
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp
index 415aedaa56a..8a36270bec2 100644
--- a/src/server/game/Server/Packets/InspectPackets.cpp
+++ b/src/server/game/Server/Packets/InspectPackets.cpp
@@ -63,6 +63,24 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectGuildData
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData const& bracket)
+{
+ data << uint8(bracket.Bracket);
+ data << int32(bracket.Rating);
+ data << int32(bracket.Rank);
+ data << int32(bracket.WeeklyPlayed);
+ data << int32(bracket.WeeklyWon);
+ data << int32(bracket.SeasonPlayed);
+ data << int32(bracket.SeasonWon);
+ data << int32(bracket.WeeklyBestRating);
+ data << int32(bracket.Unk710);
+ data << int32(bracket.Unk801_1);
+ data.WriteBit(bracket.Unk801_2);
+ data.FlushBits();
+
+ return data;
+}
+
WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint8 index)
{
CreatorGUID = item->GetGuidValue(ITEM_FIELD_CREATOR);
@@ -100,6 +118,11 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
_worldPacket << int32(ClassID);
_worldPacket << int32(SpecializationID);
_worldPacket << int32(GenderID);
+ _worldPacket << uint8(LifetimeMaxRank);
+ _worldPacket << uint16(TodayHK);
+ _worldPacket << uint16(YesterdayHK);
+ _worldPacket << uint32(LifetimeHK);
+ _worldPacket << uint32(HonorLevel);
if (!Glyphs.empty())
_worldPacket.append(Glyphs.data(), Glyphs.size());
if (!Talents.empty())
@@ -111,8 +134,8 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
_worldPacket.WriteBit(AzeriteLevel.is_initialized());
_worldPacket.FlushBits();
- for (size_t i = 0; i < Items.size(); ++i)
- _worldPacket << Items[i];
+ for (PVPBracketData const& bracket : Bracket)
+ _worldPacket << bracket;
if (GuildData)
_worldPacket << *GuildData;
@@ -120,58 +143,8 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
if (AzeriteLevel)
_worldPacket << int32(*AzeriteLevel);
- return &_worldPacket;
-}
-
-void WorldPackets::Inspect::RequestHonorStats::Read()
-{
- _worldPacket >> TargetGUID;
-}
-
-WorldPacket const* WorldPackets::Inspect::InspectHonorStats::Write()
-{
- _worldPacket << PlayerGUID;
- _worldPacket << uint8(LifetimeMaxRank);
- _worldPacket << uint16(YesterdayHK); /// @todo: confirm order
- _worldPacket << uint16(TodayHK); /// @todo: confirm order
- _worldPacket << uint32(LifetimeHK);
-
- return &_worldPacket;
-}
-
-void WorldPackets::Inspect::InspectPVPRequest::Read()
-{
- _worldPacket >> InspectTarget;
- _worldPacket >> InspectRealmAddress;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData const& bracket)
-{
- data << uint8(bracket.Bracket);
- data << int32(bracket.Rating);
- data << int32(bracket.Rank);
- data << int32(bracket.WeeklyPlayed);
- data << int32(bracket.WeeklyWon);
- data << int32(bracket.SeasonPlayed);
- data << int32(bracket.SeasonWon);
- data << int32(bracket.WeeklyBestRating);
- data << int32(bracket.Unk710);
- data << int32(bracket.Unk801_1);
- data.WriteBit(bracket.Unk801_2);
- data.FlushBits();
-
- return data;
-}
-
-WorldPacket const* WorldPackets::Inspect::InspectPVPResponse::Write()
-{
- _worldPacket << ClientGUID;
-
- _worldPacket.WriteBits(Bracket.size(), 3);
- _worldPacket.FlushBits();
-
- for (size_t i = 0; i < Bracket.size(); ++i)
- _worldPacket << Bracket[i];
+ for (InspectItemData const& item : Items)
+ _worldPacket << item;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h
index e16507904b9..51b1248e286 100644
--- a/src/server/game/Server/Packets/InspectPackets.h
+++ b/src/server/game/Server/Packets/InspectPackets.h
@@ -67,6 +67,21 @@ namespace WorldPackets
int32 AchievementPoints = 0;
};
+ struct PVPBracketData
+ {
+ int32 Rating = 0;
+ int32 Rank = 0;
+ int32 WeeklyPlayed = 0;
+ int32 WeeklyWon = 0;
+ int32 SeasonPlayed = 0;
+ int32 SeasonWon = 0;
+ int32 WeeklyBestRating = 0;
+ int32 Unk710 = 0;
+ int32 Unk801_1 = 0;
+ uint8 Bracket = 0;
+ bool Unk801_2 = false;
+ };
+
class InspectResult final : public ServerPacket
{
public:
@@ -85,71 +100,16 @@ namespace WorldPackets
int32 ClassID = CLASS_NONE;
int32 GenderID = GENDER_NONE;
Optional<InspectGuildData> GuildData;
+ std::array<PVPBracketData, 6> Bracket;
int32 SpecializationID = 0;
Optional<int32> AzeriteLevel;
- };
-
- class RequestHonorStats final : public ClientPacket
- {
- public:
- RequestHonorStats(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_HONOR_STATS, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid TargetGUID;
- };
-
- class InspectHonorStats final : public ServerPacket
- {
- public:
- InspectHonorStats() : ServerPacket(SMSG_INSPECT_HONOR_STATS, 25) { }
-
- WorldPacket const* Write() override;
-
- ObjectGuid PlayerGUID;
- uint32 LifetimeHK = 0;
- uint16 YesterdayHK = 0;
- uint16 TodayHK = 0;
+ uint32 LifetimeHK = 0;
+ uint32 HonorLevel = 0;
+ uint16 TodayHK = 0;
+ uint16 YesterdayHK = 0;
uint8 LifetimeMaxRank = 0;
};
- class InspectPVPRequest final : public ClientPacket
- {
- public:
- InspectPVPRequest(WorldPacket&& packet) : ClientPacket(CMSG_INSPECT_PVP, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid InspectTarget;
- uint32 InspectRealmAddress = 0;
- };
-
- struct PVPBracketData
- {
- int32 Rating = 0;
- int32 Rank = 0;
- int32 WeeklyPlayed = 0;
- int32 WeeklyWon = 0;
- int32 SeasonPlayed = 0;
- int32 SeasonWon = 0;
- int32 WeeklyBestRating = 0;
- int32 Unk710 = 0;
- int32 Unk801_1 = 0;
- uint8 Bracket = 0;
- bool Unk801_2 = false;
- };
-
- class InspectPVPResponse final : public ServerPacket
- {
- public:
- InspectPVPResponse() : ServerPacket(SMSG_INSPECT_PVP, 17) { }
-
- WorldPacket const* Write() override;
-
- std::vector<PVPBracketData> Bracket;
- ObjectGuid ClientGUID;
- };
-
class QueryInspectAchievements final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h
index d6724f42286..311b1b14e65 100644
--- a/src/server/game/Server/Packets/InstancePackets.h
+++ b/src/server/game/Server/Packets/InstancePackets.h
@@ -229,7 +229,7 @@ namespace WorldPackets
class InstanceEncounterGainCombatResurrectionCharge final : public ServerPacket
{
public:
- InstanceEncounterGainCombatResurrectionCharge() : ServerPacket(SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE, 0) { }
+ InstanceEncounterGainCombatResurrectionCharge() : ServerPacket(SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE, 4 + 4) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
index aafdaa831b4..0803b3f044b 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
@@ -33,8 +33,6 @@ bool WorldPackets::Item::ItemBonusInstanceData::operator==(ItemBonusInstanceData
void WorldPackets::Item::ItemInstance::Initialize(::Item const* item)
{
ItemID = item->GetEntry();
- RandomPropertiesSeed = item->GetItemSuffixFactor();
- RandomPropertiesID = item->GetItemRandomPropertyId();
std::vector<uint32> const& bonusListIds = item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS);
if (!bonusListIds.empty())
{
@@ -70,9 +68,6 @@ void WorldPackets::Item::ItemInstance::Initialize(::ItemDynamicFieldGems const*
void WorldPackets::Item::ItemInstance::Initialize(::LootItem const& lootItem)
{
ItemID = lootItem.itemid;
- RandomPropertiesSeed = lootItem.randomSuffix;
- if (lootItem.randomPropertyId.Type != ItemRandomEnchantmentType::BonusList)
- RandomPropertiesID = lootItem.randomPropertyId.Id;
if (!lootItem.BonusListIDs.empty())
{
@@ -91,9 +86,6 @@ void WorldPackets::Item::ItemInstance::Initialize(::LootItem const& lootItem)
void WorldPackets::Item::ItemInstance::Initialize(::VoidStorageItem const* voidItem)
{
ItemID = voidItem->ItemEntry;
- RandomPropertiesSeed = voidItem->ItemSuffixFactor;
- if (voidItem->ItemRandomPropertyId.Type != ItemRandomEnchantmentType::BonusList)
- RandomPropertiesID = voidItem->ItemRandomPropertyId.Id;
if (voidItem->ItemUpgradeId || voidItem->FixedScalingLevel || voidItem->ArtifactKnowledgeLevel)
{
@@ -116,7 +108,7 @@ void WorldPackets::Item::ItemInstance::Initialize(::VoidStorageItem const* voidI
bool WorldPackets::Item::ItemInstance::operator==(ItemInstance const& r) const
{
- if (ItemID != r.ItemID || RandomPropertiesID != r.RandomPropertiesID || RandomPropertiesSeed != r.RandomPropertiesSeed)
+ if (ItemID != r.ItemID)
return false;
if (ItemBonus.is_initialized() != r.ItemBonus.is_initialized() || Modifications.is_initialized() != r.Modifications.is_initialized())
@@ -161,8 +153,6 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemBonusInstanceDa
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const& itemInstance)
{
data << int32(itemInstance.ItemID);
- data << int32(itemInstance.RandomPropertiesSeed);
- data << int32(itemInstance.RandomPropertiesID);
data.WriteBit(itemInstance.ItemBonus.is_initialized());
data.WriteBit(itemInstance.Modifications.is_initialized());
@@ -180,8 +170,6 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const&
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Item::ItemInstance& itemInstance)
{
data >> itemInstance.ItemID;
- data >> itemInstance.RandomPropertiesSeed;
- data >> itemInstance.RandomPropertiesID;
bool hasItemBonus = data.ReadBit();
bool hasModifications = data.ReadBit();
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.h b/src/server/game/Server/Packets/ItemPacketsCommon.h
index af7f06920b8..1c01447630e 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.h
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.h
@@ -50,8 +50,6 @@ namespace WorldPackets
void Initialize(::VoidStorageItem const* voidItem);
uint32 ItemID = 0;
- uint32 RandomPropertiesSeed = 0;
- uint32 RandomPropertiesID = 0;
Optional<ItemBonusInstanceData> ItemBonus;
Optional<CompactArray<int32>> Modifications;
diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp
index 91edfa54981..2a7707d06d0 100644
--- a/src/server/game/Server/Packets/LFGPackets.cpp
+++ b/src/server/game/Server/Packets/LFGPackets.cpp
@@ -241,13 +241,16 @@ WorldPacket const* WorldPackets::LFG::LFGRoleCheckUpdate::Write()
_worldPacket << uint8(PartyIndex);
_worldPacket << uint8(RoleCheckStatus);
_worldPacket << uint32(JoinSlots.size());
- _worldPacket << uint64(BgQueueID);
+ _worldPacket << uint32(BgQueueIDs.size());
_worldPacket << int32(GroupFinderActivityID);
_worldPacket << uint32(Members.size());
for (uint32 slot : JoinSlots)
_worldPacket << uint32(slot);
+ for (uint64 bgQueueID : BgQueueIDs)
+ _worldPacket << uint64(bgQueueID);
+
_worldPacket.WriteBit(IsBeginning);
_worldPacket.WriteBit(IsRequeue);
_worldPacket.FlushBits();
@@ -285,10 +288,18 @@ WorldPacket const* WorldPackets::LFG::LFGJoinResult::Write()
_worldPacket << uint8(Result);
_worldPacket << uint8(ResultDetail);
_worldPacket << uint32(BlackList.size());
+ _worldPacket << uint32(BlackListNames.size());
for (LFGJoinBlackList const& blackList : BlackList)
_worldPacket << blackList;
+ for (std::string const* str : BlackListNames)
+ _worldPacket.WriteBits(str->length() + 1, 24);
+
+ for (std::string const* str : BlackListNames)
+ if (!str->empty())
+ _worldPacket << *str;
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h
index aa081a98dda..b98f1d66334 100644
--- a/src/server/game/Server/Packets/LFGPackets.h
+++ b/src/server/game/Server/Packets/LFGPackets.h
@@ -269,7 +269,7 @@ namespace WorldPackets
uint8 PartyIndex = 0;
uint8 RoleCheckStatus = 0;
std::vector<uint32> JoinSlots;
- uint64 BgQueueID = 0;
+ std::vector<uint64> BgQueueIDs;
int32 GroupFinderActivityID = 0;
std::vector<LFGRoleCheckUpdateMember> Members;
bool IsBeginning = false;
@@ -305,6 +305,7 @@ namespace WorldPackets
uint8 Result = 0;
uint8 ResultDetail = 0;
std::vector<LFGJoinBlackList> BlackList;
+ std::vector<std::string const*> BlackListNames;
};
class LFGQueueStatus final : public ServerPacket
diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp
index 86b3484c6c0..ff787c11b02 100644
--- a/src/server/game/Server/Packets/LootPackets.cpp
+++ b/src/server/game/Server/Packets/LootPackets.cpp
@@ -94,7 +94,8 @@ void WorldPackets::Loot::LootRelease::Read()
WorldPacket const* WorldPackets::Loot::LootMoneyNotify::Write()
{
- _worldPacket << Money;
+ _worldPacket << uint64(Money);
+ _worldPacket << uint64(MoneyMod);
_worldPacket.WriteBit(SoleLooter);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h
index f65e54d780f..adacd5c0fb7 100644
--- a/src/server/game/Server/Packets/LootPackets.h
+++ b/src/server/game/Server/Packets/LootPackets.h
@@ -129,7 +129,8 @@ namespace WorldPackets
WorldPacket const* Write() override;
- uint32 Money = 0;
+ uint64 Money = 0;
+ uint64 MoneyMod = 0;
bool SoleLooter = false;
};
diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp
index 6ca0a994b0a..294698728ff 100644
--- a/src/server/game/Server/Packets/MailPackets.cpp
+++ b/src/server/game/Server/Packets/MailPackets.cpp
@@ -272,7 +272,7 @@ WorldPacket const* WorldPackets::Mail::MailQueryNextTimeResult::Write()
return &_worldPacket;
}
-WorldPacket const* WorldPackets::Mail::NotifyRecievedMail::Write()
+WorldPacket const* WorldPackets::Mail::NotifyReceivedMail::Write()
{
_worldPacket << float(Delay);
diff --git a/src/server/game/Server/Packets/MailPackets.h b/src/server/game/Server/Packets/MailPackets.h
index ce6a7933af5..e7851b7dccd 100644
--- a/src/server/game/Server/Packets/MailPackets.h
+++ b/src/server/game/Server/Packets/MailPackets.h
@@ -227,10 +227,10 @@ namespace WorldPackets
std::vector<MailNextTimeEntry> Next;
};
- class NotifyRecievedMail : ServerPacket
+ class NotifyReceivedMail : ServerPacket
{
public:
- NotifyRecievedMail() : ServerPacket(SMSG_NOTIFY_RECEIVED_MAIL, 4) { }
+ NotifyReceivedMail() : ServerPacket(SMSG_NOTIFY_RECEIVED_MAIL, 4) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 3f9bf709082..4039bd9e7b6 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -54,6 +54,9 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write()
_worldPacket.WriteBit(TrackedQuantity.is_initialized());
_worldPacket.WriteBit(MaxQuantity.is_initialized());
_worldPacket.WriteBit(SuppressChatLog);
+ _worldPacket.WriteBit(QuantityChange.is_initialized());
+ _worldPacket.WriteBit(QuantityGainSource.is_initialized());
+ _worldPacket.WriteBit(QuantityLostSource.is_initialized());
_worldPacket.FlushBits();
if (WeeklyQuantity)
@@ -65,6 +68,15 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write()
if (MaxQuantity)
_worldPacket << int32(*MaxQuantity);
+ if (QuantityChange)
+ _worldPacket << int32(*QuantityChange);
+
+ if (QuantityGainSource)
+ _worldPacket << int32(*QuantityGainSource);
+
+ if (QuantityLostSource)
+ _worldPacket << int32(*QuantityLostSource);
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 20ab3ac02ea..1c88f229a8c 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -109,6 +109,9 @@ namespace WorldPackets
Optional<int32> WeeklyQuantity;
Optional<int32> TrackedQuantity;
Optional<int32> MaxQuantity;
+ Optional<int32> QuantityChange;
+ Optional<int32> QuantityGainSource;
+ Optional<int32> QuantityLostSource;
bool SuppressChatLog = false;
};
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index c913637ad34..8276fb8d819 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -840,7 +840,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound
data.WriteBit(stateChange.VehicleRecID.is_initialized());
data.WriteBit(stateChange.CollisionHeight.is_initialized());
data.WriteBit(stateChange.MovementForce_.is_initialized());
- data.WriteBit(stateChange.Unknown.is_initialized());
+ data.WriteBit(stateChange.MovementForceGUID.is_initialized());
data.FlushBits();
if (stateChange.CollisionHeight)
@@ -864,8 +864,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound
if (stateChange.VehicleRecID)
data << int32(*stateChange.VehicleRecID);
- if (stateChange.Unknown)
- data << *stateChange.Unknown;
+ if (stateChange.MovementForceGUID)
+ data << *stateChange.MovementForceGUID;
if (stateChange.MovementForce_)
data << *stateChange.MovementForce_;
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 52999613fe3..f806551c24c 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -592,7 +592,7 @@ namespace WorldPackets
Optional<int32> VehicleRecID;
Optional<CollisionHeightInfo> CollisionHeight;
Optional<MovementForce> MovementForce_;
- Optional<ObjectGuid> Unknown;
+ Optional<ObjectGuid> MovementForceGUID;
};
MoveSetCompoundState() : ServerPacket(SMSG_MOVE_SET_COMPOUND_STATE, 4 + 1) { }
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 16da5d654a5..7e52b5d549a 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -64,7 +64,6 @@ WorldPacket const* WorldPackets::NPC::GossipMessage::Write()
return &_worldPacket;
}
-
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::NPC::VendorItem const &item)
{
data << uint32(item.MuID);
@@ -77,6 +76,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::NPC::VendorItem const &it
data << int32(item.PlayerConditionFailed);
data << item.Item;
data.WriteBit(item.DoNotFilterOnVendor);
+ data.WriteBit(item.Refundable);
data.FlushBits();
return data;
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index a9d9207351b..39a25e25b7b 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -114,6 +114,7 @@ namespace WorldPackets
int32 ExtendedCostID = 0;
int32 PlayerConditionFailed = 0;
bool DoNotFilterOnVendor = false;
+ bool Refundable = false;
};
class VendorInventory final : public ServerPacket
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index 93961d15c9c..1cd4ab95dad 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -418,7 +418,7 @@ WorldPacket const* WorldPackets::Party::GroupNewLeader::Write()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo const& playerInfo)
{
data.WriteBits(playerInfo.Name.size(), 6);
- data.WriteBits(playerInfo.VoiceStateID.size(), 6);
+ data.WriteBits(playerInfo.VoiceStateID.size() + 1, 6);
data.WriteBit(playerInfo.FromSocialQueue);
data.WriteBit(playerInfo.VoiceChatSilenced);
data << playerInfo.GUID;
@@ -428,7 +428,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo co
data << uint8(playerInfo.RolesAssigned);
data << uint8(playerInfo.Class);
data.WriteString(playerInfo.Name);
- data.WriteString(playerInfo.VoiceStateID);
+ if (!playerInfo.VoiceStateID.empty())
+ data << playerInfo.VoiceStateID;
return data;
}
@@ -531,7 +532,7 @@ WorldPacket const* WorldPackets::Party::RaidMarkersChanged::Write()
_worldPacket.WriteBits(RaidMarkers.size(), 4);
_worldPacket.FlushBits();
- for (RaidMarker* raidMarker : RaidMarkers)
+ for (RaidMarker const* raidMarker : RaidMarkers)
{
_worldPacket << raidMarker->TransportGUID;
_worldPacket << raidMarker->Location.GetMapId();
diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h
index 4290656c16e..3e784c10706 100644
--- a/src/server/game/Server/Packets/PartyPackets.h
+++ b/src/server/game/Server/Packets/PartyPackets.h
@@ -124,6 +124,14 @@ namespace WorldPackets
std::string Name;
};
+ class GroupUninvite final : public ServerPacket
+ {
+ public:
+ GroupUninvite() : ServerPacket(SMSG_GROUP_UNINVITE, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
class RequestPartyMemberStats final : public ClientPacket
{
public:
@@ -603,7 +611,7 @@ namespace WorldPackets
uint8 PartyIndex = 0;
uint32 ActiveMarkers = 0u;
- std::vector<RaidMarker*> RaidMarkers;
+ std::vector<RaidMarker const*> RaidMarkers;
};
class PartyKillLog final : public ServerPacket
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index 338839e993d..8f651aeea7e 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -79,6 +79,9 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
_worldPacket << int32(Stats.RequiredExpansion);
_worldPacket << int32(Stats.VignetteID);
_worldPacket << int32(Stats.Class);
+ _worldPacket << float(Stats.FadeRegionRadius);
+ _worldPacket << int32(Stats.WidgetSetID);
+ _worldPacket << int32(Stats.WidgetSetUnitConditionID);
if (!Stats.Title.empty())
_worldPacket << Stats.Title;
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index a262b2bcc2f..4331df38c85 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -82,6 +82,9 @@ namespace WorldPackets
uint32 RequiredExpansion = 0;
uint32 VignetteID = 0;
int32 Class = 0;
+ float FadeRegionRadius = 0.0f;
+ int32 WidgetSetID = 0;
+ int32 WidgetSetUnitConditionID = 0;
std::array<uint32, 2> Flags;
std::array<uint32, 2> ProxyCreatureID;
std::array<std::string, 4> Name;
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 246a45992a5..0078bb8910d 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -146,6 +146,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << uint64(Info.AllowableRaces);
_worldPacket << int32(Info.TreasurePickerID);
_worldPacket << int32(Info.Expansion);
+ _worldPacket << int32(Info.ManagedWorldStateID);
_worldPacket.WriteBits(Info.LogTitle.size(), 9);
_worldPacket.WriteBits(Info.LogDescription.size(), 12);
@@ -649,12 +650,17 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceRespon
data << int32(playerChoiceResponse.ChoiceArtFileID);
data << int32(playerChoiceResponse.Flags);
data << uint32(playerChoiceResponse.WidgetSetID);
+ data << uint32(playerChoiceResponse.UiTextureAtlasElementID);
+ data << uint32(playerChoiceResponse.SoundKitID);
data << uint8(playerChoiceResponse.GroupID);
data.WriteBits(playerChoiceResponse.Answer.length(), 9);
data.WriteBits(playerChoiceResponse.Header.length(), 9);
+ data.WriteBits(playerChoiceResponse.SubHeader.length() , 7);
+ data.WriteBits(playerChoiceResponse.ButtonTooltip.length(), 9);
data.WriteBits(playerChoiceResponse.Description.length(), 11);
data.WriteBits(playerChoiceResponse.Confirmation.length(), 7);
+ data.WriteBit(playerChoiceResponse.RewardQuestID.is_initialized());
data.WriteBit(playerChoiceResponse.Reward.is_initialized());
data.FlushBits();
@@ -663,8 +669,14 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceRespon
data.WriteString(playerChoiceResponse.Answer);
data.WriteString(playerChoiceResponse.Header);
+ data.WriteString(playerChoiceResponse.SubHeader);
+ data.WriteString(playerChoiceResponse.ButtonTooltip);
data.WriteString(playerChoiceResponse.Description);
data.WriteString(playerChoiceResponse.Confirmation);
+
+ if (playerChoiceResponse.RewardQuestID)
+ data << uint32(*playerChoiceResponse.RewardQuestID);
+
return data;
}
@@ -674,6 +686,7 @@ WorldPacket const* WorldPackets::Quest::DisplayPlayerChoice::Write()
_worldPacket << uint32(Responses.size());
_worldPacket << SenderGUID;
_worldPacket << int32(UiTextureKitID);
+ _worldPacket << uint32(SoundKitID);
_worldPacket.WriteBits(Question.length(), 8);
_worldPacket.WriteBit(CloseChoiceFrame);
_worldPacket.WriteBit(HideWarboardHeader);
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index aa449d93883..fd9ac659cae 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -162,6 +162,7 @@ namespace WorldPackets
int32 TimeAllowed = 0;
int32 TreasurePickerID = 0;
int32 Expansion = 0;
+ int32 ManagedWorldStateID = 0;
std::vector<QuestObjective> Objectives;
int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { };
int32 RewardAmount[QUEST_REWARD_ITEM_COUNT] = { };
@@ -670,12 +671,17 @@ namespace WorldPackets
int32 ChoiceArtFileID = 0;
int32 Flags = 0;
uint32 WidgetSetID = 0;
+ uint32 UiTextureAtlasElementID = 0;
+ uint32 SoundKitID = 0;
uint8 GroupID = 0;
std::string Answer;
std::string Header;
+ std::string SubHeader;
+ std::string ButtonTooltip;
std::string Description;
std::string Confirmation;
Optional<PlayerChoiceResponseReward> Reward;
+ Optional<uint32> RewardQuestID;
};
class DisplayPlayerChoice final : public ServerPacket
@@ -688,6 +694,7 @@ namespace WorldPackets
ObjectGuid SenderGUID;
int32 ChoiceID = 0;
int32 UiTextureKitID = 0;
+ uint32 SoundKitID = 0;
std::string Question;
std::vector<PlayerChoiceResponse> Responses;
bool CloseChoiceFrame = false;
diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h
index 3cd07e55845..9ad7efafc27 100644
--- a/src/server/game/Server/Packets/ReputationPackets.h
+++ b/src/server/game/Server/Packets/ReputationPackets.h
@@ -25,7 +25,7 @@ namespace WorldPackets
{
namespace Reputation
{
- static uint16 const FactionCount = 300;
+ static uint16 const FactionCount = 350;
class InitializeFactions final : public ServerPacket
{
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index 9469e675876..3e434f4899b 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -171,7 +171,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellTargetData
{
buffer.ResetBitPos();
- targetData.Flags = buffer.ReadBits(25);
+ targetData.Flags = buffer.ReadBits(26);
bool hasSrcLocation = buffer.ReadBit();
bool hasDstLocation = buffer.ReadBit();
bool hasOrientation = buffer.ReadBit();
@@ -274,7 +274,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::TargetLocation co
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellTargetData const& spellTargetData)
{
- data.WriteBits(spellTargetData.Flags, 25);
+ data.WriteBits(spellTargetData.Flags, 26);
data.WriteBit(spellTargetData.SrcLocation.is_initialized());
data.WriteBit(spellTargetData.DstLocation.is_initialized());
data.WriteBit(spellTargetData.Orientation.is_initialized());
@@ -312,6 +312,12 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellMissStatus c
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellHitStatus const& spellHitStatus)
+{
+ data << uint8(spellHitStatus.Reason);
+ return data;
+}
+
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellPowerData const& spellPowerData)
{
data << int32(spellPowerData.Cost);
@@ -377,22 +383,26 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastData con
data << spellCastData.Predict;
data.WriteBits(spellCastData.HitTargets.size(), 16);
data.WriteBits(spellCastData.MissTargets.size(), 16);
+ data.WriteBits(spellCastData.HitStatus.size(), 16);
data.WriteBits(spellCastData.MissStatus.size(), 16);
data.WriteBits(spellCastData.RemainingPower.size(), 9);
data.WriteBit(spellCastData.RemainingRunes.is_initialized());
data.WriteBits(spellCastData.TargetPoints.size(), 16);
data.FlushBits();
- for (WorldPackets::Spells::SpellMissStatus const& status : spellCastData.MissStatus)
- data << status;
+ for (WorldPackets::Spells::SpellMissStatus const& missStatus : spellCastData.MissStatus)
+ data << missStatus;
data << spellCastData.Target;
- for (ObjectGuid const& target : spellCastData.HitTargets)
- data << target;
+ for (ObjectGuid const& hitTarget : spellCastData.HitTargets)
+ data << hitTarget;
+
+ for (ObjectGuid const& missTarget : spellCastData.MissTargets)
+ data << missTarget;
- for (ObjectGuid const& target : spellCastData.MissTargets)
- data << target;
+ for (WorldPackets::Spells::SpellHitStatus const& hitStatus : spellCastData.HitStatus)
+ data << hitStatus;
for (WorldPackets::Spells::SpellPowerData const& power : spellCastData.RemainingPower)
data << power;
@@ -717,8 +727,8 @@ WorldPacket const* WorldPackets::Spells::PlayOrphanSpellVisual::Write()
_worldPacket << Target;
_worldPacket << int32(SpellVisualID);
_worldPacket << float(TravelSpeed);
- _worldPacket << float(UnkZero);
- _worldPacket << float(Unk801);
+ _worldPacket << float(LaunchDelay);
+ _worldPacket << float(MinDuration);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket.FlushBits();
@@ -729,14 +739,15 @@ WorldPacket const* WorldPackets::Spells::PlaySpellVisual::Write()
{
_worldPacket << Source;
_worldPacket << Target;
- _worldPacket << Unk801_1;
+ _worldPacket << Transport;
_worldPacket << TargetPosition;
_worldPacket << uint32(SpellVisualID);
_worldPacket << float(TravelSpeed);
+ _worldPacket << uint16(HitReason);
_worldPacket << uint16(MissReason);
_worldPacket << uint16(ReflectStatus);
- _worldPacket << float(Orientation);
- _worldPacket << float(Unk801_2);
+ _worldPacket << float(LaunchDelay);
+ _worldPacket << float(MinDuration);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 919666c9b53..8e1d46cc3da 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -297,8 +297,19 @@ namespace WorldPackets
ObjectGuid ServerCastID;
};
+ struct SpellHitStatus
+ {
+ SpellHitStatus() { }
+ SpellHitStatus(uint8 reason) : Reason(reason) { }
+
+ uint8 Reason;
+ };
+
struct SpellMissStatus
{
+ SpellMissStatus() { }
+ SpellMissStatus(uint8 reason, uint8 reflectStatus) : Reason(reason), ReflectStatus(reflectStatus) { }
+
uint8 Reason = 0;
uint8 ReflectStatus = 0;
};
@@ -354,6 +365,7 @@ namespace WorldPackets
uint32 CastTime = 0;
std::vector<ObjectGuid> HitTargets;
std::vector<ObjectGuid> MissTargets;
+ std::vector<SpellHitStatus> HitStatus;
std::vector<SpellMissStatus> MissStatus;
SpellTargetData Target;
std::vector<SpellPowerData> RemainingPower;
@@ -699,8 +711,8 @@ namespace WorldPackets
int32 SpellVisualID = 0;
bool SpeedAsTime = false;
float TravelSpeed = 0.0f;
- float UnkZero = 0.0f; // Always zero
- float Unk801 = 0.0f;
+ float LaunchDelay = 0.0f;
+ float MinDuration = 0.0f;
TaggedPosition<Position::XYZ> SourceRotation; // Vector of rotations, Orientation is z
TaggedPosition<Position::XYZ> TargetLocation; // Exclusive with Target
};
@@ -714,15 +726,16 @@ namespace WorldPackets
ObjectGuid Source;
ObjectGuid Target; // Exclusive with TargetPosition
- ObjectGuid Unk801_1;
- uint16 MissReason = 0;
+ ObjectGuid Transport; // Used when Target = Empty && (SpellVisual::Flags & 0x400) == 0
+ TaggedPosition<Position::XYZ> TargetPosition; // Exclusive with Target
uint32 SpellVisualID = 0;
- bool SpeedAsTime = false;
- uint16 ReflectStatus = 0;
float TravelSpeed = 0.0f;
- TaggedPosition<Position::XYZ> TargetPosition; // Exclusive with Target
- float Orientation = 0.0f;
- float Unk801_2 = 0.0f;
+ uint16 HitReason = 0;
+ uint16 MissReason = 0;
+ uint16 ReflectStatus = 0;
+ float LaunchDelay = 0.0f;
+ float MinDuration = 0.0f;
+ bool SpeedAsTime = false;
};
class PlaySpellVisualKit final : public ServerPacket
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index 76ce613b611..5e4d8b362fb 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -38,6 +38,7 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket << uint32(BpayStoreProductDeliveryDelay);
_worldPacket << uint32(ClubsPresenceUpdateTimer);
+ _worldPacket << uint32(HiddenUIClubsPresenceUpdateTimer);
_worldPacket.WriteBit(VoiceEnabled);
_worldPacket.WriteBit(EuropaTicketSystemStatus.is_initialized());
@@ -65,6 +66,7 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket.WriteBit(ClubsEnabled);
_worldPacket.WriteBit(ClubsBattleNetClubTypeAllowed);
_worldPacket.WriteBit(ClubsCharacterClubTypeAllowed);
+ _worldPacket.WriteBit(ClubsPresenceUpdateEnabled);
_worldPacket.WriteBit(VoiceChatDisabledByParentalControl);
_worldPacket.WriteBit(VoiceChatMutedByParentalControl);
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index ee1704a0dac..17b404032dc 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -112,6 +112,7 @@ namespace WorldPackets
int64 TokenBalanceAmount = 0;
uint32 BpayStoreProductDeliveryDelay = 0;
uint32 ClubsPresenceUpdateTimer = 0;
+ uint32 HiddenUIClubsPresenceUpdateTimer = 0; ///< Timer for updating club presence when communities ui frame is hidden
bool ItemRestorationButtonEnabled = false;
bool CharUndeleteEnabled = false; ///< Implemented
bool BpayStoreDisabledByParentalControls = false;
@@ -129,6 +130,7 @@ namespace WorldPackets
bool ClubsEnabled = false;
bool ClubsBattleNetClubTypeAllowed = false;
bool ClubsCharacterClubTypeAllowed = false;
+ bool ClubsPresenceUpdateEnabled = false;
bool VoiceChatDisabledByParentalControl = false;
bool VoiceChatMutedByParentalControl = false;
diff --git a/src/server/game/Server/Packets/TokenPackets.cpp b/src/server/game/Server/Packets/TokenPackets.cpp
index 2f5b40e3fd9..8100f139604 100644
--- a/src/server/game/Server/Packets/TokenPackets.cpp
+++ b/src/server/game/Server/Packets/TokenPackets.cpp
@@ -49,7 +49,7 @@ WorldPacket const* WorldPackets::Token::WowTokenMarketPriceResponse::Write()
_worldPacket << CurrentMarketPrice;
_worldPacket << UnkInt;
_worldPacket << Result;
- _worldPacket << UnkInt2;
+ _worldPacket << AuctionDuration;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/TokenPackets.h b/src/server/game/Server/Packets/TokenPackets.h
index 21d8c2855cf..c7dd085c9b2 100644
--- a/src/server/game/Server/Packets/TokenPackets.h
+++ b/src/server/game/Server/Packets/TokenPackets.h
@@ -75,7 +75,7 @@ namespace WorldPackets
uint64 CurrentMarketPrice = 0;
uint32 UnkInt = 0; // send CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE
uint32 Result = 0;
- uint32 UnkInt2 = 0;
+ uint32 AuctionDuration = 0; // preset auction duration enum
};
}
}
diff --git a/src/server/game/Server/Packets/ToyPackets.cpp b/src/server/game/Server/Packets/ToyPackets.cpp
index a6a8d9706e9..111993db16d 100644
--- a/src/server/game/Server/Packets/ToyPackets.cpp
+++ b/src/server/game/Server/Packets/ToyPackets.cpp
@@ -32,17 +32,26 @@ WorldPacket const* WorldPackets::Toy::AccountToysUpdate::Write()
_worldPacket.WriteBit(IsFullUpdate);
_worldPacket.FlushBits();
- // both lists have to have the same size
- _worldPacket << int32(Toys->size());
- _worldPacket << int32(Toys->size());
+ // all lists have to have the same size
+ _worldPacket << int32(Toys->size()); // ids
+ _worldPacket << int32(Toys->size()); // favorites
+ _worldPacket << int32(Toys->size()); // fanfare
- for (auto const& item : *Toys)
- _worldPacket << uint32(item.first);
+ for (auto const& toy : *Toys)
+ _worldPacket << uint32(toy.first);
- for (auto const& favourite : *Toys)
- _worldPacket.WriteBit(favourite.second);
+ for (auto const& toy : *Toys)
+ _worldPacket.WriteBit(toy.second.HasFlag(ToyFlags::Favorite));
+
+ for (auto const& toy : *Toys)
+ _worldPacket.WriteBit(toy.second.HasFlag(ToyFlags::HasFanfare));
_worldPacket.FlushBits();
return &_worldPacket;
}
+
+void WorldPackets::Toy::ToyClearFanfare::Read()
+{
+ _worldPacket >> ItemID;
+}
diff --git a/src/server/game/Server/Packets/ToyPackets.h b/src/server/game/Server/Packets/ToyPackets.h
index a0157b6fab8..bc5699cf5ca 100644
--- a/src/server/game/Server/Packets/ToyPackets.h
+++ b/src/server/game/Server/Packets/ToyPackets.h
@@ -55,6 +55,16 @@ namespace WorldPackets
bool IsFullUpdate = false;
ToyBoxContainer const* Toys = nullptr;
};
+
+ class ToyClearFanfare final : public ClientPacket
+ {
+ public:
+ ToyClearFanfare(WorldPacket&& packet) : ClientPacket(CMSG_TOY_CLEAR_FANFARE, std::move(packet)) { }
+
+ void Read() override;
+
+ uint32 ItemID = 0;
+ };
}
}