mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-24 14:16:31 +00:00
refactor(Core/Item): Add helpers (#19828)
This commit is contained in:
@@ -464,7 +464,7 @@ struct VendorItem
|
||||
uint32 ExtendedCost;
|
||||
|
||||
//helpers
|
||||
bool IsGoldRequired(ItemTemplate const* pProto) const { return pProto->Flags2 & ITEM_FLAGS_EXTRA_EXT_COST_REQUIRES_GOLD || !ExtendedCost; }
|
||||
bool IsGoldRequired(ItemTemplate const* pProto) const { return pProto->HasFlag2(ITEM_FLAG2_DONT_IGNORE_BUY_PRICE) || !ExtendedCost; }
|
||||
};
|
||||
typedef std::vector<VendorItem*> VendorItemList;
|
||||
|
||||
|
||||
@@ -379,7 +379,7 @@ void Item::SaveToDB(CharacterDatabaseTransaction trans)
|
||||
|
||||
trans->Append(stmt);
|
||||
|
||||
if ((uState == ITEM_CHANGED) && HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
|
||||
if ((uState == ITEM_CHANGED) && IsWrapped())
|
||||
{
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GIFT_OWNER);
|
||||
stmt->SetData(0, GetOwnerGUID().GetCounter());
|
||||
@@ -394,7 +394,7 @@ void Item::SaveToDB(CharacterDatabaseTransaction trans)
|
||||
stmt->SetData(0, guid);
|
||||
trans->Append(stmt);
|
||||
|
||||
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
|
||||
if (IsWrapped())
|
||||
{
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
|
||||
stmt->SetData(0, guid);
|
||||
@@ -493,7 +493,7 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fi
|
||||
// update max durability (and durability) if need
|
||||
// xinef: do not overwrite durability for wrapped items!!
|
||||
SetUInt32Value(ITEM_FIELD_MAXDURABILITY, proto->MaxDurability);
|
||||
if (durability > proto->MaxDurability && !HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
|
||||
if (durability > proto->MaxDurability && !IsWrapped())
|
||||
{
|
||||
SetUInt32Value(ITEM_FIELD_DURABILITY, proto->MaxDurability);
|
||||
need_save = true;
|
||||
@@ -794,7 +794,7 @@ bool Item::IsEquipped() const
|
||||
|
||||
bool Item::CanBeTraded(bool mail, bool trade) const
|
||||
{
|
||||
if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE) || !trade)))
|
||||
if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!IsBOPTradable() || !trade)))
|
||||
return false;
|
||||
|
||||
if (IsBag() && (Player::IsBagPos(GetPos()) || !((Bag const*)this)->IsEmpty()))
|
||||
@@ -1140,7 +1140,7 @@ bool Item::IsBindedNotWith(Player const* player) const
|
||||
if (GetOwnerGUID() == player->GetGUID())
|
||||
return false;
|
||||
|
||||
if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE))
|
||||
if (IsBOPTradable())
|
||||
if (allowedGUIDs.find(player->GetGUID()) != allowedGUIDs.end())
|
||||
return false;
|
||||
|
||||
@@ -1200,7 +1200,7 @@ void Item::DeleteRefundDataFromDB(CharacterDatabaseTransaction* trans)
|
||||
|
||||
void Item::SetNotRefundable(Player* owner, bool changestate /*=true*/, CharacterDatabaseTransaction* trans /*=nullptr*/)
|
||||
{
|
||||
if (!HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
|
||||
if (!IsRefundable())
|
||||
return;
|
||||
|
||||
RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE);
|
||||
|
||||
@@ -234,7 +234,7 @@ public:
|
||||
|
||||
void SetBinding(bool val) { ApplyModFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND, val); }
|
||||
[[nodiscard]] bool IsSoulBound() const { return HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND); }
|
||||
[[nodiscard]] bool IsBoundAccountWide() const { return (GetTemplate()->Flags & ITEM_FLAG_IS_BOUND_TO_ACCOUNT) != 0; }
|
||||
[[nodiscard]] bool IsBoundAccountWide() const { return GetTemplate()->HasFlag(ITEM_FLAG_IS_BOUND_TO_ACCOUNT) != 0; }
|
||||
bool IsBindedNotWith(Player const* player) const;
|
||||
[[nodiscard]] bool IsBoundByEnchant() const;
|
||||
[[nodiscard]] bool IsBoundByTempEnchant() const;
|
||||
@@ -258,6 +258,9 @@ public:
|
||||
[[nodiscard]] bool CanBeTraded(bool mail = false, bool trade = false) const;
|
||||
void SetInTrade(bool b = true) { mb_in_trade = b; }
|
||||
[[nodiscard]] bool IsInTrade() const { return mb_in_trade; }
|
||||
[[nodiscard]] bool IsRefundable() const { return HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE); }
|
||||
[[nodiscard]] bool IsBOPTradable() const { return HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE); }
|
||||
[[nodiscard]] bool IsWrapped() const { return HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED); }
|
||||
|
||||
bool HasEnchantRequiredSkill(Player const* player) const;
|
||||
[[nodiscard]] uint32 GetEnchantRequiredLevel() const;
|
||||
|
||||
@@ -152,30 +152,30 @@ enum ItemFlags : uint32
|
||||
ITEM_FLAG_NO_USER_DESTROY = 0x00000020, // Item can not be destroyed, except by using spell (item can be reagent for spell)
|
||||
ITEM_FLAG_PLAYERCAST = 0x00000040, // Item's spells are castable by players
|
||||
ITEM_FLAG_NO_EQUIP_COOLDOWN = 0x00000080, // No default 30 seconds cooldown when equipped
|
||||
ITEM_FLAG_MULTI_LOOT_QUEST = 0x00000100,
|
||||
ITEM_FLAG_MULTI_LOOT_QUEST = 0x00000100, // NYI
|
||||
ITEM_FLAG_IS_WRAPPER = 0x00000200, // Item can wrap other items
|
||||
ITEM_FLAG_USES_RESOURCES = 0x00000400,
|
||||
ITEM_FLAG_USES_RESOURCES = 0x00000400, // NYI
|
||||
ITEM_FLAG_MULTI_DROP = 0x00000800, // Looting this item does not remove it from available loot
|
||||
ITEM_FLAG_ITEM_PURCHASE_RECORD = 0x00001000, // Item can be returned to vendor for its original cost (extended cost)
|
||||
ITEM_FLAG_PETITION = 0x00002000, // Item is guild or arena charter
|
||||
ITEM_FLAG_HAS_TEXT = 0x00004000, // Only readable items have this (but not all)
|
||||
ITEM_FLAG_NO_DISENCHANT = 0x00008000,
|
||||
ITEM_FLAG_REAL_DURATION = 0x00010000,
|
||||
ITEM_FLAG_NO_DISENCHANT = 0x00008000, // NYI
|
||||
ITEM_FLAG_REAL_DURATION = 0x00010000, // NYI
|
||||
ITEM_FLAG_NO_CREATOR = 0x00020000,
|
||||
ITEM_FLAG_IS_PROSPECTABLE = 0x00040000, // Item can be prospected
|
||||
ITEM_FLAG_UNIQUE_EQUIPPABLE = 0x00080000, // You can only equip one of these
|
||||
ITEM_FLAG_IGNORE_FOR_AURAS = 0x00100000,
|
||||
ITEM_FLAG_IGNORE_FOR_AURAS = 0x00100000, // NYI
|
||||
ITEM_FLAG_IGNORE_DEFAULT_ARENA_RESTRICTIONS = 0x00200000, // Item can be used during arena match
|
||||
ITEM_FLAG_NO_DURABILITY_LOSS = 0x00400000, // Some Thrown weapons have it (and only Thrown) but not all
|
||||
ITEM_FLAG_USE_WHEN_SHAPESHIFTED = 0x00800000, // Item can be used in shapeshift forms
|
||||
ITEM_FLAG_HAS_QUEST_GLOW = 0x01000000,
|
||||
ITEM_FLAG_HAS_QUEST_GLOW = 0x01000000, // NYI
|
||||
ITEM_FLAG_HIDE_UNUSABLE_RECIPE = 0x02000000, // Profession recipes: can only be looted if you meet requirements and don't already know it
|
||||
ITEM_FLAG_NOT_USEABLE_IN_ARENA = 0x04000000, // Item cannot be used in arena
|
||||
ITEM_FLAG_IS_BOUND_TO_ACCOUNT = 0x08000000, // Item binds to account and can be sent only to your own characters
|
||||
ITEM_FLAG_NO_REAGENT_COST = 0x10000000, // Spell is cast ignoring reagents
|
||||
ITEM_FLAG_IS_MILLABLE = 0x20000000, // Item can be milled
|
||||
ITEM_FLAG_REPORT_TO_GUILD_CHAT = 0x40000000,
|
||||
ITEM_FLAG_NO_PROGRESSIVE_LOOT = 0x80000000
|
||||
ITEM_FLAG_REPORT_TO_GUILD_CHAT = 0x40000000, // NYI
|
||||
ITEM_FLAG_NO_PROGRESSIVE_LOOT = 0x80000000 // NYI
|
||||
};
|
||||
|
||||
enum ItemFlags2 : uint32
|
||||
@@ -183,46 +183,38 @@ enum ItemFlags2 : uint32
|
||||
ITEM_FLAG2_FACTION_HORDE = 0x00000001,
|
||||
ITEM_FLAG2_FACTION_ALLIANCE = 0x00000002,
|
||||
ITEM_FLAG2_DONT_IGNORE_BUY_PRICE = 0x00000004, // when item uses extended cost, gold is also required
|
||||
ITEM_FLAG2_CLASSIFY_AS_CASTER = 0x00000008,
|
||||
ITEM_FLAG2_CLASSIFY_AS_PHYSICAL = 0x00000010,
|
||||
ITEM_FLAG2_EVERYONE_CAN_ROLL_NEED = 0x00000020,
|
||||
ITEM_FLAG2_NO_TRADE_BIND_ON_ACQUIRE = 0x00000040,
|
||||
ITEM_FLAG2_CAN_TRADE_BIND_ON_ACQUIRE = 0x00000080,
|
||||
ITEM_FLAG2_CLASSIFY_AS_CASTER = 0x00000008, // NYI
|
||||
ITEM_FLAG2_CLASSIFY_AS_PHYSICAL = 0x00000010, // NYI
|
||||
ITEM_FLAG2_EVERYONE_CAN_ROLL_NEED = 0x00000020, // NYI
|
||||
ITEM_FLAG2_NO_TRADE_BIND_ON_ACQUIRE = 0x00000040, // NYI
|
||||
ITEM_FLAG2_CAN_TRADE_BIND_ON_ACQUIRE = 0x00000080, // NYI
|
||||
ITEM_FLAG2_CAN_ONLY_ROLL_GREED = 0x00000100,
|
||||
ITEM_FLAG2_CASTER_WEAPON = 0x00000200,
|
||||
ITEM_FLAG2_DELETE_ON_LOGIN = 0x00000400,
|
||||
ITEM_FLAG2_INTERNAL_ITEM = 0x00000800,
|
||||
ITEM_FLAG2_NO_VENDOR_VALUE = 0x00001000,
|
||||
ITEM_FLAG2_SHOW_BEFORE_DISCOVERED = 0x00002000,
|
||||
ITEM_FLAG2_OVERRIDE_GOLD_COST = 0x00004000,
|
||||
ITEM_FLAG2_IGNORE_DEFAULT_RATED_BG_RESTRICTIONS = 0x00008000,
|
||||
ITEM_FLAG2_NOT_USABLE_IN_RATED_BG = 0x00010000,
|
||||
ITEM_FLAG2_BNET_ACCOUNT_TRADE_OK = 0x00020000,
|
||||
ITEM_FLAG2_CONFIRM_BEFORE_USE = 0x00040000,
|
||||
ITEM_FLAG2_REEVALUATE_BONDING_ON_TRANSFORM = 0x00080000,
|
||||
ITEM_FLAG2_NO_TRANSFORM_ON_CHARGE_DEPLETION = 0x00100000,
|
||||
ITEM_FLAG2_NO_ALTER_ITEM_VISUAL = 0x00200000,
|
||||
ITEM_FLAG2_NO_SOURCE_FOR_ITEM_VISUAL = 0x00400000,
|
||||
ITEM_FLAG2_IGNORE_QUALITY_FOR_ITEM_VISUAL_SOURCE = 0x00800000,
|
||||
ITEM_FLAG2_NO_DURABILITY = 0x01000000,
|
||||
ITEM_FLAG2_ROLE_TANK = 0x02000000,
|
||||
ITEM_FLAG2_ROLE_HEALER = 0x04000000,
|
||||
ITEM_FLAG2_ROLE_DAMAGE = 0x08000000,
|
||||
ITEM_FLAG2_CAN_DROP_IN_CHALLENGE_MODE = 0x10000000,
|
||||
ITEM_FLAG2_NEVER_STACK_IN_LOOT_UI = 0x20000000,
|
||||
ITEM_FLAG2_DISENCHANT_TO_LOOT_TABLE = 0x40000000,
|
||||
ITEM_FLAG2_USED_IN_A_TRADESKILL = 0x80000000
|
||||
ITEM_FLAG2_CASTER_WEAPON = 0x00000200, // NYI
|
||||
ITEM_FLAG2_DELETE_ON_LOGIN = 0x00000400, // NYI
|
||||
ITEM_FLAG2_INTERNAL_ITEM = 0x00000800, // NYI
|
||||
ITEM_FLAG2_NO_VENDOR_VALUE = 0x00001000, // NYI
|
||||
ITEM_FLAG2_SHOW_BEFORE_DISCOVERED = 0x00002000, // NYI
|
||||
ITEM_FLAG2_OVERRIDE_GOLD_COST = 0x00004000, // NYI
|
||||
ITEM_FLAG2_IGNORE_DEFAULT_RATED_BG_RESTRICTIONS = 0x00008000, // NYI
|
||||
ITEM_FLAG2_NOT_USABLE_IN_RATED_BG = 0x00010000, // NYI
|
||||
ITEM_FLAG2_BNET_ACCOUNT_TRADE_OK = 0x00020000, // NYI
|
||||
ITEM_FLAG2_CONFIRM_BEFORE_USE = 0x00040000, // NYI
|
||||
ITEM_FLAG2_REEVALUATE_BONDING_ON_TRANSFORM = 0x00080000, // NYI
|
||||
ITEM_FLAG2_NO_TRANSFORM_ON_CHARGE_DEPLETION = 0x00100000, // NYI
|
||||
ITEM_FLAG2_NO_ALTER_ITEM_VISUAL = 0x00200000, // NYI
|
||||
ITEM_FLAG2_NO_SOURCE_FOR_ITEM_VISUAL = 0x00400000, // NYI
|
||||
ITEM_FLAG2_IGNORE_QUALITY_FOR_ITEM_VISUAL_SOURCE = 0x00800000, // NYI
|
||||
ITEM_FLAG2_NO_DURABILITY = 0x01000000, // NYI
|
||||
ITEM_FLAG2_ROLE_TANK = 0x02000000, // NYI
|
||||
ITEM_FLAG2_ROLE_HEALER = 0x04000000, // NYI
|
||||
ITEM_FLAG2_ROLE_DAMAGE = 0x08000000, // NYI
|
||||
ITEM_FLAG2_CAN_DROP_IN_CHALLENGE_MODE = 0x10000000, // NYI
|
||||
ITEM_FLAG2_NEVER_STACK_IN_LOOT_UI = 0x20000000, // NYI
|
||||
ITEM_FLAG2_DISENCHANT_TO_LOOT_TABLE = 0x40000000, // NYI
|
||||
ITEM_FLAG2_USED_IN_A_TRADESKILL = 0x80000000 // NYI
|
||||
};
|
||||
|
||||
enum ItemFlagsExtra
|
||||
{
|
||||
ITEM_FLAGS_EXTRA_HORDE_ONLY = 0x00000001,
|
||||
ITEM_FLAGS_EXTRA_ALLIANCE_ONLY = 0x00000002,
|
||||
ITEM_FLAGS_EXTRA_EXT_COST_REQUIRES_GOLD = 0x00000004, // when item uses extended cost, gold is also required
|
||||
ITEM_FLAGS_EXTRA_NEED_ROLL_DISABLED = 0x00000100
|
||||
};
|
||||
|
||||
enum ItemFlagsCustom
|
||||
enum ItemFlagsCustom : uint32
|
||||
{
|
||||
ITEM_FLAGS_CU_DURATION_REAL_TIME = 0x0001, // Item duration will tick even if player is offline
|
||||
ITEM_FLAGS_CU_IGNORE_QUEST_STATUS = 0x0002, // No quest status will be checked when this item drops
|
||||
@@ -632,8 +624,8 @@ struct ItemTemplate
|
||||
std::string Name1;
|
||||
uint32 DisplayInfoID; // id from ItemDisplayInfo.dbc
|
||||
uint32 Quality;
|
||||
uint32 Flags;
|
||||
uint32 Flags2;
|
||||
ItemFlags Flags;
|
||||
ItemFlags2 Flags2;
|
||||
uint32 BuyCount;
|
||||
int32 BuyPrice;
|
||||
uint32 SellPrice;
|
||||
@@ -699,7 +691,7 @@ struct ItemTemplate
|
||||
uint32 FoodType;
|
||||
uint32 MinMoneyLoot;
|
||||
uint32 MaxMoneyLoot;
|
||||
uint32 FlagsCu;
|
||||
ItemFlagsCustom FlagsCu;
|
||||
WorldPacket queryData; // pussywizard
|
||||
|
||||
// helpers
|
||||
@@ -708,7 +700,7 @@ struct ItemTemplate
|
||||
return GetMaxStackSize() == 1 &&
|
||||
Class != ITEM_CLASS_CONSUMABLE &&
|
||||
Class != ITEM_CLASS_QUEST &&
|
||||
(Flags & ITEM_FLAG_NO_CREATOR) == 0 &&
|
||||
!HasFlag(ITEM_FLAG_NO_CREATOR) &&
|
||||
ItemId != 6948; /*Hearthstone*/
|
||||
}
|
||||
|
||||
@@ -827,11 +819,15 @@ struct ItemTemplate
|
||||
[[nodiscard]] bool IsPotion() const { return Class == ITEM_CLASS_CONSUMABLE && SubClass == ITEM_SUBCLASS_POTION; }
|
||||
[[nodiscard]] bool IsWeaponVellum() const { return Class == ITEM_CLASS_TRADE_GOODS && SubClass == ITEM_SUBCLASS_WEAPON_ENCHANTMENT; }
|
||||
[[nodiscard]] bool IsArmorVellum() const { return Class == ITEM_CLASS_TRADE_GOODS && SubClass == ITEM_SUBCLASS_ARMOR_ENCHANTMENT; }
|
||||
[[nodiscard]] bool IsConjuredConsumable() const { return Class == ITEM_CLASS_CONSUMABLE && (Flags & ITEM_FLAG_CONJURED); }
|
||||
[[nodiscard]] bool IsConjuredConsumable() const { return Class == ITEM_CLASS_CONSUMABLE && HasFlag(ITEM_FLAG_CONJURED); }
|
||||
|
||||
[[nodiscard]] bool HasStat(ItemModType stat) const;
|
||||
[[nodiscard]] bool HasSpellPowerStat() const;
|
||||
|
||||
[[nodiscard]] bool HasFlag(ItemFlags flag) const { return (Flags & flag) != 0; }
|
||||
[[nodiscard]] bool HasFlag2(ItemFlags2 flag) const { return (Flags2 & flag) != 0; }
|
||||
[[nodiscard]] bool HasFlagCu(ItemFlagsCustom flag) const { return (FlagsCu & flag) != 0; }
|
||||
|
||||
void InitializeQueryData();
|
||||
};
|
||||
|
||||
|
||||
@@ -10644,7 +10644,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c
|
||||
if (!bStore)
|
||||
AutoUnequipOffhandIfNeed();
|
||||
|
||||
if (pProto->Flags & ITEM_FLAG_ITEM_PURCHASE_RECORD && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1)
|
||||
if (pProto->HasFlag(ITEM_FLAG_ITEM_PURCHASE_RECORD) && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1)
|
||||
{
|
||||
it->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE);
|
||||
it->SetRefundRecipient(GetGUID().GetCounter());
|
||||
@@ -10692,7 +10692,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!IsGameMaster() && ((pProto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY && GetTeamId(true) == TEAM_ALLIANCE) || (pProto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY && GetTeamId(true) == TEAM_HORDE)))
|
||||
if (!IsGameMaster() && ((pProto->HasFlag2(ITEM_FLAG2_FACTION_HORDE) && GetTeamId(true) == TEAM_ALLIANCE) || (pProto->HasFlag2(ITEM_FLAG2_FACTION_ALLIANCE) && GetTeamId(true) == TEAM_HORDE)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -11722,7 +11722,7 @@ void Player::SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint3
|
||||
|
||||
void Player::ApplyEquipCooldown(Item* pItem)
|
||||
{
|
||||
if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_NO_EQUIP_COOLDOWN))
|
||||
if (pItem->GetTemplate()->HasFlag(ITEM_FLAG_NO_EQUIP_COOLDOWN))
|
||||
return;
|
||||
|
||||
for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
|
||||
@@ -13765,7 +13765,7 @@ InventoryResult Player::CanEquipUniqueItem(Item* pItem, uint8 eslot, uint32 limi
|
||||
InventoryResult Player::CanEquipUniqueItem(ItemTemplate const* itemProto, uint8 except_slot, uint32 limit_count) const
|
||||
{
|
||||
// check unique-equipped on item
|
||||
if (itemProto->Flags & ITEM_FLAG_UNIQUE_EQUIPPABLE)
|
||||
if (itemProto->HasFlag(ITEM_FLAG_UNIQUE_EQUIPPABLE))
|
||||
{
|
||||
// there is an equip limit on this item
|
||||
if (HasItemOrGemWithIdEquipped(itemProto->ItemId, 1, except_slot))
|
||||
@@ -15471,7 +15471,7 @@ void Player::SendRefundInfo(Item* item)
|
||||
// This function call unsets ITEM_FLAGS_REFUNDABLE if played time is over 2 hours.
|
||||
item->UpdatePlayedTime(this);
|
||||
|
||||
if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
|
||||
if (!item->IsRefundable())
|
||||
{
|
||||
LOG_DEBUG("entities.player.items", "Item refund: item not refundable!");
|
||||
return;
|
||||
@@ -15539,7 +15539,7 @@ PetStable& Player::GetOrInitPetStable()
|
||||
|
||||
void Player::RefundItem(Item* item)
|
||||
{
|
||||
if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
|
||||
if (!item->IsRefundable())
|
||||
{
|
||||
LOG_DEBUG("entities.player.items", "Item refund: item not refundable!");
|
||||
return;
|
||||
|
||||
@@ -2296,12 +2296,12 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const
|
||||
return EQUIP_ERR_ITEM_NOT_FOUND;
|
||||
}
|
||||
|
||||
if ((proto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && GetTeamId(true) != TEAM_HORDE)
|
||||
if (proto->HasFlag2(ITEM_FLAG2_FACTION_HORDE) && GetTeamId(true) != TEAM_HORDE)
|
||||
{
|
||||
return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
|
||||
}
|
||||
|
||||
if ((proto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && GetTeamId(true) != TEAM_ALLIANCE)
|
||||
if (proto->HasFlag2(ITEM_FLAG2_FACTION_ALLIANCE) && GetTeamId(true) != TEAM_ALLIANCE)
|
||||
{
|
||||
return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
|
||||
}
|
||||
@@ -3030,7 +3030,7 @@ void Player::MoveItemToInventory(ItemPosCountVec const& dest, Item* pItem, bool
|
||||
// in case trade we already have item in other player inventory
|
||||
pLastItem->SetState(in_characterInventoryDB ? ITEM_CHANGED : ITEM_NEW, this);
|
||||
|
||||
if (pLastItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE))
|
||||
if (pLastItem->IsBOPTradable())
|
||||
AddTradeableItem(pLastItem);
|
||||
}
|
||||
}
|
||||
@@ -3047,7 +3047,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
|
||||
for (uint8 i = 0; i < MAX_BAG_SIZE; ++i)
|
||||
DestroyItem(slot, i, update);
|
||||
|
||||
if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
|
||||
if (pItem->IsWrapped())
|
||||
{
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
|
||||
stmt->SetData(0, pItem->GetGUID().GetCounter());
|
||||
@@ -3117,7 +3117,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
|
||||
pBag->RemoveItem(slot, update);
|
||||
|
||||
// Xinef: item is removed, remove loot from storage if any
|
||||
if (proto->Flags & ITEM_FLAG_HAS_LOOT)
|
||||
if (proto->HasFlag(ITEM_FLAG_HAS_LOOT))
|
||||
sLootItemStorage->RemoveStoredLoot(pItem->GetGUID());
|
||||
|
||||
if (IsInWorld() && update)
|
||||
@@ -4169,7 +4169,7 @@ void Player::UpdateItemDuration(uint32 time, bool realtimeonly)
|
||||
Item* item = *itr;
|
||||
++itr; // current element can be erased in UpdateDuration
|
||||
|
||||
if (!realtimeonly || item->GetTemplate()->FlagsCu & ITEM_FLAGS_CU_DURATION_REAL_TIME)
|
||||
if (!realtimeonly || item->GetTemplate()->HasFlagCu(ITEM_FLAGS_CU_DURATION_REAL_TIME))
|
||||
item->UpdateDuration(this, time);
|
||||
}
|
||||
}
|
||||
@@ -5999,13 +5999,13 @@ Item* Player::_LoadItem(CharacterDatabaseTransaction trans, uint32 zoneId, uint3
|
||||
remove = true;
|
||||
}
|
||||
// "Conjured items disappear if you are logged out for more than 15 minutes"
|
||||
else if (timeDiff > 15 * MINUTE && proto->Flags & ITEM_FLAG_CONJURED)
|
||||
else if (timeDiff > 15 * MINUTE && proto->HasFlag(ITEM_FLAG_CONJURED))
|
||||
{
|
||||
LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player ({}, name: '{}', diff: {}) has conjured item ({}, entry: {}) with expired lifetime (15 minutes). Deleting item.",
|
||||
GetGUID().ToString(), GetName(), timeDiff, item->GetGUID().ToString(), item->GetEntry());
|
||||
remove = true;
|
||||
}
|
||||
else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE))
|
||||
else if (item->IsRefundable())
|
||||
{
|
||||
if (item->GetPlayedTime() > (2 * HOUR))
|
||||
{
|
||||
@@ -6038,7 +6038,7 @@ Item* Player::_LoadItem(CharacterDatabaseTransaction trans, uint32 zoneId, uint3
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE))
|
||||
else if (item->IsBOPTradable())
|
||||
{
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_BOP_TRADE);
|
||||
stmt->SetData(0, item->GetGUID().GetCounter());
|
||||
@@ -7266,7 +7266,7 @@ void Player::_SaveInventory(CharacterDatabaseTransaction trans)
|
||||
if (item->GetState() == ITEM_NEW)
|
||||
{
|
||||
// Xinef: item is removed, remove loot from storage if any
|
||||
if (item->GetTemplate()->Flags & ITEM_FLAG_HAS_LOOT)
|
||||
if (item->GetTemplate()->HasFlag(ITEM_FLAG_HAS_LOOT))
|
||||
sLootItemStorage->RemoveStoredLoot(item->GetGUID());
|
||||
continue;
|
||||
}
|
||||
@@ -7281,7 +7281,7 @@ void Player::_SaveInventory(CharacterDatabaseTransaction trans)
|
||||
m_items[i]->FSetState(ITEM_NEW);
|
||||
|
||||
// Xinef: item is removed, remove loot from storage if any
|
||||
if (item->GetTemplate()->Flags & ITEM_FLAG_HAS_LOOT)
|
||||
if (item->GetTemplate()->HasFlag(ITEM_FLAG_HAS_LOOT))
|
||||
sLootItemStorage->RemoveStoredLoot(item->GetGUID());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user