aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Server/Packets')
-rw-r--r--src/server/game/Server/Packets/AchievementPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/AchievementPackets.h6
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.cpp14
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.h13
-rw-r--r--src/server/game/Server/Packets/ArtifactPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/ArtifactPackets.h11
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.h3
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.cpp10
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.h6
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.cpp75
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.h21
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h25
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp48
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h38
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.cpp63
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.h13
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp44
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.h17
-rw-r--r--src/server/game/Server/Packets/CombatPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/CombatPackets.h4
-rw-r--r--src/server/game/Server/Packets/DuelPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/DuelPackets.h1
-rw-r--r--src/server/game/Server/Packets/EquipmentSetPackets.h4
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.h2
-rw-r--r--src/server/game/Server/Packets/GuildFinderPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/GuildFinderPackets.h2
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp168
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h15
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp18
-rw-r--r--src/server/game/Server/Packets/InspectPackets.h11
-rw-r--r--src/server/game/Server/Packets/InstancePackets.cpp32
-rw-r--r--src/server/game/Server/Packets/InstancePackets.h8
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/LFGPackets.cpp13
-rw-r--r--src/server/game/Server/Packets/LFGPackets.h26
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp11
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h15
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp44
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h12
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp24
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h7
-rw-r--r--src/server/game/Server/Packets/PacketUtilities.h5
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp27
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h29
-rw-r--r--src/server/game/Server/Packets/PetPackets.cpp13
-rw-r--r--src/server/game/Server/Packets/PetPackets.h2
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.cpp41
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.h2
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp58
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h32
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp26
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h15
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.h2
-rw-r--r--src/server/game/Server/Packets/ScenarioPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/ScenarioPackets.h2
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp25
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h12
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp21
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h21
-rw-r--r--src/server/game/Server/Packets/TalentPackets.cpp30
-rw-r--r--src/server/game/Server/Packets/TalentPackets.h14
-rw-r--r--src/server/game/Server/Packets/TaxiPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/TaxiPackets.h6
-rw-r--r--src/server/game/Server/Packets/TicketPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/TicketPackets.h7
-rw-r--r--src/server/game/Server/Packets/TotemPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/TotemPackets.h2
-rw-r--r--src/server/game/Server/Packets/TransmogrificationPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/WhoPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/WorldStatePackets.cpp8
-rw-r--r--src/server/game/Server/Packets/WorldStatePackets.h10
75 files changed, 751 insertions, 551 deletions
diff --git a/src/server/game/Server/Packets/AchievementPackets.cpp b/src/server/game/Server/Packets/AchievementPackets.cpp
index 87181b3006a..2c746b77ad6 100644
--- a/src/server/game/Server/Packets/AchievementPackets.cpp
+++ b/src/server/game/Server/Packets/AchievementPackets.cpp
@@ -111,7 +111,7 @@ WorldPacket const* WorldPackets::Achievement::AchievementEarned::Write()
return &_worldPacket;
}
-WorldPacket const* WorldPackets::Achievement::ServerFirstAchievement::Write()
+WorldPacket const* WorldPackets::Achievement::BroadcastAchievement::Write()
{
_worldPacket.WriteBits(Name.length(), 7);
_worldPacket.WriteBit(GuildAchievement);
diff --git a/src/server/game/Server/Packets/AchievementPackets.h b/src/server/game/Server/Packets/AchievementPackets.h
index 56b027d024d..69262eae72f 100644
--- a/src/server/game/Server/Packets/AchievementPackets.h
+++ b/src/server/game/Server/Packets/AchievementPackets.h
@@ -101,7 +101,7 @@ namespace WorldPackets
class AchievementDeleted final : public ServerPacket
{
public:
- AchievementDeleted() : ServerPacket(SMSG_ACHIEVEMENT_DELETED, 4) { }
+ AchievementDeleted() : ServerPacket(SMSG_ACHIEVEMENT_DELETED, 8) { }
WorldPacket const* Write() override;
@@ -125,10 +125,10 @@ namespace WorldPackets
ObjectGuid Sender;
};
- class ServerFirstAchievement final : public ServerPacket
+ class BroadcastAchievement final : public ServerPacket
{
public:
- ServerFirstAchievement() : ServerPacket(SMSG_SERVER_FIRST_ACHIEVEMENT) { }
+ BroadcastAchievement() : ServerPacket(SMSG_BROADCAST_ACHIEVEMENT) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
index f99d9831f91..6b4047d0995 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
@@ -33,7 +33,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::AreaTrigger::AreaTriggerS
ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerCircularMovementInfo const& areaTriggerCircularMovement)
{
- data.WriteBit(areaTriggerCircularMovement.TargetGUID.is_initialized());
+ data.WriteBit(areaTriggerCircularMovement.PathTarget.is_initialized());
data.WriteBit(areaTriggerCircularMovement.Center.is_initialized());
data.WriteBit(areaTriggerCircularMovement.CounterClockwise);
data.WriteBit(areaTriggerCircularMovement.CanLoop);
@@ -46,8 +46,8 @@ ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerCircularMovementInfo const&
data << float(areaTriggerCircularMovement.InitialAngle);
data << float(areaTriggerCircularMovement.ZOffset);
- if (areaTriggerCircularMovement.TargetGUID)
- data << *areaTriggerCircularMovement.TargetGUID;
+ if (areaTriggerCircularMovement.PathTarget)
+ data << *areaTriggerCircularMovement.PathTarget;
if (areaTriggerCircularMovement.Center)
data << *areaTriggerCircularMovement.Center;
@@ -74,14 +74,6 @@ WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerDenied::Write()
WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerRePath::Write()
{
_worldPacket << TriggerGUID;
- _worldPacket << AreaTriggerSpline;
-
- return &_worldPacket;
-}
-
-WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerReShape::Write()
-{
- _worldPacket << TriggerGUID;
_worldPacket.WriteBit(AreaTriggerSpline.is_initialized());
_worldPacket.WriteBit(AreaTriggerCircularMovement.is_initialized());
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h
index e3872493481..b3abf08c5d9 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.h
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.h
@@ -68,18 +68,7 @@ namespace WorldPackets
class AreaTriggerRePath final : public ServerPacket
{
public:
- AreaTriggerRePath() : ServerPacket(SMSG_AREA_TRIGGER_RE_PATH, 50) { }
-
- WorldPacket const* Write() override;
-
- AreaTriggerSplineInfo AreaTriggerSpline;
- ObjectGuid TriggerGUID;
- };
-
- class AreaTriggerReShape final : public ServerPacket
- {
- public:
- AreaTriggerReShape() : ServerPacket(SMSG_AREA_TRIGGER_RE_SHAPE, 17) { }
+ AreaTriggerRePath() : ServerPacket(SMSG_AREA_TRIGGER_RE_PATH, 17) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/ArtifactPackets.cpp b/src/server/game/Server/Packets/ArtifactPackets.cpp
index 8666b709cf0..2612b384f8c 100644
--- a/src/server/game/Server/Packets/ArtifactPackets.cpp
+++ b/src/server/game/Server/Packets/ArtifactPackets.cpp
@@ -69,11 +69,3 @@ WorldPacket const* WorldPackets::Artifact::ArtifactXpGain::Write()
return &_worldPacket;
}
-
-WorldPacket const* WorldPackets::Artifact::ArtifactKnowledge::Write()
-{
- _worldPacket << int32(ArtifactCategoryID);
- _worldPacket << int8(KnowledgeLevel);
-
- return &_worldPacket;
-}
diff --git a/src/server/game/Server/Packets/ArtifactPackets.h b/src/server/game/Server/Packets/ArtifactPackets.h
index 25934b75c28..f208a906413 100644
--- a/src/server/game/Server/Packets/ArtifactPackets.h
+++ b/src/server/game/Server/Packets/ArtifactPackets.h
@@ -99,17 +99,6 @@ namespace WorldPackets
ObjectGuid ArtifactGUID;
uint64 Amount = 0;
};
-
- class ArtifactKnowledge final : public ServerPacket
- {
- public:
- ArtifactKnowledge() : ServerPacket(SMSG_ARTIFACT_KNOWLEDGE, 1 + 4) { }
-
- WorldPacket const* Write() override;
-
- int32 ArtifactCategoryID = 0;
- int8 KnowledgeLevel = 0;
- };
}
}
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp
index c28b8281ede..44e9608bddd 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.cpp
+++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp
@@ -84,8 +84,6 @@ void WorldPackets::Auth::AuthSession::Read()
uint32 realmJoinTicketSize;
_worldPacket >> DosResponse;
- _worldPacket >> Build;
- _worldPacket >> BuildType;
_worldPacket >> RegionID;
_worldPacket >> BattlegroupID;
_worldPacket >> RealmID;
@@ -145,6 +143,7 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write()
_worldPacket.WriteBit(SuccessInfo->ForceCharacterTemplate);
_worldPacket.WriteBit(SuccessInfo->NumPlayersHorde.is_initialized());
_worldPacket.WriteBit(SuccessInfo->NumPlayersAlliance.is_initialized());
+ _worldPacket.WriteBit(SuccessInfo->ExpansionTrialExpiration.is_initialized());
_worldPacket.FlushBits();
{
@@ -164,6 +163,9 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write()
if (SuccessInfo->NumPlayersAlliance)
_worldPacket << uint16(*SuccessInfo->NumPlayersAlliance);
+ if (SuccessInfo->ExpansionTrialExpiration)
+ _worldPacket << int32(*SuccessInfo->ExpansionTrialExpiration);
+
for (VirtualRealmInfo const& virtualRealm : SuccessInfo->VirtualRealms)
_worldPacket << virtualRealm;
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h
index 97662944f09..7b0e50844bb 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.h
+++ b/src/server/game/Server/Packets/AuthenticationPackets.h
@@ -83,8 +83,6 @@ namespace WorldPackets
Digest.fill(0);
}
- uint16 Build = 0;
- int8 BuildType = 0;
uint32 RegionID = 0;
uint32 BattlegroupID = 0;
uint32 RealmID = 0;
@@ -159,6 +157,7 @@ namespace WorldPackets
bool ForceCharacterTemplate = false; ///< forces the client to always use a character template when creating a new character. @see Templates. @todo implement
Optional<uint16> NumPlayersHorde; ///< number of horde players in this realm. @todo implement
Optional<uint16> NumPlayersAlliance; ///< number of alliance players in this realm. @todo implement
+ Optional<int32> ExpansionTrialExpiration; ///< expansion trial expiration unix timestamp
};
AuthResponse();
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp
index 05851fb1dfd..14ae46e105a 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.cpp
+++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp
@@ -67,9 +67,11 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData:
data << uint32(playerData.HealingDone);
data << uint32(playerData.Stats.size());
data << int32(playerData.PrimaryTalentTree);
- data << int32(playerData.PrimaryTalentTreeNameIndex);
+ data << int32(playerData.Sex);
data << int32(playerData.Race);
- data << uint32(playerData.Prestige);
+ data << int32(playerData.Class);
+ data << int32(playerData.CreatureID);
+ data << int32(playerData.HonorLevel);
if (!playerData.Stats.empty())
data.append(playerData.Stats.data(), playerData.Stats.size());
@@ -89,13 +91,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData:
data << uint32(*playerData.PreMatchRating);
if (playerData.RatingChange)
- data << uint32(*playerData.RatingChange);
+ data << int32(*playerData.RatingChange);
if (playerData.PreMatchMMR)
data << uint32(*playerData.PreMatchMMR);
if (playerData.MmrChange)
- data << uint32(*playerData.MmrChange);
+ data << int32(*playerData.MmrChange);
return data;
}
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h
index 7340d8d7fc9..14ebc283cb5 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.h
+++ b/src/server/game/Server/Packets/BattlegroundPackets.h
@@ -122,9 +122,11 @@ namespace WorldPackets
Optional<int32> MmrChange;
std::vector<int32> Stats;
int32 PrimaryTalentTree = 0;
- int32 PrimaryTalentTreeNameIndex = 0; // controls which name field from ChrSpecialization.dbc will be sent to lua
+ int32 Sex = 0;
int32 Race = 0;
- uint32 Prestige = 0;
+ int32 Class = 0;
+ int32 CreatureID = 0;
+ int32 HonorLevel = 0;
};
Optional<uint8> Winner;
diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp
index 5292bb69b99..7c82bd9d377 100644
--- a/src/server/game/Server/Packets/CalendarPackets.cpp
+++ b/src/server/game/Server/Packets/CalendarPackets.cpp
@@ -24,7 +24,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Calendar::CalendarSendCal
data.AppendPackedTime(eventInfo.Date);
data << uint32(eventInfo.Flags);
data << int32(eventInfo.TextureID);
- data << eventInfo.EventGuildID;
+ data << uint64(eventInfo.EventClubID);
data << eventInfo.OwnerGuid;
data.WriteBits(eventInfo.EventName.size(), 8);
@@ -80,8 +80,9 @@ void WorldPackets::Calendar::CalendarGetEvent::Read()
_worldPacket >> EventID;
}
-void WorldPackets::Calendar::CalendarGuildFilter::Read()
+void WorldPackets::Calendar::CalendarCommunityFilter::Read()
{
+ _worldPacket >> ClubID;
_worldPacket >> MinLevel;
_worldPacket >> MaxLevel;
_worldPacket >> MaxRankOrder;
@@ -92,26 +93,45 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarAddEv
buffer >> invite.Guid;
buffer >> invite.Status;
buffer >> invite.Moderator;
+ if (buffer.ReadBit())
+ invite.Unused_801_1 = boost::in_place();
+
+ if (buffer.ReadBit())
+ invite.Unused_801_2 = boost::in_place();
+
+ if (buffer.ReadBit())
+ invite.Unused_801_3 = boost::in_place();
+
+ if (invite.Unused_801_1)
+ buffer >> *invite.Unused_801_1;
+
+ if (invite.Unused_801_2)
+ buffer >> *invite.Unused_801_2;
+
+ if (invite.Unused_801_3)
+ buffer >> *invite.Unused_801_3;
+
return buffer;
}
ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarAddEventInfo& addEventInfo)
{
- uint8 titleLength = buffer.ReadBits(8);
- uint16 descriptionLength = buffer.ReadBits(11);
-
+ buffer >> addEventInfo.ClubID;
buffer >> addEventInfo.EventType;
buffer >> addEventInfo.TextureID;
addEventInfo.Time = buffer.ReadPackedTime();
buffer >> addEventInfo.Flags;
addEventInfo.Invites.resize(buffer.read<uint32>());
- addEventInfo.Title = buffer.ReadString(titleLength);
- addEventInfo.Description = buffer.ReadString(descriptionLength);
+ uint8 titleLength = buffer.ReadBits(8);
+ uint16 descriptionLength = buffer.ReadBits(11);
for (WorldPackets::Calendar::CalendarAddEventInviteInfo& invite : addEventInfo.Invites)
buffer >> invite;
+ addEventInfo.Title = buffer.ReadString(titleLength);
+ addEventInfo.Description = buffer.ReadString(descriptionLength);
+
return buffer;
}
@@ -121,20 +141,28 @@ void WorldPackets::Calendar::CalendarAddEvent::Read()
_worldPacket >> MaxSize;
}
-void WorldPackets::Calendar::CalendarUpdateEvent::Read()
+ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarUpdateEventInfo& updateEventInfo)
{
- _worldPacket >> EventInfo.EventID;
- _worldPacket >> EventInfo.ModeratorID;
- _worldPacket >> EventInfo.EventType;
- _worldPacket >> EventInfo.TextureID;
- EventInfo.Time = _worldPacket.ReadPackedTime();
- _worldPacket >> EventInfo.Flags;
+ buffer >> updateEventInfo.ClubID;
+ buffer >> updateEventInfo.EventID;
+ buffer >> updateEventInfo.ModeratorID;
+ buffer >> updateEventInfo.EventType;
+ buffer >> updateEventInfo.TextureID;
+ updateEventInfo.Time = buffer.ReadPackedTime();
+ buffer >> updateEventInfo.Flags;
- uint8 titleLen = _worldPacket.ReadBits(8);
- uint16 descLen = _worldPacket.ReadBits(11);
+ uint8 titleLen = buffer.ReadBits(8);
+ uint16 descLen = buffer.ReadBits(11);
- EventInfo.Title = _worldPacket.ReadString(titleLen);
- EventInfo.Description = _worldPacket.ReadString(descLen);
+ updateEventInfo.Title = buffer.ReadString(titleLen);
+ updateEventInfo.Description = buffer.ReadString(descLen);
+
+ return buffer;
+}
+
+void WorldPackets::Calendar::CalendarUpdateEvent::Read()
+{
+ _worldPacket >> EventInfo;
_worldPacket >> MaxSize;
}
@@ -142,6 +170,7 @@ void WorldPackets::Calendar::CalendarRemoveEvent::Read()
{
_worldPacket >> EventID;
_worldPacket >> ModeratorID;
+ _worldPacket >> ClubID;
_worldPacket >> Flags;
}
@@ -149,6 +178,7 @@ void WorldPackets::Calendar::CalendarCopyEvent::Read()
{
_worldPacket >> EventID;
_worldPacket >> ModeratorID;
+ _worldPacket >> EventClubID;
Date = _worldPacket.ReadPackedTime();
}
@@ -163,6 +193,7 @@ void WorldPackets::Calendar::CalendarEventInvite::Read()
{
_worldPacket >> EventID;
_worldPacket >> ModeratorID;
+ _worldPacket >> ClubID;
uint16 nameLen = _worldPacket.ReadBits(9);
Creating = _worldPacket.ReadBit();
@@ -174,6 +205,7 @@ void WorldPackets::Calendar::CalendarEventInvite::Read()
void WorldPackets::Calendar::CalendarEventSignUp::Read()
{
_worldPacket >> EventID;
+ _worldPacket >> ClubID;
Tentative = _worldPacket.ReadBit();
}
@@ -255,7 +287,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarSendEvent::Write()
_worldPacket << uint32(Flags);
_worldPacket.AppendPackedTime(Date);
_worldPacket << uint32(LockDate);
- _worldPacket << EventGuildID;
+ _worldPacket << uint64(EventClubID);
_worldPacket << uint32(Invites.size());
_worldPacket.WriteBits(EventName.size(), 8);
_worldPacket.WriteBits(Description.size(), 11);
@@ -277,7 +309,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteAlert::Write()
_worldPacket << uint32(Flags);
_worldPacket << uint8(EventType);
_worldPacket << int32(TextureID);
- _worldPacket << EventGuildID;
+ _worldPacket << uint64(EventClubID);
_worldPacket << uint64(InviteID);
_worldPacket << uint8(Status);
_worldPacket << uint8(ModeratorStatus);
@@ -344,6 +376,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteRemovedAlert::Writ
WorldPacket const* WorldPackets::Calendar::CalendarEventUpdatedAlert::Write()
{
+ _worldPacket << uint64(EventClubID);
_worldPacket << uint64(EventID);
_worldPacket.AppendPackedTime(OriginalDate);
@@ -462,8 +495,8 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteNotes::Write()
_worldPacket << InviteGuid;
_worldPacket << uint64(EventID);
- _worldPacket.WriteBits(Notes.size(), 8);
_worldPacket.WriteBit(ClearPending);
+ _worldPacket.WriteBits(Notes.size(), 8);
_worldPacket.FlushBits();
_worldPacket.WriteString(Notes);
diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h
index f7337386c3c..7757e51144b 100644
--- a/src/server/game/Server/Packets/CalendarPackets.h
+++ b/src/server/game/Server/Packets/CalendarPackets.h
@@ -45,13 +45,14 @@ namespace WorldPackets
uint64 EventID = 0;
};
- class CalendarGuildFilter final : public ClientPacket
+ class CalendarCommunityFilter final : public ClientPacket
{
public:
- CalendarGuildFilter(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GUILD_FILTER, std::move(packet)) { }
+ CalendarCommunityFilter(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_COMMUNITY_FILTER, std::move(packet)) { }
void Read() override;
+ uint64 ClubID = 0;
uint8 MinLevel = 1;
uint8 MaxLevel = 100;
uint8 MaxRankOrder = 0;
@@ -62,10 +63,14 @@ namespace WorldPackets
ObjectGuid Guid;
uint8 Status = 0;
uint8 Moderator = 0;
+ Optional<ObjectGuid> Unused_801_1;
+ Optional<uint64> Unused_801_2;
+ Optional<uint64> Unused_801_3;
};
struct CalendarAddEventInfo
{
+ uint64 ClubID = 0;
std::string Title;
std::string Description;
uint8 EventType = 0;
@@ -88,6 +93,7 @@ namespace WorldPackets
struct CalendarUpdateEventInfo
{
+ uint64 ClubID = 0;
uint64 EventID = 0;
uint64 ModeratorID = 0;
std::string Title;
@@ -118,6 +124,7 @@ namespace WorldPackets
uint64 ModeratorID = 0;
uint64 EventID = 0;
+ uint64 ClubID = 0;
uint32 Flags = 0;
};
@@ -130,6 +137,7 @@ namespace WorldPackets
uint64 ModeratorID = 0;
uint64 EventID = 0;
+ uint64 EventClubID = 0;
time_t Date = time_t(0);
};
@@ -176,7 +184,7 @@ namespace WorldPackets
time_t Date = time_t(0);
uint32 Flags = 0;
int32 TextureID = 0;
- ObjectGuid EventGuildID;
+ uint64 EventClubID = 0;
ObjectGuid OwnerGuid;
};
@@ -213,7 +221,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid OwnerGuid;
- ObjectGuid EventGuildID;
+ uint64 EventClubID = 0;
uint64 EventID = 0;
time_t Date = time_t(0);
time_t LockDate = time_t(0);
@@ -234,7 +242,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid OwnerGuid;
- ObjectGuid EventGuildID;
+ uint64 EventClubID = 0;
ObjectGuid InvitedByGuid;
uint64 InviteID = 0;
uint64 EventID = 0;
@@ -258,6 +266,7 @@ namespace WorldPackets
bool IsSignUp = false;
bool Creating = true;
uint64 EventID = 0;
+ uint64 ClubID = 0;
std::string Name;
};
@@ -343,6 +352,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
+ uint64 EventClubID = 0;
uint64 EventID = 0;
time_t Date = time_t(0);
uint32 Flags = 0;
@@ -395,6 +405,7 @@ namespace WorldPackets
bool Tentative = false;
uint64 EventID = 0;
+ uint64 ClubID = 0;
};
class CalendarRemoveInvite final : public ClientPacket
diff --git a/src/server/game/Server/Packets/ChannelPackets.cpp b/src/server/game/Server/Packets/ChannelPackets.cpp
index fe6969d07cf..d5cb727b441 100644
--- a/src/server/game/Server/Packets/ChannelPackets.cpp
+++ b/src/server/game/Server/Packets/ChannelPackets.cpp
@@ -128,7 +128,6 @@ WorldPackets::Channel::ChannelCommand::ChannelCommand(WorldPacket&& packet) : Cl
case CMSG_CHAT_CHANNEL_DECLINE_INVITE:
case CMSG_CHAT_CHANNEL_DISPLAY_LIST:
case CMSG_CHAT_CHANNEL_LIST:
- case CMSG_CHAT_CHANNEL_MODERATE:
case CMSG_CHAT_CHANNEL_OWNER:
break;
default:
@@ -150,12 +149,10 @@ WorldPackets::Channel::ChannelPlayerCommand::ChannelPlayerCommand(WorldPacket&&
case CMSG_CHAT_CHANNEL_INVITE:
case CMSG_CHAT_CHANNEL_KICK:
case CMSG_CHAT_CHANNEL_MODERATOR:
- case CMSG_CHAT_CHANNEL_MUTE:
case CMSG_CHAT_CHANNEL_SET_OWNER:
case CMSG_CHAT_CHANNEL_SILENCE_ALL:
case CMSG_CHAT_CHANNEL_UNBAN:
case CMSG_CHAT_CHANNEL_UNMODERATOR:
- case CMSG_CHAT_CHANNEL_UNMUTE:
case CMSG_CHAT_CHANNEL_UNSILENCE_ALL:
break;
default:
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index 538a2c7e1d5..3973c55cf0e 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -140,6 +140,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharacters
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::CharacterInfo const& charInfo)
{
data << charInfo.Guid;
+ data << uint64(charInfo.GuildClubMemberID);
data << uint8(charInfo.ListPosition);
data << uint8(charInfo.Race);
data << uint8(charInfo.Class);
@@ -201,9 +202,9 @@ WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write()
_worldPacket.WriteBit(Success);
_worldPacket.WriteBit(IsDeletedCharacters);
- _worldPacket.WriteBit(IsDemonHunterCreationAllowed);
+ _worldPacket.WriteBit(IsTestDemonHunterCreationAllowed);
_worldPacket.WriteBit(HasDemonHunterOnRealm);
- _worldPacket.WriteBit(Unknown7x);
+ _worldPacket.WriteBit(IsDemonHunterCreationAllowed);
_worldPacket.WriteBit(DisabledClassesMask.is_initialized());
_worldPacket.WriteBit(IsAlliedRacesCreationAllowed);
_worldPacket << uint32(Characters.size());
@@ -227,6 +228,7 @@ void WorldPackets::Character::CreateCharacter::Read()
CreateInfo.reset(new CharacterCreateInfo());
uint32 nameLength = _worldPacket.ReadBits(6);
bool const hasTemplateSet = _worldPacket.ReadBit();
+ CreateInfo->IsTrialBoost = _worldPacket.ReadBit();
_worldPacket >> CreateInfo->Race;
_worldPacket >> CreateInfo->Class;
@@ -246,6 +248,7 @@ void WorldPackets::Character::CreateCharacter::Read()
WorldPacket const* WorldPackets::Character::CreateChar::Write()
{
_worldPacket << uint8(Code);
+ _worldPacket << Guid;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index 1f4ce11621a..fb5984efc8a 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -56,6 +56,7 @@ namespace WorldPackets
std::array<uint8, PLAYER_CUSTOM_DISPLAY_SIZE> CustomDisplay = { };
uint8 OutfitId = 0;
Optional<int32> TemplateSet;
+ bool IsTrialBoost = false;
std::string Name;
/// Server side data
@@ -121,6 +122,7 @@ namespace WorldPackets
CharacterInfo(Field* fields);
ObjectGuid Guid;
+ uint64 GuildClubMemberID = 0; ///< same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known)
std::string Name;
uint8 ListPosition = 0; ///< Order of the characters in list
uint8 Race = 0;
@@ -170,22 +172,22 @@ namespace WorldPackets
struct RaceUnlock
{
- int32 RaceID;
- bool HasExpansion;
- bool HasAchievement;
- bool HasHeritageArmor;
+ int32 RaceID = 0;
+ bool HasExpansion = false;
+ bool HasAchievement = false;
+ bool HasHeritageArmor = false;
};
EnumCharactersResult() : ServerPacket(SMSG_ENUM_CHARACTERS_RESULT) { }
WorldPacket const* Write() override;
- bool Success = false; ///<
- bool IsDeletedCharacters = false; ///< used for character undelete list
- bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access
- bool HasDemonHunterOnRealm = false;
- bool Unknown7x = false;
- bool IsAlliedRacesCreationAllowed = false;
+ bool Success = false; ///<
+ bool IsDeletedCharacters = false; ///< used for character undelete list
+ bool IsTestDemonHunterCreationAllowed = false; ///< allows client to skip 1 per realm and level 70 requirements
+ bool HasDemonHunterOnRealm = false;
+ bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access
+ bool IsAlliedRacesCreationAllowed = false;
int32 MaxCharacterLevel = 1;
Optional<uint32> DisabledClassesMask;
@@ -225,6 +227,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint8 Code = 0; ///< Result code @see enum ResponseCodes
+ ObjectGuid Guid;
};
class CharDelete final : public ClientPacket
@@ -537,7 +540,7 @@ namespace WorldPackets
class InitialSetup final : public ServerPacket
{
public:
- InitialSetup() : ServerPacket(SMSG_INITIAL_SETUP, 1 + 1 + 4 + 4) { }
+ InitialSetup() : ServerPacket(SMSG_INITIAL_SETUP, 1 + 1) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp
index 26cbd48f7bf..044fe086f48 100644
--- a/src/server/game/Server/Packets/ChatPackets.cpp
+++ b/src/server/game/Server/Packets/ChatPackets.cpp
@@ -47,32 +47,30 @@ void WorldPackets::Chat::ChatMessageChannel::Read()
Text = _worldPacket.ReadString(textLen);
}
-void WorldPackets::Chat::ChatAddonMessage::Read()
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Chat::ChatAddonMessageParams& params)
{
- uint32 prefixLen = _worldPacket.ReadBits(5);
- uint32 textLen = _worldPacket.ReadBits(9);
- Prefix = _worldPacket.ReadString(prefixLen);
- Text = _worldPacket.ReadString(textLen);
+ uint32 prefixLen = data.ReadBits(5);
+ uint32 textLen = data.ReadBits(8);
+ params.IsLogged = data.ReadBit();
+ params.Type = ChatMsg(data.read<int32>());
+ params.Prefix = data.ReadString(prefixLen);
+ params.Text = data.ReadString(textLen);
+
+ return data;
}
-void WorldPackets::Chat::ChatAddonMessageWhisper::Read()
+void WorldPackets::Chat::ChatAddonMessage::Read()
{
- uint32 targetLen = _worldPacket.ReadBits(9);
- uint32 prefixLen = _worldPacket.ReadBits(5);
- uint32 textLen = _worldPacket.ReadBits(9);
- Target = _worldPacket.ReadString(targetLen);
- Prefix = _worldPacket.ReadString(prefixLen);
- Text = _worldPacket.ReadString(textLen);
+ _worldPacket >> Params;
}
-void WorldPackets::Chat::ChatAddonMessageChannel::Read()
+void WorldPackets::Chat::ChatAddonMessageTargeted::Read()
{
uint32 targetLen = _worldPacket.ReadBits(9);
- uint32 prefixLen = _worldPacket.ReadBits(5);
- uint32 textLen = _worldPacket.ReadBits(9);
+ _worldPacket.ResetBitPos();
+
+ _worldPacket >> Params;
Target = _worldPacket.ReadString(targetLen);
- Prefix = _worldPacket.ReadString(prefixLen);
- Text = _worldPacket.ReadString(textLen);
}
void WorldPackets::Chat::ChatMessageDND::Read()
@@ -162,17 +160,17 @@ void WorldPackets::Chat::Chat::SetReceiver(WorldObject const* receiver, LocaleCo
WorldPacket const* WorldPackets::Chat::Chat::Write()
{
- _worldPacket << SlashCmd;
- _worldPacket << _Language;
+ _worldPacket << uint8(SlashCmd);
+ _worldPacket << uint32(_Language);
_worldPacket << SenderGUID;
_worldPacket << SenderGuildGUID;
_worldPacket << SenderAccountGUID;
_worldPacket << TargetGUID;
- _worldPacket << TargetVirtualAddress;
- _worldPacket << SenderVirtualAddress;
+ _worldPacket << uint32(TargetVirtualAddress);
+ _worldPacket << uint32(SenderVirtualAddress);
_worldPacket << PartyGUID;
- _worldPacket << AchievementID;
- _worldPacket << DisplayTime;
+ _worldPacket << uint32(AchievementID);
+ _worldPacket << float(DisplayTime);
_worldPacket.WriteBits(SenderName.length(), 11);
_worldPacket.WriteBits(TargetName.length(), 11);
_worldPacket.WriteBits(Prefix.length(), 5);
@@ -181,6 +179,7 @@ WorldPacket const* WorldPackets::Chat::Chat::Write()
_worldPacket.WriteBits(_ChatFlags, 11);
_worldPacket.WriteBit(HideChatLog);
_worldPacket.WriteBit(FakeSenderName);
+ _worldPacket.WriteBit(Unused_801.is_initialized());
_worldPacket.FlushBits();
_worldPacket.WriteString(SenderName);
@@ -189,6 +188,9 @@ WorldPacket const* WorldPackets::Chat::Chat::Write()
_worldPacket.WriteString(_Channel);
_worldPacket.WriteString(ChatText);
+ if (Unused_801)
+ _worldPacket << uint32(*Unused_801);
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h
index 97654aa656e..cbb9da156b0 100644
--- a/src/server/game/Server/Packets/ChatPackets.h
+++ b/src/server/game/Server/Packets/ChatPackets.h
@@ -53,7 +53,7 @@ namespace WorldPackets
class ChatMessageWhisper final : public ClientPacket
{
public:
- ChatMessageWhisper(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
+ ChatMessageWhisper(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_MESSAGE_WHISPER, std::move(packet)) { }
void Read() override;
@@ -66,7 +66,7 @@ namespace WorldPackets
class ChatMessageChannel final : public ClientPacket
{
public:
- ChatMessageChannel(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
+ ChatMessageChannel(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_MESSAGE_CHANNEL, std::move(packet)) { }
void Read() override;
@@ -75,46 +75,35 @@ namespace WorldPackets
std::string Target;
};
- // CMSG_CHAT_ADDON_MESSAGE_GUILD
- // CMSG_CHAT_ADDON_MESSAGE_OFFICER
- // CMSG_CHAT_ADDON_MESSAGE_PARTY
- // CMSG_CHAT_ADDON_MESSAGE_RAID
- // CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT
- class ChatAddonMessage final : public ClientPacket
+ struct ChatAddonMessageParams
{
- public:
- ChatAddonMessage(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
-
- void Read() override;
-
std::string Prefix;
std::string Text;
+ ChatMsg Type = CHAT_MSG_PARTY;
+ bool IsLogged = false;
};
- // CMSG_CHAT_ADDON_MESSAGE_WHISPER
- class ChatAddonMessageWhisper final : public ClientPacket
+ // CMSG_CHAT_ADDON_MESSAGE
+ class ChatAddonMessage final : public ClientPacket
{
public:
- ChatAddonMessageWhisper(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_WHISPER, std::move(packet)) { }
+ ChatAddonMessage(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE, std::move(packet)) { }
void Read() override;
- std::string Prefix;
- std::string Target;
- std::string Text;
+ ChatAddonMessageParams Params;
};
// CMSG_CHAT_ADDON_MESSAGE_CHANNEL
- class ChatAddonMessageChannel final : public ClientPacket
+ class ChatAddonMessageTargeted final : public ClientPacket
{
public:
- ChatAddonMessageChannel(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_CHANNEL, std::move(packet)) { }
+ ChatAddonMessageTargeted(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_TARGETED, std::move(packet)) { }
void Read() override;
- std::string Text;
std::string Target;
- std::string Prefix;
+ ChatAddonMessageParams Params;
};
class ChatMessageDND final : public ClientPacket
@@ -161,7 +150,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint8 SlashCmd = 0; ///< @see enum ChatMsg
- uint8 _Language = LANG_UNIVERSAL;
+ uint32 _Language = LANG_UNIVERSAL;
ObjectGuid SenderGUID;
ObjectGuid SenderGuildGUID;
ObjectGuid SenderAccountGUID;
@@ -177,6 +166,7 @@ namespace WorldPackets
uint32 AchievementID = 0;
uint8 _ChatFlags = 0; ///< @see enum ChatFlags
float DisplayTime = 0.0f;
+ Optional<uint32> Unused_801;
bool HideChatLog = false;
bool FakeSenderName = false;
};
diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp
index 22196336960..243a7fd6e43 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.cpp
+++ b/src/server/game/Server/Packets/CombatLogPackets.cpp
@@ -26,6 +26,7 @@ WorldPacket const* WorldPackets::CombatLog::SpellNonMeleeDamageLog::Write()
*this << int32(SpellID);
*this << int32(SpellXSpellVisualID);
*this << int32(Damage);
+ *this << int32(OriginalDamage);
*this << int32(Overkill);
*this << uint8(SchoolMask);
*this << int32(Absorbed);
@@ -35,11 +36,11 @@ WorldPacket const* WorldPackets::CombatLog::SpellNonMeleeDamageLog::Write()
WriteBits(Flags, 7);
WriteBit(false); // Debug info
WriteLogDataBit();
- WriteBit(SandboxScaling.is_initialized());
+ WriteBit(ContentTuning.is_initialized());
FlushBits();
WriteLogData();
- if (SandboxScaling)
- *this << *SandboxScaling;
+ if (ContentTuning)
+ *this << *ContentTuning;
return &_worldPacket;
}
@@ -61,12 +62,12 @@ WorldPacket const* WorldPackets::CombatLog::EnvironmentalDamageLog::Write()
WorldPacket const* WorldPackets::CombatLog::SpellExecuteLog::Write()
{
*this << Caster;
- *this << SpellID;
+ *this << int32(SpellID);
*this << uint32(Effects.size());
for (SpellLogEffect const& effect : Effects)
{
- *this << effect.Effect;
+ *this << int32(effect.Effect);
*this << uint32(effect.PowerDrainTargets.size());
*this << uint32(effect.ExtraAttacksTargets.size());
@@ -78,32 +79,32 @@ WorldPacket const* WorldPackets::CombatLog::SpellExecuteLog::Write()
for (SpellLogEffectPowerDrainParams const& powerDrainTarget : effect.PowerDrainTargets)
{
*this << powerDrainTarget.Victim;
- *this << powerDrainTarget.Points;
- *this << powerDrainTarget.PowerType;
- *this << powerDrainTarget.Amplitude;
+ *this << uint32(powerDrainTarget.Points);
+ *this << uint32(powerDrainTarget.PowerType);
+ *this << float(powerDrainTarget.Amplitude);
}
for (SpellLogEffectExtraAttacksParams const& extraAttacksTarget : effect.ExtraAttacksTargets)
{
*this << extraAttacksTarget.Victim;
- *this << extraAttacksTarget.NumAttacks;
+ *this << uint32(extraAttacksTarget.NumAttacks);
}
for (SpellLogEffectDurabilityDamageParams const& durabilityDamageTarget : effect.DurabilityDamageTargets)
{
*this << durabilityDamageTarget.Victim;
- *this << durabilityDamageTarget.ItemID;
- *this << durabilityDamageTarget.Amount;
+ *this << int32(durabilityDamageTarget.ItemID);
+ *this << int32(durabilityDamageTarget.Amount);
}
for (SpellLogEffectGenericVictimParams const& genericVictimTarget : effect.GenericVictimTargets)
*this << genericVictimTarget.Victim;
for (SpellLogEffectTradeSkillItemParams const& tradeSkillTarget : effect.TradeSkillTargets)
- *this << tradeSkillTarget.ItemID;
+ *this << int32(tradeSkillTarget.ItemID);
for (SpellLogEffectFeedPetParams const& feedPetTarget : effect.FeedPetTargets)
- *this << feedPetTarget.ItemID;
+ *this << int32(feedPetTarget.ItemID);
}
WriteLogDataBit();
@@ -119,13 +120,14 @@ WorldPacket const* WorldPackets::CombatLog::SpellHealLog::Write()
*this << CasterGUID;
*this << int32(SpellID);
*this << int32(Health);
+ *this << int32(OriginalHeal);
*this << int32(OverHeal);
*this << int32(Absorbed);
WriteBit(Crit);
WriteBit(CritRollMade.is_initialized());
WriteBit(CritRollNeeded.is_initialized());
WriteLogDataBit();
- WriteBit(SandboxScaling.is_initialized());
+ WriteBit(ContentTuning.is_initialized());
FlushBits();
WriteLogData();
@@ -136,8 +138,8 @@ WorldPacket const* WorldPackets::CombatLog::SpellHealLog::Write()
if (CritRollNeeded)
*this << *CritRollNeeded;
- if (SandboxScaling)
- *this << *SandboxScaling;
+ if (ContentTuning)
+ *this << *ContentTuning;
return &_worldPacket;
}
@@ -155,24 +157,24 @@ WorldPacket const* WorldPackets::CombatLog::SpellPeriodicAuraLog::Write()
{
*this << int32(effect.Effect);
*this << int32(effect.Amount);
+ *this << int32(effect.OriginalDamage);
*this << int32(effect.OverHealOrKill);
*this << int32(effect.SchoolMaskOrPower);
*this << int32(effect.AbsorbedOrAmplitude);
*this << int32(effect.Resisted);
WriteBit(effect.Crit);
WriteBit(effect.DebugInfo.is_initialized());
- WriteBit(effect.SandboxScaling.is_initialized());
+ WriteBit(effect.ContentTuning.is_initialized());
FlushBits();
- if (effect.SandboxScaling)
- *this << *effect.SandboxScaling;
+ if (effect.ContentTuning)
+ *this << *effect.ContentTuning;
if (effect.DebugInfo)
{
*this << float(effect.DebugInfo->CritRollMade);
*this << float(effect.DebugInfo->CritRollNeeded);
}
-
}
WriteLogData();
@@ -280,6 +282,7 @@ WorldPacket const* WorldPackets::CombatLog::SpellDamageShield::Write()
*this << Defender;
*this << int32(SpellID);
*this << int32(TotalDamage);
+ *this << int32(OriginalDamage);
*this << int32(OverKill);
*this << int32(SchoolMask);
*this << int32(LogAbsorbed);
@@ -297,6 +300,7 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write()
attackRoundInfo << AttackerGUID;
attackRoundInfo << VictimGUID;
attackRoundInfo << int32(Damage);
+ attackRoundInfo << int32(OriginalDamage);
attackRoundInfo << int32(OverDamage);
attackRoundInfo << uint8(SubDmg.is_initialized());
if (SubDmg)
@@ -338,15 +342,16 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write()
if (HitInfo & (HITINFO_BLOCK | HITINFO_UNK12))
attackRoundInfo << float(Unk);
- attackRoundInfo << uint8(SandboxScaling.Type);
- attackRoundInfo << uint8(SandboxScaling.TargetLevel);
- attackRoundInfo << uint8(SandboxScaling.Expansion);
- attackRoundInfo << uint8(SandboxScaling.Class);
- attackRoundInfo << uint8(SandboxScaling.TargetMinScalingLevel);
- attackRoundInfo << uint8(SandboxScaling.TargetMaxScalingLevel);
- attackRoundInfo << int16(SandboxScaling.PlayerLevelDelta);
- attackRoundInfo << int8(SandboxScaling.TargetScalingLevelDelta);
- attackRoundInfo << uint16(SandboxScaling.PlayerItemLevel);
+ 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 << uint16(ContentTuning.PlayerItemLevel);
+ attackRoundInfo << uint16(ContentTuning.ScalingHealthItemLevelCurveID);
+ attackRoundInfo << uint8(ContentTuning.ScalesWithItemLevel ? 1 : 0);
WriteLogDataBit();
FlushBits();
diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h
index 88a427ac962..4f3d1361796 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.h
+++ b/src/server/game/Server/Packets/CombatLogPackets.h
@@ -39,6 +39,7 @@ namespace WorldPackets
int32 SpellID = 0;
int32 SpellXSpellVisualID = 0;
int32 Damage = 0;
+ int32 OriginalDamage = 0;
int32 Overkill = -1;
uint8 SchoolMask = 0;
int32 ShieldBlock = 0;
@@ -47,7 +48,7 @@ namespace WorldPackets
int32 Absorbed = 0;
int32 Flags = 0;
// Optional<SpellNonMeleeDamageLogDebugInfo> DebugInfo;
- Optional<Spells::SandboxScalingData> SandboxScaling;
+ Optional<Spells::ContentTuningParams> ContentTuning;
};
class EnvironmentalDamageLog final : public CombatLogServerPacket
@@ -99,12 +100,13 @@ namespace WorldPackets
ObjectGuid TargetGUID;
int32 SpellID = 0;
int32 Health = 0;
+ int32 OriginalHeal = 0;
int32 OverHeal = 0;
int32 Absorbed = 0;
bool Crit = false;
Optional<float> CritRollMade;
Optional<float> CritRollNeeded;
- Optional<Spells::SandboxScalingData> SandboxScaling;
+ Optional<Spells::ContentTuningParams> ContentTuning;
};
class SpellPeriodicAuraLog final : public CombatLogServerPacket
@@ -120,13 +122,14 @@ namespace WorldPackets
{
int32 Effect = 0;
int32 Amount = 0;
+ int32 OriginalDamage = 0;
int32 OverHealOrKill = 0;
int32 SchoolMaskOrPower = 0;
int32 AbsorbedOrAmplitude = 0;
int32 Resisted = 0;
bool Crit = false;
Optional<PeriodicalAuraLogEffectDebugInfo> DebugInfo;
- Optional<Spells::SandboxScalingData> SandboxScaling;
+ Optional<Spells::ContentTuningParams> ContentTuning;
};
SpellPeriodicAuraLog() : CombatLogServerPacket(SMSG_SPELL_PERIODIC_AURA_LOG, 16 + 16 + 4 + 4 + 1) { }
@@ -267,6 +270,7 @@ namespace WorldPackets
ObjectGuid Defender;
int32 SpellID = 0;
int32 TotalDamage = 0;
+ int32 OriginalDamage = 0;
int32 OverKill = 0;
int32 SchoolMask = 0;
int32 LogAbsorbed = 0;
@@ -308,6 +312,7 @@ namespace WorldPackets
ObjectGuid AttackerGUID;
ObjectGuid VictimGUID;
int32 Damage = 0;
+ int32 OriginalDamage = 0;
int32 OverDamage = -1; // (damage - health) or -1 if unit is still alive
Optional<SubDamage> SubDmg;
uint8 VictimState = 0;
@@ -317,7 +322,7 @@ namespace WorldPackets
int32 RageGained = 0;
UnkAttackerState UnkState;
float Unk = 0.0f;
- Spells::SandboxScalingData SandboxScaling;
+ Spells::ContentTuningParams ContentTuning;
};
}
}
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index e2f18ace45e..b1e22a3746f 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -27,6 +27,7 @@ void WorldPackets::Spells::SpellCastLogData::Initialize(Unit const* unit)
Health = unit->GetHealth();
AttackPower = unit->GetTotalAttackPowerValue(unit->getClass() == CLASS_HUNTER ? RANGED_ATTACK : BASE_ATTACK);
SpellPower = unit->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SPELL);
+ Armor = unit->GetArmor();
PowerData.emplace_back(int32(unit->GetPowerType()), unit->GetPower(unit->GetPowerType()), int32(0));
}
@@ -35,6 +36,7 @@ void WorldPackets::Spells::SpellCastLogData::Initialize(Spell const* spell)
Health = spell->GetCaster()->GetHealth();
AttackPower = spell->GetCaster()->GetTotalAttackPowerValue(spell->GetCaster()->getClass() == CLASS_HUNTER ? RANGED_ATTACK : BASE_ATTACK);
SpellPower = spell->GetCaster()->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SPELL);
+ Armor = spell->GetCaster()->GetArmor();
Powers primaryPowerType = spell->GetCaster()->GetPowerType();
bool primaryPowerAdded = false;
for (SpellPowerCost const& cost : spell->GetPowerCost())
@@ -53,22 +55,22 @@ namespace WorldPackets
namespace Spells
{
template<class T, class U>
- bool SandboxScalingData::GenerateDataForUnits(T* /*attacker*/, U* /*target*/)
+ bool ContentTuningParams::GenerateDataForUnits(T* /*attacker*/, U* /*target*/)
{
return false;
}
template<>
- bool SandboxScalingData::GenerateDataForUnits<Creature, Player>(Creature* attacker, Player* target)
+ bool ContentTuningParams::GenerateDataForUnits<Creature, Player>(Creature* attacker, Player* target)
{
CreatureTemplate const* creatureTemplate = attacker->GetCreatureTemplate();
Type = TYPE_CREATURE_TO_PLAYER_DAMAGE;
- PlayerLevelDelta = target->GetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
+ PlayerLevelDelta = target->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
PlayerItemLevel = target->GetAverageItemLevel();
+ ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID);
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
- Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
TargetScalingLevelDelta = int8(attacker->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
@@ -76,16 +78,16 @@ namespace WorldPackets
}
template<>
- bool SandboxScalingData::GenerateDataForUnits<Player, Creature>(Player* attacker, Creature* target)
+ bool ContentTuningParams::GenerateDataForUnits<Player, Creature>(Player* attacker, Creature* target)
{
CreatureTemplate const* creatureTemplate = target->GetCreatureTemplate();
Type = TYPE_PLAYER_TO_CREATURE_DAMAGE;
- PlayerLevelDelta = attacker->GetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
+ PlayerLevelDelta = attacker->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
PlayerItemLevel = attacker->GetAverageItemLevel();
+ ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID);
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
- Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
TargetScalingLevelDelta = int8(target->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
@@ -93,7 +95,7 @@ namespace WorldPackets
}
template<>
- bool SandboxScalingData::GenerateDataForUnits<Creature, Creature>(Creature* attacker, Creature* target)
+ bool ContentTuningParams::GenerateDataForUnits<Creature, Creature>(Creature* attacker, Creature* target)
{
Creature* accessor = target->HasScalableLevels() ? target : attacker;
CreatureTemplate const* creatureTemplate = accessor->GetCreatureTemplate();
@@ -103,7 +105,6 @@ namespace WorldPackets
PlayerItemLevel = 0;
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
- Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
TargetScalingLevelDelta = int8(accessor->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA));
@@ -111,7 +112,7 @@ namespace WorldPackets
}
template<>
- bool SandboxScalingData::GenerateDataForUnits<Unit, Unit>(Unit* attacker, Unit* target)
+ bool ContentTuningParams::GenerateDataForUnits<Unit, Unit>(Unit* attacker, Unit* target)
{
if (Player* playerAttacker = attacker->ToPlayer())
{
@@ -152,6 +153,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData
data << int64(spellCastLogData.Health);
data << int32(spellCastLogData.AttackPower);
data << int32(spellCastLogData.SpellPower);
+ data << int32(spellCastLogData.Armor);
data.WriteBits(spellCastLogData.PowerData.size(), 9);
data.FlushBits();
@@ -165,16 +167,18 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData
return data;
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SandboxScalingData const& sandboxScalingData)
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::ContentTuningParams const& contentTuningParams)
{
- data.WriteBits(sandboxScalingData.Type, 4);
- data << int16(sandboxScalingData.PlayerLevelDelta);
- data << uint16(sandboxScalingData.PlayerItemLevel);
- data << uint8(sandboxScalingData.TargetLevel);
- data << uint8(sandboxScalingData.Expansion);
- data << uint8(sandboxScalingData.Class);
- data << uint8(sandboxScalingData.TargetMinScalingLevel);
- data << uint8(sandboxScalingData.TargetMaxScalingLevel);
- data << int8(sandboxScalingData.TargetScalingLevelDelta);
+ data << int16(contentTuningParams.PlayerLevelDelta);
+ data << uint16(contentTuningParams.PlayerItemLevel);
+ 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.WriteBits(contentTuningParams.Type, 4);
+ data.WriteBit(contentTuningParams.ScalesWithItemLevel);
+ data.FlushBits();
return data;
}
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
index 172f94e7031..b30c5fefe34 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
@@ -41,31 +41,34 @@ namespace WorldPackets
int64 Health = 0;
int32 AttackPower = 0;
int32 SpellPower = 0;
+ int32 Armor = 0;
std::vector<SpellLogPowerData> PowerData;
void Initialize(Unit const* unit);
void Initialize(Spell const* spell);
};
- struct SandboxScalingData
+ struct ContentTuningParams
{
- enum SandboxScalingDataType : uint32
+ enum ContentTuningType : uint32
{
- TYPE_PLAYER_TO_PLAYER = 1, // NYI
- TYPE_CREATURE_TO_PLAYER_DAMAGE = 2,
- TYPE_PLAYER_TO_CREATURE_DAMAGE = 3,
+ TYPE_PLAYER_TO_PLAYER = 7, // NYI
+ TYPE_PLAYER_TO_PLAYER_HEALING = 8,
+ TYPE_CREATURE_TO_PLAYER_DAMAGE = 1,
+ TYPE_PLAYER_TO_CREATURE_DAMAGE = 2,
TYPE_CREATURE_TO_CREATURE_DAMAGE = 4
};
uint32 Type = 0;
int16 PlayerLevelDelta = 0;
uint16 PlayerItemLevel = 0;
+ uint16 ScalingHealthItemLevelCurveID = 0;
uint8 TargetLevel = 0;
uint8 Expansion = 0;
- uint8 Class = 0;
uint8 TargetMinScalingLevel = 0;
uint8 TargetMaxScalingLevel = 0;
int8 TargetScalingLevelDelta = 0;
+ bool ScalesWithItemLevel = false;
template<class T, class U>
bool GenerateDataForUnits(T* attacker, U* target);
@@ -126,6 +129,6 @@ namespace WorldPackets
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData const& spellCastLogData);
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SandboxScalingData const& sandboxScalingData);
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::ContentTuningParams const& contentTuningParams);
#endif // CombatLogPacketsCommon_h__
diff --git a/src/server/game/Server/Packets/CombatPackets.cpp b/src/server/game/Server/Packets/CombatPackets.cpp
index 5048595314c..63fc4ac1ed1 100644
--- a/src/server/game/Server/Packets/CombatPackets.cpp
+++ b/src/server/game/Server/Packets/CombatPackets.cpp
@@ -96,7 +96,7 @@ WorldPacket const* WorldPackets::Combat::AIReaction::Write()
WorldPacket const* WorldPackets::Combat::AttackSwingError::Write()
{
- _worldPacket.WriteBits(Reason, 2);
+ _worldPacket.WriteBits(Reason, 3);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -107,8 +107,8 @@ WorldPacket const* WorldPackets::Combat::PowerUpdate::Write()
_worldPacket << uint32(Powers.size());
for (PowerUpdatePower const& power : Powers)
{
- _worldPacket << power.Power;
- _worldPacket << power.PowerType;
+ _worldPacket << int32(power.Power);
+ _worldPacket << uint8(power.PowerType);
}
return &_worldPacket;
diff --git a/src/server/game/Server/Packets/CombatPackets.h b/src/server/game/Server/Packets/CombatPackets.h
index 446d9f5453b..313d573eae1 100644
--- a/src/server/game/Server/Packets/CombatPackets.h
+++ b/src/server/game/Server/Packets/CombatPackets.h
@@ -41,9 +41,9 @@ namespace WorldPackets
public:
enum AttackSwingErr : uint8
{
- CantAttack = 0,
+ NotInRange = 0,
BadFacing = 1,
- NotInRange = 2,
+ CantAttack = 2,
DeadTarget = 3
};
diff --git a/src/server/game/Server/Packets/DuelPackets.cpp b/src/server/game/Server/Packets/DuelPackets.cpp
index f76ccecaa89..ccee13b731a 100644
--- a/src/server/game/Server/Packets/DuelPackets.cpp
+++ b/src/server/game/Server/Packets/DuelPackets.cpp
@@ -59,6 +59,7 @@ void WorldPackets::Duel::DuelResponse::Read()
{
_worldPacket >> ArbiterGUID;
Accepted = _worldPacket.ReadBit();
+ Forfeited = _worldPacket.ReadBit();
}
WorldPacket const* WorldPackets::Duel::DuelWinner::Write()
diff --git a/src/server/game/Server/Packets/DuelPackets.h b/src/server/game/Server/Packets/DuelPackets.h
index b45a8b42ba7..efa2701741a 100644
--- a/src/server/game/Server/Packets/DuelPackets.h
+++ b/src/server/game/Server/Packets/DuelPackets.h
@@ -103,6 +103,7 @@ namespace WorldPackets
ObjectGuid ArbiterGUID;
bool Accepted = false;
+ bool Forfeited = false;
};
class DuelWinner final : public ServerPacket
diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.h b/src/server/game/Server/Packets/EquipmentSetPackets.h
index 1dd7040ec32..5c17fdc3cae 100644
--- a/src/server/game/Server/Packets/EquipmentSetPackets.h
+++ b/src/server/game/Server/Packets/EquipmentSetPackets.h
@@ -28,7 +28,7 @@ namespace WorldPackets
class EquipmentSetID final : public ServerPacket
{
public:
- EquipmentSetID() : ServerPacket(SMSG_EQUIPMENT_SET_ID, 8 + 4) { }
+ EquipmentSetID() : ServerPacket(SMSG_EQUIPMENT_SET_ID, 8 + 4 + 4) { }
WorldPacket const* Write() override;
@@ -89,7 +89,7 @@ namespace WorldPackets
class UseEquipmentSetResult final : public ServerPacket
{
public:
- UseEquipmentSetResult() : ServerPacket(SMSG_USE_EQUIPMENT_SET_RESULT, 1) { }
+ UseEquipmentSetResult() : ServerPacket(SMSG_USE_EQUIPMENT_SET_RESULT, 8 + 1) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h
index a7bd016909c..bf83f006b1e 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.h
+++ b/src/server/game/Server/Packets/GarrisonPackets.h
@@ -249,7 +249,7 @@ namespace WorldPackets
class GarrisonLearnBlueprintResult final : public ServerPacket
{
public:
- GarrisonLearnBlueprintResult() : ServerPacket(SMSG_GARRISON_LEARN_BLUEPRINT_RESULT, 4 + 4) { }
+ GarrisonLearnBlueprintResult() : ServerPacket(SMSG_GARRISON_LEARN_BLUEPRINT_RESULT, 4 + 4 + 4) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/GuildFinderPackets.cpp b/src/server/game/Server/Packets/GuildFinderPackets.cpp
index ac8bcfea9df..2ce269fbdcb 100644
--- a/src/server/game/Server/Packets/GuildFinderPackets.cpp
+++ b/src/server/game/Server/Packets/GuildFinderPackets.cpp
@@ -108,7 +108,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::GuildFinder::GuildPostDat
data << int32(post.Availability);
data << int32(post.ClassRoles);
data << int32(post.LevelRange);
- data << uint32(post.SecondsRemaining);
+ data << int32(post.SecondsRemaining);
data.WriteString(post.Comment);
return data;
}
diff --git a/src/server/game/Server/Packets/GuildFinderPackets.h b/src/server/game/Server/Packets/GuildFinderPackets.h
index 1fe3183156a..94084934fc1 100644
--- a/src/server/game/Server/Packets/GuildFinderPackets.h
+++ b/src/server/game/Server/Packets/GuildFinderPackets.h
@@ -157,7 +157,7 @@ namespace WorldPackets
int32 Availability = 0;
int32 ClassRoles = 0;
int32 LevelRange = 0;
- time_t SecondsRemaining = time_t(0);
+ int32 SecondsRemaining = 0;
std::string Comment;
};
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 777891b3cef..2a3739f2470 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -63,9 +63,9 @@ WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write()
WorldPacket const* WorldPackets::Guild::GuildRoster::Write()
{
- _worldPacket << NumAccounts;
+ _worldPacket << int32(NumAccounts);
_worldPacket.AppendPackedTime(CreateDate);
- _worldPacket << GuildFlags;
+ _worldPacket << int32(GuildFlags);
_worldPacket << uint32(MemberData.size());
_worldPacket.WriteBits(WelcomeText.length(), 10);
_worldPacket.WriteBits(InfoText.length(), 11);
@@ -98,8 +98,8 @@ void WorldPackets::Guild::GuildUpdateMotdText::Read()
WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write()
{
- _worldPacket << Result;
- _worldPacket << Command;
+ _worldPacket << int32(Result);
+ _worldPacket << int32(Command);
_worldPacket.WriteBits(Name.length(), 8);
_worldPacket.FlushBits();
@@ -127,17 +127,17 @@ WorldPacket const* WorldPackets::Guild::GuildInvite::Write()
_worldPacket.WriteBits(OldGuildName.length(), 7);
_worldPacket.FlushBits();
- _worldPacket << InviterVirtualRealmAddress;
- _worldPacket << GuildVirtualRealmAddress;
+ _worldPacket << uint32(InviterVirtualRealmAddress);
+ _worldPacket << uint32(GuildVirtualRealmAddress);
_worldPacket << GuildGUID;
- _worldPacket << OldGuildVirtualRealmAddress;
+ _worldPacket << uint32(OldGuildVirtualRealmAddress);
_worldPacket << OldGuildGUID;
- _worldPacket << EmblemStyle;
- _worldPacket << EmblemColor;
- _worldPacket << BorderStyle;
- _worldPacket << BorderColor;
- _worldPacket << Background;
- _worldPacket << AchievementPoints;
+ _worldPacket << uint32(EmblemStyle);
+ _worldPacket << uint32(EmblemColor);
+ _worldPacket << uint32(BorderStyle);
+ _worldPacket << uint32(BorderColor);
+ _worldPacket << uint32(Background);
+ _worldPacket << int32(AchievementPoints);
_worldPacket.WriteString(InviterName);
_worldPacket.WriteString(GuildName);
@@ -148,9 +148,9 @@ WorldPacket const* WorldPackets::Guild::GuildInvite::Write()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfessionData const& rosterProfessionData)
{
- data << rosterProfessionData.DbID;
- data << rosterProfessionData.Rank;
- data << rosterProfessionData.Step;
+ data << int32(rosterProfessionData.DbID);
+ data << int32(rosterProfessionData.Rank);
+ data << int32(rosterProfessionData.Step);
return data;
}
@@ -158,20 +158,20 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfess
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData)
{
data << rosterMemberData.Guid;
- data << rosterMemberData.RankID;
- data << rosterMemberData.AreaID;
- data << rosterMemberData.PersonalAchievementPoints;
- data << rosterMemberData.GuildReputation;
- data << rosterMemberData.LastSave;
+ data << int32(rosterMemberData.RankID);
+ data << int32(rosterMemberData.AreaID);
+ data << int32(rosterMemberData.PersonalAchievementPoints);
+ data << int32(rosterMemberData.GuildReputation);
+ data << float(rosterMemberData.LastSave);
for (uint8 i = 0; i < 2; i++)
data << rosterMemberData.Profession[i];
- data << rosterMemberData.VirtualRealmAddress;
- data << rosterMemberData.Status;
- data << rosterMemberData.Level;
- data << rosterMemberData.ClassID;
- data << rosterMemberData.Gender;
+ data << uint32(rosterMemberData.VirtualRealmAddress);
+ data << uint8(rosterMemberData.Status);
+ data << uint8(rosterMemberData.Level);
+ data << uint8(rosterMemberData.ClassID);
+ data << uint8(rosterMemberData.Gender);
data.WriteBits(rosterMemberData.Name.length(), 6);
data.WriteBits(rosterMemberData.Note.length(), 8);
@@ -190,7 +190,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberD
WorldPacket const* WorldPackets::Guild::GuildEventPresenceChange::Write()
{
_worldPacket << Guid;
- _worldPacket << VirtualRealmAddress;
+ _worldPacket << uint32(VirtualRealmAddress);
_worldPacket.WriteBits(Name.length(), 6);
_worldPacket.WriteBit(LoggedOn);
@@ -215,7 +215,7 @@ WorldPacket const* WorldPackets::Guild::GuildEventMotd::Write()
WorldPacket const* WorldPackets::Guild::GuildEventPlayerJoined::Write()
{
_worldPacket << Guid;
- _worldPacket << VirtualRealmAddress;
+ _worldPacket << uint32(VirtualRealmAddress);
_worldPacket.WriteBits(Name.length(), 6);
_worldPacket.FlushBits();
@@ -249,9 +249,9 @@ WorldPacket const* WorldPackets::Guild::GuildEventLogQueryResults::Write()
{
_worldPacket << entry.PlayerGUID;
_worldPacket << entry.OtherGUID;
- _worldPacket << entry.TransactionType;
- _worldPacket << entry.RankID;
- _worldPacket << entry.TransactionDate;
+ _worldPacket << uint8(entry.TransactionType);
+ _worldPacket << uint8(entry.RankID);
+ _worldPacket << uint32(entry.TransactionDate);
}
return &_worldPacket;
@@ -269,12 +269,12 @@ WorldPacket const* WorldPackets::Guild::GuildEventPlayerLeft::Write()
_worldPacket.FlushBits();
_worldPacket << RemoverGUID;
- _worldPacket << RemoverVirtualRealmAddress;
+ _worldPacket << uint32(RemoverVirtualRealmAddress);
_worldPacket.WriteString(RemoverName);
}
_worldPacket << LeaverGUID;
- _worldPacket << LeaverVirtualRealmAddress;
+ _worldPacket << uint32(LeaverVirtualRealmAddress);
_worldPacket.WriteString(LeaverName);
return &_worldPacket;
@@ -282,16 +282,16 @@ WorldPacket const* WorldPackets::Guild::GuildEventPlayerLeft::Write()
WorldPacket const* WorldPackets::Guild::GuildPermissionsQueryResults::Write()
{
- _worldPacket << RankID;
- _worldPacket << WithdrawGoldLimit;
- _worldPacket << Flags;
- _worldPacket << NumTabs;
+ _worldPacket << uint32(RankID);
+ _worldPacket << int32(WithdrawGoldLimit);
+ _worldPacket << int32(Flags);
+ _worldPacket << int32(NumTabs);
_worldPacket << uint32(Tab.size());
for (GuildRankTabPermissions const& tab : Tab)
{
- _worldPacket << tab.Flags;
- _worldPacket << tab.WithdrawItemLimit;
+ _worldPacket << int32(tab.Flags);
+ _worldPacket << int32(tab.WithdrawItemLimit);
}
return &_worldPacket;
@@ -325,9 +325,9 @@ WorldPacket const* WorldPackets::Guild::GuildEventNewLeader::Write()
_worldPacket.FlushBits();
_worldPacket << OldLeaderGUID;
- _worldPacket << OldLeaderVirtualRealmAddress;
+ _worldPacket << uint32(OldLeaderVirtualRealmAddress);
_worldPacket << NewLeaderGUID;
- _worldPacket << NewLeaderVirtualRealmAddress;
+ _worldPacket << uint32(NewLeaderVirtualRealmAddress);
_worldPacket.WriteString(OldLeaderName);
_worldPacket.WriteString(NewLeaderName);
@@ -337,7 +337,7 @@ WorldPacket const* WorldPackets::Guild::GuildEventNewLeader::Write()
WorldPacket const* WorldPackets::Guild::GuildEventTabModified::Write()
{
- _worldPacket << Tab;
+ _worldPacket << int32(Tab);
_worldPacket.WriteBits(Name.length(), 7);
_worldPacket.WriteBits(Icon.length(), 9);
@@ -358,15 +358,15 @@ WorldPacket const* WorldPackets::Guild::GuildEventTabTextChanged::Write()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData)
{
- data << rankData.RankID;
- data << rankData.RankOrder;
- data << rankData.Flags;
- data << rankData.WithdrawGoldLimit;
+ data << uint32(rankData.RankID);
+ data << uint32(rankData.RankOrder);
+ data << uint32(rankData.Flags);
+ data << uint32(rankData.WithdrawGoldLimit);
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++)
{
- data << rankData.TabFlags[i];
- data << rankData.TabWithdrawItemLimit[i];
+ data << uint32(rankData.TabFlags[i]);
+ data << uint32(rankData.TabWithdrawItemLimit[i]);
}
data.WriteBits(rankData.RankName.length(), 7);
@@ -416,7 +416,7 @@ WorldPacket const* WorldPackets::Guild::GuildSendRankChange::Write()
{
_worldPacket << Officer;
_worldPacket << Other;
- _worldPacket << RankID;
+ _worldPacket << uint32(RankID);
_worldPacket.WriteBit(Promote);
_worldPacket.FlushBits();
@@ -499,25 +499,25 @@ WorldPacket const* WorldPackets::Guild::GuildPartyState::Write()
_worldPacket.WriteBit(InGuildParty);
_worldPacket.FlushBits();
- _worldPacket << NumMembers;
- _worldPacket << NumRequired;
- _worldPacket << GuildXPEarnedMult;
+ _worldPacket << int32(NumMembers);
+ _worldPacket << int32(NumRequired);
+ _worldPacket << float(GuildXPEarnedMult);
return &_worldPacket;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRewardItem const& rewardItem)
{
- data << rewardItem.ItemID;
- data << rewardItem.Unk4;
+ data << uint32(rewardItem.ItemID);
+ data << uint32(rewardItem.Unk4);
data << uint32(rewardItem.AchievementsRequired.size());
data << uint64(rewardItem.RaceMask);
- data << rewardItem.MinGuildLevel;
- data << rewardItem.MinGuildRep;
- data << rewardItem.Cost;
+ data << int32(rewardItem.MinGuildLevel);
+ data << int32(rewardItem.MinGuildRep);
+ data << uint64(rewardItem.Cost);
- for (uint8 i = 0; i < rewardItem.AchievementsRequired.size(); i++)
- data << rewardItem.AchievementsRequired[i];
+ for (std::size_t i = 0; i < rewardItem.AchievementsRequired.size(); i++)
+ data << uint32(rewardItem.AchievementsRequired[i]);
return data;
}
@@ -529,7 +529,7 @@ void WorldPackets::Guild::RequestGuildRewardsList::Read()
WorldPacket const* WorldPackets::Guild::GuildRewardList::Write()
{
- _worldPacket << Version;
+ _worldPacket << int32(Version);
_worldPacket << uint32(RewardItems.size());
for (GuildRewardItem const& item : RewardItems)
@@ -592,9 +592,9 @@ void WorldPackets::Guild::GuildBankWithdrawMoney::Read()
WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write()
{
- _worldPacket << Money;
- _worldPacket << Tab;
- _worldPacket << WithdrawalsRemaining;
+ _worldPacket << uint64(Money);
+ _worldPacket << int32(Tab);
+ _worldPacket << int32(WithdrawalsRemaining);
_worldPacket << uint32(TabInfo.size());
_worldPacket << uint32(ItemInfo.size());
_worldPacket.WriteBit(FullUpdate);
@@ -602,7 +602,7 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write()
for (GuildBankTabInfo const& tab : TabInfo)
{
- _worldPacket << tab.TabIndex;
+ _worldPacket << int32(tab.TabIndex);
_worldPacket.WriteBits(tab.Name.length(), 7);
_worldPacket.WriteBits(tab.Icon.length(), 9);
_worldPacket.FlushBits();
@@ -613,12 +613,12 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write()
for (GuildBankItemInfo const& item : ItemInfo)
{
- _worldPacket << item.Slot;
- _worldPacket << item.Count;
- _worldPacket << item.EnchantmentID;
- _worldPacket << item.Charges;
- _worldPacket << item.OnUseEnchantmentID;
- _worldPacket << item.Flags;
+ _worldPacket << int32(item.Slot);
+ _worldPacket << int32(item.Count);
+ _worldPacket << int32(item.EnchantmentID);
+ _worldPacket << int32(item.Charges);
+ _worldPacket << int32(item.OnUseEnchantmentID);
+ _worldPacket << int32(item.Flags);
_worldPacket << item.Item;
_worldPacket.WriteBits(item.SocketEnchant.size(), 2);
_worldPacket.WriteBit(item.Locked);
@@ -658,7 +658,7 @@ void WorldPackets::Guild::GuildBankLogQuery::Read()
WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write()
{
- _worldPacket << Tab;
+ _worldPacket << int32(Tab);
_worldPacket << uint32(Entry.size());
_worldPacket.WriteBit(WeeklyBonusMoney.is_initialized());
_worldPacket.FlushBits();
@@ -666,8 +666,8 @@ WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write()
for (GuildBankLogEntry const& logEntry : Entry)
{
_worldPacket << logEntry.PlayerGUID;
- _worldPacket << logEntry.TimeOffset;
- _worldPacket << logEntry.EntryType;
+ _worldPacket << uint32(logEntry.TimeOffset);
+ _worldPacket << int8(logEntry.EntryType);
_worldPacket.WriteBit(logEntry.Money.is_initialized());
_worldPacket.WriteBit(logEntry.ItemID.is_initialized());
@@ -676,20 +676,20 @@ WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write()
_worldPacket.FlushBits();
if (logEntry.Money.is_initialized())
- _worldPacket << *logEntry.Money;
+ _worldPacket << uint64(*logEntry.Money);
if (logEntry.ItemID.is_initialized())
- _worldPacket << *logEntry.ItemID;
+ _worldPacket << int32(*logEntry.ItemID);
if (logEntry.Count.is_initialized())
- _worldPacket << *logEntry.Count;
+ _worldPacket << int32(*logEntry.Count);
if (logEntry.OtherTab.is_initialized())
- _worldPacket << *logEntry.OtherTab;
+ _worldPacket << int8(*logEntry.OtherTab);
}
if (WeeklyBonusMoney)
- _worldPacket << *WeeklyBonusMoney;
+ _worldPacket << uint64(*WeeklyBonusMoney);
return &_worldPacket;
}
@@ -701,7 +701,7 @@ void WorldPackets::Guild::GuildBankTextQuery::Read()
WorldPacket const* WorldPackets::Guild::GuildBankTextQueryResult::Write()
{
- _worldPacket << Tab;
+ _worldPacket << int32(Tab);
_worldPacket.WriteBits(Text.length(), 14);
_worldPacket.FlushBits();
@@ -724,13 +724,13 @@ void WorldPackets::Guild::GuildQueryNews::Read()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildNewsEvent const& newsEvent)
{
- data << newsEvent.Id;
+ data << int32(newsEvent.Id);
data.AppendPackedTime(newsEvent.CompletedDate);
- data << newsEvent.Type;
- data << newsEvent.Flags;
+ data << int32(newsEvent.Type);
+ data << int32(newsEvent.Flags);
- for (uint8 i = 0; i < 2; i++)
- data << newsEvent.Data[i];
+ for (std::size_t i = 0; i < newsEvent.Data.size(); ++i)
+ data << int32(newsEvent.Data[i]);
data << newsEvent.MemberGuid;
data << uint32(newsEvent.MemberList.size());
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index 350ff772000..844dba91f5c 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -432,11 +432,11 @@ namespace WorldPackets
int32 RankID = 0;
int32 RankOrder = 0;
- int32 WithdrawGoldLimit = 0;
+ uint32 WithdrawGoldLimit = 0;
uint32 Flags = 0;
uint32 OldFlags = 0;
- int32 TabFlags[GUILD_BANK_MAX_TABS];
- int32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS];
+ uint32 TabFlags[GUILD_BANK_MAX_TABS];
+ uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS];
std::string RankName;
};
@@ -687,7 +687,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
std::vector<GuildRewardItem> RewardItems;
- uint32 Version = 0;
+ int32 Version = 0;
};
class GuildBankActivate final : public ClientPacket
@@ -813,10 +813,11 @@ namespace WorldPackets
bool FullUpdate = false;
};
+ // TODO: research new guild bank opcodes
class GuildBankSwapItems final : public ClientPacket
{
public:
- GuildBankSwapItems(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_SWAP_ITEMS, std::move(packet)) { }
+ GuildBankSwapItems(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
void Read() override;
@@ -917,9 +918,9 @@ namespace WorldPackets
uint32 CompletedDate = 0;
int32 Type = 0;
int32 Flags = 0;
- int32 Data[2];
+ std::array<int32, 2> Data;
ObjectGuid MemberGuid;
- GuidList MemberList;
+ std::vector<ObjectGuid> MemberList;
Optional<Item::ItemInstance> Item;
};
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp
index df9b540e164..04fc01ad669 100644
--- a/src/server/game/Server/Packets/InspectPackets.cpp
+++ b/src/server/game/Server/Packets/InspectPackets.cpp
@@ -35,6 +35,10 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectItemData
{
data << itemData.CreatorGUID;
data << uint8(itemData.Index);
+ data << uint32(itemData.AzeritePowers.size());
+ if (!itemData.AzeritePowers.empty())
+ data.append(itemData.AzeritePowers.data(), itemData.AzeritePowers.size());
+
data << itemData.Item;
data.WriteBit(itemData.Usable);
data.WriteBits(itemData.Enchants.size(), 4);
@@ -76,10 +80,11 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint
{
if (gemData.ItemId)
{
- WorldPackets::Item::ItemGemData gem;
+ Gems.emplace_back();
+
+ WorldPackets::Item::ItemGemData& gem = Gems.back();
gem.Slot = i;
gem.Item.Initialize(&gemData);
- Gems.push_back(gem);
}
++i;
}
@@ -103,6 +108,7 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
_worldPacket.append(PvpTalents.data(), PvpTalents.size());
_worldPacket.WriteBit(GuildData.is_initialized());
+ _worldPacket.WriteBit(AzeriteLevel.is_initialized());
_worldPacket.FlushBits();
for (size_t i = 0; i < Items.size(); ++i)
@@ -111,6 +117,9 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
if (GuildData)
_worldPacket << *GuildData;
+ if (AzeriteLevel)
+ _worldPacket << int32(*AzeriteLevel);
+
return &_worldPacket;
}
@@ -138,6 +147,7 @@ void WorldPackets::Inspect::InspectPVPRequest::Read()
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);
@@ -146,7 +156,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData c
data << int32(bracket.SeasonWon);
data << int32(bracket.WeeklyBestRating);
data << int32(bracket.Unk710);
- data << uint8(bracket.Bracket);
+ data << int32(bracket.Unk801_1);
+ data.WriteBit(bracket.Unk801_2);
+ data.FlushBits();
return data;
}
diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h
index 7bf6b0baa2a..c6437f182f7 100644
--- a/src/server/game/Server/Packets/InspectPackets.h
+++ b/src/server/game/Server/Packets/InspectPackets.h
@@ -56,6 +56,7 @@ namespace WorldPackets
bool Usable = false;
std::vector<InspectEnchantData> Enchants;
std::vector<Item::ItemGemData> Gems;
+ std::vector<int32> AzeritePowers;
};
struct InspectGuildData
@@ -68,7 +69,10 @@ namespace WorldPackets
class InspectResult final : public ServerPacket
{
public:
- InspectResult() : ServerPacket(SMSG_INSPECT_RESULT, 45) { }
+ InspectResult() : ServerPacket(SMSG_INSPECT_RESULT, 45)
+ {
+ PvpTalents.fill(0);
+ }
WorldPacket const* Write() override;
@@ -76,11 +80,12 @@ namespace WorldPackets
std::vector<InspectItemData> Items;
std::vector<uint16> Glyphs;
std::vector<uint16> Talents;
- std::vector<uint16> PvpTalents;
+ std::array<uint16, MAX_PVP_TALENT_SLOTS> PvpTalents;
int32 ClassID = CLASS_NONE;
int32 GenderID = GENDER_NONE;
Optional<InspectGuildData> GuildData;
int32 SpecializationID = 0;
+ Optional<int32> AzeriteLevel;
};
class RequestHonorStats final : public ClientPacket
@@ -128,7 +133,9 @@ namespace WorldPackets
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
diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp
index 0a6e29e6838..258aa24bd1f 100644
--- a/src/server/game/Server/Packets/InstancePackets.cpp
+++ b/src/server/game/Server/Packets/InstancePackets.cpp
@@ -31,23 +31,13 @@ WorldPacket const* WorldPackets::Instance::UpdateInstanceOwnership::Write()
return &_worldPacket;
}
-WorldPacket const* WorldPackets::Instance::InstanceInfo::Write()
-{
- _worldPacket << int32(LockList.size());
-
- for (InstanceLockInfos const& lockInfos : LockList)
- _worldPacket << lockInfos;
-
- return &_worldPacket;
-}
-
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInfos const& lockInfos)
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLock const& lockInfos)
{
- data << lockInfos.MapID;
- data << lockInfos.DifficultyID;
- data << lockInfos.InstanceID;
- data << lockInfos.TimeRemaining;
- data << lockInfos.CompletedMask;
+ data << uint32(lockInfos.MapID);
+ data << uint32(lockInfos.DifficultyID);
+ data << uint64(lockInfos.InstanceID);
+ data << uint32(lockInfos.TimeRemaining);
+ data << uint32(lockInfos.CompletedMask);
data.WriteBit(lockInfos.Locked);
data.WriteBit(lockInfos.Extended);
@@ -57,6 +47,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInf
return data;
}
+WorldPacket const* WorldPackets::Instance::InstanceInfo::Write()
+{
+ _worldPacket << int32(LockList.size());
+
+ for (InstanceLock const& instanceLock : LockList)
+ _worldPacket << instanceLock;
+
+ return &_worldPacket;
+}
+
WorldPacket const* WorldPackets::Instance::InstanceReset::Write()
{
_worldPacket << uint32(MapID);
diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h
index f13e046906e..0869a137926 100644
--- a/src/server/game/Server/Packets/InstancePackets.h
+++ b/src/server/game/Server/Packets/InstancePackets.h
@@ -47,7 +47,7 @@ namespace WorldPackets
// but it has been deperecated in favor of simply checking group leader, being inside an instance or using dungeon finder
};
- struct InstanceLockInfos
+ struct InstanceLock
{
uint64 InstanceID = 0u;
uint32 MapID = 0u;
@@ -66,7 +66,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- std::vector<InstanceLockInfos> LockList;
+ std::vector<InstanceLock> LockList;
};
class ResetInstances final : public ClientPacket
@@ -90,7 +90,7 @@ namespace WorldPackets
class InstanceResetFailed final : public ServerPacket
{
public:
- InstanceResetFailed() : ServerPacket(SMSG_INSTANCE_RESET_FAILED, 4 + 4) { }
+ InstanceResetFailed() : ServerPacket(SMSG_INSTANCE_RESET_FAILED, 4 + 1) { }
WorldPacket const* Write() override;
@@ -248,6 +248,4 @@ namespace WorldPackets
}
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInfos const& lockInfos);
-
#endif // InstancePackets_h__
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index 87599873de5..55f4274eefc 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -280,7 +280,7 @@ WorldPacket const* WorldPackets::Item::ReadItemResultFailed::Write()
{
_worldPacket << Item;
_worldPacket << uint32(Delay);
- _worldPacket.WriteBits(Subcode, 3);
+ _worldPacket.WriteBits(Subcode, 2);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp
index 5b8d66afd6a..1ec2dec7804 100644
--- a/src/server/game/Server/Packets/LFGPackets.cpp
+++ b/src/server/game/Server/Packets/LFGPackets.cpp
@@ -311,10 +311,15 @@ WorldPacket const* WorldPackets::LFG::LFGQueueStatus::Write()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LFGPlayerRewards const& lfgPlayerRewards)
{
- data << int32(lfgPlayerRewards.RewardItem);
- data << uint32(lfgPlayerRewards.RewardItemQuantity);
- data << int32(lfgPlayerRewards.BonusCurrency);
- data.WriteBit(lfgPlayerRewards.IsCurrency);
+ data.WriteBit(lfgPlayerRewards.RewardItem.is_initialized());
+ data.WriteBit(lfgPlayerRewards.RewardCurrency.is_initialized());
+ if (lfgPlayerRewards.RewardItem)
+ data << *lfgPlayerRewards.RewardItem;
+
+ data << uint32(lfgPlayerRewards.Quantity);
+ data << int32(lfgPlayerRewards.BonusQuantity);
+ if (lfgPlayerRewards.RewardCurrency)
+ data << int32(*lfgPlayerRewards.RewardCurrency);
return data;
}
diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h
index 9e1c513aece..2b31074094d 100644
--- a/src/server/game/Server/Packets/LFGPackets.h
+++ b/src/server/game/Server/Packets/LFGPackets.h
@@ -20,6 +20,7 @@
#include "Packet.h"
#include "PacketUtilities.h"
+#include "ItemPacketsCommon.h"
#include "LFGPacketsCommon.h"
#include "Optional.h"
@@ -325,13 +326,24 @@ namespace WorldPackets
struct LFGPlayerRewards
{
LFGPlayerRewards() { }
- LFGPlayerRewards(int32 rewardItem, uint32 rewardItemQuantity, int32 bonusCurrency, bool isCurrency)
- : RewardItem(rewardItem), RewardItemQuantity(rewardItemQuantity), BonusCurrency(bonusCurrency), IsCurrency(isCurrency) { }
-
- int32 RewardItem = 0;
- uint32 RewardItemQuantity = 0;
- int32 BonusCurrency = 0;
- bool IsCurrency = false;
+ LFGPlayerRewards(int32 id, uint32 quantity, int32 bonusQuantity, bool isCurrency)
+ : Quantity(quantity), BonusQuantity(bonusQuantity)
+ {
+ if (!isCurrency)
+ {
+ RewardItem = boost::in_place();
+ RewardItem->ItemID = id;
+ }
+ else
+ {
+ RewardCurrency = id;
+ }
+ }
+
+ Optional<Item::ItemInstance> RewardItem;
+ Optional<int32> RewardCurrency;
+ uint32 Quantity = 0;
+ int32 BonusQuantity = 0;
};
class LFGPlayerReward final : public ServerPacket
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index a03f1ff35fc..9f98092d091 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -346,7 +346,8 @@ WorldPacket const* WorldPackets::Misc::LevelUpInfo::Write()
for (int32 stat : StatDelta)
_worldPacket << stat;
- _worldPacket << int32(Cp);
+ _worldPacket << int32(NumNewTalents);
+ _worldPacket << int32(NumNewPvpTalentSlots);
return &_worldPacket;
}
@@ -404,11 +405,11 @@ WorldPacket const* WorldPackets::Misc::PhaseShiftChange::Write()
_worldPacket << uint32(PreloadMapIDs.size() * 2); // size in bytes
for (uint16 preloadMapId : PreloadMapIDs)
- _worldPacket << uint16(preloadMapId); // Inactive terrain swap map id
+ _worldPacket << uint16(preloadMapId); // Inactive terrain swap map id
- _worldPacket << uint32(UiWorldMapAreaIDSwaps.size() * 2); // size in bytes
- for (uint16 uiWorldMapAreaIDSwap : UiWorldMapAreaIDSwaps)
- _worldPacket << uint16(uiWorldMapAreaIDSwap); // UI map id, WorldMapArea.db2, controls map display
+ _worldPacket << uint32(UiMapPhaseIDs.size() * 2); // size in bytes
+ for (uint16 uiMapPhaseId : UiMapPhaseIDs)
+ _worldPacket << uint16(uiMapPhaseId); // phase id, controls only map display (visible on all maps)
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 26affbaf934..df9c99e063b 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -258,7 +258,7 @@ namespace WorldPackets
void Read() override;
- int32 DifficultyID = 0;
+ uint32 DifficultyID = 0;
};
class SetRaidDifficulty final : public ClientPacket
@@ -480,7 +480,8 @@ namespace WorldPackets
int32 HealthDelta = 0;
std::array<int32, 6> PowerDelta = { };
std::array<int32, MAX_STATS> StatDelta = { };
- int32 Cp = 0;
+ int32 NumNewTalents = 0;
+ int32 NumNewPvpTalentSlots = 0;
};
class PlayMusic final : public ServerPacket
@@ -551,7 +552,7 @@ namespace WorldPackets
ObjectGuid Client;
PhaseShiftData Phaseshift;
std::vector<uint16> PreloadMapIDs;
- std::vector<uint16> UiWorldMapAreaIDSwaps;
+ std::vector<uint16> UiMapPhaseIDs;
std::vector<uint16> VisibleMapIDs;
};
@@ -878,14 +879,6 @@ namespace WorldPackets
bool IsFavorite = false;
};
- class PvpPrestigeRankUp final : public ClientPacket
- {
- public:
- PvpPrestigeRankUp(WorldPacket&& packet) : ClientPacket(CMSG_PVP_PRESTIGE_RANK_UP, std::move(packet)) { }
-
- void Read() override { }
- };
-
class CloseInteraction final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 38a7f8f68fd..3dd719f46b0 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -213,6 +213,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineSp
data << uint32(spellEffectExtraData.SpellVisualID);
data << uint32(spellEffectExtraData.ProgressCurveID);
data << uint32(spellEffectExtraData.ParabolicCurveID);
+ data << float(spellEffectExtraData.JumpGravity);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineJumpExtraData const& jumpExtraData)
+{
+ data << float(jumpExtraData.JumpGravity);
+ data << uint32(jumpExtraData.StartTime);
+ data << uint32(jumpExtraData.Duration);
return data;
}
@@ -224,8 +234,7 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline
data << uint32(movementSpline.TierTransStartTime);
data << int32(movementSpline.Elapsed);
data << uint32(movementSpline.MoveTime);
- data << float(movementSpline.JumpGravity);
- data << uint32(movementSpline.SpecialTime);
+ data << uint32(movementSpline.FadeObjectTime);
data << uint8(movementSpline.Mode);
data << uint8(movementSpline.VehicleExitVoluntary);
data << movementSpline.TransportGUID;
@@ -235,6 +244,7 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline
data.WriteBits(movementSpline.PackedDeltas.size(), 16);
data.WriteBit(movementSpline.SplineFilter.is_initialized());
data.WriteBit(movementSpline.SpellEffectExtraData.is_initialized());
+ data.WriteBit(movementSpline.JumpExtraData.is_initialized());
data.FlushBits();
if (movementSpline.SplineFilter)
@@ -262,6 +272,9 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline
if (movementSpline.SpellEffectExtraData)
data << *movementSpline.SpellEffectExtraData;
+ if (movementSpline.JumpExtraData)
+ data << *movementSpline.JumpExtraData;
+
return data;
}
@@ -300,12 +313,12 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(::
data << float(1.0f); // DurationModifier
data << float(1.0f); // NextDurationModifier
data.WriteBits(moveSpline.facing.type, 2); // Face
- bool HasJumpGravity = data.WriteBit(moveSpline.splineflags.parabolic || moveSpline.splineflags.animation); // HasJumpGravity
- bool HasSpecialTime = data.WriteBit(moveSpline.splineflags.parabolic && moveSpline.effect_start_time < moveSpline.Duration()); // HasSpecialTime
+ bool hasFadeObjectTime = data.WriteBit(moveSpline.splineflags.fadeObject && moveSpline.effect_start_time < moveSpline.Duration());
data.WriteBits(moveSpline.getPath().size(), 16);
data.WriteBits(uint8(moveSpline.spline.mode()), 2); // Mode
data.WriteBit(0); // HasSplineFilter
data.WriteBit(moveSpline.spell_effect_extra.is_initialized()); // HasSpellEffectExtraData
+ data.WriteBit(moveSpline.splineflags.parabolic); // HasJumpExtraData
data.FlushBits();
//if (HasSplineFilterKey)
@@ -341,11 +354,8 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(::
break;
}
- if (HasJumpGravity)
- data << float(moveSpline.vertical_acceleration); // JumpGravity
-
- if (HasSpecialTime)
- data << uint32(moveSpline.effect_start_time); // SpecialTime
+ if (hasFadeObjectTime)
+ data << uint32(moveSpline.effect_start_time); // FadeObjectTime
data.append(moveSpline.getPath().data(), moveSpline.getPath().size());
@@ -355,6 +365,14 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(::
data << uint32(moveSpline.spell_effect_extra->SpellVisualId);
data << uint32(moveSpline.spell_effect_extra->ProgressCurveId);
data << uint32(moveSpline.spell_effect_extra->ParabolicCurveId);
+ data << float(moveSpline.vertical_acceleration);
+ }
+
+ if (moveSpline.splineflags.parabolic)
+ {
+ data << float(moveSpline.vertical_acceleration);
+ data << uint32(moveSpline.effect_start_time);
+ data << uint32(0); // Duration (override)
}
}
}
@@ -388,12 +406,13 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS
if (splineFlags.parabolic)
{
- movementSpline.JumpGravity = moveSpline.vertical_acceleration;
- movementSpline.SpecialTime = moveSpline.effect_start_time;
+ movementSpline.JumpExtraData = boost::in_place();
+ movementSpline.JumpExtraData->JumpGravity = moveSpline.vertical_acceleration;
+ movementSpline.JumpExtraData->StartTime = moveSpline.effect_start_time;
}
if (splineFlags.fadeObject)
- movementSpline.SpecialTime = moveSpline.effect_start_time;
+ movementSpline.FadeObjectTime = moveSpline.effect_start_time;
if (moveSpline.spell_effect_extra)
{
@@ -402,6 +421,7 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS
movementSpline.SpellEffectExtraData->SpellVisualID = moveSpline.spell_effect_extra->SpellVisualId;
movementSpline.SpellEffectExtraData->ProgressCurveID = moveSpline.spell_effect_extra->ProgressCurveId;
movementSpline.SpellEffectExtraData->ParabolicCurveID = moveSpline.spell_effect_extra->ParabolicCurveId;
+ movementSpline.SpellEffectExtraData->JumpGravity = moveSpline.vertical_acceleration;
}
::Movement::Spline<int32> const& spline = moveSpline.spline;
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index aaa5f770535..e50a8cf6a71 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -75,6 +75,14 @@ namespace WorldPackets
uint32 SpellVisualID = 0;
uint32 ProgressCurveID = 0;
uint32 ParabolicCurveID = 0;
+ float JumpGravity = 0.0f;
+ };
+
+ struct MonsterSplineJumpExtraData
+ {
+ float JumpGravity = 0.0f;
+ uint32 StartTime = 0;
+ uint32 Duration = 0;
};
struct MovementSpline
@@ -85,8 +93,7 @@ namespace WorldPackets
uint32 TierTransStartTime = 0;
int32 Elapsed = 0;
uint32 MoveTime = 0;
- float JumpGravity = 0.0f;
- uint32 SpecialTime = 0;
+ uint32 FadeObjectTime = 0;
std::vector<TaggedPosition<Position::XYZ>> Points; // Spline path
uint8 Mode = 0; // Spline mode - actually always 0 in this packet - Catmullrom mode appears only in SMSG_UPDATE_OBJECT. In this packet it is determined by flags
uint8 VehicleExitVoluntary = 0;
@@ -95,6 +102,7 @@ namespace WorldPackets
std::vector<TaggedPosition<Position::PackedXYZ>> PackedDeltas;
Optional<MonsterSplineFilter> SplineFilter;
Optional<MonsterSplineSpellEffectExtraData> SpellEffectExtraData;
+ Optional<MonsterSplineJumpExtraData> JumpExtraData;
float FaceDirection = 0.0f;
ObjectGuid FaceGUID;
TaggedPosition<Position::XYZ> FaceSpot;
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 2b7f9ab7d18..749b4b9a330 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -96,19 +96,19 @@ WorldPacket const* WorldPackets::NPC::VendorInventory::Write()
WorldPacket const* WorldPackets::NPC::TrainerList::Write()
{
_worldPacket << TrainerGUID;
- _worldPacket << TrainerType;
- _worldPacket << TrainerID;
+ _worldPacket << uint32(TrainerType);
+ _worldPacket << uint32(TrainerID);
- _worldPacket << int32(Spells.size());
+ _worldPacket << uint32(Spells.size());
for (TrainerListSpell const& spell : Spells)
{
- _worldPacket << spell.SpellID;
- _worldPacket << spell.MoneyCost;
- _worldPacket << spell.ReqSkillLine;
- _worldPacket << spell.ReqSkillRank;
+ _worldPacket << int32(spell.SpellID);
+ _worldPacket << uint32(spell.MoneyCost);
+ _worldPacket << uint32(spell.ReqSkillLine);
+ _worldPacket << uint32(spell.ReqSkillRank);
_worldPacket.append(spell.ReqAbility.data(), spell.ReqAbility.size());
- _worldPacket << spell.Usable;
- _worldPacket << spell.ReqLevel;
+ _worldPacket << uint8(spell.Usable);
+ _worldPacket << uint8(spell.ReqLevel);
}
_worldPacket.WriteBits(Greeting.length(), 11);
@@ -144,11 +144,13 @@ WorldPacket const* WorldPackets::NPC::PlayerTabardVendorActivate::Write()
WorldPacket const* WorldPackets::NPC::GossipPOI::Write()
{
- _worldPacket.WriteBits(Flags, 14);
- _worldPacket.WriteBits(Name.length(), 6);
+ _worldPacket << int32(ID);
_worldPacket << Pos;
_worldPacket << int32(Icon);
_worldPacket << int32(Importance);
+ _worldPacket.WriteBits(Flags, 14);
+ _worldPacket.WriteBits(Name.length(), 6);
+ _worldPacket.FlushBits();
_worldPacket.WriteString(Name);
return &_worldPacket;
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index a094f25dc22..8148e3aff60 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -131,9 +131,9 @@ namespace WorldPackets
struct TrainerListSpell
{
int32 SpellID = 0;
- int32 MoneyCost = 0;
- int32 ReqSkillLine = 0;
- int32 ReqSkillRank = 0;
+ uint32 MoneyCost = 0;
+ uint32 ReqSkillLine = 0;
+ uint32 ReqSkillRank = 0;
std::array<int32, 3> ReqAbility = { };
uint8 Usable = 0;
uint8 ReqLevel = 0;
@@ -180,6 +180,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
+ int32 ID = 0;
uint32 Flags = 0;
TaggedPosition<Position::XY> Pos;
int32 Icon = 0;
diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h
index f7913b9c51d..99b214aab36 100644
--- a/src/server/game/Server/Packets/PacketUtilities.h
+++ b/src/server/game/Server/Packets/PacketUtilities.h
@@ -42,6 +42,8 @@ namespace WorldPackets
typedef typename storage_type::value_type value_type;
typedef typename storage_type::size_type size_type;
+ typedef typename storage_type::pointer pointer;
+ typedef typename storage_type::const_pointer const_pointer;
typedef typename storage_type::reference reference;
typedef typename storage_type::const_reference const_reference;
typedef typename storage_type::iterator iterator;
@@ -55,6 +57,9 @@ namespace WorldPackets
iterator end() { return _storage.end(); }
const_iterator end() const { return _storage.end(); }
+ pointer data() { return _storage.data(); }
+ const_pointer data() const { return _storage.data(); }
+
size_type size() const { return _storage.size(); }
bool empty() const { return _storage.empty(); }
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index 939f0a65db1..9251addde38 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -33,7 +33,7 @@ WorldPacket const* WorldPackets::Party::PartyCommandResult::Write()
_worldPacket.WriteBits(Command, 4);
_worldPacket.WriteBits(Result, 6);
- _worldPacket << ResultData;
+ _worldPacket << uint32(ResultData);
_worldPacket << ResultGUID;
_worldPacket.WriteString(Name);
@@ -78,12 +78,12 @@ WorldPacket const* WorldPackets::Party::PartyInvite::Write()
_worldPacket << InviterBNetAccountId;
_worldPacket << uint16(Unk1);
_worldPacket << uint32(ProposedRoles);
- _worldPacket << int32(LfgSlots.size());
- _worldPacket << LfgCompletedMask;
+ _worldPacket << uint32(LfgSlots.size());
+ _worldPacket << uint32(LfgCompletedMask);
_worldPacket.WriteString(InviterName);
- for (int32 LfgSlot : LfgSlots)
+ for (uint32 LfgSlot : LfgSlots)
_worldPacket << LfgSlot;
return &_worldPacket;
@@ -212,7 +212,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyMemberStats c
data << int16(memberStats.PositionY);
data << int16(memberStats.PositionZ);
data << int32(memberStats.VehicleSeat);
- data << int32(memberStats.Auras.size());
+ data << uint32(memberStats.Auras.size());
data << memberStats.Phases;
for (WorldPackets::Party::PartyMemberAuraStates const& aura : memberStats.Auras)
@@ -318,15 +318,13 @@ WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateSingle::Write()
WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateAll::Write()
{
- _worldPacket << PartyIndex;
-
- _worldPacket << int32(TargetIcons.size());
+ _worldPacket << uint8(PartyIndex);
+ _worldPacket << uint32(TargetIcons.size());
- std::map<uint8, ObjectGuid>::const_iterator itr;
- for (itr = TargetIcons.begin(); itr != TargetIcons.end(); itr++)
+ for (auto itr = TargetIcons.begin(); itr != TargetIcons.end(); ++itr)
{
_worldPacket << itr->second;
- _worldPacket << itr->first;
+ _worldPacket << uint8(itr->first);
}
return &_worldPacket;
@@ -420,7 +418,9 @@ 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.WriteBit(playerInfo.FromSocialQueue);
+ data.WriteBit(playerInfo.VoiceChatSilenced);
data << playerInfo.GUID;
data << uint8(playerInfo.Status);
data << uint8(playerInfo.Subgroup);
@@ -428,6 +428,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo co
data << uint8(playerInfo.RolesAssigned);
data << uint8(playerInfo.Class);
data.WriteString(playerInfo.Name);
+ data.WriteString(playerInfo.VoiceStateID);
return data;
}
@@ -524,8 +525,8 @@ void WorldPackets::Party::ClearRaidMarker::Read()
WorldPacket const* WorldPackets::Party::RaidMarkersChanged::Write()
{
- _worldPacket << PartyIndex;
- _worldPacket << ActiveMarkers;
+ _worldPacket << uint8(PartyIndex);
+ _worldPacket << uint32(ActiveMarkers);
_worldPacket.WriteBits(RaidMarkers.size(), 4);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h
index f62e61d0990..d0b689ffb04 100644
--- a/src/server/game/Server/Packets/PartyPackets.h
+++ b/src/server/game/Server/Packets/PartyPackets.h
@@ -48,8 +48,8 @@ namespace WorldPackets
void Read() override;
- int8 PartyIndex = 0;
- int32 ProposedRoles = 0;
+ uint8 PartyIndex = 0;
+ uint32 ProposedRoles = 0;
std::string TargetName;
std::string TargetRealm;
ObjectGuid TargetGUID;
@@ -85,9 +85,9 @@ namespace WorldPackets
std::string InviterRealmNameNormalized;
// Lfg
- int32 ProposedRoles = 0;
- int32 LfgCompletedMask = 0;
- std::vector<int32> LfgSlots;
+ uint32 ProposedRoles = 0;
+ uint32 LfgCompletedMask = 0;
+ std::vector<uint32> LfgSlots;
};
class PartyInviteResponse final : public ClientPacket
@@ -97,9 +97,9 @@ namespace WorldPackets
void Read() override;
- int8 PartyIndex = 0;
+ uint8 PartyIndex = 0;
bool Accept = false;
- Optional<int32> RolesDesired;
+ Optional<uint32> RolesDesired;
};
class PartyUninvite final : public ClientPacket
@@ -109,7 +109,7 @@ namespace WorldPackets
void Read() override;
- int8 PartyIndex = 0;
+ uint8 PartyIndex = 0;
ObjectGuid TargetGUID;
std::string Reason;
};
@@ -327,7 +327,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int8 PartyIndex = 0;
+ uint8 PartyIndex = 0;
std::map<uint8, ObjectGuid> TargetIcons;
};
@@ -359,7 +359,7 @@ namespace WorldPackets
void Read() override;
ObjectGuid Target;
- int8 PartyIndex = 0;
+ uint8 PartyIndex = 0;
bool Apply = false;
};
@@ -405,7 +405,7 @@ namespace WorldPackets
void Read() override;
- int8 PartyIndex = 0;
+ uint8 PartyIndex = 0;
bool IsReady = false;
};
@@ -486,13 +486,14 @@ namespace WorldPackets
{
ObjectGuid GUID;
std::string Name;
+ std::string VoiceStateID; // same as bgs.protocol.club.v1.MemberVoiceState.id
uint8 Class = 0;
-
uint8 Status = 0u;
uint8 Subgroup = 0u;
uint8 Flags = 0u;
uint8 RolesAssigned = 0u;
bool FromSocialQueue = false;
+ bool VoiceChatSilenced = false;
};
struct PartyLFGInfo
@@ -554,7 +555,7 @@ namespace WorldPackets
void Read() override;
- int8 PartyIndex = 0;
+ uint8 PartyIndex = 0;
bool EveryoneIsAssistant = false;
};
@@ -599,7 +600,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int8 PartyIndex = 0;
+ uint8 PartyIndex = 0;
uint32 ActiveMarkers = 0u;
std::vector<RaidMarker*> RaidMarkers;
diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp
index 06182856bb4..d62ce6840cb 100644
--- a/src/server/game/Server/Packets/PetPackets.cpp
+++ b/src/server/game/Server/Packets/PetPackets.cpp
@@ -65,9 +65,8 @@ WorldPacket const* WorldPackets::Pet::PetStableList::Write()
_worldPacket << int32(pet.CreatureID);
_worldPacket << int32(pet.DisplayID);
_worldPacket << int32(pet.ExperienceLevel);
- _worldPacket << int32(pet.PetFlags);
-
- _worldPacket << int8(pet.PetName.length());
+ _worldPacket << uint8(pet.PetFlags);
+ _worldPacket.WriteBits(pet.PetName.length(), 8);
_worldPacket.WriteString(pet.PetName);
}
@@ -92,21 +91,18 @@ WorldPacket const* WorldPackets::Pet::PetUnlearnedSpells::Write()
WorldPacket const* WorldPackets::Pet::PetNameInvalid::Write()
{
+ _worldPacket << uint8(Result);
_worldPacket << RenameData.PetGUID;
_worldPacket << int32(RenameData.PetNumber);
_worldPacket << uint8(RenameData.NewName.length());
_worldPacket.WriteBit(RenameData.DeclinedNames.is_initialized());
- _worldPacket.FlushBits();
if (RenameData.DeclinedNames)
{
for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++)
- {
_worldPacket.WriteBits(RenameData.DeclinedNames->name[i].length(), 7);
- _worldPacket.FlushBits();
- }
for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++)
_worldPacket << RenameData.DeclinedNames->name[i];
@@ -121,8 +117,7 @@ void WorldPackets::Pet::PetRename::Read()
_worldPacket >> RenameData.PetGUID;
_worldPacket >> RenameData.PetNumber;
- int8 nameLen = 0;
- _worldPacket >> nameLen;
+ uint8 nameLen = _worldPacket.ReadBits(8);
if (_worldPacket.ReadBit())
{
diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h
index 965dc0b60c4..3f57f0360c9 100644
--- a/src/server/game/Server/Packets/PetPackets.h
+++ b/src/server/game/Server/Packets/PetPackets.h
@@ -125,7 +125,7 @@ namespace WorldPackets
uint32 CreatureID = 0;
uint32 DisplayID = 0;
uint32 ExperienceLevel = 0;
- uint32 PetFlags = 0;
+ uint8 PetFlags = 0;
std::string PetName;
};
diff --git a/src/server/game/Server/Packets/PetitionPackets.cpp b/src/server/game/Server/Packets/PetitionPackets.cpp
index 132494aed46..06823e15204 100644
--- a/src/server/game/Server/Packets/PetitionPackets.cpp
+++ b/src/server/game/Server/Packets/PetitionPackets.cpp
@@ -25,32 +25,31 @@ void WorldPackets::Petition::QueryPetition::Read()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Petition::PetitionInfo const& petitionInfo)
{
- data << petitionInfo.PetitionID;
+ data << int32(petitionInfo.PetitionID);
data << petitionInfo.Petitioner;
-
- data << petitionInfo.MinSignatures;
- data << petitionInfo.MaxSignatures;
- data << petitionInfo.DeadLine;
- data << petitionInfo.IssueDate;
- data << petitionInfo.AllowedGuildID;
- data << petitionInfo.AllowedClasses;
- data << petitionInfo.AllowedRaces;
- data << petitionInfo.AllowedGender;
- data << petitionInfo.AllowedMinLevel;
- data << petitionInfo.AllowedMaxLevel;
- data << petitionInfo.NumChoices;
- data << petitionInfo.StaticType;
- data << petitionInfo.Muid;
+ data << int32(petitionInfo.MinSignatures);
+ data << int32(petitionInfo.MaxSignatures);
+ data << int32(petitionInfo.DeadLine);
+ data << int32(petitionInfo.IssueDate);
+ data << int32(petitionInfo.AllowedGuildID);
+ data << int32(petitionInfo.AllowedClasses);
+ data << int32(petitionInfo.AllowedRaces);
+ data << int16(petitionInfo.AllowedGender);
+ data << int32(petitionInfo.AllowedMinLevel);
+ data << int32(petitionInfo.AllowedMaxLevel);
+ data << int32(petitionInfo.NumChoices);
+ data << int32(petitionInfo.StaticType);
+ data << uint32(petitionInfo.Muid);
data.WriteBits(petitionInfo.Title.length(), 7);
data.WriteBits(petitionInfo.BodyText.length(), 12);
- for (uint8 i = 0; i < 10; i++)
+ for (std::size_t i = 0; i < petitionInfo.Choicetext.size(); ++i)
data.WriteBits(petitionInfo.Choicetext[i].length(), 6);
data.FlushBits();
- for (uint8 i = 0; i < 10; i++)
+ for (std::size_t i = 0; i < petitionInfo.Choicetext.size(); ++i)
data.WriteString(petitionInfo.Choicetext[i]);
data.WriteString(petitionInfo.Title);
@@ -61,7 +60,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Petition::PetitionInfo co
WorldPacket const* WorldPackets::Petition::QueryPetitionResponse::Write()
{
- _worldPacket << PetitionID;
+ _worldPacket << uint32(PetitionID);
_worldPacket.WriteBit(Allow);
_worldPacket.FlushBits();
@@ -102,13 +101,13 @@ WorldPacket const* WorldPackets::Petition::ServerPetitionShowSignatures::Write()
_worldPacket << Item;
_worldPacket << Owner;
_worldPacket << OwnerAccountID;
- _worldPacket << PetitionID;
+ _worldPacket << int32(PetitionID);
_worldPacket << uint32(Signatures.size());
- for (PetitionSignature signature : Signatures)
+ for (PetitionSignature const& signature : Signatures)
{
_worldPacket << signature.Signer;
- _worldPacket << signature.Choice;
+ _worldPacket << int32(signature.Choice);
}
return &_worldPacket;
diff --git a/src/server/game/Server/Packets/PetitionPackets.h b/src/server/game/Server/Packets/PetitionPackets.h
index a5b4e8dca6f..c378c053d84 100644
--- a/src/server/game/Server/Packets/PetitionPackets.h
+++ b/src/server/game/Server/Packets/PetitionPackets.h
@@ -56,7 +56,7 @@ namespace WorldPackets
int32 NumChoices = 0;
int32 StaticType = 0;
uint32 Muid = 0;
- std::string Choicetext[10];
+ std::array<std::string, 10> Choicetext;
};
class QueryPetitionResponse final : public ServerPacket
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index c640394be93..f941c895722 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -29,7 +29,7 @@ void WorldPackets::Query::QueryCreature::Read()
WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
{
- _worldPacket << CreatureID;
+ _worldPacket << uint32(CreatureID);
_worldPacket.WriteBit(Allow);
_worldPacket.FlushBits();
@@ -61,7 +61,16 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
_worldPacket << int32(Stats.CreatureFamily);
_worldPacket << int32(Stats.Classification);
_worldPacket.append(Stats.ProxyCreatureID.data(), Stats.ProxyCreatureID.size());
- _worldPacket.append(Stats.CreatureDisplayID.data(), Stats.CreatureDisplayID.size());
+ _worldPacket << uint32(Stats.Display.CreatureDisplay.size());
+ _worldPacket << float(Stats.Display.TotalProbability);
+
+ for (CreatureXDisplay const& display : Stats.Display.CreatureDisplay)
+ {
+ _worldPacket << uint32(display.CreatureDisplayID);
+ _worldPacket << float(display.Scale);
+ _worldPacket << float(display.Probability);
+ }
+
_worldPacket << float(Stats.HpMulti);
_worldPacket << float(Stats.EnergyMulti);
_worldPacket << uint32(Stats.QuestItems.size());
@@ -69,6 +78,7 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
_worldPacket << int32(Stats.HealthScalingExpansion);
_worldPacket << int32(Stats.RequiredExpansion);
_worldPacket << int32(Stats.VignetteID);
+ _worldPacket << int32(Stats.Class);
if (!Stats.Title.empty())
_worldPacket << Stats.Title;
@@ -79,8 +89,8 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
if (!Stats.CursorName.empty())
_worldPacket << Stats.CursorName;
- for (int32 questItem : Stats.QuestItems)
- _worldPacket << questItem;
+ if (!Stats.QuestItems.empty())
+ _worldPacket.append(Stats.QuestItems.data(), Stats.QuestItems.size());
}
return &_worldPacket;
@@ -162,6 +172,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupDa
data << lookupData.AccountID;
data << lookupData.BnetAccountID;
data << lookupData.GuidActual;
+ data << uint64(lookupData.GuildClubMemberID);
data << uint32(lookupData.VirtualRealmAddress);
data << uint8(lookupData.Race);
data << uint8(lookupData.Sex);
@@ -174,7 +185,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupDa
WorldPacket const* WorldPackets::Query::QueryPlayerNameResponse::Write()
{
- _worldPacket << Result;
+ _worldPacket << uint8(Result);
_worldPacket << Player;
if (Result == RESPONSE_SUCCESS)
@@ -206,7 +217,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::QueryPageTextRespo
WorldPacket const* WorldPackets::Query::QueryPageTextResponse::Write()
{
- _worldPacket << PageTextID;
+ _worldPacket << uint32(PageTextID);
_worldPacket.WriteBit(Allow);
_worldPacket.FlushBits();
@@ -229,7 +240,7 @@ void WorldPackets::Query::QueryNPCText::Read()
WorldPacket const* WorldPackets::Query::QueryNPCTextResponse::Write()
{
- _worldPacket << TextID;
+ _worldPacket << uint32(TextID);
_worldPacket.WriteBit(Allow);
_worldPacket.FlushBits();
@@ -238,10 +249,8 @@ WorldPacket const* WorldPackets::Query::QueryNPCTextResponse::Write()
if (Allow)
{
- for (uint32 i = 0; i < MAX_NPC_TEXT_OPTIONS; ++i)
- _worldPacket << Probabilities[i];
- for (uint32 i = 0; i < MAX_NPC_TEXT_OPTIONS; ++i)
- _worldPacket << BroadcastTextID[i];
+ _worldPacket.append(Probabilities.data(), Probabilities.size());
+ _worldPacket.append(BroadcastTextID.data(), BroadcastTextID.size());
}
return &_worldPacket;
@@ -276,8 +285,8 @@ WorldPacket const* WorldPackets::Query::QueryGameObjectResponse::Write()
statsData << float(Stats.Size);
statsData << uint8(Stats.QuestItems.size());
- for (int32 questItem : Stats.QuestItems)
- statsData << int32(questItem);
+ if (!Stats.QuestItems.empty())
+ statsData.append(Stats.QuestItems.data(), Stats.QuestItems.size());
statsData << int32(Stats.RequiredLevel);
}
@@ -334,7 +343,7 @@ void WorldPackets::Query::QuestPOIQuery::Read()
{
_worldPacket >> MissingQuestCount;
- for (uint8 i = 0; i < 50; ++i)
+ for (std::size_t i = 0; i < MissingQuestPOIs.size(); ++i)
_worldPacket >> MissingQuestPOIs[i];
}
@@ -356,13 +365,12 @@ WorldPacket const* WorldPackets::Query::QuestPOIQueryResponse::Write()
_worldPacket << int32(questPOIBlobData.QuestObjectiveID);
_worldPacket << int32(questPOIBlobData.QuestObjectID);
_worldPacket << int32(questPOIBlobData.MapID);
- _worldPacket << int32(questPOIBlobData.WorldMapAreaID);
- _worldPacket << int32(questPOIBlobData.Floor);
+ _worldPacket << int32(questPOIBlobData.UiMapID);
_worldPacket << int32(questPOIBlobData.Priority);
_worldPacket << int32(questPOIBlobData.Flags);
_worldPacket << int32(questPOIBlobData.WorldEffectID);
_worldPacket << int32(questPOIBlobData.PlayerConditionID);
- _worldPacket << int32(questPOIBlobData.UnkWoD1);
+ _worldPacket << int32(questPOIBlobData.SpawnTrackingID);
_worldPacket << int32(questPOIBlobData.QuestPOIBlobPointStats.size());
for (QuestPOIBlobPoint const& questPOIBlobPoint : questPOIBlobData.QuestPOIBlobPointStats)
@@ -381,13 +389,9 @@ WorldPacket const* WorldPackets::Query::QuestPOIQueryResponse::Write()
void WorldPackets::Query::QueryQuestCompletionNPCs::Read()
{
- uint32 questCount = 0;
-
- _worldPacket >> questCount;
- QuestCompletionNPCs.resize(questCount);
-
- for (int32& QuestID : QuestCompletionNPCs)
- _worldPacket >> QuestID;
+ QuestCompletionNPCs.resize(_worldPacket.read<uint32>());
+ if (!QuestCompletionNPCs.empty())
+ _worldPacket.read(QuestCompletionNPCs.data(), QuestCompletionNPCs.size());
}
WorldPacket const* WorldPackets::Query::QuestCompletionNPCResponse::Write()
@@ -396,10 +400,9 @@ WorldPacket const* WorldPackets::Query::QuestCompletionNPCResponse::Write()
for (auto& quest : QuestCompletionNPCs)
{
_worldPacket << int32(quest.QuestID);
-
_worldPacket << uint32(quest.NPCs.size());
- for (int32 const& npc : quest.NPCs)
- _worldPacket << int32(npc);
+ if (!quest.NPCs.empty())
+ _worldPacket.append(quest.NPCs.data(), quest.NPCs.size());
}
return &_worldPacket;
@@ -453,6 +456,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::ItemTextCache cons
WorldPacket const* WorldPackets::Query::QueryItemTextResponse::Write()
{
_worldPacket.WriteBit(Valid);
+ _worldPacket.FlushBits();
_worldPacket << Item;
_worldPacket << Id;
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index 7639f165dae..dfdf3d437a0 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -23,6 +23,7 @@
#include "NPCHandler.h"
#include "ObjectGuid.h"
#include "Position.h"
+#include "QuestDef.h"
#include "SharedDefines.h"
#include "UnitDefines.h"
#include <array>
@@ -43,13 +44,25 @@ namespace WorldPackets
uint32 CreatureID = 0;
};
+ struct CreatureXDisplay
+ {
+ uint32 CreatureDisplayID = 0;
+ float Scale = 1.0f;
+ float Probability = 1.0f;
+ };
+
+ struct CreatureDisplayStats
+ {
+ float TotalProbability = 0.0f;
+ std::vector<CreatureXDisplay> CreatureDisplay;
+ };
+
struct CreatureStats
{
CreatureStats()
{
Flags.fill(0);
ProxyCreatureID.fill(0);
- CreatureDisplayID.fill(0);
}
std::string Title;
@@ -58,6 +71,7 @@ namespace WorldPackets
int32 CreatureType = 0;
int32 CreatureFamily = 0;
int32 Classification = 0;
+ CreatureDisplayStats Display;
float HpMulti = 0.0f;
float EnergyMulti = 0.0f;
bool Leader = false;
@@ -66,9 +80,9 @@ namespace WorldPackets
int32 HealthScalingExpansion = 0;
uint32 RequiredExpansion = 0;
uint32 VignetteID = 0;
+ int32 Class = 0;
std::array<uint32, 2> Flags;
std::array<uint32, 2> ProxyCreatureID;
- std::array<uint32, 4> CreatureDisplayID;
std::array<std::string, 4> Name;
std::array<std::string, 4> NameAlt;
};
@@ -110,6 +124,7 @@ namespace WorldPackets
ObjectGuid BnetAccountID;
ObjectGuid GuidActual;
std::string Name;
+ uint64 GuildClubMemberID = 0; // same as bgs.protocol.club.v1.MemberId.unique_id
uint32 VirtualRealmAddress = 0;
uint8 Race = RACE_NONE;
uint8 Sex = GENDER_NONE;
@@ -182,8 +197,8 @@ namespace WorldPackets
uint32 TextID = 0;
bool Allow = false;
- float Probabilities[MAX_NPC_TEXT_OPTIONS];
- uint32 BroadcastTextID[MAX_NPC_TEXT_OPTIONS];
+ std::array<float, MAX_NPC_TEXT_OPTIONS> Probabilities;
+ std::array<uint32, MAX_NPC_TEXT_OPTIONS> BroadcastTextID;
};
class QueryGameObject final : public ClientPacket
@@ -297,7 +312,7 @@ namespace WorldPackets
void Read() override;
int32 MissingQuestCount = 0;
- int32 MissingQuestPOIs[50];
+ std::array<int32, 100> MissingQuestPOIs;
};
struct QuestPOIBlobPoint
@@ -313,13 +328,12 @@ namespace WorldPackets
int32 QuestObjectiveID = 0;
int32 QuestObjectID = 0;
int32 MapID = 0;
- int32 WorldMapAreaID = 0;
- int32 Floor = 0;
+ int32 UiMapID = 0;
int32 Priority = 0;
int32 Flags = 0;
int32 WorldEffectID = 0;
int32 PlayerConditionID = 0;
- int32 UnkWoD1 = 0;
+ int32 SpawnTrackingID = 0;
std::vector<QuestPOIBlobPoint> QuestPOIBlobPointStats;
bool AlwaysAllowMergingBlobs = false;
};
@@ -347,7 +361,7 @@ namespace WorldPackets
void Read() override;
- std::vector<int32> QuestCompletionNPCs;
+ Array<int32, 100> QuestCompletionNPCs;
};
struct QuestCompletionNPC
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 20a6539ae1d..0468e170d7c 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -65,6 +65,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.QuestID);
_worldPacket << int32(Info.QuestType);
_worldPacket << int32(Info.QuestLevel);
+ _worldPacket << int32(Info.QuestScalingFactionGroup);
_worldPacket << int32(Info.QuestMaxScalingLevel);
_worldPacket << int32(Info.QuestPackageID);
_worldPacket << int32(Info.QuestMinLevel);
@@ -88,6 +89,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.StartItem);
_worldPacket << uint32(Info.Flags);
_worldPacket << uint32(Info.FlagsEx);
+ _worldPacket << uint32(Info.FlagsEx2);
for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
{
@@ -115,6 +117,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.RewardNumSkillUps);
_worldPacket << int32(Info.PortraitGiver);
+ _worldPacket << int32(Info.PortraitGiverMount);
_worldPacket << int32(Info.PortraitTurnIn);
for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i)
@@ -141,7 +144,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << uint32(Info.Objectives.size());
_worldPacket << uint64(Info.AllowableRaces);
- _worldPacket << int32(Info.QuestRewardID);
+ _worldPacket << int32(Info.TreasurePickerID);
_worldPacket << int32(Info.Expansion);
_worldPacket.WriteBits(Info.LogTitle.size(), 9);
@@ -222,13 +225,6 @@ WorldPacket const* WorldPackets::Quest::QuestUpdateAddPvPCredit::Write()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const& questRewards)
{
data << int32(questRewards.ChoiceItemCount);
-
- for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
- {
- data << int32(questRewards.ChoiceItems[i].ItemID);
- data << int32(questRewards.ChoiceItems[i].Quantity);
- }
-
data << int32(questRewards.ItemCount);
for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
@@ -266,7 +262,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const
data << int32(questRewards.SkillLineID);
data << int32(questRewards.NumSkillUps);
- data << int32(questRewards.RewardID);
+ data << int32(questRewards.TreasurePickerID);
+
+ for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
+ {
+ data << questRewards.ChoiceItems[i].Item;
+ data << int32(questRewards.ChoiceItems[i].Quantity);
+ }
data.WriteBit(questRewards.IsBoostSpell);
data.FlushBits();
@@ -302,6 +304,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverOfferRewardMessage::Write()
_worldPacket << QuestData; // WorldPackets::Quest::QuestGiverOfferReward
_worldPacket << int32(QuestPackageID);
_worldPacket << int32(PortraitGiver);
+ _worldPacket << int32(PortraitGiverMount);
_worldPacket << int32(PortraitTurnIn);
_worldPacket.WriteBits(QuestTitle.size(), 9);
@@ -360,6 +363,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write()
_worldPacket << int32(QuestID);
_worldPacket << int32(QuestPackageID);
_worldPacket << int32(PortraitGiver);
+ _worldPacket << int32(PortraitGiverMount);
_worldPacket << int32(PortraitTurnIn);
_worldPacket << uint32(QuestFlags[0]); // Flags
_worldPacket << uint32(QuestFlags[1]); // FlagsEx
@@ -643,6 +647,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceRespon
{
data << int32(playerChoiceResponse.ResponseID);
data << int32(playerChoiceResponse.ChoiceArtFileID);
+ data << int32(playerChoiceResponse.Flags);
+ data << uint32(playerChoiceResponse.WidgetSetID);
+ data << uint8(playerChoiceResponse.GroupID);
data.WriteBits(playerChoiceResponse.Answer.length(), 9);
data.WriteBits(playerChoiceResponse.Header.length(), 9);
@@ -670,6 +677,7 @@ WorldPacket const* WorldPackets::Quest::DisplayPlayerChoice::Write()
_worldPacket.WriteBits(Question.length(), 8);
_worldPacket.WriteBit(CloseChoiceFrame);
_worldPacket.WriteBit(HideWarboardHeader);
+ _worldPacket.WriteBit(KeepOpenAfterChoice);
_worldPacket.FlushBits();
for (PlayerChoiceResponse const& response : Responses)
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index 1dd40e1ccc2..1315a57949c 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -109,6 +109,7 @@ namespace WorldPackets
int32 QuestID = 0;
int32 QuestType = 0; // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details)
int32 QuestLevel = 0; // may be -1, static data, in other cases must be used dynamic level: Player::GetQuestLevel (0 is not known, but assuming this is no longer valid for quest intended for client)
+ int32 QuestScalingFactionGroup = 0;
int32 QuestMaxScalingLevel = 255;
int32 QuestPackageID = 0;
int32 QuestMinLevel = 0;
@@ -132,6 +133,7 @@ namespace WorldPackets
int32 StartItem = 0;
uint32 Flags = 0;
uint32 FlagsEx = 0;
+ uint32 FlagsEx2 = 0;
int32 POIContinent = 0;
float POIx = 0.0f;
float POIy = 0.0f;
@@ -146,6 +148,7 @@ namespace WorldPackets
int32 RewardSkillLineID = 0; // reward skill id
int32 RewardNumSkillUps = 0; // reward skill points
int32 PortraitGiver = 0; // quest giver entry ?
+ int32 PortraitGiverMount = 0;
int32 PortraitTurnIn = 0; // quest turn in entry ?
std::string PortraitGiverText;
std::string PortraitGiverName;
@@ -157,7 +160,7 @@ namespace WorldPackets
int32 CompleteSoundKitID = 0;
int32 AreaGroupID = 0;
int32 TimeAllowed = 0;
- int32 QuestRewardID = 0;
+ int32 TreasurePickerID = 0;
int32 Expansion = 0;
std::vector<QuestObjective> Objectives;
int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { };
@@ -225,7 +228,7 @@ namespace WorldPackets
struct QuestChoiceItem
{
- int32 ItemID = 0;
+ Item::ItemInstance Item;
int32 Quantity = 0;
};
@@ -244,7 +247,7 @@ namespace WorldPackets
int32 SpellCompletionID = 0;
int32 SkillLineID = 0;
int32 NumSkillUps = 0;
- int32 RewardID = 0;
+ int32 TreasurePickerID = 0;
QuestChoiceItem ChoiceItems[QUEST_REWARD_CHOICES_COUNT];
int32 ItemID[QUEST_REWARD_ITEM_COUNT] = { };
int32 ItemQty[QUEST_REWARD_ITEM_COUNT] = { };
@@ -285,6 +288,7 @@ namespace WorldPackets
int32 PortraitTurnIn = 0;
int32 PortraitGiver = 0;
+ int32 PortraitGiverMount = 0;
std::string QuestTitle;
std::string RewardText;
std::string PortraitGiverText;
@@ -365,6 +369,7 @@ namespace WorldPackets
std::vector<int32> LearnSpells;
int32 PortraitTurnIn = 0;
int32 PortraitGiver = 0;
+ int32 PortraitGiverMount = 0;
int32 QuestStartItemID = 0;
std::string PortraitGiverText;
std::string PortraitGiverName;
@@ -663,6 +668,9 @@ namespace WorldPackets
{
int32 ResponseID = 0;
int32 ChoiceArtFileID = 0;
+ int32 Flags = 0;
+ uint32 WidgetSetID = 0;
+ uint8 GroupID = 0;
std::string Answer;
std::string Header;
std::string Description;
@@ -684,6 +692,7 @@ namespace WorldPackets
std::vector<PlayerChoiceResponse> Responses;
bool CloseChoiceFrame = false;
bool HideWarboardHeader = false;
+ bool KeepOpenAfterChoice = false;
};
class ChoiceResponse final : public ClientPacket
diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp
index 314dac85c5e..5e4eb54a918 100644
--- a/src/server/game/Server/Packets/ReputationPackets.cpp
+++ b/src/server/game/Server/Packets/ReputationPackets.cpp
@@ -46,8 +46,6 @@ WorldPacket const* WorldPackets::Reputation::SetForcedReactions::Write()
for (ForcedReaction const& reaction : Reactions)
_worldPacket << reaction;
- _worldPacket.FlushBits();
-
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h
index 0156d504491..2046e169ab5 100644
--- a/src/server/game/Server/Packets/ReputationPackets.h
+++ b/src/server/game/Server/Packets/ReputationPackets.h
@@ -30,7 +30,7 @@ namespace WorldPackets
class InitializeFactions final : public ServerPacket
{
public:
- InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, 1312)
+ InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, FactionCount * (4 + 1) + FactionCount / 8)
{
FactionStandings.fill(0);
FactionHasBonus.fill(false);
diff --git a/src/server/game/Server/Packets/ScenarioPackets.cpp b/src/server/game/Server/Packets/ScenarioPackets.cpp
index 38a667980a1..73f5120ee8d 100644
--- a/src/server/game/Server/Packets/ScenarioPackets.cpp
+++ b/src/server/game/Server/Packets/ScenarioPackets.cpp
@@ -109,8 +109,7 @@ WorldPacket const* WorldPackets::Scenario::ScenarioPOIs::Write()
{
_worldPacket << int32(scenarioPOI.BlobIndex);
_worldPacket << int32(scenarioPOI.MapID);
- _worldPacket << int32(scenarioPOI.WorldMapAreaID);
- _worldPacket << int32(scenarioPOI.Floor);
+ _worldPacket << int32(scenarioPOI.UiMapID);
_worldPacket << int32(scenarioPOI.Priority);
_worldPacket << int32(scenarioPOI.Flags);
_worldPacket << int32(scenarioPOI.WorldEffectID);
diff --git a/src/server/game/Server/Packets/ScenarioPackets.h b/src/server/game/Server/Packets/ScenarioPackets.h
index c9e1004d51a..71bcbd12d65 100644
--- a/src/server/game/Server/Packets/ScenarioPackets.h
+++ b/src/server/game/Server/Packets/ScenarioPackets.h
@@ -22,7 +22,7 @@
#include "PacketUtilities.h"
#include "AchievementPackets.h"
-#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE 40
+#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE 42
struct ScenarioPOI;
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index ec6d57f2748..7b3117156fc 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -33,6 +33,7 @@ void WorldPackets::Spells::PetCancelAura::Read()
void WorldPackets::Spells::CancelChannelling::Read()
{
_worldPacket >> ChannelSpell;
+ _worldPacket >> Reason;
}
WorldPacket const* WorldPackets::Spells::CategoryCooldown::Write()
@@ -99,16 +100,17 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraDataInfo cons
data << uint32(auraData.ActiveFlags);
data << uint16(auraData.CastLevel);
data << uint8(auraData.Applications);
+ data << int32(auraData.ContentTuningID);
data.WriteBit(auraData.CastUnit.is_initialized());
data.WriteBit(auraData.Duration.is_initialized());
data.WriteBit(auraData.Remaining.is_initialized());
data.WriteBit(auraData.TimeMod.is_initialized());
data.WriteBits(auraData.Points.size(), 6);
data.WriteBits(auraData.EstimatedPoints.size(), 6);
- data.WriteBit(auraData.SandboxScaling.is_initialized());
+ data.WriteBit(auraData.ContentTuning.is_initialized());
- if (auraData.SandboxScaling)
- data << *auraData.SandboxScaling;
+ if (auraData.ContentTuning)
+ data << *auraData.ContentTuning;
if (auraData.CastUnit)
data << *auraData.CastUnit;
@@ -211,7 +213,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellCastReques
buffer >> request.SpellID;
buffer >> request.SpellXSpellVisualID;
buffer >> request.MissileTrajectory;
- buffer >> request.Charmer;
+ buffer >> request.CraftingNPC;
request.SendCastFlags = buffer.ReadBits(5);
bool hasMoveUpdate = buffer.ReadBit();
request.Weight.resize(buffer.ReadBits(2));
@@ -366,13 +368,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastData con
data << int32(spellCastData.SpellID);
data << uint32(spellCastData.SpellXSpellVisualID);
data << uint32(spellCastData.CastFlags);
+ data << uint32(spellCastData.CastFlagsEx);
data << uint32(spellCastData.CastTime);
data << spellCastData.MissileTrajectory;
data << int32(spellCastData.Ammo.DisplayID);
data << uint8(spellCastData.DestLocSpellCastIndex);
data << spellCastData.Immunities;
data << spellCastData.Predict;
- data.WriteBits(spellCastData.CastFlagsEx, 23);
data.WriteBits(spellCastData.HitTargets.size(), 16);
data.WriteBits(spellCastData.MissTargets.size(), 16);
data.WriteBits(spellCastData.MissStatus.size(), 16);
@@ -716,6 +718,7 @@ WorldPacket const* WorldPackets::Spells::PlayOrphanSpellVisual::Write()
_worldPacket << int32(SpellVisualID);
_worldPacket << float(TravelSpeed);
_worldPacket << float(UnkZero);
+ _worldPacket << float(Unk801);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket.FlushBits();
@@ -726,12 +729,14 @@ WorldPacket const* WorldPackets::Spells::PlaySpellVisual::Write()
{
_worldPacket << Source;
_worldPacket << Target;
+ _worldPacket << Unk801_1;
_worldPacket << TargetPosition;
- _worldPacket << SpellVisualID;
- _worldPacket << TravelSpeed;
- _worldPacket << MissReason;
- _worldPacket << ReflectStatus;
- _worldPacket << Orientation;
+ _worldPacket << uint32(SpellVisualID);
+ _worldPacket << float(TravelSpeed);
+ _worldPacket << uint16(MissReason);
+ _worldPacket << uint16(ReflectStatus);
+ _worldPacket << float(Orientation);
+ _worldPacket << float(Unk801_2);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index b1230459627..1df8e8772c0 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -57,6 +57,8 @@ namespace WorldPackets
void Read() override;
int32 ChannelSpell = 0;
+ int32 Reason = 0; // 40 = /run SpellStopCasting(), 16 = movement/AURA_INTERRUPT_FLAG_MOVE, 41 = turning/AURA_INTERRUPT_FLAG_TURNING
+ // does not match SpellCastResult enum
};
class CancelGrowthAura final : public ClientPacket
@@ -177,7 +179,8 @@ namespace WorldPackets
uint32 ActiveFlags = 0;
uint16 CastLevel = 1;
uint8 Applications = 1;
- Optional<SandboxScalingData> SandboxScaling;
+ int32 ContentTuningID = 0;
+ Optional<ContentTuningParams> ContentTuning;
Optional<ObjectGuid> CastUnit;
Optional<int32> Duration;
Optional<int32> Remaining;
@@ -245,7 +248,7 @@ namespace WorldPackets
MissileTrajectoryRequest MissileTrajectory;
Optional<MovementInfo> MoveUpdate;
std::vector<SpellWeight> Weight;
- ObjectGuid Charmer;
+ ObjectGuid CraftingNPC;
int32 Misc[2] = { };
};
@@ -613,7 +616,7 @@ namespace WorldPackets
class SetSpellCharges final : public ServerPacket
{
public:
- SetSpellCharges() : ServerPacket(SMSG_SET_SPELL_CHARGES, 1 + 4 + 4) { }
+ SetSpellCharges() : ServerPacket(SMSG_SET_SPELL_CHARGES, 4 + 4 + 1 + 4 + 1) { }
WorldPacket const* Write() override;
@@ -697,6 +700,7 @@ namespace WorldPackets
bool SpeedAsTime = false;
float TravelSpeed = 0.0f;
float UnkZero = 0.0f; // Always zero
+ float Unk801 = 0.0f;
TaggedPosition<Position::XYZ> SourceRotation; // Vector of rotations, Orientation is z
TaggedPosition<Position::XYZ> TargetLocation; // Exclusive with Target
};
@@ -710,6 +714,7 @@ namespace WorldPackets
ObjectGuid Source;
ObjectGuid Target; // Exclusive with TargetPosition
+ ObjectGuid Unk801_1;
uint16 MissReason = 0;
uint32 SpellVisualID = 0;
bool SpeedAsTime = false;
@@ -717,6 +722,7 @@ namespace WorldPackets
float TravelSpeed = 0.0f;
TaggedPosition<Position::XYZ> TargetPosition; // Exclusive with Target
float Orientation = 0.0f;
+ float Unk801_2 = 0.0f;
};
class PlaySpellVisualKit final : public ServerPacket
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index da674178456..853e35fce5c 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -37,6 +37,8 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket << uint32(BpayStoreProductDeliveryDelay);
+ _worldPacket << uint32(ClubsPresenceUpdateTimer);
+
_worldPacket.WriteBit(VoiceEnabled);
_worldPacket.WriteBit(EuropaTicketSystemStatus.is_initialized());
_worldPacket.WriteBit(ScrollOfResurrectionEnabled);
@@ -49,16 +51,22 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket.WriteBit(RecruitAFriendSendingEnabled);
_worldPacket.WriteBit(CharUndeleteEnabled);
_worldPacket.WriteBit(RestrictedAccount);
+ _worldPacket.WriteBit(CommerceSystemEnabled);
_worldPacket.WriteBit(TutorialsEnabled);
_worldPacket.WriteBit(NPETutorialsEnabled);
_worldPacket.WriteBit(TwitterEnabled);
- _worldPacket.WriteBit(CommerceSystemEnabled);
_worldPacket.WriteBit(Unk67);
_worldPacket.WriteBit(WillKickFromWorld);
_worldPacket.WriteBit(KioskModeEnabled);
_worldPacket.WriteBit(CompetitiveModeEnabled);
_worldPacket.WriteBit(RaceClassExpansionLevels.is_initialized());
_worldPacket.WriteBit(TokenBalanceEnabled);
+ _worldPacket.WriteBit(WarModeFeatureEnabled);
+ _worldPacket.WriteBit(ClubsEnabled);
+ _worldPacket.WriteBit(ClubsBattleNetClubTypeAllowed);
+ _worldPacket.WriteBit(ClubsCharacterClubTypeAllowed);
+ _worldPacket.WriteBit(VoiceChatDisabledByParentalControl);
+ _worldPacket.WriteBit(VoiceChatMutedByParentalControl);
_worldPacket.FlushBits();
@@ -102,6 +110,12 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket.append(RaceClassExpansionLevels->data(), RaceClassExpansionLevels->size());
}
+ {
+ _worldPacket.WriteBit(VoiceChatManagerSettings.Enabled);
+ _worldPacket << VoiceChatManagerSettings.BnetAccountGuid;
+ _worldPacket << VoiceChatManagerSettings.GuildGuid;
+ }
+
if (EuropaTicketSystemStatus)
{
_worldPacket.WriteBit(EuropaTicketSystemStatus->TicketsEnabled);
@@ -141,7 +155,12 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatusGlueScreen::Write()
_worldPacket << int32(TokenPollTimeSeconds);
_worldPacket << int32(TokenRedeemIndex);
_worldPacket << int64(TokenBalanceAmount);
+ _worldPacket << int32(MaxCharactersPerRealm);
_worldPacket << uint32(BpayStoreProductDeliveryDelay);
+ _worldPacket << int32(ActiveCharacterUpgradeBoostType);
+ _worldPacket << int32(ActiveClassTrialBoostType);
+ _worldPacket << int32(MinimumExpansionLevel);
+ _worldPacket << int32(MaximumExpansionLevel);
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index 74d40bf4e05..4d0812e7e67 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -80,6 +80,13 @@ namespace WorldPackets
float ThrottleDfBestPriority = 0.0f;
};
+ struct VoiceChatProxySettings
+ {
+ bool Enabled = false;
+ ObjectGuid BnetAccountGuid;
+ ObjectGuid GuildGuid;
+ };
+
FeatureSystemStatus() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS, 48) { }
WorldPacket const* Write() override;
@@ -103,6 +110,7 @@ namespace WorldPackets
uint32 TokenRedeemIndex = 0;
int64 TokenBalanceAmount = 0;
uint32 BpayStoreProductDeliveryDelay = 0;
+ uint32 ClubsPresenceUpdateTimer = 0;
bool ItemRestorationButtonEnabled = false;
bool CharUndeleteEnabled = false; ///< Implemented
bool BpayStoreDisabledByParentalControls = false;
@@ -110,16 +118,22 @@ namespace WorldPackets
bool CommerceSystemEnabled = false;
bool Unk67 = false;
bool WillKickFromWorld = false;
-
bool RestrictedAccount = false;
bool TutorialsEnabled = false;
bool NPETutorialsEnabled = false;
bool KioskModeEnabled = false;
bool CompetitiveModeEnabled = false;
bool TokenBalanceEnabled = false;
+ bool WarModeFeatureEnabled = false;
+ bool ClubsEnabled = false;
+ bool ClubsBattleNetClubTypeAllowed = false;
+ bool ClubsCharacterClubTypeAllowed = false;
+ bool VoiceChatDisabledByParentalControl = false;
+ bool VoiceChatMutedByParentalControl = false;
Optional<std::vector<uint8>> RaceClassExpansionLevels;
SocialQueueConfig QuickJoinConfig;
+ VoiceChatProxySettings VoiceChatManagerSettings;
};
class FeatureSystemStatusGlueScreen final : public ServerPacket
@@ -147,7 +161,12 @@ namespace WorldPackets
int32 TokenPollTimeSeconds = 0; // NYI
int32 TokenRedeemIndex = 0; // NYI
int64 TokenBalanceAmount = 0; // NYI
+ int32 MaxCharactersPerRealm = 0;
uint32 BpayStoreProductDeliveryDelay = 0; // NYI
+ int32 ActiveCharacterUpgradeBoostType = 0; // NYI
+ int32 ActiveClassTrialBoostType = 0; // NYI
+ int32 MinimumExpansionLevel = 0;
+ int32 MaximumExpansionLevel = 0;
};
class MOTD final : public ServerPacket
diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp
index c5cbb0769a5..3344ef292fc 100644
--- a/src/server/game/Server/Packets/TalentPackets.cpp
+++ b/src/server/game/Server/Packets/TalentPackets.cpp
@@ -17,6 +17,20 @@
#include "TalentPackets.h"
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Talent::PvPTalent& pvpTalent)
+{
+ data >> pvpTalent.PvPTalentID;
+ data >> pvpTalent.Slot;
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Talent::PvPTalent const& pvpTalent)
+{
+ data << uint16(pvpTalent.PvPTalentID);
+ data << uint8(pvpTalent.Slot);
+ return data;
+}
+
WorldPacket const* WorldPackets::Talent::UpdateTalentData::Write()
{
_worldPacket << uint8(Info.ActiveGroup);
@@ -27,13 +41,13 @@ WorldPacket const* WorldPackets::Talent::UpdateTalentData::Write()
{
_worldPacket << uint32(talentGroupInfo.SpecID);
_worldPacket << uint32(talentGroupInfo.TalentIDs.size());
- _worldPacket << uint32(talentGroupInfo.PvPTalentIDs.size());
+ _worldPacket << uint32(talentGroupInfo.PvPTalents.size());
- for (uint16 talentID : talentGroupInfo.TalentIDs)
- _worldPacket << uint16(talentID);
+ for (uint16 talent : talentGroupInfo.TalentIDs)
+ _worldPacket << uint16(talent);
- for (uint16 talentID : talentGroupInfo.PvPTalentIDs)
- _worldPacket << uint16(talentID);
+ for (PvPTalent talent : talentGroupInfo.PvPTalents)
+ _worldPacket << talent;
}
return &_worldPacket;
@@ -92,7 +106,7 @@ WorldPacket const* WorldPackets::Talent::ActiveGlyphs::Write()
void WorldPackets::Talent::LearnPvpTalents::Read()
{
- Talents.resize(_worldPacket.ReadBits(6));
+ Talents.resize(_worldPacket.read<uint32>());
for (uint32 i = 0; i < Talents.size(); ++i)
_worldPacket >> Talents[i];
}
@@ -102,8 +116,8 @@ WorldPacket const* WorldPackets::Talent::LearnPvpTalentsFailed::Write()
_worldPacket.WriteBits(Reason, 4);
_worldPacket << int32(SpellID);
_worldPacket << uint32(Talents.size());
- if (!Talents.empty())
- _worldPacket.append(Talents.data(), Talents.size());
+ for (PvPTalent pvpTalent : Talents)
+ _worldPacket << pvpTalent;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/TalentPackets.h b/src/server/game/Server/Packets/TalentPackets.h
index 920f724095e..6cbc8aca057 100644
--- a/src/server/game/Server/Packets/TalentPackets.h
+++ b/src/server/game/Server/Packets/TalentPackets.h
@@ -27,11 +27,17 @@ namespace WorldPackets
{
namespace Talent
{
+ struct PvPTalent
+ {
+ uint16 PvPTalentID = 0;
+ uint8 Slot = 0;
+ };
+
struct TalentGroupInfo
{
uint32 SpecID = 0;
std::vector<uint16> TalentIDs;
- std::vector<uint16> PvPTalentIDs;
+ std::vector<PvPTalent> PvPTalents;
};
struct TalentInfoUpdate
@@ -121,19 +127,19 @@ namespace WorldPackets
void Read() override;
- Array<uint16, 6> Talents;
+ Array<PvPTalent, 4> Talents;
};
class LearnPvpTalentsFailed final : public ServerPacket
{
public:
- LearnPvpTalentsFailed() : ServerPacket(SMSG_LEARN_PVP_TALENTS_FAILED, 1 + 4 + 4 + 2 * MAX_PVP_TALENT_TIERS) { }
+ LearnPvpTalentsFailed() : ServerPacket(SMSG_LEARN_PVP_TALENTS_FAILED, 1 + 4 + 4 + (2 + 1) * MAX_PVP_TALENT_SLOTS) { }
WorldPacket const* Write() override;
uint32 Reason = 0;
int32 SpellID = 0;
- std::vector<uint16> Talents;
+ std::vector<PvPTalent> Talents;
};
}
}
diff --git a/src/server/game/Server/Packets/TaxiPackets.cpp b/src/server/game/Server/Packets/TaxiPackets.cpp
index 9e8e552f363..a39e37425f7 100644
--- a/src/server/game/Server/Packets/TaxiPackets.cpp
+++ b/src/server/game/Server/Packets/TaxiPackets.cpp
@@ -36,8 +36,8 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write()
_worldPacket.WriteBit(WindowInfo.is_initialized());
_worldPacket.FlushBits();
- _worldPacket << uint32(CanLandNodes->size());
- _worldPacket << uint32(CanUseNodes->size());
+ _worldPacket << uint32(CanLandNodes.size());
+ _worldPacket << uint32(CanUseNodes.size());
if (WindowInfo.is_initialized())
{
@@ -45,8 +45,8 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write()
_worldPacket << uint32(WindowInfo->CurrentNode);
}
- _worldPacket.append(CanLandNodes->data(), CanLandNodes->size());
- _worldPacket.append(CanUseNodes->data(), CanUseNodes->size());
+ _worldPacket.append(CanLandNodes.data(), CanLandNodes.size());
+ _worldPacket.append(CanUseNodes.data(), CanUseNodes.size());
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/TaxiPackets.h b/src/server/game/Server/Packets/TaxiPackets.h
index 098ed293fbb..dbf730a8bd9 100644
--- a/src/server/game/Server/Packets/TaxiPackets.h
+++ b/src/server/game/Server/Packets/TaxiPackets.h
@@ -62,8 +62,8 @@ namespace WorldPackets
WorldPacket const* Write() override;
Optional<ShowTaxiNodesWindowInfo> WindowInfo;
- TaxiMask const* CanLandNodes = nullptr; // Nodes known by player
- TaxiMask const* CanUseNodes = nullptr; // Nodes available for use - this can temporarily disable a known node
+ TaxiMask CanLandNodes; // Nodes known by player
+ TaxiMask CanUseNodes; // Nodes available for use - this can temporarily disable a known node
};
class EnableTaxiNode final : public ClientPacket
@@ -110,7 +110,7 @@ namespace WorldPackets
class ActivateTaxiReply final : public ServerPacket
{
public:
- ActivateTaxiReply() : ServerPacket(SMSG_ACTIVATE_TAXI_REPLY, 4) { }
+ ActivateTaxiReply() : ServerPacket(SMSG_ACTIVATE_TAXI_REPLY, 1) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp
index cafb723c062..fe74550c77f 100644
--- a/src/server/game/Server/Packets/TicketPackets.cpp
+++ b/src/server/game/Server/Packets/TicketPackets.cpp
@@ -201,9 +201,17 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
bool hasGuildInfo = _worldPacket.ReadBit();
bool hasLFGListSearchResult = _worldPacket.ReadBit();
bool hasLFGListApplicant = _worldPacket.ReadBit();
+ bool hasClubMessage = _worldPacket.ReadBit();
_worldPacket.ResetBitPos();
+ if (hasClubMessage)
+ {
+ CommunityMessage = boost::in_place();
+ CommunityMessage->IsPlayerUsingVoice = _worldPacket.ReadBit();
+ _worldPacket.ResetBitPos();
+ }
+
if (hasMailInfo)
_worldPacket >> MailInfo;
diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h
index 6e25f3da4a9..5e7fc20f2eb 100644
--- a/src/server/game/Server/Packets/TicketPackets.h
+++ b/src/server/game/Server/Packets/TicketPackets.h
@@ -178,6 +178,11 @@ namespace WorldPackets
std::string Comment;
};
+ struct SupportTicketCommunityMessage
+ {
+ bool IsPlayerUsingVoice = false;
+ };
+
SupportTicketSubmitComplaint(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, std::move(packet)) { }
void Read() override;
@@ -193,7 +198,7 @@ namespace WorldPackets
Optional<SupportTicketGuildInfo> GuildInfo;
Optional<SupportTicketLFGListSearchResult> LFGListSearchResult;
Optional<SupportTicketLFGListApplicant> LFGListApplicant;
-
+ Optional<SupportTicketCommunityMessage> CommunityMessage;
};
class Complaint final : public ClientPacket
diff --git a/src/server/game/Server/Packets/TotemPackets.cpp b/src/server/game/Server/Packets/TotemPackets.cpp
index 1bd8f1c915e..a7b042ca19a 100644
--- a/src/server/game/Server/Packets/TotemPackets.cpp
+++ b/src/server/game/Server/Packets/TotemPackets.cpp
@@ -25,7 +25,7 @@ void WorldPackets::Totem::TotemDestroyed::Read()
WorldPacket const* WorldPackets::Totem::TotemCreated::Write()
{
- _worldPacket << Slot;
+ _worldPacket << uint8(Slot);
_worldPacket << Totem;
_worldPacket << int32(Duration);
_worldPacket << int32(SpellID);
diff --git a/src/server/game/Server/Packets/TotemPackets.h b/src/server/game/Server/Packets/TotemPackets.h
index b438109825c..232b26f1cbb 100644
--- a/src/server/game/Server/Packets/TotemPackets.h
+++ b/src/server/game/Server/Packets/TotemPackets.h
@@ -46,7 +46,7 @@ namespace WorldPackets
ObjectGuid Totem;
int32 SpellID = 0;
int32 Duration = 0;
- int8 Slot = 0;
+ uint8 Slot = 0;
float TimeMod = 1.0f;
bool CannotDismiss = false;
};
diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.cpp b/src/server/game/Server/Packets/TransmogrificationPackets.cpp
index 7d50891bc3e..da2c3972b12 100644
--- a/src/server/game/Server/Packets/TransmogrificationPackets.cpp
+++ b/src/server/game/Server/Packets/TransmogrificationPackets.cpp
@@ -41,8 +41,8 @@ WorldPacket const* WorldPackets::Transmogrification::TransmogCollectionUpdate::W
_worldPacket.WriteBit(IsFullUpdate);
_worldPacket.WriteBit(IsSetFavorite);
_worldPacket << uint32(FavoriteAppearances.size());
- for (uint32 itemModifiedAppearanceId : FavoriteAppearances)
- _worldPacket << uint32(itemModifiedAppearanceId);
+ if (!FavoriteAppearances.empty())
+ _worldPacket.append(FavoriteAppearances.data(), FavoriteAppearances.size());
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/WhoPackets.cpp b/src/server/game/Server/Packets/WhoPackets.cpp
index afc6c3bdd28..9cfbc04e488 100644
--- a/src/server/game/Server/Packets/WhoPackets.cpp
+++ b/src/server/game/Server/Packets/WhoPackets.cpp
@@ -117,8 +117,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Who::WhoResponse const& r
data.WriteBits(response.Entries.size(), 6);
data.FlushBits();
- for (size_t i = 0; i < response.Entries.size(); ++i)
- data << response.Entries[i];
+ for (WorldPackets::Who::WhoEntry const& whoEntry : response.Entries)
+ data << whoEntry;
return data;
}
diff --git a/src/server/game/Server/Packets/WorldStatePackets.cpp b/src/server/game/Server/Packets/WorldStatePackets.cpp
index 0c202978de8..8129e2e8af0 100644
--- a/src/server/game/Server/Packets/WorldStatePackets.cpp
+++ b/src/server/game/Server/Packets/WorldStatePackets.cpp
@@ -24,14 +24,14 @@ WorldPacket const* WorldPackets::WorldState::InitWorldStates::Write()
{
_worldPacket.reserve(16 + Worldstates.size() * 8);
- _worldPacket << uint32(MapID);
- _worldPacket << uint32(AreaID);
- _worldPacket << uint32(SubareaID);
+ _worldPacket << int32(MapID);
+ _worldPacket << int32(AreaID);
+ _worldPacket << int32(SubareaID);
_worldPacket << uint32(Worldstates.size());
for (WorldStateInfo const& wsi : Worldstates)
{
- _worldPacket << uint32(wsi.VariableID);
+ _worldPacket << int32(wsi.VariableID);
_worldPacket << int32(wsi.Value);
}
diff --git a/src/server/game/Server/Packets/WorldStatePackets.h b/src/server/game/Server/Packets/WorldStatePackets.h
index ba7aa8fe282..766725fcf66 100644
--- a/src/server/game/Server/Packets/WorldStatePackets.h
+++ b/src/server/game/Server/Packets/WorldStatePackets.h
@@ -29,10 +29,10 @@ namespace WorldPackets
public:
struct WorldStateInfo
{
- WorldStateInfo(uint32 variableID, int32 value)
+ WorldStateInfo(int32 variableID, int32 value)
: VariableID(variableID), Value(value) { }
- uint32 VariableID;
+ int32 VariableID;
int32 Value;
};
@@ -40,9 +40,9 @@ namespace WorldPackets
WorldPacket const* Write() override;
- uint32 AreaID = 0; ///< ZoneId
- uint32 SubareaID = 0; ///< AreaId
- uint32 MapID = 0; ///< MapId
+ int32 AreaID = 0; ///< ZoneId
+ int32 SubareaID = 0; ///< AreaId
+ int32 MapID = 0; ///< MapId
std::vector<WorldStateInfo> Worldstates;
};