diff options
author | funjoker <funjoker109@gmail.com> | 2025-05-11 13:23:13 +0200 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2025-05-12 12:36:07 +0200 |
commit | d8b7964112743d60c6b313b8ccdb0df50866c515 (patch) | |
tree | a625e4864a3aeb05b659a655a4daa1f2f169b2f9 | |
parent | 9bd261f11c9d3b212ebf12bfd4b341e2938d0eeb (diff) |
Core/Packets: fixed SMSG_ENUM_CHARACTERS_RESULT packet structure
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.h | 17 |
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; }; |