41 if (item->IsInWorld())
43 TC_LOG_FATAL(
"entities.player.items",
"Item {} (slot {}, bag slot {}) in bag {} (slot {}, bag slot {}, m_bagslot {}) is to be deleted but is still in world.",
44 item->GetEntry(), (
uint32)item->GetSlot(), (
uint32)item->GetBagSlot(),
46 item->RemoveFromWorld();
77 _Create(ObjectGuid::Create<HighGuid::Item>(guidlow));
208 Player const* target,
bool ignoreNestedChangesMask)
const
212 if (requestedObjectMask.IsAnySet())
217 if (itemMask.IsAnySet())
220 if (requestedContainerMask.IsAnySet())
224 std::size_t sizePos = buffer.
wpos();
230 m_objectData->WriteUpdate(requestedObjectMask, buffer, target,
this, ignoreNestedChangesMask);
233 m_itemData->WriteUpdate(itemMask, buffer, target,
this, ignoreNestedChangesMask);
236 m_containerData->WriteUpdate(requestedContainerMask, buffer, target,
this, ignoreNestedChangesMask);
Item * GetItemInBag(Bag const *bag, uint8 slot)
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
#define TC_LOG_FATAL(filterType__, message__,...)
uint32 GetBagSize() const
void ClearValuesChangesMask() override
void AddToWorld() override
void StoreItem(uint8 slot, Item *pItem, bool update)
void RemoveFromWorld() override
void SaveToDB(CharacterDatabaseTransaction trans) override
UF::UpdateField< UF::ContainerData, int32(WowCS::EntityFragment::CGObject), TYPEID_CONTAINER > m_containerData
void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) const override
void SetSlot(uint32 slot, ObjectGuid guid)
void SetBagSize(uint32 numSlots)
Item * GetItemByPos(uint8 slot) const
void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const override
void RemoveItem(uint8 slot, bool update)
void DeleteFromDB(CharacterDatabaseTransaction trans) override
bool Create(ObjectGuid::LowType guidlow, uint32 itemid, ItemContext context, Player const *owner) override
Item * m_bagslot[MAX_BAG_SIZE]
uint32 GetFreeSlots() const
uint8 GetSlotByItemGUID(ObjectGuid guid) const
bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field *fields, uint32 entry) override
void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const override
void BuildValuesUpdateForPlayerWithMask(UpdateData *data, UF::ObjectData::Mask const &requestedObjectMask, UF::ItemData::Mask const &requestedItemMask, UF::ContainerData::Mask const &requestedContainerMask, Player const *target, bool ignoreNestedChangesMask) const
ObjectGuid const & GetGUID() const
void SetUpdateFieldValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type value)
WowCS::EntityFragmentsHolder m_entityFragments
UF::UpdateFieldHolder m_values
virtual void RemoveFromWorld()
void _Create(ObjectGuid const &guid)
virtual void AddToWorld()
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) const
ByteBuffer & PrepareValuesUpdateBuffer(UpdateData *data) const
void put(std::size_t pos, T value)
Class used to access individual fields of database query result.
virtual void SaveToDB(CharacterDatabaseTransaction trans)
void ClearValuesChangesMask() override
void SetContext(ItemContext context)
void SetCount(uint32 value)
void SetDurability(uint32 durability)
ItemTemplate const * GetTemplate() const
UF::UpdateField< UF::ItemData, uint32(WowCS::EntityFragment::CGObject), TYPEID_ITEM > m_itemData
ObjectGuid GetOwnerGUID() const
void SetContainedIn(ObjectGuid guid)
UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const *target) const final
virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field *fields, uint32 entry)
void SetOwnerGUID(ObjectGuid guid)
void SetContainer(Bag *container)
static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
static ObjectGuid const Empty
void AddToWorld() override
void BuildEntityFragmentsForValuesUpdateForPlayerWithMask(ByteBuffer &data, EnumFlag< UF::UpdateFieldFlag > flags) const
void SetEntry(uint32 entry)
void RemoveFromWorld() override
virtual void SetObjectScale(float scale)
UF::UpdateField< UF::ObjectData, int32(WowCS::EntityFragment::CGObject), TYPEID_OBJECT > m_objectData
void SendDirectMessage(WorldPacket const *data) const
Mask const & GetChangesMask() const
MutableFieldReference< T, false > ModifyValue(UpdateField< T, BlockBit, Bit >(Derived::*field))
void ClearChangesMask(UpdateField< T, BlockBit, Bit >(Derived::*field))
bool HasChanged(uint32 index) const
uint32 GetChangedObjectTypeMask() const
bool BuildPacket(WorldPacket *packet)
constexpr uint32 GetBlock(uint32 index) const
constexpr void Set(uint32 index)
constexpr uint32 GetMapId() const
UF::ObjectData::Base ObjectMask
void operator()(Player const *player) const
UF::ContainerData::Base ContainerMask
bool IgnoreNestedChangesMask
UF::ItemData::Base ItemMask
void Initialize(ItemTemplate const *proto)
uint32 GetContainerSlots() const
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< uint32, 0, 11 > MaxDurability
void Add(EntityFragment fragment, bool update, void const *data=nullptr)