37 TC_LOG_ERROR(
"network",
"HandleSplitItemOpcode - Invalid ItemCount ({})", splitItem.
Inv.
Items.size());
41 TC_LOG_DEBUG(
"network",
"HandleSplitItemOpcode: receive FromPackSlot: {}, FromSlot: {}, ToPackSlot: {}, ToSlot: {}, Quantity: {}",
71 if (swapInvItem.
Inv.
Items.size() != 2)
73 TC_LOG_ERROR(
"network",
"HandleSwapInvItemOpcode - Invalid itemCount ({})", swapInvItem.
Inv.
Items.size());
77 TC_LOG_DEBUG(
"network",
"HandleSwapInvItemOpcode: receive Slot1: {}, Slot2: {}",
98 TC_LOG_DEBUG(
"network",
"HandleSwapInvItemOpcode - Unit ({}) not found or you can't interact with him.",
_player->
PlayerTalkClass->GetInteractionData().SourceGuid.ToString());
104 TC_LOG_DEBUG(
"network",
"HandleSwapInvItemOpcode - Unit ({}) not found or you can't interact with him.",
_player->
PlayerTalkClass->GetInteractionData().SourceGuid.ToString());
124 if (!item || item->
GetPos() != srcPos || srcPos == dstPos)
138 TC_LOG_DEBUG(
"network",
"HandleSwapItem: receive ContainerSlotA: {}, SlotA: {}, ContainerSlotB: {}, SlotB: {}",
162 TC_LOG_DEBUG(
"network",
"HandleSwapItem - Unit ({}) not found or you can't interact with him.",
_player->
PlayerTalkClass->GetInteractionData().SourceGuid.ToString());
168 TC_LOG_DEBUG(
"network",
"HandleSwapItem - Unit ({}) not found or you can't interact with him.",
_player->
PlayerTalkClass->GetInteractionData().SourceGuid.ToString());
177 if (autoEquipItem.
Inv.
Items.size() != 1)
179 TC_LOG_ERROR(
"network",
"HandleAutoEquipItemOpcode - Invalid itemCount ({})", autoEquipItem.
Inv.
Items.size());
183 TC_LOG_DEBUG(
"network",
"HandleAutoEquipItemOpcode: receive PackSlot: {}, Slot: {}",
315 TC_LOG_DEBUG(
"network",
"HandleDestroyItemOpcode: receive ContainerId: {}, SlotNum: {}, Count: {}",
344 if (destroyItem.
Count)
376 TC_LOG_INFO(
"network",
"STORAGE: Unable to read item");
386 TC_LOG_DEBUG(
"network",
"WORLD: Received CMSG_SELL_ITEM: Vendor {}, Item {}, Amount: {}",
474 TC_LOG_ERROR(
"network",
"WORLD: HandleSellItemOpcode - could not create clone of item {}; count = {}", pItem->
GetEntry(), packet.
Amount);
564 if (bagItem && bagItem->
IsBag())
580 TC_LOG_DEBUG(
"network",
"WORLD: received wrong itemType ({}) in HandleBuyItemOpcode", packet.
ItemType);
599 TC_LOG_DEBUG(
"network",
"WORLD: SendListInventory - {} not found or you can not interact with him.", vendorGuid.
ToString());
619 packet.
Items.resize(rawItemCount);
623 for (
uint32 slot = 0; slot < rawItemCount; ++slot)
654 if (leftInStock == 0)
660 TC_LOG_DEBUG(
"condition",
"SendListInventory: conditions not met for creature entry {} item {}", vendor->
GetEntry(), vendorItem->
item);
670 item.
MuID = slot + 1;
690 if (!currencyTemplate)
696 item.
MuID = slot + 1;
711 packet.
Items.resize(count);
722 TC_LOG_ERROR(
"network",
"HandleAutoStoreBagItemOpcode - Invalid itemCount ({})", packet.
Inv.
Items.size());
726 TC_LOG_DEBUG(
"network",
"HandleAutoStoreBagItemOpcode: receive ContainerSlotA: {}, SlotA: {}, ContainerSlotB: {}",
761 if (dest.size() == 1 && dest[0].pos == src)
775 enchantmentLog.
Owner = owner;
776 enchantmentLog.
Caster = caster;
778 enchantmentLog.
ItemID = itemId;
810 TC_LOG_DEBUG(
"network",
"HandleWrapItem - Receive giftContainerSlot = {}, giftSlot = {}, itemContainerSlot = {}, itemSlot = {}", giftContainerSlot, giftSlot, itemContainerSlot, itemSlot);
946 memset(gems, 0,
sizeof(gems));
948 memset(gemData, 0,
sizeof(gemData));
950 memset(gemProperties, 0,
sizeof(gemProperties));
952 memset(oldGemData, 0,
sizeof(oldGemData));
958 gemData[i].
ItemId = gem->GetEntry();
959 gemData[i].
Context = gem->m_itemData->Context;
960 for (std::size_t b = 0; b < gem->GetBonusListIDs().
size() && b < 16; ++b)
961 gemData[i].BonusListIDs[b] = gem->GetBonusListIDs()[b];
963 gemProperties[i] =
sGemPropertiesStore.LookupEntry(gem->GetTemplate()->GetGemProperties());
966 oldGemData[i] = itemTarget->
GetGem(i);
970 uint32 firstPrismatic = 0;
971 while (firstPrismatic < MAX_GEM_SOCKETS && itemTarget->GetSocketColor(firstPrismatic))
976 if (!gemProperties[i])
986 if (i != firstPrismatic)
1024 else if (oldGemData[j])
1036 int32 limit_newcount = 0;
1050 else if (oldGemData[j])
1093 gemScalingLevel = fixedLevel;
1095 itemTarget->
SetGem(i, &gemData[i], gemScalingLevel);
1097 if (gemProperties[i] && gemProperties[i]->EnchantId)
1110 if (childItem->IsEquipped())
1112 childItem->CopyArtifactDataFromParent(itemTarget);
1113 if (childItem->IsEquipped())
1118 if (SocketBonusActivated ^ SocketBonusToBeActivated)
1190 if (!isUsingBankCommand)
@ CREATURE_FLAG_EXTRA_NO_SELL_VENDOR
DB2Storage< ItemLimitCategoryEntry > sItemLimitCategoryStore("ItemLimitCategory.db2", &ItemLimitCategoryLoadInfo::Instance)
DB2Storage< CurrencyTypesEntry > sCurrencyTypesStore("CurrencyTypes.db2", &CurrencyTypesLoadInfo::Instance)
DB2Storage< GemPropertiesEntry > sGemPropertiesStore("GemProperties.db2", &GemPropertiesLoadInfo::Instance)
DB2Storage< PlayerConditionEntry > sPlayerConditionStore("PlayerCondition.db2", &PlayerConditionLoadInfo::Instance)
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
@ PRISMATIC_ENCHANTMENT_SLOT
@ EQUIP_ERR_CANT_WRAP_BAGS
@ EQUIP_ERR_DROP_BOUND_ITEM
@ EQUIP_ERR_ITEM_NOT_FOUND
@ EQUIP_ERR_CANT_WRAP_BOUND
@ EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED
@ EQUIP_ERR_INTERNAL_BAG_ERROR
@ EQUIP_ERR_CANT_WRAP_EQUIPPED
@ EQUIP_ERR_CANT_WRAP_STACKABLE
@ EQUIP_ERR_CANT_WRAP_WRAPPED
@ EQUIP_ERR_CANT_WRAP_UNIQUE
@ BUY_ERR_NOT_ENOUGHT_MONEY
@ ITEM_MODIFIER_TIMEWALKER_LEVEL
@ SELL_ERR_CANT_FIND_VENDOR
@ SELL_ERR_CANT_SELL_TO_THIS_MERCHANT
@ SELL_ERR_CANT_FIND_ITEM
@ SELL_ERR_CANT_SELL_ITEM
@ ITEM_VENDOR_TYPE_CURRENCY
int32 const SocketColorToGemTypeMask[26]
@ ITEM_FLAG2_FACTION_HORDE
@ ITEM_FLAG2_FACTION_ALLIANCE
@ ITEM_FIELD_FLAG_NEW_ITEM
@ ITEM_FIELD_FLAG_WRAPPED
@ ITEM_SPELLTRIGGER_ON_LEARN
@ ITEM_FLAG_NO_USER_DESTROY
@ ITEM_FLAG_UNIQUE_EQUIPPABLE
@ ITEM_FLAG_ITEM_PURCHASE_RECORD
void RemoveItemFromUpdateQueueOf(Item *item, Player *player)
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
std::vector< ItemPosCount > ItemPosCountVec
#define INVENTORY_SLOT_BAG_0
if(posix_memalign(&__mallocedMemory, __align, __size)) return NULL
@ SPELL_AURA_MOD_VENDOR_ITEMS_PRICES
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
T CalculatePct(T base, U pct)
static uint16 RollPetBreed(uint32 species)
static uint32 SelectPetDisplay(BattlePetSpeciesEntry const *speciesEntry)
static BattlePetSpeciesEntry const * GetBattlePetSpeciesBySpell(uint32 spellId)
void AddPet(uint32 species, uint32 display, uint16 breed, BattlePetBreedQuality quality, uint16 level=1)
static BattlePetBreedQuality GetDefaultPetQuality(uint32 species)
static bool IsPlayerMeetingCondition(Player const *player, PlayerConditionEntry const *condition)
void SetHomePosition(float x, float y, float z, float o)
VendorItemData const * GetVendorItems() const
CreatureTemplate const * GetCreatureTemplate() const
uint32 GetVendorItemCurrentCount(VendorItem const *vItem)
CreatureMovementData const & GetMovementTemplate() const
void SetState(ItemUpdateState state, Player *forplayer=nullptr)
virtual void SaveToDB(CharacterDatabaseTransaction trans)
void ReplaceAllItemFlags(ItemFieldFlags flags)
void RemoveItemFlag(ItemFieldFlags flags)
Trinity::IteratorPair< ItemEffectEntry const *const * > GetEffects() const
uint32 GetEnchantmentId(EnchantmentSlot slot) const
Item * CloneItem(uint32 count, Player const *player=nullptr) const
UF::SocketedGem const * GetGem(uint16 slot) const
void SetCount(uint32 value)
ObjectGuid GetCreator() const
ItemTemplate const * GetTemplate() const
void SetGem(uint16 slot, ItemDynamicFieldGems const *gem, uint32 gemScalingLevel)
ItemUpdateState GetState() const
bool HasItemFlag(ItemFieldFlags flag) const
SocketColor GetSocketColor(uint32 index) const
ObjectGuid GetOwnerGUID() const
bool IsRefundable() const
bool GemsFitSockets() const
ObjectGuid GetGiftCreator() const
void ClearEnchantment(EnchantmentSlot slot)
void ClearSoulboundTradeable(Player *currentOwner)
bool IsNotEmptyBag() const
ObjectGuid GetChildItem() const
uint32 GetMaxStackCount() const
void SetGiftCreator(ObjectGuid guid)
void SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges, ObjectGuid caster=ObjectGuid::Empty)
UF::UpdateField< UF::ItemData, 0, TYPEID_ITEM > m_itemData
LowType GetCounter() const
static ObjectGuid const Empty
std::string ToString() const
static ObjectGuid GetGUID(Object const *o)
void SetEntry(uint32 entry)
void SendUpdateToPlayer(Player *player)
bool IsValidPos(uint16 pos, bool explicit_pos) const
void SendEquipError(InventoryResult msg, Item const *item1=nullptr, Item const *item2=nullptr, uint32 itemId=0) const
void ItemRemovedQuestCheck(uint32 entry, uint32 count)
static bool IsEquipmentPos(uint16 pos)
InventoryResult CanUnequipItem(uint16 src, bool swap) const
void ToggleMetaGemsActive(uint8 exceptslot, bool apply)
bool ModifyMoney(int64 amount, bool sendError=true)
void AutoUnequipChildItem(Item *parentItem)
InventoryResult CanEquipItem(uint8 slot, uint16 &dest, Item *pItem, bool swap, bool not_loading=true) const
Creature * GetNPCIfCanInteractWith(ObjectGuid const &guid, NPCFlags npcFlags, NPCFlags2 npcFlags2) const
Item * BankItem(ItemPosCountVec const &dest, Item *pItem, bool update)
void SplitItem(uint16 src, uint16 dst, uint32 count)
InventoryResult CanEquipUniqueItem(Item *pItem, uint8 except_slot=NULL_SLOT, uint32 limit_count=1) const
InventoryResult CanEquipChildItem(Item *parentItem) const
Item * GetChildItemByGuid(ObjectGuid guid) const
InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *pItem, bool swap=false) const
void _ApplyItemMods(Item *item, uint8 slot, bool apply, bool updateItemAuras=true)
uint8 GetItemLimitCategoryQuantity(ItemLimitCategoryEntry const *limitEntry) const
void RemoveItemFromBuyBackSlot(uint32 slot, bool del)
float GetReputationPriceDiscount(Creature const *creature) const
ObjectGuid const & GetLootGUID() const
void ApplyEnchantment(Item *item, EnchantmentSlot slot, bool apply, bool apply_dur=true, bool ignore_condition=false)
InventoryResult CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *pItem, bool swap, bool not_loading=true, bool reagentBankOnly=false) const
void AddItemToBuyBackSlot(Item *pItem)
void SendSellError(SellResult msg, Creature *creature, ObjectGuid guid) const
void SwapItem(uint16 src, uint16 dst)
bool BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot)
void ApplyItemDependentAuras(Item *item, bool apply)
void RemoveTradeableItem(Item *item)
Item * StoreItem(ItemPosCountVec const &pos, Item *pItem, bool update)
void EquipChildItem(uint8 parentBag, uint8 parentSlot, Item *parentItem)
Item * GetItemByPos(uint16 pos) const
void DestroyItem(uint8 bag, uint8 slot, bool update)
static bool IsInventoryPos(uint16 pos)
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject *ref=nullptr)
uint32 DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
void SendBuyError(BuyResult msg, Creature *creature, uint32 item, uint32 param) const
void SendRefundInfo(Item *item)
void AutoUnequipOffhandIfNeed(bool force=false)
void ItemAddedQuestCheck(uint32 entry, uint32 count, Optional< bool > boundItemFlagRequirement={}, bool *hadBoundItemObjective=nullptr)
bool IsGameMaster() const
Item * EquipItem(uint16 pos, Item *pItem, bool update)
static bool IsBagPos(uint16 pos)
Item * GetItemFromBuyBackSlot(uint32 slot)
UF::UpdateField< UF::ActivePlayerData, 0, TYPEID_ACTIVE_PLAYER > m_activePlayerData
bool BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot, uint32 currency, uint32 count)
static bool IsBankPos(uint16 pos)
void RemoveItem(uint8 bag, uint8 slot, bool update)
void RefundItem(Item *item)
void SendMessageToSet(WorldPacket const *data, bool self) const override
Item * GetItemByGuid(ObjectGuid guid) const
std::unique_ptr< PlayerMenu > PlayerTalkClass
bool HasEnoughMoney(uint64 amount) const
InventoryResult CanUseItem(Item *pItem, bool not_loading=true) const
void setUInt32(const uint8 index, const uint32 value)
void setUInt64(const uint8 index, const uint64 value)
void RemoveAurasByType(AuraType auraType, std::function< bool(AuraApplication const *)> const &check, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
uint32 GetClassMask() const
void PauseMovement(uint32 timer=0, uint8 slot=0, bool forced=true)
int32 GetTotalAuraModifier(AuraType auraType) const
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::array< ObjectGuid, MAX_ITEM_PROTO_SOCKETS > GemItem
WorldPacket const * Write() override
std::vector< VendorItem > Items
void HandleReadItem(WorldPackets::Item::ReadItem &readItem)
void HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem &autoEquipItem)
void HandleSplitItemOpcode(WorldPackets::Item::SplitItem &splitItem)
void HandleCancelTempEnchantmentOpcode(WorldPackets::Item::CancelTempEnchantment &cancelTempEnchantment)
void HandleBuybackItem(WorldPackets::Item::BuyBackItem &packet)
void HandleGetItemPurchaseData(WorldPackets::Item::GetItemPurchaseData &packet)
void HandleSortBags(WorldPackets::Item::SortBags &sortBags)
std::string GetPlayerInfo() const
void HandleAutoStoreBagItemOpcode(WorldPackets::Item::AutoStoreBagItem &packet)
Player * GetPlayer() const
void HandleSortBankBags(WorldPackets::Item::SortBankBags &sortBankBags)
void HandleUseCritterItem(WorldPackets::Item::UseCritterItem &packet)
void SendItemEnchantTimeUpdate(ObjectGuid Playerguid, ObjectGuid Itemguid, uint32 slot, uint32 Duration)
void HandleSwapInvItemOpcode(WorldPackets::Item::SwapInvItem &swapInvItem)
void HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem &removeNewItem)
void HandleSocketGems(WorldPackets::Item::SocketGems &socketGems)
void HandleDestroyItemOpcode(WorldPackets::Item::DestroyItem &destroyItem)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleSellItemOpcode(WorldPackets::Item::SellItem &packet)
void SendListInventory(ObjectGuid guid)
void HandleSwapItem(WorldPackets::Item::SwapItem &swapItem)
void HandleWrapItem(WorldPackets::Item::WrapItem &packet)
void HandleSortReagentBankBags(WorldPackets::Item::SortReagentBankBags &sortReagentBankBags)
bool CanUseBank(ObjectGuid bankerGUID=ObjectGuid::Empty) const
void HandleAutoEquipItemSlotOpcode(WorldPackets::Item::AutoEquipItemSlot &autoEquipItemSlot)
void HandleListInventoryOpcode(WorldPackets::NPC::Hello &packet)
void HandleBuyItemOpcode(WorldPackets::Item::BuyItem &packet)
void HandleItemRefund(WorldPackets::Item::ItemPurchaseRefund &packet)
BattlePets::BattlePetMgr * GetBattlePetMgr() const
void SendEnchantmentLog(ObjectGuid owner, ObjectGuid caster, ObjectGuid itemGuid, uint32 itemId, uint32 enchantId, uint32 enchantSlot)
constexpr std::size_t size()
uint32 GetInteractionPauseTimer() const
uint32 GetBuyCount() const
int32 GetAllowableClass() const
uint32 GetPageText() const
uint32 GetMaxStackSize() const
uint32 GetBuyPrice() const
ItemBondingType GetBonding() const
uint32 GetItemLimitCategory() const
bool HasFlag(ItemFlags flag) const
uint32 GetSellPrice() const
uint32 GetSocketBonus() const
uint32 GetMaxCount() const
constexpr void GetPosition(float &x, float &y) const
UpdateField< int32, 0, 1 > ItemID
uint32 GetItemCount() const
VendorItem const * GetItem(uint32 slot) const
std::vector< int32 > BonusListIDs
std::vector< InvItem > Items
Optional< ItemBonuses > ItemBonus
WorldPackets::Item::ItemInstance Item
int32 PlayerConditionFailed