TrinityCore
Item.h
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#ifndef TRINITYCORE_ITEM_H
19#define TRINITYCORE_ITEM_H
20
21#include "Object.h"
22#include "Common.h"
23#include "DatabaseEnvFwd.h"
24#include "ItemDefines.h"
25#include "ItemEnchantmentMgr.h"
26#include "ItemTemplate.h"
27#include "IteratorPair.h"
28
29class SpellInfo;
30class Bag;
31class Unit;
32struct Loot;
33namespace WorldPackets
34{
35 namespace Item
36 {
37 struct ItemInstance;
38 }
39}
40
42{
44 std::unordered_set<Item const*> EquippedItems;
45 std::unordered_set<ItemSetSpellEntry const*> SetBonuses;
46};
47
48#define MAX_GEM_SOCKETS MAX_ITEM_PROTO_SOCKETS// (BONUS_ENCHANTMENT_SLOT-SOCK_ENCHANTMENT_SLOT) and item proto size, equal value expected
49
50#define MAX_ENCHANTMENT_OFFSET 3
51
53{
57 ITEM_REMOVED = 3
58};
59
60#define MAX_ITEM_SPELLS 5
61
62bool ItemCanGoIntoBag(ItemTemplate const* proto, ItemTemplate const* pBagProto);
67
69{
91 std::array<ItemEffectEntry const*, 13> Effects;
92 std::size_t EffectCount;
96
97 void Initialize(ItemTemplate const* proto);
98 void Initialize(WorldPackets::Item::ItemInstance const& itemInstance);
99 void AddBonusList(uint32 bonusListId);
100 void AddBonus(uint32 type, std::array<int32, 4> const& values);
101
102private:
103 struct
104 {
113};
114
116{
120};
121
123{
127 std::vector<ArtifactPowerData> ArtifactPowers;
128};
129
131{
133 std::array<uint32, MAX_AZERITE_ESSENCE_SLOT> AzeriteEssenceId = { };
134};
135
137{
141 std::vector<uint32> AzeriteItemMilestonePowers;
142 std::vector<AzeriteEssencePowerEntry const*> UnlockedAzeriteEssences;
143 std::array<AzeriteItemSelectedEssencesData, 4> SelectedAzeriteEssences = { };
144};
145
147{
148 std::array<int32, MAX_AZERITE_EMPOWERED_TIER> SelectedAzeritePowers;
149};
150
152{
153 static void Init(std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo>* loadInfo, PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult,
154 PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult);
155
159};
160
162{
166};
167
168Item* NewItemOrBag(ItemTemplate const* proto);
169
170class TC_GAME_API Item : public Object
171{
172 friend void AddItemToUpdateQueueOf(Item* item, Player* player);
173 friend void RemoveItemFromUpdateQueueOf(Item* item, Player* player);
174
175 public:
176 static Item* CreateItem(uint32 itemEntry, uint32 count, ItemContext context, Player const* player = nullptr, bool addDefaultBonuses = true);
177 Item* CloneItem(uint32 count, Player const* player = nullptr) const;
178
179 Item();
181
182 virtual bool Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const* owner);
183
184 std::string GetNameForLocaleIdx(LocaleConstant locale) const override;
185
186 ItemTemplate const* GetTemplate() const;
187 BonusData const* GetBonus() const { return &_bonusData; }
188
189 ObjectGuid GetOwnerGUID() const { return m_itemData->Owner; }
190 void SetOwnerGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Owner), guid); }
191 ObjectGuid GetContainedIn() const { return m_itemData->ContainedIn; }
192 void SetContainedIn(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ContainedIn), guid); }
193 ObjectGuid GetCreator() const { return m_itemData->Creator; }
194 void SetCreator(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Creator), guid); }
195 ObjectGuid GetGiftCreator() const { return m_itemData->GiftCreator; }
196 void SetGiftCreator(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::GiftCreator), guid); }
197 Player* GetOwner() const;
198
199 void SetExpiration(uint32 expiration) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Expiration), expiration); }
200
201 ItemBondingType GetBonding() const { return _bonusData.Bonding; }
202 void SetBinding(bool val)
203 {
204 if (val)
205 SetItemFlag(ITEM_FIELD_FLAG_SOULBOUND);
206 else
207 RemoveItemFlag(ITEM_FIELD_FLAG_SOULBOUND);
208 }
209 bool HasItemFlag(ItemFieldFlags flag) const { return (*m_itemData->DynamicFlags & flag) != 0; }
213
214 bool HasItemZoneFlag(ItemZoneFlags flag) const { return (*m_itemData->ZoneFlags & flag) != 0; }
218
219 bool IsSoulBound() const { return HasItemFlag(ITEM_FIELD_FLAG_SOULBOUND); }
220 bool IsBoundAccountWide() const { return GetTemplate()->HasFlag(ITEM_FLAG_IS_BOUND_TO_ACCOUNT); }
221 bool IsBattlenetAccountBound() const { return GetTemplate()->HasFlag(ITEM_FLAG2_BNET_ACCOUNT_TRADE_OK); }
222 bool IsBindedNotWith(Player const* player) const;
223 bool IsBoundByEnchant() const;
224 virtual void SaveToDB(CharacterDatabaseTransaction trans);
225 virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fields, uint32 entry);
226 void LoadArtifactData(Player const* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ArtifactPowerData>& powers); // must be called after LoadFromDB to have gems (relics) initialized
227 void CheckArtifactRelicSlotUnlock(Player const* owner);
228
229 void AddBonuses(uint32 bonusListID);
230 std::vector<int32> const& GetBonusListIDs() const { return m_itemData->ItemBonusKey->BonusListIDs; }
231 void SetBonuses(std::vector<int32> bonusListIDs);
232 void ClearBonuses();
233
234 static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid);
235 virtual void DeleteFromDB(CharacterDatabaseTransaction trans);
236 static void DeleteFromInventoryDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid);
237
238 void DeleteFromInventoryDB(CharacterDatabaseTransaction trans);
239 void SaveRefundDataToDB();
240 void DeleteRefundDataFromDB(CharacterDatabaseTransaction* trans);
241
242 Bag* ToBag() { if (IsBag()) return reinterpret_cast<Bag*>(this); else return nullptr; }
243 Bag const* ToBag() const { if (IsBag()) return reinterpret_cast<Bag const*>(this); else return nullptr; }
244 AzeriteItem* ToAzeriteItem() { return IsAzeriteItem() ? reinterpret_cast<AzeriteItem*>(this) : nullptr; }
245 AzeriteItem const* ToAzeriteItem() const { return IsAzeriteItem() ? reinterpret_cast<AzeriteItem const*>(this) : nullptr; }
246 AzeriteEmpoweredItem* ToAzeriteEmpoweredItem() { return IsAzeriteEmpoweredItem() ? reinterpret_cast<AzeriteEmpoweredItem*>(this) : nullptr; }
247 AzeriteEmpoweredItem const* ToAzeriteEmpoweredItem() const { return IsAzeriteEmpoweredItem() ? reinterpret_cast<AzeriteEmpoweredItem const*>(this) : nullptr; }
248
249 bool IsRefundable() const { return HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE); }
250 bool IsBOPTradeable() const { return HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE); }
251 bool IsWrapped() const { return HasItemFlag(ITEM_FIELD_FLAG_WRAPPED); }
252 bool IsLocked() const { return !HasItemFlag(ITEM_FIELD_FLAG_UNLOCKED); }
253 bool IsBag() const { return GetTemplate()->GetInventoryType() == INVTYPE_BAG; }
254 bool IsAzeriteItem() const { return GetTypeId() == TYPEID_AZERITE_ITEM; }
256 bool IsCurrencyToken() const { return GetTemplate()->IsCurrencyToken(); }
257 bool IsNotEmptyBag() const;
258 bool IsBroken() const { return *m_itemData->MaxDurability > 0 && *m_itemData->Durability == 0; }
259 void SetDurability(uint32 durability) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Durability), durability); }
260 void SetMaxDurability(uint32 maxDurability) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), maxDurability); }
261 bool CanBeTraded(bool mail = false, bool trade = false) const;
262 void SetInTrade(bool b = true) { mb_in_trade = b; }
263 bool IsInTrade() const { return mb_in_trade; }
264
265 uint64 CalculateDurabilityRepairCost(float discount) const;
266
267 bool HasEnchantRequiredSkill(Player const* player) const;
268 uint32 GetEnchantRequiredLevel() const;
269
270 bool IsFitToSpellRequirements(SpellInfo const* spellInfo) const;
271 bool IsLimitedToAnotherMapOrZone(uint32 cur_mapId, uint32 cur_zoneId) const;
272 bool GemsFitSockets() const;
273
274 uint32 GetCount() const { return m_itemData->StackCount; }
275 void SetCount(uint32 value);
276 uint32 GetMaxStackCount() const { return GetTemplate()->GetMaxStackSize(); }
277 uint8 GetGemCountWithID(uint32 GemID) const;
278 uint8 GetGemCountWithLimitCategory(uint32 limitCategory) const;
279 InventoryResult CanBeMergedPartlyWith(ItemTemplate const* proto) const;
280
281 uint8 GetSlot() const {return m_slot;}
282 Bag* GetContainer() { return m_container; }
283 uint8 GetBagSlot() const;
284 void SetSlot(uint8 slot) { m_slot = slot; }
285 uint16 GetPos() const { return uint16(GetBagSlot()) << 8 | GetSlot(); }
286 void SetContainer(Bag* container) { m_container = container; }
287
288 bool IsInBag() const { return m_container != nullptr; }
289 bool IsEquipped() const;
290
291 uint32 GetSkill();
292
293 ItemRandomBonusListId GetItemRandomBonusListId() const { return m_randomBonusListId; }
294 void SetItemRandomBonusList(ItemRandomBonusListId bonusListId);
295 void SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges, ObjectGuid caster = ObjectGuid::Empty);
296 void SetEnchantmentDuration(EnchantmentSlot slot, uint32 duration, Player* owner);
297 void SetEnchantmentCharges(EnchantmentSlot slot, uint32 charges);
298 void ClearEnchantment(EnchantmentSlot slot);
299 uint32 GetEnchantmentId(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].ID; }
300 uint32 GetEnchantmentDuration(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].Duration; }
301 uint32 GetEnchantmentCharges(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].Charges; }
302 UF::SocketedGem const* GetGem(uint16 slot) const;
303 void SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalingLevel);
304
305 std::string const& GetText() const { return m_text; }
306 void SetText(std::string const& text) { m_text = text; }
307
308 void SendUpdateSockets();
309
310 void SendTimeUpdate(Player* owner);
311 void UpdateDuration(Player* owner, uint32 diff);
312 void SetCreatePlayedTime(uint32 createPlayedTime) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::CreatePlayedTime), createPlayedTime); }
313 void SetCreateTime(int64 createTime) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::CreateTime), createTime); }
314
315 // spell charges (signed but stored as unsigned)
316 int32 GetSpellCharges(uint8 index/*0..5*/ = 0) const { return m_itemData->SpellCharges[index]; }
317 void SetSpellCharges(uint8 index/*0..5*/, int32 value) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::SpellCharges, index), value); }
318
319 std::unique_ptr<Loot> m_loot;
321 Loot* GetLootForPlayer(Player const* /*player*/) const override { return m_loot.get(); }
322
323 // Update States
324 ItemUpdateState GetState() const { return uState; }
325 void SetState(ItemUpdateState state, Player* forplayer = nullptr);
326 bool IsInUpdateQueue() const { return uQueuePos != -1; }
327 uint16 GetQueuePos() const { return uQueuePos; }
328 void FSetState(ItemUpdateState state) // forced
329 {
330 uState = state;
331 }
332
333 bool hasQuest(uint32 quest_id) const override { return GetTemplate()->GetStartQuest() == quest_id; }
334 bool hasInvolvedQuest(uint32 /*quest_id*/) const override { return false; }
335 bool IsPotion() const { return GetTemplate()->IsPotion(); }
336 bool IsVellum() const { return GetTemplate()->IsVellum(); }
337 bool IsConjuredConsumable() const { return GetTemplate()->IsConjuredConsumable(); }
338 bool IsRangedWeapon() const { return GetTemplate()->IsRangedWeapon(); }
339 uint32 GetQuality() const { return _bonusData.Quality; }
340 uint32 GetItemLevel(Player const* owner) const;
341 static uint32 GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bonusData, uint32 level, uint32 fixedLevel,
342 uint32 minItemLevel, uint32 minItemLevelCutoff, uint32 maxItemLevel, bool pvpBonus, uint32 azeriteLevel);
343 int32 GetRequiredLevel() const;
344 int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return _bonusData.ItemStatType[index]; }
345 float GetItemStatValue(uint32 index, Player const* owner) const;
346 SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(_bonusData.SocketColor[index]); }
347 uint32 GetAppearanceModId() const { return m_itemData->ItemAppearanceModID; }
348 void SetAppearanceModId(uint32 appearanceModId) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), appearanceModId); }
349 uint32 GetDisplayId(Player const* owner) const;
350 ItemModifiedAppearanceEntry const* GetItemModifiedAppearance() const;
351 float GetRepairCostMultiplier() const { return _bonusData.RepairCostMultiplier; }
352 uint32 GetScalingContentTuningId() const { return _bonusData.ContentTuningId; }
353 Optional<uint32> GetDisenchantLootId() const;
354 Optional<uint16> GetDisenchantSkillRequired() const;
355 static ItemDisenchantLootEntry const* GetBaseDisenchantLoot(ItemTemplate const* itemTemplate, uint32 quality, uint32 itemLevel);
356 void SetFixedLevel(uint8 level);
357 Trinity::IteratorPair<ItemEffectEntry const* const*> GetEffects() const { return { std::make_pair(_bonusData.Effects.data(), _bonusData.Effects.data() + _bonusData.EffectCount) }; }
358
359 // Item Refund system
360 void SetNotRefundable(Player* owner, bool changestate = true, CharacterDatabaseTransaction* trans = nullptr, bool addToCollection = true);
361 void SetRefundRecipient(ObjectGuid const& guid) { m_refundRecipient = guid; }
362 void SetPaidMoney(uint64 money) { m_paidMoney = money; }
363 void SetPaidExtendedCost(uint32 iece) { m_paidExtendedCost = iece; }
364
365 ObjectGuid const& GetRefundRecipient() const { return m_refundRecipient; }
366 uint64 GetPaidMoney() const { return m_paidMoney; }
367 uint32 GetPaidExtendedCost() const { return m_paidExtendedCost; }
368
369 uint32 GetPlayedTime() const;
370 bool IsRefundExpired() const;
371
372 // Soulbound trade system
373 void SetSoulboundTradeable(GuidSet const& allowedLooters);
374 void ClearSoulboundTradeable(Player* currentOwner);
375 bool CheckSoulboundTradeExpire();
376
377 void BuildUpdate(UpdateDataMapType&) override;
378
379 protected:
380 UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const final;
381 void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
382 void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
383 void ClearUpdateMask(bool remove) override;
384
385 public:
386 void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
387 void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
388 UF::ItemData::Mask const& requestedItemMask, Player const* target) const;
389
390 struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
391 {
392 explicit ValuesUpdateForPlayerWithMaskSender(Item const* owner) : Owner(owner) { }
393
394 Item const* Owner;
397
398 void operator()(Player const* player) const;
399 };
400
401 bool AddToObjectUpdate() override;
402 void RemoveFromObjectUpdate() override;
403
404 uint32 GetScriptId() const { return GetTemplate()->ScriptId; }
405
406 bool IsValidTransmogrificationTarget() const;
407 bool HasStats() const;
408 static bool HasStats(WorldPackets::Item::ItemInstance const& itemInstance, BonusData const* bonus);
409 static bool CanTransmogrifyItemWithItem(Item const* item, ItemModifiedAppearanceEntry const* itemModifiedAppearance);
410 uint32 GetBuyPrice(Player const* owner, bool& standardPrice) const;
411 static uint32 GetBuyPrice(ItemTemplate const* proto, uint32 quality, uint32 itemLevel, bool& standardPrice);
412 uint32 GetSellPrice(Player const* owner) const;
413 static uint32 GetSellPrice(ItemTemplate const* proto, uint32 quality, uint32 itemLevel);
414
415 uint32 GetVisibleEntry(Player const* owner) const;
416 uint16 GetVisibleAppearanceModId(Player const* owner) const;
417 uint32 GetVisibleModifiedAppearanceId(Player const* owner) const;
418 int32 GetVisibleSecondaryModifiedAppearanceId(Player const* owner) const;
419 uint32 GetVisibleEnchantmentId(Player const* owner) const;
420 uint16 GetVisibleItemVisual(Player const* owner) const;
421
422 uint32 GetModifier(ItemModifier modifier) const;
423 void SetModifier(ItemModifier modifier, uint32 value);
424
425 ObjectGuid GetChildItem() const { return m_childItem; }
426 void SetChildItem(ObjectGuid childItem) { m_childItem = childItem; }
427
428 bool IsArtifactDisabled() const;
429
430 UF::ArtifactPower const* GetArtifactPower(uint32 artifactPowerId) const;
431 void AddArtifactPower(ArtifactPowerData const* artifactPower);
432 void SetArtifactPower(uint16 artifactPowerId, uint8 purchasedRank, uint8 currentRankWithBonus);
433
434 void InitArtifactPowers(uint8 artifactId, uint8 artifactTier);
435 uint32 GetTotalUnlockedArtifactPowers() const;
436 uint32 GetTotalPurchasedArtifactPowers() const;
437 void ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enchantId, bool apply, Player* owner);
438 void CopyArtifactDataFromParent(Item* parent);
439
440 void SetArtifactXP(uint64 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactXP), xp); }
441 void GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCategoryId);
442
443 ItemContext GetContext() const { return ItemContext(*m_itemData->Context); }
444 void SetContext(ItemContext context) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Context), int32(context)); }
445
446 void SetPetitionId(uint32 petitionId) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, 0).ModifyValue(&UF::ItemEnchantment::ID), petitionId); }
447 void SetPetitionNumSignatures(uint32 signatures) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, 0).ModifyValue(&UF::ItemEnchantment::Duration), signatures); }
448
449 std::string GetDebugInfo() const override;
450
452
453 protected:
455
456 private:
457 std::string m_text;
462 bool mb_in_trade; // true if item is currently in trade-window
467 ItemRandomBonusListId m_randomBonusListId; // store separately to easily find which bonus list is the one randomly given for stat rerolling
469 std::unordered_map<uint32, uint16> m_artifactPowerIdToIndex;
470 std::array<uint32, MAX_ITEM_PROTO_SOCKETS> m_gemScalingLevels;
471};
472#endif
LocaleConstant
Definition: Common.h:48
#define MAX_ITEM_PROTO_SOCKETS
Definition: DBCEnums.h:1034
ItemContext
Definition: DBCEnums.h:1108
#define MAX_ITEM_PROTO_STATS
Definition: DBCEnums.h:1035
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int64_t int64
Definition: Define.h:137
int16_t int16
Definition: Define.h:139
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
#define ASSERT
Definition: Errors.h:68
EnchantmentSlot
Definition: ItemDefines.h:190
InventoryResult
Definition: ItemDefines.h:25
ItemModifier
Definition: ItemDefines.h:222
uint32 ItemRandomBonusListId
@ ITEM_FLAG2_BNET_ACCOUNT_TRADE_OK
Definition: ItemTemplate.h:235
ItemFieldFlags
Definition: ItemTemplate.h:136
@ ITEM_FIELD_FLAG_REFUNDABLE
Definition: ItemTemplate.h:149
@ ITEM_FIELD_FLAG_UNLOCKED
Definition: ItemTemplate.h:139
@ ITEM_FIELD_FLAG_SOULBOUND
Definition: ItemTemplate.h:137
@ ITEM_FIELD_FLAG_WRAPPED
Definition: ItemTemplate.h:140
@ ITEM_FIELD_FLAG_BOP_TRADEABLE
Definition: ItemTemplate.h:145
@ ITEM_FLAG_IS_BOUND_TO_ACCOUNT
Definition: ItemTemplate.h:209
ItemZoneFlags
Definition: ItemTemplate.h:174
#define MAX_INVTYPE
Definition: ItemTemplate.h:422
SocketColor
Definition: ItemTemplate.h:351
ItemBondingType
Definition: ItemTemplate.h:118
@ INVTYPE_BAG
Definition: ItemTemplate.h:403
void RemoveItemFromUpdateQueueOf(Item *item, Player *player)
Definition: Item.cpp:1220
void AddItemToUpdateQueueOf(Item *item, Player *player)
Definition: Item.cpp:1199
ItemModifier const AppearanceModifierSlotBySpec[MAX_SPECIALIZATIONS]
Definition: Item.cpp:283
ItemModifier const SecondaryAppearanceModifierSlotBySpec[MAX_SPECIALIZATIONS]
Definition: Item.cpp:301
Item * NewItemOrBag(ItemTemplate const *proto)
Definition: Item.cpp:52
ItemUpdateState
Definition: Item.h:53
@ ITEM_CHANGED
Definition: Item.h:55
@ ITEM_REMOVED
Definition: Item.h:57
@ ITEM_NEW
Definition: Item.h:56
@ ITEM_UNCHANGED
Definition: Item.h:54
ItemModifier const IllusionModifierSlotBySpec[MAX_SPECIALIZATIONS]
Definition: Item.cpp:292
int32 const ItemTransmogrificationSlots[MAX_INVTYPE]
Definition: Item.cpp:1988
bool ItemCanGoIntoBag(ItemTemplate const *proto, ItemTemplate const *pBagProto)
Definition: Item.cpp:208
@ TYPEID_AZERITE_ITEM
Definition: ObjectGuid.h:41
@ TYPEID_ITEM
Definition: ObjectGuid.h:38
@ TYPEID_AZERITE_EMPOWERED_ITEM
Definition: ObjectGuid.h:40
std::set< ObjectGuid > GuidSet
Definition: ObjectGuid.h:392
std::unordered_map< Player *, UpdateData > UpdateDataMapType
Definition: Object.h:81
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
Definition: QuestPools.cpp:50
#define MAX_SPECIALIZATIONS
Definition: Bag.h:27
Class used to access individual fields of database query result.
Definition: Field.h:93
Definition: Item.h:171
uint32 GetPaidExtendedCost() const
Definition: Item.h:367
bool hasInvolvedQuest(uint32) const override
Definition: Item.h:334
uint8 GetSlot() const
Definition: Item.h:281
std::string const & GetText() const
Definition: Item.h:305
void SetItemFlag(ItemFieldFlags flags)
Definition: Item.h:210
bool HasItemZoneFlag(ItemZoneFlags flag) const
Definition: Item.h:214
bool IsCurrencyToken() const
Definition: Item.h:256
uint32 GetScriptId() const
Definition: Item.h:404
bool IsWrapped() const
Definition: Item.h:251
Bag * GetContainer()
Definition: Item.h:282
void SetSpellCharges(uint8 index, int32 value)
Definition: Item.h:317
void SetText(std::string const &text)
Definition: Item.h:306
void SetPetitionId(uint32 petitionId)
Definition: Item.h:446
ObjectGuid m_childItem
Definition: Item.h:468
Loot * GetLootForPlayer(Player const *) const override
Definition: Item.h:321
AzeriteItem const * ToAzeriteItem() const
Definition: Item.h:245
void ReplaceAllItemFlags(ItemFieldFlags flags)
Definition: Item.h:212
void RemoveItemFlag(ItemFieldFlags flags)
Definition: Item.h:211
ObjectGuid GetContainedIn() const
Definition: Item.h:191
void SetBinding(bool val)
Definition: Item.h:202
ItemBondingType GetBonding() const
Definition: Item.h:201
Trinity::IteratorPair< ItemEffectEntry const *const * > GetEffects() const
Definition: Item.h:357
uint32 GetEnchantmentId(EnchantmentSlot slot) const
Definition: Item.h:299
void SetChildItem(ObjectGuid childItem)
Definition: Item.h:426
std::unordered_map< uint32, uint16 > m_artifactPowerIdToIndex
Definition: Item.h:469
void SetPaidMoney(uint64 money)
Definition: Item.h:362
int32 GetSpellCharges(uint8 index=0) const
Definition: Item.h:316
bool IsVellum() const
Definition: Item.h:336
Bag * m_container
Definition: Item.h:459
bool IsAzeriteEmpoweredItem() const
Definition: Item.h:255
bool IsBoundAccountWide() const
Definition: Item.h:220
bool mb_in_trade
Definition: Item.h:462
Bag * ToBag()
Definition: Item.h:242
std::string m_text
Definition: Item.h:457
AzeriteItem * ToAzeriteItem()
Definition: Item.h:244
int32 GetItemStatType(uint32 index) const
Definition: Item.h:344
uint32 GetEnchantmentDuration(EnchantmentSlot slot) const
Definition: Item.h:300
void SetItemZoneFlag(ItemZoneFlags flags)
Definition: Item.h:215
void SetContext(ItemContext context)
Definition: Item.h:444
uint32 GetQuality() const
Definition: Item.h:339
uint64 m_paidMoney
Definition: Item.h:464
std::array< uint32, MAX_ITEM_PROTO_SOCKETS > m_gemScalingLevels
Definition: Item.h:470
bool IsLocked() const
Definition: Item.h:252
void SetDurability(uint32 durability)
Definition: Item.h:259
void SetCreateTime(int64 createTime)
Definition: Item.h:313
ObjectGuid GetCreator() const
Definition: Item.h:193
UF::UpdateField< UF::ItemData, uint32(WowCS::EntityFragment::CGObject), TYPEID_ITEM > m_itemData
Definition: Item.h:451
std::vector< int32 > const & GetBonusListIDs() const
Definition: Item.h:230
bool IsBOPTradeable() const
Definition: Item.h:250
bool IsInBag() const
Definition: Item.h:288
ItemRandomBonusListId GetItemRandomBonusListId() const
Definition: Item.h:293
bool IsSoulBound() const
Definition: Item.h:219
ItemContext GetContext() const
Definition: Item.h:443
ItemRandomBonusListId m_randomBonusListId
Definition: Item.h:467
ItemUpdateState GetState() const
Definition: Item.h:324
bool IsPotion() const
Definition: Item.h:335
bool IsBroken() const
Definition: Item.h:258
bool IsBattlenetAccountBound() const
Definition: Item.h:221
bool HasItemFlag(ItemFieldFlags flag) const
Definition: Item.h:209
uint16 GetQueuePos() const
Definition: Item.h:327
BonusData const * GetBonus() const
Definition: Item.h:187
SocketColor GetSocketColor(uint32 index) const
Definition: Item.h:346
AzeriteEmpoweredItem const * ToAzeriteEmpoweredItem() const
Definition: Item.h:247
ObjectGuid GetOwnerGUID() const
Definition: Item.h:189
Bag const * ToBag() const
Definition: Item.h:243
uint32 GetAppearanceModId() const
Definition: Item.h:347
BonusData _bonusData
Definition: Item.h:454
uint64 GetPaidMoney() const
Definition: Item.h:366
void RemoveItemZoneFlag(ItemZoneFlags flags)
Definition: Item.h:216
bool IsAzeriteItem() const
Definition: Item.h:254
bool IsRefundable() const
Definition: Item.h:249
uint16 GetPos() const
Definition: Item.h:285
ObjectGuid m_refundRecipient
Definition: Item.h:463
bool IsInTrade() const
Definition: Item.h:263
bool IsRangedWeapon() const
Definition: Item.h:338
int16 uQueuePos
Definition: Item.h:461
void SetContainedIn(ObjectGuid guid)
Definition: Item.h:192
ObjectGuid GetGiftCreator() const
Definition: Item.h:195
void SetPetitionNumSignatures(uint32 signatures)
Definition: Item.h:447
void FSetState(ItemUpdateState state)
Definition: Item.h:328
void SetMaxDurability(uint32 maxDurability)
Definition: Item.h:260
void ReplaceAllItemZoneFlags(ItemZoneFlags flags)
Definition: Item.h:217
uint32 m_paidExtendedCost
Definition: Item.h:465
bool IsBag() const
Definition: Item.h:253
void SetArtifactXP(uint64 xp)
Definition: Item.h:440
std::unique_ptr< Loot > m_loot
Definition: Item.h:319
void SetCreator(ObjectGuid guid)
Definition: Item.h:194
ObjectGuid const & GetRefundRecipient() const
Definition: Item.h:365
void SetCreatePlayedTime(uint32 createPlayedTime)
Definition: Item.h:312
void SetPaidExtendedCost(uint32 iece)
Definition: Item.h:363
uint32 GetEnchantmentCharges(EnchantmentSlot slot) const
Definition: Item.h:301
void SetAppearanceModId(uint32 appearanceModId)
Definition: Item.h:348
void SetRefundRecipient(ObjectGuid const &guid)
Definition: Item.h:361
void SetSlot(uint8 slot)
Definition: Item.h:284
bool m_lootGenerated
Definition: Item.h:320
uint32 GetCount() const
Definition: Item.h:274
void SetExpiration(uint32 expiration)
Definition: Item.h:199
void SetOwnerGUID(ObjectGuid guid)
Definition: Item.h:190
void SetContainer(Bag *container)
Definition: Item.h:286
AzeriteEmpoweredItem * ToAzeriteEmpoweredItem()
Definition: Item.h:246
float GetRepairCostMultiplier() const
Definition: Item.h:351
ObjectGuid GetChildItem() const
Definition: Item.h:425
bool hasQuest(uint32 quest_id) const override
Definition: Item.h:333
uint32 GetMaxStackCount() const
Definition: Item.h:276
void SetGiftCreator(ObjectGuid guid)
Definition: Item.h:196
bool IsConjuredConsumable() const
Definition: Item.h:337
uint8 m_slot
Definition: Item.h:458
bool IsInUpdateQueue() const
Definition: Item.h:326
uint32 GetScalingContentTuningId() const
Definition: Item.h:352
GuidSet allowedGUIDs
Definition: Item.h:466
ItemUpdateState uState
Definition: Item.h:460
void SetInTrade(bool b=true)
Definition: Item.h:262
static ObjectGuid const Empty
Definition: ObjectGuid.h:274
uint64 LowType
Definition: ObjectGuid.h:281
Definition: Object.h:186
virtual void BuildValuesCreate(ByteBuffer *data, UF::UpdateFieldFlag flags, Player const *target) const =0
virtual void BuildValuesUpdateWithFlag(ByteBuffer *data, UF::UpdateFieldFlag flags, Player const *target) const
Definition: Object.cpp:826
virtual std::string GetNameForLocaleIdx(LocaleConstant locale) const =0
void RemoveUpdateFieldFlagValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
Definition: Object.h:340
TypeID GetTypeId() const
Definition: Object.h:209
virtual bool AddToObjectUpdate()=0
void SetUpdateFieldFlagValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
Definition: Object.h:333
virtual void ClearUpdateMask(bool remove)
Definition: Object.cpp:837
void SetUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
Definition: Object.h:326
virtual void BuildValuesUpdate(ByteBuffer *data, UF::UpdateFieldFlag flags, Player const *target) const =0
virtual std::string GetDebugInfo() const
Definition: Object.cpp:857
virtual void BuildUpdate(UpdateDataMapType &)
Definition: Object.h:233
virtual void RemoveFromObjectUpdate()=0
virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const *target) const
Definition: Object.cpp:821
Utility class to enable range for loop syntax for multimap.equal_range uses.
Definition: IteratorPair.h:32
Definition: Unit.h:630
void apply(T *val)
Definition: ByteConverter.h:41
UpdateFieldFlag
Definition: UpdateField.h:34
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
Definition: Vignette.cpp:81
std::vector< ArtifactPowerData > ArtifactPowers
Definition: Item.h:127
uint32 ArtifactTierId
Definition: Item.h:126
uint64 Xp
Definition: Item.h:124
uint32 ArtifactAppearanceId
Definition: Item.h:125
uint32 ArtifactPowerId
Definition: Item.h:117
uint8 CurrentRankWithBonus
Definition: Item.h:119
uint8 PurchasedRank
Definition: Item.h:118
std::array< int32, MAX_AZERITE_EMPOWERED_TIER > SelectedAzeritePowers
Definition: Item.h:148
uint32 KnowledgeLevel
Definition: Item.h:140
uint32 Level
Definition: Item.h:139
std::vector< uint32 > AzeriteItemMilestonePowers
Definition: Item.h:141
std::array< AzeriteItemSelectedEssencesData, 4 > SelectedAzeriteEssences
Definition: Item.h:143
std::vector< AzeriteEssencePowerEntry const * > UnlockedAzeriteEssences
Definition: Item.h:142
uint64 Xp
Definition: Item.h:138
std::array< uint32, MAX_AZERITE_ESSENCE_SLOT > AzeriteEssenceId
Definition: Item.h:133
Definition: Item.h:69
int32 RequiredLevel
Definition: Item.h:72
int32 RequiredLevelOverride
Definition: Item.h:87
bool CanScrap
Definition: Item.h:94
int32 ScalingStatDistributionPriority
Definition: Item.h:108
std::array< ItemEffectEntry const *, 13 > Effects
Definition: Item.h:91
int32 DisenchantLootPriority
Definition: Item.h:107
void AddBonus(uint32 type, std::array< int32, 4 > const &values)
Definition: Item.cpp:2890
std::size_t EffectCount
Definition: Item.h:92
int32 AppearanceModPriority
Definition: Item.h:106
uint32 DisenchantLootId
Definition: Item.h:82
int32 ItemStatType[MAX_ITEM_PROTO_STATS]
Definition: Item.h:73
bool CanDisenchant
Definition: Item.h:93
int32 RelicType
Definition: Item.h:86
uint16 GemRelicRankBonus[MAX_ITEM_PROTO_SOCKETS]
Definition: Item.h:85
uint32 PlayerLevelToItemLevelCurveId
Definition: Item.h:81
ItemBondingType Bonding
Definition: Item.h:77
float RepairCostMultiplier
Definition: Item.h:79
int32 RequiredLevelCurvePriority
Definition: Item.h:110
uint32 Quality
Definition: Item.h:70
int32 GemRelicType[MAX_ITEM_PROTO_SOCKETS]
Definition: Item.h:84
uint32 AppearanceModID
Definition: Item.h:78
int32 ItemLevelBonus
Definition: Item.h:71
int32 StatPercentEditor[MAX_ITEM_PROTO_STATS]
Definition: Item.h:74
uint32 Suffix
Definition: Item.h:89
bool HasFixedLevel
Definition: Item.h:95
void AddBonusList(uint32 bonusListId)
Definition: Item.cpp:2884
uint32 GemItemLevelBonus[MAX_ITEM_PROTO_SOCKETS]
Definition: Item.h:83
int32 SuffixPriority
Definition: Item.h:105
struct BonusData::@269 _state
int32 AzeriteTierUnlockSetId
Definition: Item.h:88
bool HasQualityBonus
Definition: Item.h:111
float ItemStatSocketCostMultiplier[MAX_ITEM_PROTO_STATS]
Definition: Item.h:75
uint32 ContentTuningId
Definition: Item.h:80
void Initialize(ItemTemplate const *proto)
Definition: Item.cpp:2815
int32 AzeriteTierUnlockSetPriority
Definition: Item.h:109
int32 RequiredLevelCurve
Definition: Item.h:90
Optional< ArtifactData > Artifact
Definition: Item.h:156
Optional< AzeriteEmpoweredItemData > AzeriteEmpoweredItem
Definition: Item.h:158
static void Init(std::unordered_map< ObjectGuid::LowType, ItemAdditionalLoadInfo > *loadInfo, PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult, PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult)
Definition: Item.cpp:310
Optional< AzeriteItemData > AzeriteItem
Definition: Item.h:157
uint16 BonusListIDs[16]
Definition: Item.h:164
std::unordered_set< ItemSetSpellEntry const * > SetBonuses
Definition: Item.h:45
std::unordered_set< Item const * > EquippedItems
Definition: Item.h:44
uint32 ItemSetID
Definition: Item.h:43
UF::ObjectData::Base ObjectMask
Definition: Item.h:395
ValuesUpdateForPlayerWithMaskSender(Item const *owner)
Definition: Item.h:392
Definition: Loot.h:286
UpdateField< ObjectGuid, 0, 6 > GiftCreator
Definition: UpdateFields.h:126
UpdateFieldArray< UF::ItemEnchantment, 13, 27, 28 > Enchantment
Definition: UpdateFields.h:142
UpdateField< ObjectGuid, 0, 5 > Creator
Definition: UpdateFields.h:125
UpdateField< uint32, 0, 10 > Durability
Definition: UpdateFields.h:130
UpdateField< uint32, 0, 11 > MaxDurability
Definition: UpdateFields.h:131
UpdateField< uint32, 0, 9 > DynamicFlags
Definition: UpdateFields.h:129
UpdateFieldArray< int32, 5, 21, 22 > SpellCharges
Definition: UpdateFields.h:141
UpdateField< int64, 0, 14 > CreateTime
Definition: UpdateFields.h:134
UpdateField< uint8, 0, 16 > ItemAppearanceModID
Definition: UpdateFields.h:136
UpdateField< uint64, 0, 15 > ArtifactXP
Definition: UpdateFields.h:135
UpdateField< ObjectGuid, 0, 3 > Owner
Definition: UpdateFields.h:123
UpdateField< uint32, 0, 8 > Expiration
Definition: UpdateFields.h:128
UpdateField< ObjectGuid, 0, 4 > ContainedIn
Definition: UpdateFields.h:124
UpdateField< uint8, 0, 13 > Context
Definition: UpdateFields.h:133
UpdateField< uint32, 0, 12 > CreatePlayedTime
Definition: UpdateFields.h:132
UpdateField< uint32, 0, 18 > ZoneFlags
Definition: UpdateFields.h:138
UpdateField< int32, 0, 1 > ID
Definition: UpdateFields.h:66
UpdateField< uint32, 0, 2 > Duration
Definition: UpdateFields.h:67