diff options
22 files changed, 112 insertions, 107 deletions
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index e8acac1fea1..be9c501923e 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -286,7 +286,7 @@ bool AuctionBotSeller::Initialize() continue; } - if (prototype->GetFlags() & ITEM_FIELD_FLAG_UNLOCKED) + if (prototype->HasFlag(ITEM_FLAG_HAS_LOOT)) { // skip any not locked lootable items (mostly quest specific or reward cases) if (!prototype->GetLockID()) diff --git a/src/server/game/Chat/Hyperlinks.cpp b/src/server/game/Chat/Hyperlinks.cpp index 8f9f5153328..63346e482ce 100644 --- a/src/server/game/Chat/Hyperlinks.cpp +++ b/src/server/game/Chat/Hyperlinks.cpp @@ -353,7 +353,7 @@ struct LinkValidator<LinkTags::item> static bool IsTextValid(ItemLinkData const& data, char const* pos, size_t len) { LocalizedString const* suffixStrings = nullptr; - if (!(data.Item->GetFlags3() & ITEM_FLAG3_HIDE_NAME_SUFFIX) && data.Suffix) + if (!data.Item->HasFlag(ITEM_FLAG3_HIDE_NAME_SUFFIX) && data.Suffix) suffixStrings = &data.Suffix->Description; return IsTextValid(data.Item, suffixStrings, pos, len); @@ -689,7 +689,7 @@ bool Trinity::Hyperlinks::CheckAllLinks(std::string const& str) return false; } } - + // Step 2: Parse all link sequences // They look like this: |c<color>|H<linktag>:<linkdata>|h[<linktext>]|h|r // - <color> is 8 hex characters AARRGGBB diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index c459a6e0fc2..bc2963bb477 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -82,7 +82,7 @@ VendorItemCount::VendorItemCount(uint32 _item, uint32 _count) bool VendorItem::IsGoldRequired(ItemTemplate const* pProto) const { - return pProto->GetFlags2() & ITEM_FLAG2_DONT_IGNORE_BUY_PRICE || !ExtendedCost; + return pProto->HasFlag(ITEM_FLAG2_DONT_IGNORE_BUY_PRICE) || !ExtendedCost; } bool VendorItemData::RemoveItem(uint32 item_id, uint8 type) diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 16a041cc118..bd2c688847b 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -591,7 +591,7 @@ void Item::SaveToDB(CharacterDatabaseTransaction& trans) trans->Append(stmt); - if ((uState == ITEM_CHANGED) && HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) + if ((uState == ITEM_CHANGED) && IsWrapped()) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GIFT_OWNER); stmt->setUInt64(0, GetOwnerGUID().GetCounter()); @@ -768,7 +768,7 @@ void Item::SaveToDB(CharacterDatabaseTransaction& trans) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); - if (HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) + if (IsWrapped()) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT); stmt->setUInt64(0, GetGUID().GetCounter()); @@ -862,7 +862,7 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), proto->MaxDurability); // do not overwrite durability for wrapped items - if (durability > proto->MaxDurability && !HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) + if (durability > proto->MaxDurability && !IsWrapped()) { SetDurability(proto->MaxDurability); need_save = true; @@ -1217,7 +1217,7 @@ bool Item::CanBeTraded(bool mail, bool trade) const if (m_lootGenerated) return false; - if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE) || !trade))) + if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!IsBOPTradeable() || !trade))) return false; if (IsBag() && (Player::IsBagPos(GetPos()) || !ToBag()->IsEmpty())) @@ -1319,7 +1319,7 @@ bool Item::IsFitToSpellRequirements(SpellInfo const* spellInfo) const bool isEnchantSpell = spellInfo->HasEffect(SPELL_EFFECT_ENCHANT_ITEM) || spellInfo->HasEffect(SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY) || spellInfo->HasEffect(SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC); if (spellInfo->EquippedItemClass != -1) // -1 == any item class { - if (isEnchantSpell && proto->GetFlags3() & ITEM_FLAG3_CAN_STORE_ENCHANTS) + if (isEnchantSpell && proto->HasFlag(ITEM_FLAG3_CAN_STORE_ENCHANTS)) return true; if (spellInfo->EquippedItemClass != int32(proto->GetClass())) @@ -1596,7 +1596,7 @@ bool Item::IsBindedNotWith(Player const* player) const if (GetOwnerGUID() == player->GetGUID()) return false; - if (HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) + if (IsBOPTradeable()) if (allowedGUIDs.find(player->GetGUID()) != allowedGUIDs.end()) return false; @@ -1743,7 +1743,7 @@ void Item::DeleteRefundDataFromDB(CharacterDatabaseTransaction* trans) void Item::SetNotRefundable(Player* owner, bool changestate /*= true*/, CharacterDatabaseTransaction* trans /*= nullptr*/, bool addToCollection /*= true*/) { - if (!HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) + if (!IsRefundable()) return; WorldPackets::Item::ItemExpirePurchaseRefund itemExpirePurchaseRefund; @@ -1850,7 +1850,7 @@ bool Item::IsValidTransmogrificationTarget() const if (proto->GetClass() == ITEM_CLASS_WEAPON && proto->GetSubClass() == ITEM_SUBCLASS_WEAPON_FISHING_POLE) return false; - if (proto->GetFlags2() & ITEM_FLAG2_NO_ALTER_ITEM_VISUAL) + if (proto->HasFlag(ITEM_FLAG2_NO_ALTER_ITEM_VISUAL)) return false; if (!HasStats()) @@ -2016,7 +2016,7 @@ uint32 Item::GetBuyPrice(ItemTemplate const* proto, uint32 quality, uint32 itemL { standardPrice = false; - if (proto->GetFlags2() & ITEM_FLAG2_OVERRIDE_GOLD_COST) + if (proto->HasFlag(ITEM_FLAG2_OVERRIDE_GOLD_COST)) return proto->GetBuyPrice(); ImportPriceQualityEntry const* qualityPrice = sImportPriceQualityStore.LookupEntry(quality + 1); @@ -2147,7 +2147,7 @@ uint32 Item::GetSellPrice(Player const* owner) const uint32 Item::GetSellPrice(ItemTemplate const* proto, uint32 quality, uint32 itemLevel) { - if (proto->GetFlags2() & ITEM_FLAG2_OVERRIDE_GOLD_COST) + if (proto->HasFlag(ITEM_FLAG2_OVERRIDE_GOLD_COST)) return proto->GetSellPrice(); else { @@ -2176,7 +2176,7 @@ uint32 Item::GetItemLevel(Player const* owner) const ItemTemplate const* itemTemplate = GetTemplate(); uint32 minItemLevel = owner->m_unitData->MinItemLevel; uint32 minItemLevelCutoff = owner->m_unitData->MinItemLevelCutoff; - uint32 maxItemLevel = itemTemplate->GetFlags3() & ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP ? 0 : owner->m_unitData->MaxItemLevel; + uint32 maxItemLevel = itemTemplate->HasFlag(ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP) ? 0 : owner->m_unitData->MaxItemLevel; bool pvpBonus = owner->IsUsingPvpItemLevels(); uint32 azeriteLevel = 0; if (AzeriteItem const* azeriteItem = ToAzeriteItem()) @@ -2262,7 +2262,7 @@ ItemDisenchantLootEntry const* Item::GetDisenchantLoot(Player const* owner) cons ItemDisenchantLootEntry const* Item::GetDisenchantLoot(ItemTemplate const* itemTemplate, uint32 quality, uint32 itemLevel) { - if (itemTemplate->GetFlags() & (ITEM_FLAG_CONJURED | ITEM_FLAG_NO_DISENCHANT) || itemTemplate->GetBonding() == BIND_QUEST) + if (itemTemplate->HasFlag(ITEM_FLAG_CONJURED) || itemTemplate->HasFlag(ITEM_FLAG_NO_DISENCHANT) || itemTemplate->GetBonding() == BIND_QUEST) return nullptr; if (itemTemplate->GetArea(0) || itemTemplate->GetArea(1) || itemTemplate->GetMap() || itemTemplate->GetMaxStackSize() > 1) @@ -2749,8 +2749,8 @@ void BonusData::Initialize(ItemTemplate const* proto) for (std::size_t i = EffectCount; i < Effects.size(); ++i) Effects[i] = nullptr; - CanDisenchant = (proto->GetFlags() & ITEM_FLAG_NO_DISENCHANT) == 0; - CanScrap = (proto->GetFlags4() & ITEM_FLAG4_SCRAPABLE) != 0; + CanDisenchant = !proto->HasFlag(ITEM_FLAG_NO_DISENCHANT); + CanScrap = proto->HasFlag(ITEM_FLAG4_SCRAPABLE); _state.SuffixPriority = std::numeric_limits<int32>::max(); _state.AppearanceModPriority = std::numeric_limits<int32>::max(); diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 5f0e34a0d2d..b9ae082e277 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -213,8 +213,8 @@ class TC_GAME_API Item : public Object void RemoveItemFlag2(ItemFieldFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::DynamicFlags2), flags); } void SetItemFlags2(ItemFieldFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::DynamicFlags2), flags); } bool IsSoulBound() const { return HasItemFlag(ITEM_FIELD_FLAG_SOULBOUND); } - bool IsBoundAccountWide() const { return (GetTemplate()->GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT) != 0; } - bool IsBattlenetAccountBound() const { return (GetTemplate()->GetFlags2() & ITEM_FLAG2_BNET_ACCOUNT_TRADE_OK) != 0; } + bool IsBoundAccountWide() const { return GetTemplate()->HasFlag(ITEM_FLAG_IS_BOUND_TO_ACCOUNT); } + bool IsBattlenetAccountBound() const { return GetTemplate()->HasFlag(ITEM_FLAG2_BNET_ACCOUNT_TRADE_OK); } bool IsBindedNotWith(Player const* player) const; bool IsBoundByEnchant() const; virtual void SaveToDB(CharacterDatabaseTransaction& trans); @@ -241,6 +241,9 @@ class TC_GAME_API Item : public Object AzeriteEmpoweredItem* ToAzeriteEmpoweredItem() { return IsAzeriteEmpoweredItem() ? reinterpret_cast<AzeriteEmpoweredItem*>(this) : nullptr; } AzeriteEmpoweredItem const* ToAzeriteEmpoweredItem() const { return IsAzeriteEmpoweredItem() ? reinterpret_cast<AzeriteEmpoweredItem const*>(this) : nullptr; } + bool IsRefundable() const { return HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE); } + bool IsBOPTradeable() const { return HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE); } + bool IsWrapped() const { return HasItemFlag(ITEM_FIELD_FLAG_WRAPPED); } bool IsLocked() const { return !HasItemFlag(ITEM_FIELD_FLAG_UNLOCKED); } bool IsBag() const { return GetTemplate()->GetInventoryType() == INVTYPE_BAG; } bool IsAzeriteItem() const { return GetTypeId() == TYPEID_AZERITE_ITEM; } diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index ecc7be78f20..d81c1a68dc7 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -56,7 +56,7 @@ bool ItemTemplate::HasSignature() const return GetMaxStackSize() == 1 && GetClass() != ITEM_CLASS_CONSUMABLE && GetClass() != ITEM_CLASS_QUEST && - (GetFlags() & ITEM_FLAG_NO_CREATOR) == 0 && + !HasFlag(ITEM_FLAG_NO_CREATOR) && GetId() != 6948; /*Hearthstone*/ } @@ -196,7 +196,7 @@ float ItemTemplate::GetDPS(uint32 itemLevel) const dps = sItemDamageAmmoStore.AssertEntry(itemLevel)->Quality[quality]; break; case INVTYPE_2HWEAPON: - if (GetFlags2() & ITEM_FLAG2_CASTER_WEAPON) + if (HasFlag(ITEM_FLAG2_CASTER_WEAPON)) dps = sItemDamageTwoHandCasterStore.AssertEntry(itemLevel)->Quality[quality]; else dps = sItemDamageTwoHandStore.AssertEntry(itemLevel)->Quality[quality]; @@ -212,7 +212,7 @@ float ItemTemplate::GetDPS(uint32 itemLevel) const case ITEM_SUBCLASS_WEAPON_BOW: case ITEM_SUBCLASS_WEAPON_GUN: case ITEM_SUBCLASS_WEAPON_CROSSBOW: - if (GetFlags2() & ITEM_FLAG2_CASTER_WEAPON) + if (HasFlag(ITEM_FLAG2_CASTER_WEAPON)) dps = sItemDamageTwoHandCasterStore.AssertEntry(itemLevel)->Quality[quality]; else dps = sItemDamageTwoHandStore.AssertEntry(itemLevel)->Quality[quality]; @@ -224,7 +224,7 @@ float ItemTemplate::GetDPS(uint32 itemLevel) const case INVTYPE_WEAPON: case INVTYPE_WEAPONMAINHAND: case INVTYPE_WEAPONOFFHAND: - if (GetFlags2() & ITEM_FLAG2_CASTER_WEAPON) + if (HasFlag(ITEM_FLAG2_CASTER_WEAPON)) dps = sItemDamageOneHandCasterStore.AssertEntry(itemLevel)->Quality[quality]; else dps = sItemDamageOneHandStore.AssertEntry(itemLevel)->Quality[quality]; @@ -250,7 +250,7 @@ void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamag bool ItemTemplate::IsUsableByLootSpecialization(Player const* player, bool alwaysAllowBoundToAccount) const { - if (GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT && alwaysAllowBoundToAccount) + if (HasFlag(ITEM_FLAG_IS_BOUND_TO_ACCOUNT) && alwaysAllowBoundToAccount) return true; uint32 spec = player->GetLootSpecId(); diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 559046dce8f..d7fbb685274 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -743,10 +743,6 @@ struct TC_GAME_API ItemTemplate uint32 GetClass() const { return BasicData->ClassID; } uint32 GetSubClass() const { return BasicData->SubclassID; } uint32 GetQuality() const { return ExtendedData->OverallQualityID; } - uint32 GetFlags() const { return ExtendedData->Flags[0]; } - uint32 GetFlags2() const { return ExtendedData->Flags[1]; } - uint32 GetFlags3() const { return ExtendedData->Flags[2]; } - uint32 GetFlags4() const { return ExtendedData->Flags[3]; } uint32 GetOtherFactionItemId() const { return ExtendedData->FactionRelated; } float GetPriceRandomValue() const { return ExtendedData->PriceRandomValue; } float GetPriceVariance() const { return ExtendedData->PriceVariance; } @@ -821,9 +817,9 @@ struct TC_GAME_API ItemTemplate uint32 GetSkill() const; bool IsPotion() const { return GetClass() == ITEM_CLASS_CONSUMABLE && GetSubClass() == ITEM_SUBCLASS_POTION; } - bool IsVellum() const { return GetFlags3() & ITEM_FLAG3_CAN_STORE_ENCHANTS; } - bool IsConjuredConsumable() const { return GetClass() == ITEM_CLASS_CONSUMABLE && (GetFlags() & ITEM_FLAG_CONJURED); } - bool IsCraftingReagent() const { return (GetFlags2() & ITEM_FLAG2_USED_IN_A_TRADESKILL) != 0; } + bool IsVellum() const { return HasFlag(ITEM_FLAG3_CAN_STORE_ENCHANTS); } + bool IsConjuredConsumable() const { return GetClass() == ITEM_CLASS_CONSUMABLE && HasFlag(ITEM_FLAG_CONJURED); } + bool IsCraftingReagent() const { return HasFlag(ITEM_FLAG2_USED_IN_A_TRADESKILL); } bool HasSignature() const; bool IsWeapon() const { return GetClass() == ITEM_CLASS_WEAPON; } @@ -836,6 +832,12 @@ struct TC_GAME_API ItemTemplate GetSubClass() == ITEM_SUBCLASS_WEAPON_CROSSBOW; } + inline bool HasFlag(ItemFlags flag) const { return (ExtendedData->Flags[0] & flag) != 0; } + inline bool HasFlag(ItemFlags2 flag) const { return (ExtendedData->Flags[1] & flag) != 0; } + inline bool HasFlag(ItemFlags3 flag) const { return (ExtendedData->Flags[2] & flag) != 0; } + inline bool HasFlag(ItemFlags4 flag) const { return (ExtendedData->Flags[3] & flag) != 0; } + inline bool HasFlag(ItemFlagsCustom customFlag) const { return (FlagsCu & customFlag) != 0; } + char const* GetDefaultLocaleName() const; uint32 GetArmor(uint32 itemLevel) const; float GetDPS(uint32 itemLevel) const; diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp index 7d9660cc4fc..e8b13bbefdc 100644 --- a/src/server/game/Entities/Player/CollectionMgr.cpp +++ b/src/server/game/Entities/Player/CollectionMgr.cpp @@ -624,7 +624,7 @@ void CollectionMgr::AddItemAppearance(Item* item) if (!CanAddAppearance(itemModifiedAppearance)) return; - if (item->HasItemFlag(ItemFieldFlags(ITEM_FIELD_FLAG_BOP_TRADEABLE | ITEM_FIELD_FLAG_REFUNDABLE))) + if (item->IsBOPTradeable() || item->IsRefundable()) { AddTemporaryAppearance(item->GetGUID(), itemModifiedAppearance); return; @@ -710,7 +710,7 @@ bool CollectionMgr::CanAddAppearance(ItemModifiedAppearanceEntry const* itemModi if (_owner->GetPlayer()->CanUseItem(itemTemplate) != EQUIP_ERR_OK) return false; - if (itemTemplate->GetFlags2() & ITEM_FLAG2_NO_SOURCE_FOR_ITEM_VISUAL || itemTemplate->GetQuality() == ITEM_QUALITY_ARTIFACT) + if (itemTemplate->HasFlag(ITEM_FLAG2_NO_SOURCE_FOR_ITEM_VISUAL) || itemTemplate->GetQuality() == ITEM_QUALITY_ARTIFACT) return false; switch (itemTemplate->GetClass()) @@ -763,7 +763,7 @@ bool CollectionMgr::CanAddAppearance(ItemModifiedAppearanceEntry const* itemModi } if (itemTemplate->GetQuality() < ITEM_QUALITY_UNCOMMON) - if (!(itemTemplate->GetFlags2() & ITEM_FLAG2_IGNORE_QUALITY_FOR_ITEM_VISUAL_SOURCE) || !(itemTemplate->GetFlags3() & ITEM_FLAG3_ACTS_AS_TRANSMOG_HIDDEN_VISUAL_OPTION)) + if (!itemTemplate->HasFlag(ITEM_FLAG2_IGNORE_QUALITY_FOR_ITEM_VISUAL_SOURCE) || !itemTemplate->HasFlag(ITEM_FLAG3_ACTS_AS_TRANSMOG_HIDDEN_VISUAL_OPTION)) return false; if (itemModifiedAppearance->ID < _appearances->size() && _appearances->test(itemModifiedAppearance->ID)) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index db6cfdb97e8..49a087f09aa 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7907,7 +7907,7 @@ void Player::CastAllObtainSpells() void Player::ApplyItemObtainSpells(Item* item, bool apply) { - if (item->GetTemplate()->GetFlags() & ITEM_FLAG_LEGACY) + if (item->GetTemplate()->HasFlag(ITEM_FLAG_LEGACY)) return; for (ItemEffectEntry const* effect : item->GetEffects()) @@ -8009,7 +8009,7 @@ bool Player::CheckAttackFitToAuraRequirement(WeaponAttackType attackType, AuraEf void Player::ApplyItemEquipSpell(Item* item, bool apply, bool formChange /*= false*/) { - if (!item || item->GetTemplate()->GetFlags() & ITEM_FLAG_LEGACY) + if (!item || item->GetTemplate()->HasFlag(ITEM_FLAG_LEGACY)) return; for (ItemEffectEntry const* effectData : item->GetEffects()) @@ -8356,7 +8356,7 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT bool canTrigger = (damageInfo.GetHitMask() & (PROC_HIT_NORMAL | PROC_HIT_CRITICAL | PROC_HIT_ABSORB)) != 0; if (canTrigger) { - if (!(item->GetTemplate()->GetFlags() & ITEM_FLAG_LEGACY)) + if (!item->GetTemplate()->HasFlag(ITEM_FLAG_LEGACY)) { for (ItemEffectEntry const* effectData : item->GetEffects()) { @@ -8482,7 +8482,7 @@ void Player::CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemT void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, ObjectGuid castCount, int32* misc) { - if (!(item->GetTemplate()->GetFlags() & ITEM_FLAG_LEGACY)) + if (!item->GetTemplate()->HasFlag(ITEM_FLAG_LEGACY)) { // item spells cast at use for (ItemEffectEntry const* effectData : item->GetEffects()) @@ -11580,7 +11580,7 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool } else if (type == INVTYPE_WEAPONOFFHAND) { - if (!CanDualWield() && !(pProto->GetFlags3() & ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD)) + if (!CanDualWield() && !pProto->HasFlag(ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD)) return EQUIP_ERR_2HSKILLNOTFOUND; } else if (type == INVTYPE_2HWEAPON) @@ -11961,13 +11961,13 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto, bool skipRequiredL if (!proto) return EQUIP_ERR_ITEM_NOT_FOUND; - if (proto->GetFlags2() & ITEM_FLAG2_INTERNAL_ITEM) + if (proto->HasFlag(ITEM_FLAG2_INTERNAL_ITEM)) return EQUIP_ERR_CANT_EQUIP_EVER; - if ((proto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE) && GetTeam() != HORDE) + if (proto->HasFlag(ITEM_FLAG2_FACTION_HORDE) && GetTeam() != HORDE) return EQUIP_ERR_CANT_EQUIP_EVER; - if ((proto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE) && GetTeam() != ALLIANCE) + if (proto->HasFlag(ITEM_FLAG2_FACTION_ALLIANCE) && GetTeam() != ALLIANCE) return EQUIP_ERR_CANT_EQUIP_EVER; if ((proto->GetAllowableClass() & GetClassMask()) == 0 || !proto->GetAllowableRace().HasRace(GetRace())) @@ -12692,7 +12692,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->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) + if (pLastItem->IsBOPTradeable()) AddTradeableItem(pLastItem); } } @@ -12710,7 +12710,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->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) + if (pItem->IsWrapped()) { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT); @@ -12774,7 +12774,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) // Delete rolled money / loot from db. // MUST be done before RemoveFromWorld() or GetTemplate() fails - if (pProto->GetFlags() & ITEM_FLAG_HAS_LOOT) + if (pProto->HasFlag(ITEM_FLAG_HAS_LOOT)) sLootItemStorage->RemoveStoredLootForContainer(pItem->GetGUID().GetCounter()); if (IsInWorld() && update) @@ -13741,7 +13741,7 @@ void Player::RemoveItemFromBuyBackSlot(uint32 slot, bool del) if (del) { if (ItemTemplate const* itemTemplate = pItem->GetTemplate()) - if (itemTemplate->GetFlags() & ITEM_FLAG_HAS_LOOT) + if (itemTemplate->HasFlag(ITEM_FLAG_HAS_LOOT)) sLootItemStorage->RemoveStoredLootForContainer(pItem->GetGUID().GetCounter()); pItem->SetState(ITEM_REMOVED, this); @@ -13939,7 +13939,7 @@ void Player::UpdateItemDuration(uint32 time, bool realtimeonly) Item* item = *itr; ++itr; // current element can be erased in UpdateDuration - if (!realtimeonly || item->GetTemplate()->GetFlags() & ITEM_FLAG_REAL_DURATION) + if (!realtimeonly || item->GetTemplate()->HasFlag(ITEM_FLAG_REAL_DURATION)) item->UpdateDuration(this, time); } } @@ -15555,8 +15555,8 @@ bool Player::CanSelectQuestPackageItem(QuestPackageItemEntry const* questPackage if (!rewardProto) return false; - if ((rewardProto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE && GetTeam() != ALLIANCE) || - (rewardProto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE && GetTeam() != HORDE)) + if ((rewardProto->HasFlag(ITEM_FLAG2_FACTION_ALLIANCE) && GetTeam() != ALLIANCE) || + (rewardProto->HasFlag(ITEM_FLAG2_FACTION_HORDE) && GetTeam() != HORDE)) return false; switch (questPackageItem->DisplayType) @@ -19217,13 +19217,13 @@ Item* Player::_LoadItem(CharacterDatabaseTransaction& trans, uint32 zoneId, uint remove = true; } // "Conjured items disappear if you are logged out for more than 15 minutes" - else if (timeDiff > 15 * MINUTE && proto->GetFlags() & ITEM_FLAG_CONJURED) + else if (timeDiff > 15 * MINUTE && proto->HasFlag(ITEM_FLAG_CONJURED)) { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (%s, name: '%s', diff: %u) has conjured item (%s, entry: %u) with expired lifetime (15 minutes). Deleting item.", GetGUID().ToString().c_str(), GetName().c_str(), timeDiff, item->GetGUID().ToString().c_str(), item->GetEntry()); remove = true; } - else if (item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) + else if (item->IsRefundable()) { if (item->GetPlayedTime() > (2 * HOUR)) { @@ -19256,7 +19256,7 @@ Item* Player::_LoadItem(CharacterDatabaseTransaction& trans, uint32 zoneId, uint } } } - else if (item->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) + else if (item->IsBOPTradeable()) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_BOP_TRADE); stmt->setUInt64(0, item->GetGUID().GetCounter()); @@ -20990,7 +20990,7 @@ void Player::_SaveInventory(CharacterDatabaseTransaction& trans) if (item->GetState() == ITEM_NEW) { if (ItemTemplate const* itemTemplate = item->GetTemplate()) - if (itemTemplate->GetFlags() & ITEM_FLAG_HAS_LOOT) + if (itemTemplate->HasFlag(ITEM_FLAG_HAS_LOOT)) sLootItemStorage->RemoveStoredLootForContainer(item->GetGUID().GetCounter()); continue; @@ -21001,7 +21001,7 @@ void Player::_SaveInventory(CharacterDatabaseTransaction& trans) m_items[i]->FSetState(ITEM_NEW); if (ItemTemplate const* itemTemplate = item->GetTemplate()) - if (itemTemplate->GetFlags() & ITEM_FLAG_HAS_LOOT) + if (itemTemplate->HasFlag(ITEM_FLAG_HAS_LOOT)) sLootItemStorage->RemoveStoredLootForContainer(item->GetGUID().GetCounter()); } @@ -23178,7 +23178,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c if (!bStore) AutoUnequipOffhandIfNeed(); - if (pProto->GetFlags() & ITEM_FLAG_ITEM_PURCHASE_RECORD && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1) + if (pProto->HasFlag(ITEM_FLAG_ITEM_PURCHASE_RECORD) && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1) { it->AddItemFlag(ITEM_FIELD_FLAG_REFUNDABLE); it->SetRefundRecipient(GetGUID()); @@ -23373,7 +23373,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin return false; } - if (!IsGameMaster() && ((pProto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE && GetTeam() == ALLIANCE) || (pProto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE && GetTeam() == HORDE))) + if (!IsGameMaster() && ((pProto->HasFlag(ITEM_FLAG2_FACTION_HORDE) && GetTeam() == ALLIANCE) || (pProto->HasFlag(ITEM_FLAG2_FACTION_ALLIANCE) && GetTeam() == HORDE))) return false; Creature* creature = GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE); @@ -24664,7 +24664,7 @@ void Player::SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint3 void Player::ApplyEquipCooldown(Item* pItem) { - if (pItem->GetTemplate()->GetFlags() & ITEM_FLAG_NO_EQUIP_COOLDOWN) + if (pItem->GetTemplate()->HasFlag(ITEM_FLAG_NO_EQUIP_COOLDOWN)) return; std::chrono::steady_clock::time_point now = GameTime::GetGameTimeSteadyPoint(); @@ -25472,7 +25472,7 @@ void Player::AutoUnequipOffhandIfNeed(bool force /*= false*/) // unequip offhand weapon if player doesn't have dual wield anymore if (!CanDualWield() - && ((offItem->GetTemplate()->GetInventoryType() == INVTYPE_WEAPONOFFHAND && !(offItem->GetTemplate()->GetFlags3() & ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD)) + && ((offItem->GetTemplate()->GetInventoryType() == INVTYPE_WEAPONOFFHAND && !offItem->GetTemplate()->HasFlag(ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD)) || offItem->GetTemplate()->GetInventoryType() == INVTYPE_WEAPON)) force = true; @@ -26733,7 +26733,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->GetFlags() & ITEM_FLAG_UNIQUE_EQUIPPABLE) + if (itemProto->HasFlag(ITEM_FLAG_UNIQUE_EQUIPPABLE)) { // there is an equip limit on this item if (HasItemOrGemWithIdEquipped(itemProto->GetId(), 1, except_slot)) @@ -27928,7 +27928,7 @@ void Player::SendRefundInfo(Item* item) // This function call unsets ITEM_FIELD_FLAG_REFUNDABLE if played time is over 2 hours. item->UpdatePlayedTime(this); - if (!item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) + if (!item->IsRefundable()) { TC_LOG_DEBUG("entities.player.items", "Item refund: item not refundable!"); return; @@ -28024,7 +28024,7 @@ void Player::SendItemRefundResult(Item* item, ItemExtendedCostEntry const* iece, void Player::RefundItem(Item* item) { - if (!item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) + if (!item->IsRefundable()) { TC_LOG_DEBUG("entities.player.items", "Item refund: item not refundable!"); return; diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index f86e2740df3..8d3420874ca 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -394,7 +394,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) { UpdateDamagePhysical(BASE_ATTACK); if (Item* offhand = GetWeaponForAttack(OFF_ATTACK, true)) - if (CanDualWield() || offhand->GetTemplate()->GetFlags3() & ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD) + if (CanDualWield() || offhand->GetTemplate()->HasFlag(ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD)) UpdateDamagePhysical(OFF_ATTACK); if (HasAuraType(SPELL_AURA_OVERRIDE_SPELL_POWER_BY_AP_PCT)) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 45cc84a7ed6..032573ed81a 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -9896,10 +9896,10 @@ void ObjectMgr::LoadFactionChangeItems() if (!itemPair.second.GetOtherFactionItemId()) continue; - if (itemPair.second.GetFlags2() & ITEM_FLAG2_FACTION_HORDE) + if (itemPair.second.HasFlag(ITEM_FLAG2_FACTION_HORDE)) FactionChangeItemsHordeToAlliance[itemPair.first] = itemPair.second.GetOtherFactionItemId(); - if (itemPair.second.GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE) + if (itemPair.second.HasFlag(ITEM_FLAG2_FACTION_ALLIANCE)) FactionChangeItemsAllianceToHorde[itemPair.first] = itemPair.second.GetOtherFactionItemId(); ++count; diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index e71d99ae246..4b8f97a0cb3 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1079,7 +1079,7 @@ void Group::GroupLoot(Loot* loot, WorldObject* lootedObject) { r->setLoot(loot); r->itemSlot = itemSlot; - if (item->GetFlags2() & ITEM_FLAG2_CAN_ONLY_ROLL_GREED) + if (item->HasFlag(ITEM_FLAG2_CAN_ONLY_ROLL_GREED)) r->rollVoteMask &= ~ROLL_FLAG_TYPE_NEED; loot->items[itemSlot].is_blocked = true; diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 4d46f52846a..65290c0c718 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -652,7 +652,7 @@ void WorldSession::HandleAuctionSellCommodity(WorldPackets::AuctionHouse::Auctio } if (sAuctionMgr->GetAItem(item->GetGUID()) || !item->CanBeTraded() || item->IsNotEmptyBag() || - item->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || *item->m_itemData->Expiration || + item->GetTemplate()->HasFlag(ITEM_FLAG_CONJURED) || *item->m_itemData->Expiration || item->GetCount() < itemForSale.UseCount) { SendAuctionCommandResult(0, AuctionCommand::SellItem, AuctionResult::DatabaseError, throttle.DelayUntilNext); @@ -863,7 +863,7 @@ void WorldSession::HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSell } if (sAuctionMgr->GetAItem(item->GetGUID()) || !item->CanBeTraded() || item->IsNotEmptyBag() || - item->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || *item->m_itemData->Expiration || + item->GetTemplate()->HasFlag(ITEM_FLAG_CONJURED) || *item->m_itemData->Expiration || item->GetCount() != 1) { SendAuctionCommandResult(0, AuctionCommand::SellItem, AuctionResult::DatabaseError, throttle.DelayUntilNext); diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index c8f33fab7a3..6dd5fd3b3a7 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -336,7 +336,7 @@ void WorldSession::HandleDestroyItemOpcode(WorldPackets::Item::DestroyItem& dest return; } - if (item->GetTemplate()->GetFlags() & ITEM_FLAG_NO_USER_DESTROY) + if (item->GetTemplate()->HasFlag(ITEM_FLAG_NO_USER_DESTROY)) { _player->SendEquipError(EQUIP_ERR_DROP_BOUND_ITEM, nullptr, nullptr); return; @@ -435,7 +435,7 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet) // prevent selling item for sellprice when the item is still refundable // this probably happens when right clicking a refundable item, the client sends both // CMSG_SELL_ITEM and CMSG_REFUND_ITEM (unverified) - if (pItem->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) + if (pItem->IsRefundable()) return; // Therefore, no feedback to client // special case at auto sell (sell all) @@ -646,8 +646,8 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) continue; // Only display items in vendor lists for the team the player is on - if ((itemTemplate->GetFlags2() & ITEM_FLAG2_FACTION_HORDE && _player->GetTeam() == ALLIANCE) || - (itemTemplate->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE && _player->GetTeam() == HORDE)) + if ((itemTemplate->HasFlag(ITEM_FLAG2_FACTION_HORDE) && _player->GetTeam() == ALLIANCE) || + (itemTemplate->HasFlag(ITEM_FLAG2_FACTION_ALLIANCE) && _player->GetTeam() == HORDE)) continue; // Items sold out are not displayed in list @@ -674,7 +674,7 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) item.StackCount = itemTemplate->GetBuyCount(); item.Price = price; item.DoNotFilterOnVendor = vendorItem->IgnoreFiltering; - item.Refundable = itemTemplate->GetFlags() & ITEM_FLAG_ITEM_PURCHASE_RECORD && vendorItem->ExtendedCost && itemTemplate->GetMaxStackSize() == 1; + item.Refundable = itemTemplate->HasFlag(ITEM_FLAG_ITEM_PURCHASE_RECORD) && vendorItem->ExtendedCost && itemTemplate->GetMaxStackSize() == 1; item.Item.ItemID = vendorItem->item; if (!vendorItem->BonusListIDs.empty()) @@ -815,7 +815,7 @@ void WorldSession::HandleWrapItem(WorldPackets::Item::WrapItem& packet) return; } - if (!(gift->GetTemplate()->GetFlags() & ITEM_FLAG_IS_WRAPPER)) // cheating: non-wrapper wrapper + if (!gift->GetTemplate()->HasFlag(ITEM_FLAG_IS_WRAPPER)) // cheating: non-wrapper wrapper { _player->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, gift, nullptr); return; @@ -1005,7 +1005,7 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) ItemTemplate const* iGemProto = gems[i]->GetTemplate(); // unique item (for new and already placed bit removed enchantments - if (iGemProto->GetFlags() & ITEM_FLAG_UNIQUE_EQUIPPABLE) + if (iGemProto->HasFlag(ITEM_FLAG_UNIQUE_EQUIPPABLE)) { for (uint32 j = 0; j < MAX_GEM_SOCKETS; ++j) { diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 72eef168d83..42db7477f10 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -402,7 +402,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid) else { // Only delete item if no loot or money (unlooted loot is saved to db) or if it isn't an openable item - if (pItem->loot.isLooted() || !(proto->GetFlags() & ITEM_FLAG_HAS_LOOT)) + if (pItem->loot.isLooted() || !proto->HasFlag(ITEM_FLAG_HAS_LOOT)) player->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true); } return; // item can be looted only single player diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 67c89e153d8..c2d9333b66a 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -195,7 +195,7 @@ void WorldSession::HandleSendMail(WorldPackets::Mail::SendMail& packet) if (Item* item = player->GetItemByGuid(att.ItemGUID)) { ItemTemplate const* itemProto = item->GetTemplate(); - if (!itemProto || !(itemProto->GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT)) + if (!itemProto || !itemProto->HasFlag(ITEM_FLAG_IS_BOUND_TO_ACCOUNT)) { accountBound = false; break; @@ -249,13 +249,13 @@ void WorldSession::HandleSendMail(WorldPackets::Mail::SendMail& packet) } } - if (item->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || *item->m_itemData->Expiration) + if (item->GetTemplate()->HasFlag(ITEM_FLAG_CONJURED) || *item->m_itemData->Expiration) { player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM); return; } - if (packet.Info.Cod && item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) + if (packet.Info.Cod && item->IsWrapped()) { player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD); return; diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 8d62c27d64a..088cd8fbd70 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -81,14 +81,14 @@ void WorldSession::HandleUseItemOpcode(WorldPackets::Spells::UseItem& packet) } // only allow conjured consumable, bandage, poisons (all should have the 2^21 item flag set in DB) - if (proto->GetClass() == ITEM_CLASS_CONSUMABLE && !(proto->GetFlags() & ITEM_FLAG_IGNORE_DEFAULT_ARENA_RESTRICTIONS) && user->InArena()) + if (proto->GetClass() == ITEM_CLASS_CONSUMABLE && !proto->HasFlag(ITEM_FLAG_IGNORE_DEFAULT_ARENA_RESTRICTIONS) && user->InArena()) { user->SendEquipError(EQUIP_ERR_NOT_DURING_ARENA_MATCH, item, nullptr); return; } // don't allow items banned in arena - if (proto->GetFlags() & ITEM_FLAG_NOT_USEABLE_IN_ARENA && user->InArena()) + if (proto->HasFlag(ITEM_FLAG_NOT_USEABLE_IN_ARENA) && user->InArena()) { user->SendEquipError(EQUIP_ERR_NOT_DURING_ARENA_MATCH, item, nullptr); return; @@ -163,7 +163,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet) } // Verify that the bag is an actual bag or wrapped item that can be used "normally" - if (!(proto->GetFlags() & ITEM_FLAG_HAS_LOOT) && !item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) + if (!proto->HasFlag(ITEM_FLAG_HAS_LOOT) && !item->IsWrapped()) { player->SendEquipError(EQUIP_ERR_CLIENT_LOCKED_OUT, item, nullptr); TC_LOG_ERROR("entities.player.cheat", "Possible hacking attempt: Player %s [%s] tried to open item [%s, entry: %u] which is not openable!", @@ -192,7 +192,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet) } } - if (item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))// wrapped? + if (item->IsWrapped()) { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM); stmt->setUInt64(0, item->GetGUID().GetCounter()); @@ -212,7 +212,7 @@ void WorldSession::HandleOpenWrappedItemCallback(uint16 pos, ObjectGuid itemGuid if (!item) return; - if (item->GetGUID() != itemGuid || !item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) // during getting result, gift was swapped with another item + if (item->GetGUID() != itemGuid || !item->IsWrapped()) // during getting result, gift was swapped with another item return; if (!result) diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 294bcca413c..54c41f22e4a 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -68,7 +68,7 @@ void WorldSession::SendUpdateTrade(bool trader_data /*= true*/) tradeItem.Item.Initialize(item); tradeItem.StackCount = item->GetCount(); tradeItem.GiftCreator = item->GetGiftCreator(); - if (!item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) + if (!item->IsWrapped()) { tradeItem.Unwrapped = boost::in_place(); @@ -76,7 +76,7 @@ void WorldSession::SendUpdateTrade(bool trader_data /*= true*/) tradeItem.Unwrapped->OnUseEnchantmentID = item->GetEnchantmentId(USE_ENCHANTMENT_SLOT); tradeItem.Unwrapped->Creator = item->GetCreator(); tradeItem.Unwrapped->Charges = item->GetSpellCharges(); - tradeItem.Unwrapped->Lock = item->GetTemplate()->GetLockID() && !item->HasItemFlag(ITEM_FIELD_FLAG_UNLOCKED); + tradeItem.Unwrapped->Lock = item->GetTemplate()->GetLockID() && item->IsLocked(); tradeItem.Unwrapped->MaxDurability = item->m_itemData->MaxDurability; tradeItem.Unwrapped->Durability = item->m_itemData->Durability; @@ -134,7 +134,7 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[]) } // adjust time (depends on /played) - if (myItems[i]->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) + if (myItems[i]->IsBOPTradeable()) myItems[i]->SetCreatePlayedTime(trader->GetTotalPlayedTime() - (_player->GetTotalPlayedTime() - myItems[i]->m_itemData->CreatePlayedTime)); // store trader->MoveItemToInventory(traderDst, myItems[i], true, true); @@ -152,7 +152,7 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[]) } // adjust time (depends on /played) - if (hisItems[i]->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) + if (hisItems[i]->IsBOPTradeable()) hisItems[i]->SetCreatePlayedTime(_player->GetTotalPlayedTime() - (trader->GetTotalPlayedTime() - hisItems[i]->m_itemData->CreatePlayedTime)); // store _player->MoveItemToInventory(playerDst, hisItems[i], true, true); diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp index 7fb6c867973..23c094507e5 100644 --- a/src/server/game/Loot/Loot.cpp +++ b/src/server/game/Loot/Loot.cpp @@ -41,8 +41,8 @@ LootItem::LootItem(LootStoreItem const& li) conditions = li.conditions; ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemid); - freeforall = proto && (proto->GetFlags() & ITEM_FLAG_MULTI_DROP); - follow_loot_rules = proto && (proto->FlagsCu & ITEM_FLAGS_CU_FOLLOW_LOOT_RULES); + freeforall = proto && proto->HasFlag(ITEM_FLAG_MULTI_DROP); + follow_loot_rules = proto && (proto->HasFlag(ITEM_FLAGS_CU_FOLLOW_LOOT_RULES)); needs_quest = li.needs_quest; @@ -68,24 +68,24 @@ bool LootItem::AllowedForPlayer(Player const* player, bool isGivenByMasterLooter return false; // not show loot for not own team - if ((pProto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE) && player->GetTeam() != HORDE) + if (pProto->HasFlag(ITEM_FLAG2_FACTION_HORDE) && player->GetTeam() != HORDE) return false; - if ((pProto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE) && player->GetTeam() != ALLIANCE) + if (pProto->HasFlag(ITEM_FLAG2_FACTION_ALLIANCE) && player->GetTeam() != ALLIANCE) return false; // Master looter can see certain items even if the character can't loot them if (!isGivenByMasterLooter && player->GetGroup() && player->GetGroup()->GetMasterLooterGuid() == player->GetGUID()) { // check quest requirements - if (!(pProto->FlagsCu & ITEM_FLAGS_CU_IGNORE_QUEST_STATUS) && (needs_quest || pProto->GetStartQuest())) + if (!pProto->HasFlag(ITEM_FLAGS_CU_IGNORE_QUEST_STATUS) && (needs_quest || pProto->GetStartQuest())) return false; return true; } // Don't allow loot for players without profession or those who already know the recipe - if (pProto->GetFlags() & ITEM_FLAG_HIDE_UNUSABLE_RECIPE) + if (pProto->HasFlag(ITEM_FLAG_HIDE_UNUSABLE_RECIPE)) { if (!player->HasSkill(pProto->GetRequiredSkill())) return false; @@ -114,7 +114,7 @@ bool LootItem::AllowedForPlayer(Player const* player, bool isGivenByMasterLooter } // check quest requirements - if (!(pProto->FlagsCu & ITEM_FLAGS_CU_IGNORE_QUEST_STATUS) && ((needs_quest || (pProto->GetStartQuest() && player->GetQuestStatus(pProto->GetStartQuest()) != QUEST_STATUS_NONE)) && !player->HasQuestForItem(itemid))) + if (!pProto->HasFlag(ITEM_FLAGS_CU_IGNORE_QUEST_STATUS) && ((needs_quest || (pProto->GetStartQuest() && player->GetQuestStatus(pProto->GetStartQuest()) != QUEST_STATUS_NONE)) && !player->HasQuestForItem(itemid))) return false; return true; @@ -339,7 +339,7 @@ void Loot::AddItem(LootStoreItem const& item) // non-conditional one-player only items are counted here, // free for all items are counted in FillFFALoot(), // non-ffa conditionals are counted in FillNonQuestNonFFAConditionalLoot() - if (!item.needs_quest && item.conditions.empty() && !(proto->GetFlags() & ITEM_FLAG_MULTI_DROP)) + if (!item.needs_quest && item.conditions.empty() && !proto->HasFlag(ITEM_FLAG_MULTI_DROP)) ++unlootedCount; } } diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 0ddc35613fb..fb387b170fb 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -917,7 +917,7 @@ void LoadLootTemplates_Item() // remove real entries and check existence loot ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); for (auto const& itemTemplatePair : its) - if (lootIdSet.count(itemTemplatePair.first) > 0 && (itemTemplatePair.second.GetFlags() & ITEM_FLAG_HAS_LOOT)) + if (lootIdSet.count(itemTemplatePair.first) > 0 && itemTemplatePair.second.HasFlag(ITEM_FLAG_HAS_LOOT)) lootIdSet.erase(itemTemplatePair.first); // output error for any still listed (not referenced from appropriate table) ids @@ -942,7 +942,7 @@ void LoadLootTemplates_Milling() ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); for (auto const& itemTemplatePair : its) { - if (!(itemTemplatePair.second.GetFlags() & ITEM_FLAG_IS_MILLABLE)) + if (!itemTemplatePair.second.HasFlag(ITEM_FLAG_IS_MILLABLE)) continue; if (lootIdSet.count(itemTemplatePair.first) > 0) @@ -1005,7 +1005,7 @@ void LoadLootTemplates_Prospecting() ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); for (auto const& itemTemplatePair : its) { - if (!(itemTemplatePair.second.GetFlags() & ITEM_FLAG_IS_PROSPECTABLE)) + if (!itemTemplatePair.second.HasFlag(ITEM_FLAG_IS_PROSPECTABLE)) continue; if (lootIdSet.count(itemTemplatePair.first) > 0) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 69a8488d2b3..ca325431450 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5003,7 +5003,7 @@ void Spell::TakeReagents() return; // do not take reagents for these item casts - if (m_CastItem && m_CastItem->GetTemplate()->GetFlags() & ITEM_FLAG_NO_REAGENT_COST) + if (m_CastItem && m_CastItem->GetTemplate()->HasFlag(ITEM_FLAG_NO_REAGENT_COST)) return; Player* p_caster = m_caster->ToPlayer(); @@ -6791,7 +6791,7 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*= } // do not take reagents for these item casts - if (!(m_CastItem && m_CastItem->GetTemplate()->GetFlags() & ITEM_FLAG_NO_REAGENT_COST)) + if (!(m_CastItem && m_CastItem->GetTemplate()->HasFlag(ITEM_FLAG_NO_REAGENT_COST))) { bool checkReagents = !(_triggeredCastFlags & TRIGGERED_IGNORE_POWER_AND_REAGENT_COST) && !player->CanNoReagentCast(m_spellInfo); // Not own traded item (in trader trade slot) requires reagents even if triggered spell @@ -6956,7 +6956,7 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*= if (m_targets.GetItemTarget()->GetOwner() != player) return SPELL_FAILED_NOT_TRADEABLE; // do not allow to enchant vellum from scroll made by vellum-prevent exploit - if (m_CastItem && m_CastItem->GetTemplate()->GetFlags() & ITEM_FLAG_NO_REAGENT_COST) + if (m_CastItem && m_CastItem->GetTemplate()->HasFlag(ITEM_FLAG_NO_REAGENT_COST)) return SPELL_FAILED_TOTEM_CATEGORY; ItemPosCountVec dest; InventoryResult msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, spellEffectInfo.ItemType, 1); @@ -7080,7 +7080,7 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*= if (!item) return SPELL_FAILED_CANT_BE_PROSPECTED; //ensure item is a prospectable ore - if (!(item->GetTemplate()->GetFlags() & ITEM_FLAG_IS_PROSPECTABLE)) + if (!item->GetTemplate()->HasFlag(ITEM_FLAG_IS_PROSPECTABLE)) return SPELL_FAILED_CANT_BE_PROSPECTED; //prevent prospecting in trade slot if (item->GetOwnerGUID() != player->GetGUID()) @@ -7111,7 +7111,7 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*= if (!item) return SPELL_FAILED_CANT_BE_MILLED; //ensure item is a millable herb - if (!(item->GetTemplate()->GetFlags() & ITEM_FLAG_IS_MILLABLE)) + if (!item->GetTemplate()->HasFlag(ITEM_FLAG_IS_MILLABLE)) return SPELL_FAILED_CANT_BE_MILLED; //prevent milling in trade slot if (item->GetOwnerGUID() != player->GetGUID()) diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 621e620866a..1c1a56c2bb4 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2337,7 +2337,7 @@ void Spell::EffectEnchantItemPerm() else { // do not increase skill if vellum used - if (!(m_CastItem && m_CastItem->GetTemplate()->GetFlags() & ITEM_FLAG_NO_REAGENT_COST)) + if (!(m_CastItem && m_CastItem->GetTemplate()->HasFlag(ITEM_FLAG_NO_REAGENT_COST))) player->UpdateCraftSkill(m_spellInfo->Id); uint32 enchant_id = effectInfo->MiscValue; @@ -4385,7 +4385,7 @@ void Spell::EffectProspecting() if (!player) return; - if (!itemTarget || !(itemTarget->GetTemplate()->GetFlags() & ITEM_FLAG_IS_PROSPECTABLE)) + if (!itemTarget || !itemTarget->GetTemplate()->HasFlag(ITEM_FLAG_IS_PROSPECTABLE)) return; if (itemTarget->GetCount() < 5) @@ -4410,7 +4410,7 @@ void Spell::EffectMilling() if (!player) return; - if (!itemTarget || !(itemTarget->GetTemplate()->GetFlags() & ITEM_FLAG_IS_MILLABLE)) + if (!itemTarget || !itemTarget->GetTemplate()->HasFlag(ITEM_FLAG_IS_MILLABLE)) return; if (itemTarget->GetCount() < 5) |