TrinityCore
InspectPackets.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "InspectPackets.h"
19#include "AzeriteItem.h"
20#include "Item.h"
21#include "Player.h"
22
24{
25void Inspect::Read()
26{
28}
29
31{
32 data << uint32(enchantData.Id);
33 data << uint8(enchantData.Index);
34
35 return data;
36}
37
38ByteBuffer& operator<<(ByteBuffer& data, AzeriteEssenceData const& azeriteEssenceData)
39{
40 data << uint32(azeriteEssenceData.Index);
41 data << uint32(azeriteEssenceData.AzeriteEssenceID);
42 data << uint32(azeriteEssenceData.Rank);
43 data.WriteBit(azeriteEssenceData.SlotUnlocked);
44 data.FlushBits();
45
46 return data;
47}
48
50{
51 data << itemData.CreatorGUID;
52 data << uint8(itemData.Index);
53 data << uint32(itemData.AzeritePowers.size());
54 data << uint32(itemData.AzeriteEssences.size());
55
56 if (!itemData.AzeritePowers.empty())
57 data.append(itemData.AzeritePowers.data(), itemData.AzeritePowers.size());
58
59 data << itemData.Item;
60 data.WriteBit(itemData.Usable);
61 data.WriteBits(itemData.Enchants.size(), 4);
62 data.WriteBits(itemData.Gems.size(), 2);
63 data.FlushBits();
64
65 for (AzeriteEssenceData const& azeriteEssenceData : itemData.AzeriteEssences)
66 data << azeriteEssenceData;
67
68 for (InspectEnchantData const& enchantData : itemData.Enchants)
69 data << enchantData;
70
71 for (Item::ItemGemData const& gem : itemData.Gems)
72 data << gem;
73
74 return data;
75}
76
78{
79 GUID = player->GetGUID();
81 Name = player->GetName();
82 GenderID = player->GetNativeGender();
83 Race = player->GetRace();
84 ClassID = player->GetClass();
85
86 for (UF::ChrCustomizationChoice const& customization : player->m_playerData->Customizations)
87 Customizations.push_back(customization);
88
89 for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
90 if (::Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, i))
91 Items.emplace_back(item, i);
92}
93
95{
96 data << displayInfo.GUID;
97 data << int32(displayInfo.SpecializationID);
98 data << uint32(displayInfo.Items.size());
99 data.WriteBits(displayInfo.Name.length(), 6);
100 data << uint8(displayInfo.GenderID);
101 data << uint8(displayInfo.Race);
102 data << uint8(displayInfo.ClassID);
103 data << uint32(displayInfo.Customizations.size());
104 data.WriteString(displayInfo.Name);
105
106 for (Character::ChrCustomizationChoice const& customization : displayInfo.Customizations)
107 data << customization;
108
109 for (InspectItemData const& item : displayInfo.Items)
110 data << item;
111
112 return data;
113}
114
116{
117 data << guildData.GuildGUID;
118 data << int32(guildData.NumGuildMembers);
119 data << int32(guildData.AchievementPoints);
120
121 return data;
122}
123
125{
126 data << uint8(bracket.Bracket);
127 data << int32(bracket.Unused3);
128 data << int32(bracket.Rating);
129 data << int32(bracket.Rank);
130 data << int32(bracket.WeeklyPlayed);
131 data << int32(bracket.WeeklyWon);
132 data << int32(bracket.SeasonPlayed);
133 data << int32(bracket.SeasonWon);
134 data << int32(bracket.WeeklyBestRating);
135 data << int32(bracket.SeasonBestRating);
136 data << int32(bracket.PvpTierID);
137 data << int32(bracket.WeeklyBestWinPvpTierID);
138 data << int32(bracket.Unused1);
139 data << int32(bracket.Unused2);
140 data << int32(bracket.RoundsSeasonPlayed);
141 data << int32(bracket.RoundsSeasonWon);
142 data << int32(bracket.RoundsWeeklyPlayed);
143 data << int32(bracket.RoundsWeeklyWon);
144 data.WriteBit(bracket.Disqualified);
145 data.FlushBits();
146
147 return data;
148}
149
151{
152 data << int32(traits.Level);
153 data << int32(traits.ChrSpecializationID);
154 data << traits.Config;
155
156 return data;
157}
158
160{
161 CreatorGUID = item->GetCreator();
162
163 Item.Initialize(item);
164 Index = index;
165 Usable = true;
166
167 for (uint8 i = 0; i < MAX_ENCHANTMENT_SLOT; ++i)
168 if (uint32 enchId = item->GetEnchantmentId(EnchantmentSlot(i)))
169 Enchants.emplace_back(enchId, i);
170
171 uint8 i = 0;
172 for (UF::SocketedGem const& gemData : item->m_itemData->Gems)
173 {
174 if (gemData.ItemID)
175 {
176 Gems.emplace_back();
177
178 Item::ItemGemData& gem = Gems.back();
179 gem.Slot = i;
180 gem.Item.Initialize(&gemData);
181 }
182 ++i;
183 }
184
185 if (AzeriteItem const* azeriteItem = item->ToAzeriteItem())
186 {
187 if (UF::SelectedAzeriteEssences const* essences = azeriteItem->GetSelectedAzeriteEssences())
188 {
189 for (uint8 slot = 0; slot < essences->AzeriteEssenceID.size(); ++slot)
190 {
191 AzeriteEssences.emplace_back();
192
193 AzeriteEssenceData& essence = AzeriteEssences.back();
194 essence.Index = slot;
195 essence.AzeriteEssenceID = essences->AzeriteEssenceID[slot];
196 if (essence.AzeriteEssenceID)
197 {
198 essence.Rank = azeriteItem->GetEssenceRank(essence.AzeriteEssenceID);
199 essence.SlotUnlocked = true;
200 }
201 else
202 essence.SlotUnlocked = azeriteItem->HasUnlockedEssenceSlot(slot);
203 }
204 }
205 }
206}
207
209{
211 _worldPacket << uint32(Glyphs.size());
212 _worldPacket << uint32(Talents.size());
213 _worldPacket << uint32(PvpTalents.size());
220 if (!Glyphs.empty())
221 _worldPacket.append(Glyphs.data(), Glyphs.size());
222 if (!Talents.empty())
223 _worldPacket.append(Talents.data(), Talents.size());
224 if (!PvpTalents.empty())
226
227 _worldPacket.WriteBit(GuildData.has_value());
230
231 for (PVPBracketData const& bracket : Bracket)
232 _worldPacket << bracket;
233
234 if (GuildData)
236
237 if (AzeriteLevel)
239
241
242 return &_worldPacket;
243}
244
246{
248}
249}
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
EnchantmentSlot
Definition: ItemDefines.h:178
@ MAX_ENCHANTMENT_SLOT
Definition: ItemDefines.h:195
@ EQUIPMENT_SLOT_END
Definition: Player.h:650
#define INVENTORY_SLOT_BAG_0
Definition: Player.h:625
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
Definition: Util.h:491
void WriteString(std::string const &str)
Definition: ByteBuffer.h:500
void append(T value)
Definition: ByteBuffer.h:143
bool WriteBit(bool bit)
Definition: ByteBuffer.h:175
void WriteBits(std::size_t value, int32 bits)
Definition: ByteBuffer.h:203
void FlushBits()
Definition: ByteBuffer.h:155
Definition: Item.h:170
uint32 GetEnchantmentId(EnchantmentSlot slot) const
Definition: Item.h:298
AzeriteItem * ToAzeriteItem()
Definition: Item.h:243
ObjectGuid GetCreator() const
Definition: Item.h:192
UF::UpdateField< UF::ItemData, 0, TYPEID_ITEM > m_itemData
Definition: Item.h:449
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
ChrSpecialization GetPrimarySpecialization() const
Definition: Player.h:1841
UF::UpdateField< UF::PlayerData, 0, TYPEID_PLAYER > m_playerData
Definition: Player.h:2863
Gender GetNativeGender() const override
Definition: Player.h:1217
Item * GetItemByPos(uint16 pos) const
Definition: Player.cpp:9582
uint8 GetClass() const
Definition: Unit.h:752
uint8 GetRace() const
Definition: Unit.h:749
std::string const & GetName() const
Definition: Object.h:555
PlayerModelDisplayInfo DisplayInfo
std::array< PVPBracketData, 9 > Bracket
WorldPacket const * Write() override
std::array< uint16, MAX_PVP_TALENT_SLOTS > PvpTalents
Optional< InspectGuildData > GuildData
WorldPacket _worldPacket
Definition: Packet.h:43
ByteBuffer & operator<<(ByteBuffer &data, InspectEnchantData const &enchantData)
UpdateField< int32, 0, 1 > ItemID
Definition: UpdateFields.h:109
std::vector< InspectEnchantData > Enchants
std::vector< Item::ItemGemData > Gems
std::vector< AzeriteEssenceData > AzeriteEssences
InspectItemData(::Item const *item, uint8 index)
std::vector< InspectItemData > Items
std::vector< Character::ChrCustomizationChoice > Customizations
void Initialize(::Item const *item)