aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfunjoker <funjoker109@gmail.com>2025-05-11 13:23:13 +0200
committerfunjoker <funjoker109@gmail.com>2025-05-12 12:36:07 +0200
commitd8b7964112743d60c6b313b8ccdb0df50866c515 (patch)
treea625e4864a3aeb05b659a655a4daa1f2f169b2f9
parent9bd261f11c9d3b212ebf12bfd4b341e2938d0eeb (diff)
Core/Packets: fixed SMSG_ENUM_CHARACTERS_RESULT packet structure
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp27
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h17
2 files changed, 31 insertions, 13 deletions
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index 0dbe5b64305..d926e68bc74 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -228,6 +228,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasi
data << uint32(charInfo.Flags);
data << uint32(charInfo.Flags2);
data << uint32(charInfo.Flags3);
+ data << uint32(charInfo.Flags4);
data << uint8(charInfo.unkWod61x);
data << uint32(charInfo.PetCreatureDisplayID);
@@ -247,12 +248,15 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasi
data << int32(charInfo.TimerunningSeasonID);
data << uint32(charInfo.OverrideSelectScreenFileDataID);
+ data << uint32(charInfo.Unused1110_1);
for (ChrCustomizationChoice const& customization : charInfo.Customizations)
data << customization;
data << BitsSize<6>(charInfo.Name);
data << Bits<1>(charInfo.FirstLogin);
+ data << Bits<1>(charInfo.Unused1110_2);
+ data << Bits<1>(charInfo.Unused1110_3);
data.FlushBits();
@@ -301,6 +305,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RegionwideCharact
{
data << charInfo.Basic;
data << uint64(charInfo.Money);
+ data << float(charInfo.AvgEquippedItemLevel);
data << float(charInfo.CurrentSeasonMythicPlusOverallScore);
data << int32(charInfo.CurrentSeasonBestPvpRating);
data << int8(charInfo.PvpRatingBracket);
@@ -311,7 +316,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RegionwideCharact
ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceUnlock const& raceUnlock)
{
- data << int32(raceUnlock.RaceID);
+ data << int8(raceUnlock.RaceID);
data << Bits<1>(raceUnlock.HasExpansion);
data << Bits<1>(raceUnlock.HasAchievement);
data << Bits<1>(raceUnlock.HasHeritageArmor);
@@ -332,7 +337,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::UnlockedCondition
ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceLimitDisableInfo const& raceLimitDisableInfo)
{
- data << int32(raceLimitDisableInfo.RaceID);
+ data << int8(raceLimitDisableInfo.RaceID);
data << int32(raceLimitDisableInfo.BlockReason);
return data;
@@ -340,7 +345,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceLimitDisableI
ByteBuffer& operator<<(ByteBuffer& data, WarbandGroupMember const& warbandGroupMember)
{
- data << int32(warbandGroupMember.WarbandScenePlacementID);
+ data << uint32(warbandGroupMember.WarbandScenePlacementID);
data << int32(warbandGroupMember.Type);
if (warbandGroupMember.Type == 0)
data << warbandGroupMember.Guid;
@@ -351,13 +356,19 @@ ByteBuffer& operator<<(ByteBuffer& data, WarbandGroupMember const& warbandGroupM
ByteBuffer& operator<<(ByteBuffer& data, WarbandGroup const& warbandGroup)
{
data << uint64(warbandGroup.GroupID);
- data << uint8(warbandGroup.Unknown_1100);
- data << int32(warbandGroup.Flags);
+ data << uint8(warbandGroup.OrderIndex);
+ data << uint32(warbandGroup.WarbandSceneID);
+ data << uint32(warbandGroup.Flags);
data << uint32(warbandGroup.Members.size());
for (WarbandGroupMember const& member : warbandGroup.Members)
data << member;
+ data << SizedString::BitsSize<9>(warbandGroup.Name);
+ data.FlushBits();
+
+ data << SizedString::Data(warbandGroup.Name);
+
return data;
}
@@ -399,9 +410,6 @@ WorldPacket const* EnumCharactersResult::Write()
for (RaceLimitDisableInfo const& raceLimitDisableInfo : RaceLimitDisables)
_worldPacket << raceLimitDisableInfo;
- for (WarbandGroup const& warbandGroup : WarbandGroups)
- _worldPacket << warbandGroup;
-
for (CharacterInfo const& charInfo : Characters)
_worldPacket << charInfo;
@@ -411,6 +419,9 @@ WorldPacket const* EnumCharactersResult::Write()
for (RaceUnlock const& raceUnlock : RaceUnlockData)
_worldPacket << raceUnlock;
+ for (WarbandGroup const& warbandGroup : WarbandGroups)
+ _worldPacket << warbandGroup;
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index 982b5ac7267..c925d5e608a 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -118,7 +118,7 @@ namespace WorldPackets
struct WarbandGroupMember
{
- int32 WarbandScenePlacementID = 0;
+ uint32 WarbandScenePlacementID = 0;
int32 Type = 0;
ObjectGuid Guid;
};
@@ -126,9 +126,11 @@ namespace WorldPackets
struct WarbandGroup
{
uint64 GroupID = 0;
- uint8 Unknown_1100 = 0;
- int32 Flags = 0; ///< enum WarbandGroupFlags { Collapsed = 1 }
+ uint8 OrderIndex = 0;
+ uint32 WarbandSceneID = 0;
+ uint32 Flags = 0; ///< enum WarbandGroupFlags { Collapsed = 1 }
std::vector<WarbandGroupMember> Members;
+ std::string_view Name;
};
class EnumCharactersResult final : public ServerPacket
@@ -162,6 +164,7 @@ namespace WorldPackets
uint32 Flags = 0; ///< Character flag @see enum CharacterFlags
uint32 Flags2 = 0; ///< Character customization flags @see enum CharacterCustomizeFlags
uint32 Flags3 = 0; ///< Character flags 3 @todo research
+ uint32 Flags4 = 0; ///< Character flags 4 @todo research
bool FirstLogin = false;
uint8 unkWod61x = 0;
Timestamp<> LastPlayedTime;
@@ -190,6 +193,9 @@ namespace WorldPackets
std::array<VisualItemInfo, 19> VisualItems = { };
CustomTabardInfo PersonalTabard;
+ uint32 Unused1110_1 = 0;
+ bool Unused1110_2 = false;
+ bool Unused1110_3 = false;
};
struct CharacterRestrictionAndMailData
@@ -216,6 +222,7 @@ namespace WorldPackets
CharacterInfoBasic Basic;
uint64 Money = 0;
+ float AvgEquippedItemLevel = 0.0f;
float CurrentSeasonMythicPlusOverallScore = 0.0f;
uint32 CurrentSeasonBestPvpRating = 0;
int8 PvpRatingBracket = 0;
@@ -224,7 +231,7 @@ namespace WorldPackets
struct RaceUnlock
{
- int32 RaceID = 0;
+ int8 RaceID = 0;
bool HasExpansion = false;
bool HasAchievement = false;
bool HasHeritageArmor = false;
@@ -246,7 +253,7 @@ namespace WorldPackets
Level
};
- int32 RaceID = 0;
+ int8 RaceID = 0;
int32 BlockReason = 0;
};