38 TC_LOG_DEBUG(
"network",
"HandleSplitItemOpcode: receive FromPackSlot: {}, FromSlot: {}, ToPackSlot: {}, ToSlot: {}, Quantity: {}",
68 TC_LOG_DEBUG(
"network",
"HandleSwapInvItemOpcode: receive Slot1: {}, Slot2: {}",
109 recvData >> itemguid >> dstslot;
118 if (!item || item->
GetPos() == dstpos)
126 TC_LOG_DEBUG(
"network",
"HandleSwapItem: receive ContainerSlotA: {}, SlotA: {}, ContainerSlotB: {}, SlotB: {}",
165 TC_LOG_DEBUG(
"network",
"HandleAutoEquipItemOpcode: receive PackSlot: {}, Slot: {}",
261 TC_LOG_DEBUG(
"network",
"HandleDestroyItemOpcode: receive ContainerId: {}, SlotNum: {}, Count: {}",
290 if (destroyItem.
Count)
313 TC_LOG_DEBUG(
"network",
"WORLD: CMSG_ITEM_QUERY_SINGLE - NO item INFO! (ENTRY: {})", query.
ItemID);
323 recvData >> bag >> slot;
340 TC_LOG_INFO(
"network",
"STORAGE: Unable to read item");
352 TC_LOG_DEBUG(
"network",
"WORLD: Received CMSG_SELL_ITEM: Vendor %s, Item %s, Amount: %u",
438 TC_LOG_ERROR(
"network",
"WORLD: HandleSellItemOpcode - could not create clone of item {}; count = {}", pItem->
GetEntry(), packet.
Amount);
518 TC_LOG_DEBUG(
"network",
"WORLD: Received CMSG_BUY_ITEM_IN_SLOT");
523 recvData >> vendorguid >> item >> slot >> bagguid >> bagslot >> count;
535 bag = bagItem->GetSlot();
544 TC_LOG_DEBUG(
"network",
"WORLD: Received CMSG_BUY_ITEM");
549 recvData >> vendorguid >> item >> slot >> count >> unk1;
562 TC_LOG_DEBUG(
"network",
"WORLD: Recvd CMSG_LIST_INVENTORY");
575 TC_LOG_DEBUG(
"network",
"WORLD: SendListInventory - {} not found or you can not interact with him.", vendorGuid.
ToString());
595 packet.
Items.resize(rawItemCount);
599 for (
uint32 slot = 0; slot < rawItemCount; ++slot)
625 if (leftInStock == 0)
631 TC_LOG_DEBUG(
"condition",
"SendListInventory: conditions not met for creature entry {} item {}", vendor->
GetEntry(), vendorItem->
item);
638 item.
MuID = slot + 1;
652 packet.
Items.resize(count);
654 if (packet.
Items.empty())
662 TC_LOG_DEBUG(
"network",
"HandleAutoStoreBagItemOpcode: receive ContainerSlotA: {}, SlotA: {}, ContainerSlotB: {}",
697 if (dest.size() == 1 && dest[0].pos == src)
741 data <<
uint32(enchantId);
762 TC_LOG_DEBUG(
"network",
"WORLD: CMSG_ITEM_NAME_QUERY {}", itemid);
766 std::string Name = pName->
name;
782 TC_LOG_DEBUG(
"network",
"Received opcode CMSG_WRAP_ITEM");
784 uint8 gift_bag, gift_slot, item_bag, item_slot;
786 recvData >> gift_bag >> gift_slot;
787 recvData >> item_bag >> item_slot;
789 TC_LOG_DEBUG(
"network",
"WRAP: receive gift_bag = {}, gift_slot = {}, item_bag = {}, item_slot = {}", gift_bag, gift_slot, item_bag, item_slot);
868 case 5042: item->
SetEntry(5043);
break;
869 case 5048: item->
SetEntry(5044);
break;
870 case 17303: item->
SetEntry(17302);
break;
871 case 17304: item->
SetEntry(17305);
break;
872 case 17307: item->
SetEntry(17308);
break;
873 case 21830: item->
SetEntry(21831);
break;
898 recvData >> item_guid;
903 recvData >> gem_guids[i];
906 if ((!gem_guids[0].IsEmpty() && (gem_guids[0] == gem_guids[1] || gem_guids[0] == gem_guids[2])) ||
907 (!gem_guids[1].IsEmpty() && (gem_guids[1] == gem_guids[2])))
927 GemProps[i] = (Gems[i]) ?
sGemPropertiesStore.LookupEntry(Gems[i]->GetTemplate()->GetGemProperties()) :
nullptr;
930 int32 firstPrismatic = 0;
931 while (firstPrismatic < MAX_GEM_SOCKETS && itemProto->GetSocketColor(firstPrismatic))
946 if (i != firstPrismatic)
963 GemEnchants[i] = (GemProps[i]) ? GemProps[i]->EnchantID : 0;
992 else if (OldEnchants[j])
996 if (iGemProto->
GetId() == enchantEntry->SrcItemID)
1007 int32 limit_newcount = 0;
1021 else if (OldEnchants[j])
1031 if (limit_newcount > 0 &&
uint32(limit_newcount) > limitEntry->Quantity)
1074 if (SocketBonusActivated ^ SocketBonusToBeActivated)
1092 TC_LOG_DEBUG(
"network",
"WORLD: CMSG_CANCEL_TEMP_ENCHANTMENT");
1137 TC_LOG_DEBUG(
"network",
"Item refund: item not found!");
1156 recvData >> itemGuid;
1166 data << item->GetText();
@ CREATURE_FLAG_EXTRA_NO_SELL_VENDOR
@ ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_VENDORS
DBCStorage< SpellItemEnchantmentEntry > sSpellItemEnchantmentStore(SpellItemEnchantmentfmt)
DBCStorage< ItemLimitCategoryEntry > sItemLimitCategoryStore(ItemLimitCategoryEntryfmt)
DBCStorage< GemPropertiesEntry > sGemPropertiesStore(GemPropertiesEntryfmt)
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
@ PRISMATIC_ENCHANTMENT_SLOT
@ EQUIP_ERR_TOO_MUCH_GOLD
@ 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
@ SELL_ERR_CANT_FIND_VENDOR
@ SELL_ERR_CANT_SELL_TO_THIS_MERCHANT
@ SELL_ERR_CANT_FIND_ITEM
@ SELL_ERR_CANT_SELL_ITEM
@ ITEM_FLAG2_FACTION_HORDE
@ ITEM_FLAG2_FACTION_ALLIANCE
@ ITEM_FIELD_FLAG_WRAPPED
@ ITEM_FLAG_NO_USER_DESTROY
@ ITEM_FLAG_UNIQUE_EQUIPPABLE
void RemoveItemFromUpdateQueueOf(Item *item, Player *player)
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
uint32 const MAX_MONEY_AMOUNT
std::vector< ItemPosCount > ItemPosCountVec
#define INVENTORY_SLOT_BAG_0
@ PLAYER_FIELD_BUYBACK_PRICE_1
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
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)
uint32 GetEnchantmentId(EnchantmentSlot slot) const
Item * CloneItem(uint32 count, Player const *player=nullptr) const
void SetCount(uint32 value)
ItemTemplate const * GetTemplate() const
ItemUpdateState GetState() const
ObjectGuid GetOwnerGUID() const
bool IsRefundable() const
bool GemsFitSockets() const
uint32 GetSellPrice(bool forVendor=false) const
void ClearEnchantment(EnchantmentSlot slot)
void ClearSoulboundTradeable(Player *currentOwner)
bool IsNotEmptyBag() const
uint32 GetMaxStackCount() const
void SetGiftCreator(ObjectGuid guid)
void SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges, ObjectGuid caster=ObjectGuid::Empty)
LowType GetCounter() const
static ObjectGuid const Empty
PackedGuidWriter WriteAsPacked() const
std::string ToString() const
static std::string_view GetLocaleString(std::vector< std::string > const &data, LocaleConstant locale)
uint32 GetUInt32Value(uint16 index) const
static ObjectGuid GetGUID(Object const *o)
void SetEntry(uint32 entry)
void SendUpdateToPlayer(Player *player)
ObjectGuid GetGuidValue(uint16 index) const
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)
InventoryResult CanEquipItem(uint8 slot, uint16 &dest, Item *pItem, bool swap, bool not_loading=true) 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 CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *pItem, bool swap=false) const
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, WorldObject *ref=nullptr)
bool ModifyMoney(int32 amount, bool sendError=true)
void RemoveItemFromBuyBackSlot(uint32 slot, bool del)
float GetReputationPriceDiscount(Creature const *creature) const
void ApplyEnchantment(Item *item, EnchantmentSlot slot, bool apply, bool apply_dur=true, bool ignore_condition=false)
void AddItemToBuyBackSlot(Item *pItem)
uint32 GetItemCount(uint32 item, bool inBankAlso=false, Item *skipItem=nullptr) const
void SwapItem(uint16 src, uint16 dst)
void ApplyItemDependentAuras(Item *item, bool apply)
void SendSellError(SellResult msg, Creature *creature, ObjectGuid guid, uint32 param) const
void RemoveTradeableItem(Item *item)
Item * StoreItem(ItemPosCountVec const &pos, Item *pItem, bool update)
Item * GetItemByPos(uint16 pos) const
ObjectGuid GetLootGUID() const
void SetAmmo(uint32 item)
bool HasEnoughMoney(uint32 amount) const
void DestroyItem(uint8 bag, uint8 slot, bool update)
static bool IsInventoryPos(uint16 pos)
uint32 DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
Creature * GetNPCIfCanInteractWith(ObjectGuid const &guid, NPCFlags npcFlags) const
void SendBuyError(BuyResult msg, Creature *creature, uint32 item, uint32 param) const
void SendRefundInfo(Item *item)
void AutoUnequipOffhandIfNeed(bool force=false)
bool IsGameMaster() const
Item * EquipItem(uint16 pos, Item *pItem, bool update)
static bool IsBagPos(uint16 pos)
Item * GetItemFromBuyBackSlot(uint32 slot)
InventoryResult CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *pItem, bool swap, bool not_loading=true) const
void ItemAddedQuestCheck(uint32 entry, 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
bool BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uint32 item, uint32 count, uint8 bag, uint8 slot)
InventoryResult CanUseItem(Item *pItem, bool not_loading=true) const
void setUInt32(uint8 index, uint32 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)
void Initialize(uint16 opcode, size_t newres=200)
WorldPacket const * Write() override
std::vector< VendorItem > Items
WorldPacket const * Write() override
void HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem &autoEquipItem)
void HandleSplitItemOpcode(WorldPackets::Item::SplitItem &splitItem)
void HandleBuybackItem(WorldPackets::Item::BuyBackItem &packet)
void HandleSocketOpcode(WorldPacket &recvData)
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
void HandleGetItemPurchaseData(WorldPackets::Item::GetItemPurchaseData &packet)
void HandleItemNameQueryOpcode(WorldPacket &recvPacket)
void HandleItemQuerySingleOpcode(WorldPackets::Query::QueryItemSingle &query)
LocaleConstant GetSessionDbLocaleIndex() const
void HandleWrapItemOpcode(WorldPacket &recvPacket)
void HandleItemRefund(WorldPacket &recvData)
void HandleAutoStoreBagItemOpcode(WorldPackets::Item::AutoStoreBagItem &packet)
Player * GetPlayer() const
void HandleAutoEquipItemSlotOpcode(WorldPacket &recvPacket)
ObjectGuid m_currentBankerGUID
void SendItemEnchantTimeUpdate(ObjectGuid Playerguid, ObjectGuid Itemguid, uint32 slot, uint32 Duration)
void HandleSetAmmoOpcode(WorldPacket &recvPacket)
void HandleReadItem(WorldPacket &recvPacket)
void HandleSwapInvItemOpcode(WorldPackets::Item::SwapInvItem &swapInvItem)
void HandleBuyItemOpcode(WorldPacket &recvPacket)
void HandleDestroyItemOpcode(WorldPackets::Item::DestroyItem &destroyItem)
void SendEnchantmentLog(ObjectGuid target, ObjectGuid caster, uint32 itemId, uint32 enchantId)
void HandleSellItemOpcode(WorldPackets::Item::SellItem &packet)
void SendListInventory(ObjectGuid guid)
void HandleSwapItem(WorldPackets::Item::SwapItem &swapItem)
bool CanUseBank(ObjectGuid bankerGUID=ObjectGuid::Empty) const
void HandleBuyItemInSlotOpcode(WorldPacket &recvPacket)
void HandleCancelTempEnchantmentOpcode(WorldPacket &recvData)
void HandleItemTextQuery(WorldPacket &recvData)
void HandleListInventoryOpcode(WorldPackets::NPC::Hello &packet)
@ SMSG_ITEM_NAME_QUERY_RESPONSE
@ SMSG_ITEM_TEXT_QUERY_RESPONSE
@ SMSG_ITEM_ENCHANT_TIME_UPDATE
@ CONFIG_CACHE_DATA_QUERIES
uint32 GetInteractionPauseTimer() const
uint32 GetBuyCount() const
int32 GetAllowableClass() const
uint32 GetPageText() const
SocketColor GetSocketColor(uint32 index) const
int32 GetMaxCount() const
uint32 GetBuyPrice() const
ItemBondingType GetBonding() const
uint32 GetDisplayId() const
uint32 GetItemLimitCategory() const
bool HasFlag(ItemFlags flag) const
uint32 GetSocketBonus() const
void GetPosition(float &x, float &y) const
uint32 GetItemCount() const
VendorItem const * GetItem(uint32 slot) const
bool IsGoldRequired(ItemTemplate const *pProto) const