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