aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-08-05 19:37:53 +0200
committerShauren <shauren.trinity@gmail.com>2021-08-08 00:18:05 +0200
commitcd5357dc185f95c6ef78089c5ab8bd2b885dd89f (patch)
tree0937cc060467205336311a3ba3bd04f5d334c34b /src/server/game/Server/Packets
parent07f51437fc9ddba2810c090caa76ab294bcf777b (diff)
Core/PacketIO: 9.1.0 opcodes and packet structures
Diffstat (limited to 'src/server/game/Server/Packets')
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.cpp4
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.h1
-rw-r--r--src/server/game/Server/Packets/BattlePetPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/BattlePetPackets.h1
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.h1
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h11
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp13
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.h4
-rw-r--r--src/server/game/Server/Packets/EquipmentSetPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.h7
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h3
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/InspectPackets.h1
-rw-r--r--src/server/game/Server/Packets/MailPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/MailPackets.h1
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp124
-rw-r--r--src/server/game/Server/Packets/MythicPlusPacketsCommon.h106
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h2
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h5
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.h1
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h1
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp5
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h5
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h1
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp9
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h14
-rw-r--r--src/server/game/Server/Packets/TicketPackets.cpp15
-rw-r--r--src/server/game/Server/Packets/TicketPackets.h17
38 files changed, 377 insertions, 33 deletions
diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp
index 0bf1acec836..a9d9ad0dafd 100644
--- a/src/server/game/Server/Packets/AuctionHousePackets.cpp
+++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp
@@ -195,6 +195,7 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem)
data.WriteBit(auctionItem.CensorServerSideInfo);
data.WriteBit(auctionItem.CensorBidInfo);
data.WriteBit(auctionItem.AuctionBucketKey.is_initialized());
+ data.WriteBit(auctionItem.Creator.is_initialized());
if (!auctionItem.CensorBidInfo)
{
data.WriteBit(auctionItem.Bidder.is_initialized());
@@ -236,6 +237,9 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem)
data << int32(auctionItem.EndTime);
}
+ if (auctionItem.Creator)
+ data << *auctionItem.Creator;
+
if (!auctionItem.CensorBidInfo)
{
if (auctionItem.Bidder)
diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h
index 0e30f6f53f7..07b5e9b9260 100644
--- a/src/server/game/Server/Packets/AuctionHousePackets.h
+++ b/src/server/game/Server/Packets/AuctionHousePackets.h
@@ -130,6 +130,7 @@ namespace WorldPackets
Optional<uint64> BidAmount;
std::vector<Item::ItemGemData> Gems;
Optional<WorldPackets::AuctionHouse::AuctionBucketKey> AuctionBucketKey;
+ Optional<ObjectGuid> Creator;
};
struct AuctionBidderNotification
diff --git a/src/server/game/Server/Packets/BattlePetPackets.cpp b/src/server/game/Server/Packets/BattlePetPackets.cpp
index 4568103d7de..f664e92ea0f 100644
--- a/src/server/game/Server/Packets/BattlePetPackets.cpp
+++ b/src/server/game/Server/Packets/BattlePetPackets.cpp
@@ -65,7 +65,6 @@ WorldPacket const* WorldPackets::BattlePet::BattlePetJournal::Write()
_worldPacket << uint16(Trap);
_worldPacket << uint32(Slots.size());
_worldPacket << uint32(Pets.size());
- _worldPacket << int32(MaxPets);
_worldPacket.WriteBit(HasJournalLock);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/BattlePetPackets.h b/src/server/game/Server/Packets/BattlePetPackets.h
index cce3bd49675..2cc13908abc 100644
--- a/src/server/game/Server/Packets/BattlePetPackets.h
+++ b/src/server/game/Server/Packets/BattlePetPackets.h
@@ -72,7 +72,6 @@ namespace WorldPackets
bool HasJournalLock = true;
std::vector<std::reference_wrapper<BattlePetSlot>> Slots;
std::vector<std::reference_wrapper<BattlePet>> Pets;
- int32 MaxPets = 1000;
};
class BattlePetJournalLockAcquired final : public ServerPacket
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp
index 5ee8725465c..70a09262cdb 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.cpp
+++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp
@@ -325,6 +325,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::RatedPvpInf
data << int32(bracketInfo.BestSeasonRating);
data << int32(bracketInfo.PvpTierID);
data << int32(bracketInfo.Unused3);
+ data << int32(bracketInfo.WeeklyBestWinPvpTierID);
data.WriteBit(bracketInfo.Disqualified);
data.FlushBits();
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h
index b145cfbe47c..65281fce20b 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.h
+++ b/src/server/game/Server/Packets/BattlegroundPackets.h
@@ -448,6 +448,7 @@ namespace WorldPackets
int32 BestSeasonRating = 0;
int32 PvpTierID = 0;
int32 Unused3 = 0;
+ int32 WeeklyBestWinPvpTierID = 0;
bool Disqualified = false;
} Bracket[6];
};
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp
index 752b6b144c4..41fd5249b11 100644
--- a/src/server/game/Server/Packets/ChatPackets.cpp
+++ b/src/server/game/Server/Packets/ChatPackets.cpp
@@ -41,6 +41,7 @@ void WorldPackets::Chat::ChatMessageWhisper::Read()
void WorldPackets::Chat::ChatMessageChannel::Read()
{
_worldPacket >> Language;
+ _worldPacket >> ChannelGUID;
uint32 targetLen = _worldPacket.ReadBits(9);
uint32 textLen = _worldPacket.ReadBits(9);
Target = _worldPacket.ReadString(targetLen);
@@ -70,6 +71,7 @@ void WorldPackets::Chat::ChatAddonMessageTargeted::Read()
_worldPacket.ResetBitPos();
_worldPacket >> Params;
+ _worldPacket >> *ChannelGUID;
Target = _worldPacket.ReadString(targetLen);
}
@@ -180,6 +182,7 @@ WorldPacket const* WorldPackets::Chat::Chat::Write()
_worldPacket.WriteBit(HideChatLog);
_worldPacket.WriteBit(FakeSenderName);
_worldPacket.WriteBit(Unused_801.is_initialized());
+ _worldPacket.WriteBit(ChannelGUID.is_initialized());
_worldPacket.FlushBits();
_worldPacket.WriteString(SenderName);
@@ -191,6 +194,9 @@ WorldPacket const* WorldPackets::Chat::Chat::Write()
if (Unused_801)
_worldPacket << uint32(*Unused_801);
+ if (ChannelGUID)
+ _worldPacket << *ChannelGUID;
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h
index ad6fc825bf7..cb161ef3169 100644
--- a/src/server/game/Server/Packets/ChatPackets.h
+++ b/src/server/game/Server/Packets/ChatPackets.h
@@ -72,6 +72,7 @@ namespace WorldPackets
void Read() override;
int32 Language = LANG_UNIVERSAL;
+ ObjectGuid ChannelGUID;
std::string Text;
std::string Target;
};
@@ -99,12 +100,16 @@ namespace WorldPackets
class ChatAddonMessageTargeted final : public ClientPacket
{
public:
- ChatAddonMessageTargeted(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_TARGETED, std::move(packet)) { }
+ ChatAddonMessageTargeted(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_TARGETED, std::move(packet))
+ {
+ ChannelGUID.emplace();
+ }
void Read() override;
std::string Target;
ChatAddonMessageParams Params;
+ Optional<ObjectGuid> ChannelGUID; // not optional in the packet. Optional for api reasons
};
class ChatMessageDND final : public ClientPacket
@@ -144,7 +149,8 @@ namespace WorldPackets
Chat() : ServerPacket(SMSG_CHAT, 100) { }
Chat(Chat const& chat);
- void Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message, uint32 achievementId = 0, std::string channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string addonPrefix = "");
+ void Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message, uint32 achievementId = 0,
+ std::string channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string addonPrefix = "");
void SetSender(WorldObject const* sender, LocaleConstant locale);
void SetReceiver(WorldObject const* receiver, LocaleConstant locale);
@@ -170,6 +176,7 @@ namespace WorldPackets
Optional<uint32> Unused_801;
bool HideChatLog = false;
bool FakeSenderName = false;
+ Optional<ObjectGuid> ChannelGUID;
};
class Emote final : public ServerPacket
diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp
index e6a81be2bc1..7aafcfdd870 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.cpp
+++ b/src/server/game/Server/Packets/CombatLogPackets.cpp
@@ -345,14 +345,14 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write()
attackRoundInfo << uint8(ContentTuning.Type);
attackRoundInfo << uint8(ContentTuning.TargetLevel);
attackRoundInfo << uint8(ContentTuning.Expansion);
- attackRoundInfo << uint8(ContentTuning.TargetMinScalingLevel);
- attackRoundInfo << uint8(ContentTuning.TargetMaxScalingLevel);
attackRoundInfo << int16(ContentTuning.PlayerLevelDelta);
attackRoundInfo << int8(ContentTuning.TargetScalingLevelDelta);
attackRoundInfo << float(ContentTuning.PlayerItemLevel);
attackRoundInfo << float(ContentTuning.TargetItemLevel);
attackRoundInfo << uint16(ContentTuning.ScalingHealthItemLevelCurveID);
attackRoundInfo << uint32(ContentTuning.Flags);
+ attackRoundInfo << int32(ContentTuning.PlayerContentTuningID);
+ attackRoundInfo << int32(ContentTuning.TargetContentTuningID);
WriteLogDataBit();
FlushBits();
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index 47d806aef30..c03f304a215 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -74,9 +74,8 @@ bool ContentTuningParams::GenerateDataForUnits<Creature, Player>(Creature* attac
ScalingHealthItemLevelCurveID = target->m_unitData->ScalingHealthItemLevelCurveID;
TargetLevel = target->getLevel();
Expansion = creatureTemplate->HealthScalingExpansion;
- TargetMinScalingLevel = uint8(creatureScaling->MinLevel);
- TargetMaxScalingLevel = uint8(creatureScaling->MaxLevel);
TargetScalingLevelDelta = int8(attacker->m_unitData->ScalingLevelDelta);
+ TargetContentTuningID = creatureScaling->ContentTuningID;
return true;
}
@@ -93,9 +92,8 @@ bool ContentTuningParams::GenerateDataForUnits<Player, Creature>(Player* attacke
ScalingHealthItemLevelCurveID = target->m_unitData->ScalingHealthItemLevelCurveID;
TargetLevel = target->getLevel();
Expansion = creatureTemplate->HealthScalingExpansion;
- TargetMinScalingLevel = uint8(creatureScaling->MinLevel);
- TargetMaxScalingLevel = uint8(creatureScaling->MaxLevel);
TargetScalingLevelDelta = int8(target->m_unitData->ScalingLevelDelta);
+ TargetContentTuningID = creatureScaling->ContentTuningID;
return true;
}
@@ -111,9 +109,8 @@ bool ContentTuningParams::GenerateDataForUnits<Creature, Creature>(Creature* att
PlayerItemLevel = 0;
TargetLevel = target->getLevel();
Expansion = creatureTemplate->HealthScalingExpansion;
- TargetMinScalingLevel = uint8(creatureScaling->MinLevel);
- TargetMaxScalingLevel = uint8(creatureScaling->MaxLevel);
TargetScalingLevelDelta = int8(accessor->m_unitData->ScalingLevelDelta);
+ TargetContentTuningID = creatureScaling->ContentTuningID;
return true;
}
@@ -174,10 +171,10 @@ ByteBuffer& operator<<(ByteBuffer& data, ContentTuningParams const& contentTunin
data << uint16(contentTuningParams.ScalingHealthItemLevelCurveID);
data << uint8(contentTuningParams.TargetLevel);
data << uint8(contentTuningParams.Expansion);
- data << uint8(contentTuningParams.TargetMinScalingLevel);
- data << uint8(contentTuningParams.TargetMaxScalingLevel);
data << int8(contentTuningParams.TargetScalingLevelDelta);
data << uint32(contentTuningParams.Flags);
+ data << int32(contentTuningParams.PlayerContentTuningID);
+ data << int32(contentTuningParams.TargetContentTuningID);
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 c08298b0f58..1a1413c58e1 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
@@ -72,10 +72,10 @@ namespace WorldPackets
uint16 ScalingHealthItemLevelCurveID = 0;
uint8 TargetLevel = 0;
uint8 Expansion = 0;
- uint8 TargetMinScalingLevel = 0;
- uint8 TargetMaxScalingLevel = 0;
int8 TargetScalingLevelDelta = 0;
uint32 Flags = NO_LEVEL_SCALING | NO_ITEM_LEVEL_SCALING;
+ int32 PlayerContentTuningID = 0;
+ int32 TargetContentTuningID = 0;
template<class T, class U>
bool GenerateDataForUnits(T* attacker, U* target);
diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.cpp b/src/server/game/Server/Packets/EquipmentSetPackets.cpp
index ff47852e429..45442f9db31 100644
--- a/src/server/game/Server/Packets/EquipmentSetPackets.cpp
+++ b/src/server/game/Server/Packets/EquipmentSetPackets.cpp
@@ -45,8 +45,10 @@ WorldPacket const* WorldPackets::EquipmentSet::LoadEquipmentSet::Write()
_worldPacket.append(equipSet->Enchants.data(), equipSet->Enchants.size());
- _worldPacket << int32(equipSet->Unknown901_1);
- _worldPacket << int32(equipSet->Unknown901_2);
+ _worldPacket << int32(equipSet->SecondaryShoulderApparanceID);
+ _worldPacket << int32(equipSet->SecondaryShoulderSlot);
+ _worldPacket << int32(equipSet->SecondaryWeaponAppearanceID);
+ _worldPacket << int32(equipSet->SecondaryWeaponSlot);
_worldPacket.WriteBit(equipSet->AssignedSpecIndex != -1);
_worldPacket.WriteBits(equipSet->SetName.length(), 8);
@@ -79,8 +81,10 @@ void WorldPackets::EquipmentSet::SaveEquipmentSet::Read()
_worldPacket >> Set.Enchants[0];
_worldPacket >> Set.Enchants[1];
- _worldPacket >> Set.Unknown901_1;
- _worldPacket >> Set.Unknown901_2;
+ _worldPacket >> Set.SecondaryShoulderApparanceID;
+ _worldPacket >> Set.SecondaryShoulderSlot;
+ _worldPacket >> Set.SecondaryWeaponAppearanceID;
+ _worldPacket >> Set.SecondaryWeaponSlot;
bool hasSpecIndex = _worldPacket.ReadBit();
diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp
index 87e4cf56fa3..d226b521a47 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.cpp
+++ b/src/server/game/Server/Packets/GarrisonPackets.cpp
@@ -190,6 +190,14 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonEventList const& eventList)
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, GarrisonSpecGroup const& specGroup)
+{
+ data << int32(specGroup.ChrSpecializationID);
+ data << int32(specGroup.SoulbindID);
+
+ return data;
+}
+
ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison)
{
ASSERT(garrison.Missions.size() == garrison.MissionRewards.size());
@@ -210,6 +218,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison)
data << uint32(garrison.Talents.size());
data << uint32(garrison.Collections.size());
data << uint32(garrison.EventLists.size());
+ data << uint32(garrison.SpecGroups.size());
data << uint32(garrison.CanStartMission.size());
data << uint32(garrison.ArchivedMissions.size());
data << int32(garrison.NumFollowerActivationsRemaining);
@@ -237,6 +246,9 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison)
for (GarrisonEventList const& eventList : garrison.EventLists)
data << eventList;
+ for (GarrisonSpecGroup const& specGroup : garrison.SpecGroups)
+ data << specGroup;
+
if (!garrison.ArchivedMissions.empty())
data.append(garrison.ArchivedMissions.data(), garrison.ArchivedMissions.size());
diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h
index 27dc258aaf0..08e56820c10 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.h
+++ b/src/server/game/Server/Packets/GarrisonPackets.h
@@ -174,6 +174,12 @@ namespace WorldPackets
std::vector<GarrisonEventEntry> Events;
};
+ struct GarrisonSpecGroup
+ {
+ int32 ChrSpecializationID = 0;
+ int32 SoulbindID = 0;
+ };
+
struct GarrisonInfo
{
int32 GarrTypeID = 0;
@@ -193,6 +199,7 @@ namespace WorldPackets
std::vector<GarrisonTalent> Talents;
std::vector<GarrisonCollection> Collections;
std::vector<GarrisonEventList> EventLists;
+ std::vector<GarrisonSpecGroup> SpecGroups;
std::vector<bool> CanStartMission;
std::vector<int32> ArchivedMissions;
};
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 5ae849a0102..ca72da516d3 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -118,7 +118,13 @@ void WorldPackets::Guild::DeclineGuildInvites::Read()
void WorldPackets::Guild::GuildInviteByName::Read()
{
uint32 nameLen = _worldPacket.ReadBits(9);
+ if (_worldPacket.ReadBit())
+ Unused910.emplace();
+
Name = _worldPacket.ReadString(nameLen);
+
+ if (Unused910)
+ _worldPacket >> *Unused910;
}
WorldPacket const* WorldPackets::Guild::GuildInvite::Write()
@@ -181,6 +187,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberD
data.WriteBit(rosterMemberData.SorEligible);
data.FlushBits();
+ data << rosterMemberData.DungeonScore;
+
data.WriteString(rosterMemberData.Name);
data.WriteString(rosterMemberData.Note);
data.WriteString(rosterMemberData.OfficerNote);
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index 536e68fed75..6aadb7d4a0f 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -21,6 +21,7 @@
#include "Packet.h"
#include "ItemPacketsCommon.h"
#include "Guild.h"
+#include "MythicPlusPacketsCommon.h"
#include "ObjectGuid.h"
#include "PacketUtilities.h"
@@ -120,6 +121,7 @@ namespace WorldPackets
bool Authenticated = false;
bool SorEligible = false;
GuildRosterProfessionData Profession[2];
+ MythicPlus::DungeonScoreSummary DungeonScore;
};
class GuildRoster final : public ServerPacket
@@ -203,6 +205,7 @@ namespace WorldPackets
void Read() override;
std::string Name;
+ Optional<int32> Unused910;
};
class GuildInvite final : public ServerPacket
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp
index 0a2746dc44d..35055ebe414 100644
--- a/src/server/game/Server/Packets/InspectPackets.cpp
+++ b/src/server/game/Server/Packets/InspectPackets.cpp
@@ -131,6 +131,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData c
data << int32(bracket.WeeklyBestRating);
data << int32(bracket.SeasonBestRating);
data << int32(bracket.PvpTierID);
+ data << int32(bracket.WeeklyBestWinPvpTierID);
data.WriteBit(bracket.Disqualified);
data.FlushBits();
diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h
index 78676959094..c472920ea14 100644
--- a/src/server/game/Server/Packets/InspectPackets.h
+++ b/src/server/game/Server/Packets/InspectPackets.h
@@ -104,6 +104,7 @@ namespace WorldPackets
int32 WeeklyBestRating = 0;
int32 SeasonBestRating = 0;
int32 PvpTierID = 0;
+ int32 WeeklyBestWinPvpTierID = 0;
uint8 Bracket = 0;
bool Disqualified = false;
};
diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp
index b0bb17e64f0..bb8e6ac87d5 100644
--- a/src/server/game/Server/Packets/MailPackets.cpp
+++ b/src/server/game/Server/Packets/MailPackets.cpp
@@ -213,7 +213,6 @@ void WorldPackets::Mail::MailMarkAsRead::Read()
{
_worldPacket >> Mailbox;
_worldPacket >> MailID;
- BiReceipt = _worldPacket.ReadBit();
}
void WorldPackets::Mail::MailDelete::Read()
diff --git a/src/server/game/Server/Packets/MailPackets.h b/src/server/game/Server/Packets/MailPackets.h
index 2218bd8367e..c7cb29bf4c0 100644
--- a/src/server/game/Server/Packets/MailPackets.h
+++ b/src/server/game/Server/Packets/MailPackets.h
@@ -159,7 +159,6 @@ namespace WorldPackets
ObjectGuid Mailbox;
int32 MailID = 0;
- bool BiReceipt = false;
};
class MailDelete final : public ClientPacket
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 2c44b01bb7c..52460632213 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -469,7 +469,11 @@ void WorldPackets::Movement::CommonMovement::WriteMovementForceWithDirection(Mov
data << uint32(movementForce.TransportID);
data << float(movementForce.Magnitude);
data.WriteBits(movementForce.Type, 2);
+ data.WriteBit(movementForce.Unused910 != 0);
data.FlushBits();
+
+ if (movementForce.Unused910)
+ data << int32(movementForce.Unused910);
}
void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveSpline const& moveSpline)
@@ -693,6 +697,9 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementForce& movementForce)
data >> movementForce.TransportID;
data >> movementForce.Magnitude;
movementForce.Type = data.ReadBits(2);
+ bool has910 = data.ReadBit();
+ if (has910)
+ data >> movementForce.Unused910;
return data;
}
diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp
new file mode 100644
index 00000000000..91206bbb847
--- /dev/null
+++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp
@@ -0,0 +1,124 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "MythicPlusPacketsCommon.h"
+
+namespace WorldPackets
+{
+namespace MythicPlus
+{
+ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreMapSummary const& dungeonScoreMapSummary)
+{
+ data << int32(dungeonScoreMapSummary.ChallengeModeID);
+ data << int32(dungeonScoreMapSummary.MapScore);
+ data << int32(dungeonScoreMapSummary.BestRunLevel);
+ data << int32(dungeonScoreMapSummary.BestRunDurationMS);
+ data.WriteBit(dungeonScoreMapSummary.FinishedSuccess);
+ data.FlushBits();
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSummary const& dungeonScoreSummary)
+{
+ data << int32(dungeonScoreSummary.CurrentSeasonScore);
+ data << uint32(dungeonScoreSummary.Runs.size());
+ for (DungeonScoreMapSummary const& dungeonScoreMapSummary : dungeonScoreSummary.Runs)
+ data << dungeonScoreMapSummary;
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, MythicPlusMember const& mythicPlusMember)
+{
+ data << mythicPlusMember.BnetAccountGUID;
+ data << uint64(mythicPlusMember.GuildClubMemberID);
+ data << mythicPlusMember.GUID;
+ data << mythicPlusMember.GuildGUID;
+ data << uint32(mythicPlusMember.NativeRealmAddress);
+ data << uint32(mythicPlusMember.VirtualRealmAddress);
+ data << int16(mythicPlusMember.ChrSpecializationID);
+ data << int16(mythicPlusMember.RaceID);
+ data << int32(mythicPlusMember.ItemLevel);
+ data << int32(mythicPlusMember.CovenantID);
+ data << int32(mythicPlusMember.SoulbindID);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, MythicPlusRun const& mythicPlusRun)
+{
+ data << int32(mythicPlusRun.MapChallengeModeID);
+ data << uint32(mythicPlusRun.Level);
+ data << int32(mythicPlusRun.DurationMs);
+ data << mythicPlusRun.StartDate;
+ data << mythicPlusRun.CompletionDate;
+ data << int32(mythicPlusRun.Season);
+ data.append(mythicPlusRun.KeystoneAffixIDs.data(), mythicPlusRun.KeystoneAffixIDs.size());
+ data << uint32(mythicPlusRun.Members.size());
+ data << int32(mythicPlusRun.RunScore);
+ for (MythicPlusMember const& member : mythicPlusRun.Members)
+ data << member;
+
+ data.WriteBit(mythicPlusRun.Completed);
+ data.FlushBits();
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreBestRunForAffix const& dungeonScoreBestRunForAffix)
+{
+ data << int32(dungeonScoreBestRunForAffix.KeystoneAffixID);
+ data << int32(dungeonScoreBestRunForAffix.Score);
+ data << dungeonScoreBestRunForAffix.Run;
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreMapData const& dungeonScoreMapData)
+{
+ data << int32(dungeonScoreMapData.MapChallengeModeID);
+ data << uint32(dungeonScoreMapData.BestRuns.size());
+ data << int32(dungeonScoreMapData.OverAllScore);
+ for (DungeonScoreBestRunForAffix const& bestRun : dungeonScoreMapData.BestRuns)
+ data << bestRun;
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSeasonData const& dungeonScoreSeasonData)
+{
+ data << int32(dungeonScoreSeasonData.Season);
+ data << uint32(dungeonScoreSeasonData.Maps.size());
+ data << int32(dungeonScoreSeasonData.SeasonScore);
+ for (DungeonScoreMapData const& map : dungeonScoreSeasonData.Maps)
+ data << map;
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreData const& dungeonScoreData)
+{
+ data << uint32(dungeonScoreData.Seasons.size());
+ data << int32(dungeonScoreData.TotalRuns);
+ for (DungeonScoreSeasonData const& season : dungeonScoreData.Seasons)
+ data << season;
+
+ return data;
+}
+}
+}
diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.h b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h
new file mode 100644
index 00000000000..dc48360aea7
--- /dev/null
+++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h
@@ -0,0 +1,106 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef MythicPlusPacketsCommon_h__
+#define MythicPlusPacketsCommon_h__
+
+#include "Packet.h"
+#include "ObjectGuid.h"
+#include "PacketUtilities.h"
+
+namespace WorldPackets
+{
+ namespace MythicPlus
+ {
+ struct DungeonScoreMapSummary
+ {
+ int32 ChallengeModeID = 0;
+ int32 MapScore = 0;
+ int32 BestRunLevel = 0;
+ int32 BestRunDurationMS = 0;
+ bool FinishedSuccess = false;
+ };
+
+ struct DungeonScoreSummary
+ {
+ int32 CurrentSeasonScore = 0;
+ std::vector<DungeonScoreMapSummary> Runs;
+ };
+
+ struct MythicPlusMember
+ {
+ ObjectGuid BnetAccountGUID;
+ uint64 GuildClubMemberID = 0;
+ ObjectGuid GUID;
+ ObjectGuid GuildGUID;
+ uint32 NativeRealmAddress = 0;
+ uint32 VirtualRealmAddress = 0;
+ int16 ChrSpecializationID = 0;
+ int16 RaceID = 0;
+ int32 ItemLevel = 0;
+ int32 CovenantID = 0;
+ int32 SoulbindID = 0;
+ };
+
+ struct MythicPlusRun
+ {
+ int32 MapChallengeModeID = 0;
+ bool Completed = false;
+ uint32 Level = 0;
+ int32 DurationMs = 0;
+ Timestamp<> StartDate;
+ Timestamp<> CompletionDate;
+ int32 Season;
+ std::vector<MythicPlusMember> Members;
+ int32 RunScore;
+ std::array<int32, 4> KeystoneAffixIDs;
+ };
+
+ struct DungeonScoreBestRunForAffix
+ {
+ int32 KeystoneAffixID = 0;
+ MythicPlusRun Run;
+ int32 Score = 0;
+ };
+
+ struct DungeonScoreMapData
+ {
+ int32 MapChallengeModeID = 0;
+ std::vector<DungeonScoreBestRunForAffix> BestRuns;
+ int32 OverAllScore = 0;
+
+ };
+
+ struct DungeonScoreSeasonData
+ {
+ int32 Season = 0;
+ std::vector<DungeonScoreMapData> Maps;
+ int32 SeasonScore = 0;
+ };
+
+ struct DungeonScoreData
+ {
+ std::vector<DungeonScoreSeasonData> Seasons;
+ int32 TotalRuns = 0;
+ };
+
+ ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSummary const& dungeonScoreSummary);
+ ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreData const& dungeonScoreData);
+ }
+}
+
+#endif // MythicPlusPacketsCommon_h__
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index 3bfa84438b3..a925b606cc3 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -203,7 +203,7 @@ namespace WorldPackets
int32 ID = 0;
uint32 Flags = 0;
- TaggedPosition<Position::XY> Pos;
+ TaggedPosition<Position::XYZ> Pos;
int32 Icon = 0;
int32 Importance = 0;
int32 Unknown905 = 0;
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index 74a73352086..e4bda90f24c 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -223,6 +223,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyMemberStats c
data.WriteBit(memberStats.PetStats.is_initialized());
data.FlushBits();
+ data << memberStats.DungeonScore;
+
if (memberStats.PetStats.is_initialized())
data << *memberStats.PetStats;
diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h
index 17d42c620a9..0e350e01c70 100644
--- a/src/server/game/Server/Packets/PartyPackets.h
+++ b/src/server/game/Server/Packets/PartyPackets.h
@@ -22,6 +22,7 @@
#include "AuthenticationPackets.h"
#include "ObjectGuid.h"
#include "Group.h"
+#include "MythicPlusPacketsCommon.h"
#include "Optional.h"
namespace WorldPackets
@@ -208,9 +209,11 @@ namespace WorldPackets
uint16 SpecID = 0;
uint16 WmoGroupID = 0;
uint32 WmoDoodadPlacementID = 0;
- int8 PartyType[2];
+ int8 PartyType[2] = { };
CTROptions ChromieTime;
+
+ MythicPlus::DungeonScoreSummary DungeonScore;
};
class PartyMemberFullState final : public ServerPacket
diff --git a/src/server/game/Server/Packets/PetitionPackets.cpp b/src/server/game/Server/Packets/PetitionPackets.cpp
index c60f4822fe5..9f42c3807bb 100644
--- a/src/server/game/Server/Packets/PetitionPackets.cpp
+++ b/src/server/game/Server/Packets/PetitionPackets.cpp
@@ -88,6 +88,7 @@ void WorldPackets::Petition::PetitionBuy::Read()
uint32 titleLen = _worldPacket.ReadBits(7);
_worldPacket >> Unit;
+ _worldPacket >> Unused910;
Title = _worldPacket.ReadString(titleLen);
}
diff --git a/src/server/game/Server/Packets/PetitionPackets.h b/src/server/game/Server/Packets/PetitionPackets.h
index 0967be2a0fc..e5f0a2e80ce 100644
--- a/src/server/game/Server/Packets/PetitionPackets.h
+++ b/src/server/game/Server/Packets/PetitionPackets.h
@@ -101,6 +101,7 @@ namespace WorldPackets
ObjectGuid Unit;
std::string Title;
+ uint32 Unused910 = 0;
};
class PetitionShowSignatures final : public ClientPacket
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index 32544e7dab5..9a9f7233376 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -80,6 +80,7 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
_worldPacket << int32(Stats.RequiredExpansion);
_worldPacket << int32(Stats.VignetteID);
_worldPacket << int32(Stats.Class);
+ _worldPacket << int32(Stats.CreatureDifficultyID);
_worldPacket << int32(Stats.WidgetSetID);
_worldPacket << int32(Stats.WidgetSetUnitConditionID);
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index d4148eb6b38..693000219b3 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -83,6 +83,7 @@ namespace WorldPackets
uint32 RequiredExpansion = 0;
uint32 VignetteID = 0;
int32 Class = 0;
+ int32 CreatureDifficultyID = 0;
int32 WidgetSetID = 0;
int32 WidgetSetUnitConditionID = 0;
std::array<uint32, 2> Flags;
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 2672ab3ddf3..d15eed8dc0d 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -128,6 +128,7 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.PortraitGiver);
_worldPacket << int32(Info.PortraitGiverMount);
+ _worldPacket << int32(Info.PortraitGiverModelSceneID);
_worldPacket << int32(Info.PortraitTurnIn);
for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i)
@@ -337,6 +338,7 @@ WorldPacket const* QuestGiverOfferRewardMessage::Write()
_worldPacket << int32(QuestPackageID);
_worldPacket << int32(PortraitGiver);
_worldPacket << int32(PortraitGiverMount);
+ _worldPacket << int32(PortraitGiverModelSceneID);
_worldPacket << int32(PortraitTurnIn);
_worldPacket.WriteBits(QuestTitle.size(), 9);
@@ -401,6 +403,7 @@ WorldPacket const* QuestGiverQuestDetails::Write()
_worldPacket << int32(QuestPackageID);
_worldPacket << int32(PortraitGiver);
_worldPacket << int32(PortraitGiverMount);
+ _worldPacket << int32(PortraitGiverModelSceneID);
_worldPacket << int32(PortraitTurnIn);
_worldPacket << uint32(QuestFlags[0]); // Flags
_worldPacket << uint32(QuestFlags[1]); // FlagsEx
@@ -733,6 +736,7 @@ WorldPacket const* DisplayPlayerChoice::Write()
_worldPacket << SenderGUID;
_worldPacket << int32(UiTextureKitID);
_worldPacket << uint32(SoundKitID);
+ _worldPacket << uint8(NumRerolls);
_worldPacket.WriteBits(Question.length(), 8);
_worldPacket.WriteBit(CloseChoiceFrame);
_worldPacket.WriteBit(HideWarboardHeader);
@@ -750,6 +754,7 @@ void ChoiceResponse::Read()
{
_worldPacket >> ChoiceID;
_worldPacket >> ResponseID;
+ IsReroll = _worldPacket.ReadBit();
}
}
}
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index 5d0fd7d553c..1b049cc0703 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -155,6 +155,7 @@ namespace WorldPackets
int32 RewardNumSkillUps = 0; // reward skill points
int32 PortraitGiver = 0; // quest giver entry ?
int32 PortraitGiverMount = 0;
+ int32 PortraitGiverModelSceneID = 0;
int32 PortraitTurnIn = 0; // quest turn in entry ?
std::string PortraitGiverText;
std::string PortraitGiverName;
@@ -299,6 +300,7 @@ namespace WorldPackets
int32 PortraitTurnIn = 0;
int32 PortraitGiver = 0;
int32 PortraitGiverMount = 0;
+ int32 PortraitGiverModelSceneID = 0;
std::string QuestTitle;
std::string RewardText;
std::string PortraitGiverText;
@@ -390,6 +392,7 @@ namespace WorldPackets
int32 PortraitTurnIn = 0;
int32 PortraitGiver = 0;
int32 PortraitGiverMount = 0;
+ int32 PortraitGiverModelSceneID = 0;
int32 QuestStartItemID = 0;
int32 QuestSessionBonus = 0;
std::string PortraitGiverText;
@@ -714,6 +717,7 @@ namespace WorldPackets
int32 ChoiceID = 0;
int32 UiTextureKitID = 0;
uint32 SoundKitID = 0;
+ uint8 NumRerolls = 0;
std::string Question;
std::vector<PlayerChoiceResponse> Responses;
bool CloseChoiceFrame = false;
@@ -730,6 +734,7 @@ namespace WorldPackets
int32 ChoiceID = 0;
int32 ResponseID = 0;
+ bool IsReroll = false;
};
}
}
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index d31647bb122..52b5056310d 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -209,7 +209,6 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Spells::SpellOptionalReag
{
data >> optionalReagent.ItemID;
data >> optionalReagent.Slot;
- data >> optionalReagent.Count;
return data;
}
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 97775684a08..22b23c388da 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -244,7 +244,6 @@ namespace WorldPackets
{
int32 ItemID = 0;
int32 Slot = 0;
- int32 Count = 0;
};
struct SpellExtraCurrencyCost
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index ca8be7045e7..b72a40c7da8 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -150,6 +150,15 @@ WorldPacket const* FeatureSystemStatus::Write()
return &_worldPacket;
}
+WorldPacket const* FeatureSystemStatus2::Write()
+{
+ _worldPacket.WriteBit(TextToSpeechFeatureEnabled);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
+
WorldPacket const* FeatureSystemStatusGlueScreen::Write()
{
_worldPacket.WriteBit(BpayStoreEnabled);
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index 34d9aabfda0..dec27f1017c 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -98,7 +98,7 @@ namespace WorldPackets
uint32 DaysInCycle = 0;
};
- FeatureSystemStatus() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS, 48) { }
+ FeatureSystemStatus() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS, 200) { }
WorldPacket const* Write() override;
@@ -152,10 +152,20 @@ namespace WorldPackets
RafSystemFeatureInfo RAFSystem;
};
+ class FeatureSystemStatus2 final : ServerPacket
+ {
+ public:
+ FeatureSystemStatus2() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS2, 1) { }
+
+ WorldPacket const* Write() override;
+
+ bool TextToSpeechFeatureEnabled = false;
+ };
+
class FeatureSystemStatusGlueScreen final : public ServerPacket
{
public:
- FeatureSystemStatusGlueScreen() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN, 1) { }
+ FeatureSystemStatusGlueScreen() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN, 64) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp
index c453750f3fd..dd595eac2d7 100644
--- a/src/server/game/Server/Packets/TicketPackets.cpp
+++ b/src/server/game/Server/Packets/TicketPackets.cpp
@@ -250,6 +250,17 @@ ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Ticket::SupportT
return data;
}
+ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketUnused910>& unused)
+{
+ unused = boost::in_place();
+
+ uint32 field_0Length = data.ReadBits(7);
+ data >> unused->field_104;
+ unused->field_0 = data.ReadString(field_0Length);
+
+ return data;
+}
+
void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
{
_worldPacket >> Header;
@@ -266,6 +277,7 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
bool hasLFGListApplicant = _worldPacket.ReadBit();
bool hasClubMessage = _worldPacket.ReadBit();
bool hasClubFinderResult = _worldPacket.ReadBit();
+ bool hasUnk910 = _worldPacket.ReadBit();
_worldPacket.ResetBitPos();
@@ -300,6 +312,9 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
if (hasClubFinderResult)
_worldPacket >> ClubFinderResult;
+
+ if (hasUnk910)
+ _worldPacket >> Unused910;
}
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::Complaint::ComplaintOffender& complaintOffender)
diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h
index 5f281df684a..9982d60da6c 100644
--- a/src/server/game/Server/Packets/TicketPackets.h
+++ b/src/server/game/Server/Packets/TicketPackets.h
@@ -89,7 +89,7 @@ namespace WorldPackets
void Read() override;
- int32 CaseID;
+ int32 CaseID = 0;
};
class SubmitUserFeedback final : public ClientPacket
@@ -156,8 +156,8 @@ namespace WorldPackets
struct SupportTicketCalendarEventInfo
{
- uint64 EventID;
- uint64 InviteID;
+ uint64 EventID = 0;
+ uint64 InviteID = 0;
std::string EventTitle;
};
@@ -200,12 +200,18 @@ namespace WorldPackets
struct SupportTicketClubFinderResult
{
- uint64 ClubFinderPostingID;
- uint64 ClubID;
+ uint64 ClubFinderPostingID = 0;
+ uint64 ClubID = 0;
ObjectGuid ClubFinderGUID;
std::string ClubName;
};
+ struct SupportTicketUnused910
+ {
+ std::string field_0;
+ ObjectGuid field_104;
+ };
+
SupportTicketSubmitComplaint(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, std::move(packet)) { }
void Read() override;
@@ -224,6 +230,7 @@ namespace WorldPackets
Optional<SupportTicketLFGListApplicant> LFGListApplicant;
Optional<SupportTicketCommunityMessage> CommunityMessage;
Optional<SupportTicketClubFinderResult> ClubFinderResult;
+ Optional<SupportTicketUnused910> Unused910;
};
class Complaint final : public ClientPacket