Core/Items: Defined all item flags
This commit is contained in:
@@ -123,7 +123,7 @@ bool ItemChatLink::Initialize(std::istringstream& iss)
|
||||
|
||||
// Validate item's color
|
||||
uint32 colorQuality = _item->GetQuality();
|
||||
if (_item->GetFlags3() & ITEM_FLAG3_HEIRLOOM_QUALITY)
|
||||
if (_item->GetFlags3() & ITEM_FLAG3_DISPLAY_AS_HEIRLOOM)
|
||||
colorQuality = ITEM_QUALITY_HEIRLOOM;
|
||||
|
||||
if (_color != ItemQualityColors[colorQuality])
|
||||
|
||||
@@ -379,7 +379,7 @@ struct VendorItem
|
||||
uint8 Type;
|
||||
|
||||
//helpers
|
||||
bool IsGoldRequired(ItemTemplate const* pProto) const { return pProto->GetFlags2() & ITEM_FLAG2_EXT_COST_REQUIRES_GOLD || !ExtendedCost; }
|
||||
bool IsGoldRequired(ItemTemplate const* pProto) const { return pProto->GetFlags2() & ITEM_FLAG2_DONT_IGNORE_BUY_PRICE || !ExtendedCost; }
|
||||
};
|
||||
typedef std::vector<VendorItem*> VendorItemList;
|
||||
|
||||
|
||||
@@ -1652,7 +1652,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_CANNOT_BE_TRANSMOG)
|
||||
if (proto->GetFlags2() & ITEM_FLAG2_NO_ALTER_ITEM_VISUAL)
|
||||
return false;
|
||||
|
||||
if (!HasStats())
|
||||
@@ -1827,7 +1827,7 @@ uint32 Item::GetSellPrice(ItemTemplate const* proto, bool& normalSellPrice)
|
||||
{
|
||||
normalSellPrice = true;
|
||||
|
||||
if (proto->GetFlags2() & ITEM_FLAG2_HAS_NORMAL_PRICE)
|
||||
if (proto->GetFlags2() & ITEM_FLAG2_OVERRIDE_GOLD_COST)
|
||||
{
|
||||
return proto->GetBuyPrice();
|
||||
}
|
||||
@@ -1946,7 +1946,7 @@ uint32 Item::GetSpecialPrice(ItemTemplate const* proto, uint32 minimumPrice /*=
|
||||
{
|
||||
uint32 cost = 0;
|
||||
|
||||
if (proto->GetFlags2() & ITEM_FLAG2_HAS_NORMAL_PRICE)
|
||||
if (proto->GetFlags2() & ITEM_FLAG2_OVERRIDE_GOLD_COST)
|
||||
cost = proto->GetSellPrice();
|
||||
else
|
||||
{
|
||||
|
||||
@@ -328,8 +328,8 @@ class TC_GAME_API Item : public Object
|
||||
|
||||
void SetBinding(bool val) { ApplyModFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND, val); }
|
||||
bool IsSoulBound() const { return HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND); }
|
||||
bool IsBoundAccountWide() const { return (GetTemplate()->GetFlags() & ITEM_FLAG_BIND_TO_ACCOUNT) != 0; }
|
||||
bool IsBattlenetAccountBound() const { return (GetTemplate()->GetFlags2() & ITEM_FLAG2_BNET_ACCOUNT_BOUND) != 0; }
|
||||
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 IsBindedNotWith(Player const* player) const;
|
||||
bool IsBoundByEnchant() const;
|
||||
virtual void SaveToDB(SQLTransaction& trans);
|
||||
|
||||
@@ -128,7 +128,7 @@ enum ItemBondingType
|
||||
#define MAX_BIND_TYPE 6
|
||||
|
||||
/* /// @todo: Requiring actual cases in which using (an) item isn't allowed while shapeshifted. Else, this flag would need an implementation.
|
||||
ITEM_FLAG_USABLE_WHEN_SHAPESHIFTED = 0x00800000, // Item can be used in shapeshift forms */
|
||||
ITEM_FLAG_USE_WHEN_SHAPESHIFTED = 0x00800000, // Item can be used in shapeshift forms */
|
||||
|
||||
// ITEM_FIELD_FLAGS
|
||||
enum ItemFieldFlags : uint32
|
||||
@@ -169,98 +169,103 @@ enum ItemFieldFlags : uint32
|
||||
|
||||
enum ItemFlags : uint32
|
||||
{
|
||||
ITEM_FLAG_UNK1 = 0x00000001,
|
||||
ITEM_FLAG_CONJURED = 0x00000002, // Conjured item
|
||||
ITEM_FLAG_OPENABLE = 0x00000004, // Item can be right clicked to open for loot
|
||||
ITEM_FLAG_HEROIC = 0x00000008, // Makes green "Heroic" text appear on item
|
||||
ITEM_FLAG_DEPRECATED = 0x00000010, // Cannot equip or use
|
||||
ITEM_FLAG_INDESTRUCTIBLE = 0x00000020, // Item can not be destroyed, except by using spell (item can be reagent for spell)
|
||||
ITEM_FLAG_UNK2 = 0x00000040,
|
||||
ITEM_FLAG_NO_EQUIP_COOLDOWN = 0x00000080, // No default 30 seconds cooldown when equipped
|
||||
ITEM_FLAG_UNK3 = 0x00000100,
|
||||
ITEM_FLAG_WRAPPER = 0x00000200, // Item can wrap other items
|
||||
ITEM_FLAG_UNK4 = 0x00000400,
|
||||
ITEM_FLAG_PARTY_LOOT = 0x00000800, // Looting this item does not remove it from available loot
|
||||
ITEM_FLAG_REFUNDABLE = 0x00001000, // Item can be returned to vendor for its original cost (extended cost)
|
||||
ITEM_FLAG_CHARTER = 0x00002000, // Item is guild or arena charter
|
||||
ITEM_FLAG_UNK5 = 0x00004000, // Only readable items have this (but not all)
|
||||
ITEM_FLAG_UNK6 = 0x00008000,
|
||||
ITEM_FLAG_REAL_DURATION = 0x00010000,
|
||||
ITEM_FLAG_UNK8 = 0x00020000,
|
||||
ITEM_FLAG_PROSPECTABLE = 0x00040000, // Item can be prospected
|
||||
ITEM_FLAG_UNIQUE_EQUIPPED = 0x00080000, // You can only equip one of these
|
||||
ITEM_FLAG_UNK9 = 0x00100000,
|
||||
ITEM_FLAG_USEABLE_IN_ARENA = 0x00200000, // Item can be used during arena match
|
||||
ITEM_FLAG_THROWABLE = 0x00400000, // Some Thrown weapons have it (and only Thrown) but not all
|
||||
ITEM_FLAG_USABLE_WHEN_SHAPESHIFTED = 0x00800000, // Item can be used in shapeshift forms
|
||||
ITEM_FLAG_UNK10 = 0x01000000,
|
||||
ITEM_FLAG_SMART_LOOT = 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_BIND_TO_ACCOUNT = 0x08000000, // Item binds to account and can be sent only to your own characters
|
||||
ITEM_FLAG_TRIGGERED_CAST = 0x10000000, // Spell is cast with triggered flag
|
||||
ITEM_FLAG_MILLABLE = 0x20000000, // Item can be milled
|
||||
ITEM_FLAG_UNK11 = 0x40000000,
|
||||
ITEM_FLAG_BOP_TRADEABLE = 0x80000000 // bound item that can be traded
|
||||
ITEM_FLAG_NO_PICKUP = 0x00000001,
|
||||
ITEM_FLAG_CONJURED = 0x00000002, // Conjured item
|
||||
ITEM_FLAG_HAS_LOOT = 0x00000004, // Item can be right clicked to open for loot
|
||||
ITEM_FLAG_HEROIC_TOOLTIP = 0x00000008, // Makes green "Heroic" text appear on item
|
||||
ITEM_FLAG_DEPRECATED = 0x00000010, // Cannot equip or use
|
||||
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_FLAG_NO_EQUIP_COOLDOWN = 0x00000080, // No default 30 seconds cooldown when equipped
|
||||
ITEM_FLAG_MULTI_LOOT_QUEST = 0x00000100,
|
||||
ITEM_FLAG_IS_WRAPPER = 0x00000200, // Item can wrap other items
|
||||
ITEM_FLAG_USES_RESOURCES = 0x00000400,
|
||||
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,
|
||||
ITEM_FLAG_NO_DISENCHANT = 0x00008000,
|
||||
ITEM_FLAG_REAL_DURATION = 0x00010000,
|
||||
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_DEFAULT_ARENA_RESTRICTIONS = 0x00200000, // Item can be used during arena match
|
||||
ITEM_FLAG_NO_DURABILITY_LOSS = 0x00400000,
|
||||
ITEM_FLAG_USE_WHEN_SHAPESHIFTED = 0x00800000, // Item can be used in shapeshift forms
|
||||
ITEM_FLAG_HAS_QUEST_GLOW = 0x01000000,
|
||||
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
|
||||
};
|
||||
|
||||
enum ItemFlags2 : uint32
|
||||
{
|
||||
ITEM_FLAG2_HORDE_ONLY = 0x00000001,
|
||||
ITEM_FLAG2_ALLIANCE_ONLY = 0x00000002,
|
||||
ITEM_FLAG2_EXT_COST_REQUIRES_GOLD = 0x00000004, // when item uses extended cost, gold is also required
|
||||
ITEM_FLAG2_UNK1 = 0x00000008,
|
||||
ITEM_FLAG2_UNK2 = 0x00000010,
|
||||
ITEM_FLAG2_UNK3 = 0x00000020,
|
||||
ITEM_FLAG2_UNK4 = 0x00000040,
|
||||
ITEM_FLAG2_UNK5 = 0x00000080,
|
||||
ITEM_FLAG2_NEED_ROLL_DISABLED = 0x00000100,
|
||||
ITEM_FLAG2_CASTER_WEAPON = 0x00000200,
|
||||
ITEM_FLAG2_UNK6 = 0x00000400,
|
||||
ITEM_FLAG2_UNAVAILABLE_FOR_PLAYERS= 0x00000800,
|
||||
ITEM_FLAG2_UNK8 = 0x00001000,
|
||||
ITEM_FLAG2_UNK9 = 0x00002000,
|
||||
ITEM_FLAG2_HAS_NORMAL_PRICE = 0x00004000,
|
||||
ITEM_FLAG2_UNK10 = 0x00008000,
|
||||
ITEM_FLAG2_UNK11 = 0x00010000,
|
||||
ITEM_FLAG2_BNET_ACCOUNT_BOUND = 0x00020000,
|
||||
ITEM_FLAG2_UNK12 = 0x00040000,
|
||||
ITEM_FLAG2_UNK13 = 0x00080000,
|
||||
ITEM_FLAG2_UNK14 = 0x00100000,
|
||||
ITEM_FLAG2_CANNOT_BE_TRANSMOG = 0x00200000,
|
||||
ITEM_FLAG2_CANNOT_TRANSMOG = 0x00400000,
|
||||
ITEM_FLAG2_CAN_TRANSMOG = 0x00800000,
|
||||
ITEM_FLAG2_UNK15 = 0x01000000,
|
||||
ITEM_FLAG2_UNK16 = 0x02000000,
|
||||
ITEM_FLAG2_UNK17 = 0x04000000,
|
||||
ITEM_FLAG2_UNK18 = 0x08000000,
|
||||
ITEM_FLAG2_UNK19 = 0x10000000,
|
||||
ITEM_FLAG2_UNK20 = 0x20000000,
|
||||
ITEM_FLAG2_UNK21 = 0x40000000,
|
||||
ITEM_FLAG2_CRAFTING_MATERIAL = 0x80000000
|
||||
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_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
|
||||
};
|
||||
|
||||
enum ItemFlags3
|
||||
{
|
||||
ITEM_FLAG3_UNK1 = 0x00000001,
|
||||
ITEM_FLAG3_UNK2 = 0x00000002,
|
||||
ITEM_FLAG3_UNK3 = 0x00000004,
|
||||
ITEM_FLAG3_UNK4 = 0x00000008,
|
||||
ITEM_FLAG3_UNK5 = 0x00000010,
|
||||
ITEM_FLAG3_UNK6 = 0x00000020,
|
||||
ITEM_FLAG3_UNK7 = 0x00000040,
|
||||
ITEM_FLAG3_IGNORE_ITEM_LEVEL_DELTAS = 0x00000080, // Ignore item level adjustments from PLAYER_FIELD_ITEM_LEVEL_DELTA
|
||||
ITEM_FLAG3_IGNORE_PVP_ITEM_LEVEL_CAP = 0x00000100,
|
||||
ITEM_FLAG3_HEIRLOOM_QUALITY = 0x00000200, // Item appears as having heirloom quality ingame regardless of its real quality (does not affect stat calculation)
|
||||
ITEM_FLAG3_UNK8 = 0x00000400,
|
||||
ITEM_FLAG3_UNK9 = 0x00000800,
|
||||
ITEM_FLAG3_DOESNT_APPEAR_IN_GUILD_NEWS = 0x00001000, // Item is not included in the guild news panel
|
||||
ITEM_FLAG3_UNK10 = 0x00002000,
|
||||
ITEM_FLAG3_UNK11 = 0x00004000,
|
||||
ITEM_FLAG3_UNK12 = 0x00008000,
|
||||
ITEM_FLAG3_UNK13 = 0x00010000,
|
||||
ITEM_FLAG3_UNK14 = 0x00020000,
|
||||
ITEM_FLAG3_UNK15 = 0x00040000,
|
||||
ITEM_FLAG3_DUAL_WIELD_NOT_REQUIRED = 0x00080000
|
||||
ITEM_FLAG3_DONT_DESTROY_ON_QUEST_ACCEPT = 0x00000001,
|
||||
ITEM_FLAG3_ITEM_CAN_BE_UPGRADED = 0x00000002,
|
||||
ITEM_FLAG3_UPGRADE_FROM_ITEM_OVERRIDES_DROP_UPGRADE = 0x00000004,
|
||||
ITEM_FLAG3_ALWAYS_FFA_IN_LOOT = 0x00000008,
|
||||
ITEM_FLAG3_HIDE_UPGRADE_LEVELS_IF_NOT_UPGRADED = 0x00000010,
|
||||
ITEM_FLAG3_UPDATE_INTERACTIONS = 0x00000020,
|
||||
ITEM_FLAG3_UPDATE_DOESNT_LEAVE_PROGRESSIVE_WIN_HISTORY = 0x00000040,
|
||||
ITEM_FLAG3_IGNORE_ITEM_HISTORY_TRACKER = 0x00000080,
|
||||
ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP = 0x00000100,
|
||||
ITEM_FLAG3_DISPLAY_AS_HEIRLOOM = 0x00000200, // Item appears as having heirloom quality ingame regardless of its real quality (does not affect stat calculation)
|
||||
ITEM_FLAG3_SKIP_USE_CHECK_ON_PICKUP = 0x00000400,
|
||||
ITEM_FLAG3_OBSOLETE = 0x00000800,
|
||||
ITEM_FLAG3_DONT_DISPLAY_IN_GUILD_NEWS = 0x00001000, // Item is not included in the guild news panel
|
||||
ITEM_FLAG3_PVP_TOURNAMENT_GEAR = 0x00002000,
|
||||
ITEM_FLAG3_REQUIRES_STACK_CHANGE_LOG = 0x00004000,
|
||||
ITEM_FLAG3_UNUSED_FLAG = 0x00008000,
|
||||
ITEM_FLAG3_HIDE_NAME_SUFFIX = 0x00010000,
|
||||
ITEM_FLAG3_PUSH_LOOT = 0x00020000,
|
||||
ITEM_FLAG3_DONT_REPORT_LOOT_LOG_TO_PARTY = 0x00040000,
|
||||
ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD = 0x00080000,
|
||||
ITEM_FLAG3_OBLITERATABLE = 0x00100000,
|
||||
ITEM_FLAG3_ACTS_AS_TRANSMOG_HIDDEN_VISUAL_OPTION = 0x00200000,
|
||||
ITEM_FLAG3_EXPIRE_ON_WEEKLY_RESET = 0x00400000,
|
||||
ITEM_FLAG3_DOESNT_SHOW_UP_IN_TRANSMOG_UNTIL_COLLECTED = 0x00800000,
|
||||
ITEM_FLAG3_CAN_STORE_ENCHANTS = 0x01000000
|
||||
};
|
||||
|
||||
enum ItemFlagsCustom
|
||||
@@ -790,7 +795,7 @@ struct TC_GAME_API ItemTemplate
|
||||
bool IsPotion() const { return GetClass() == ITEM_CLASS_CONSUMABLE && GetSubClass() == ITEM_SUBCLASS_POTION; }
|
||||
bool IsVellum() const { return GetClass() == ITEM_CLASS_TRADE_GOODS && GetSubClass() == ITEM_SUBCLASS_ENCHANTMENT; }
|
||||
bool IsConjuredConsumable() const { return GetClass() == ITEM_CLASS_CONSUMABLE && (GetFlags() & ITEM_FLAG_CONJURED); }
|
||||
bool IsCraftingReagent() const { return (GetFlags2() & ITEM_FLAG2_CRAFTING_MATERIAL) != 0; }
|
||||
bool IsCraftingReagent() const { return (GetFlags2() & ITEM_FLAG2_USED_IN_A_TRADESKILL) != 0; }
|
||||
|
||||
bool IsRangedWeapon() const
|
||||
{
|
||||
|
||||
@@ -449,7 +449,7 @@ bool CollectionMgr::CanAddAppearance(ItemModifiedAppearanceEntry const* itemModi
|
||||
if (_owner->GetPlayer()->CanUseItem(itemTemplate) != EQUIP_ERR_OK)
|
||||
return false;
|
||||
|
||||
if (itemTemplate->GetFlags2() & ITEM_FLAG2_CANNOT_TRANSMOG || itemTemplate->GetQuality() == ITEM_QUALITY_ARTIFACT)
|
||||
if (itemTemplate->GetFlags2() & ITEM_FLAG2_NO_SOURCE_FOR_ITEM_VISUAL || itemTemplate->GetQuality() == ITEM_QUALITY_ARTIFACT)
|
||||
return false;
|
||||
|
||||
switch (itemTemplate->GetClass())
|
||||
@@ -502,7 +502,7 @@ bool CollectionMgr::CanAddAppearance(ItemModifiedAppearanceEntry const* itemModi
|
||||
}
|
||||
|
||||
if (itemTemplate->GetQuality() < ITEM_QUALITY_UNCOMMON)
|
||||
if (!(itemTemplate->GetFlags2() & ITEM_FLAG2_CAN_TRANSMOG) || !(itemTemplate->GetFlags3() & 0x200000))
|
||||
if (!(itemTemplate->GetFlags2() & ITEM_FLAG2_IGNORE_QUALITY_FOR_ITEM_VISUAL_SOURCE) || !(itemTemplate->GetFlags3() & ITEM_FLAG3_ACTS_AS_TRANSMOG_HIDDEN_VISUAL_OPTION))
|
||||
return false;
|
||||
|
||||
if (itemModifiedAppearance->ID < _appearances.size() && _appearances.test(itemModifiedAppearance->ID))
|
||||
|
||||
@@ -11028,7 +11028,7 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool
|
||||
}
|
||||
else if (type == INVTYPE_WEAPONOFFHAND)
|
||||
{
|
||||
if (!CanDualWield() && !(pProto->GetFlags3() & ITEM_FLAG3_DUAL_WIELD_NOT_REQUIRED))
|
||||
if (!CanDualWield() && !(pProto->GetFlags3() & ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD))
|
||||
return EQUIP_ERR_2HSKILLNOTFOUND;
|
||||
}
|
||||
else if (type == INVTYPE_2HWEAPON)
|
||||
@@ -11403,13 +11403,13 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const
|
||||
if (!proto)
|
||||
return EQUIP_ERR_ITEM_NOT_FOUND;
|
||||
|
||||
if (proto->GetFlags2() & ITEM_FLAG2_UNAVAILABLE_FOR_PLAYERS)
|
||||
if (proto->GetFlags2() & ITEM_FLAG2_INTERNAL_ITEM)
|
||||
return EQUIP_ERR_CANT_EQUIP_EVER;
|
||||
|
||||
if ((proto->GetFlags2() & ITEM_FLAG2_HORDE_ONLY) && GetTeam() != HORDE)
|
||||
if ((proto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE) && GetTeam() != HORDE)
|
||||
return EQUIP_ERR_CANT_EQUIP_EVER;
|
||||
|
||||
if ((proto->GetFlags2() & ITEM_FLAG2_ALLIANCE_ONLY) && GetTeam() != ALLIANCE)
|
||||
if ((proto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE) && GetTeam() != ALLIANCE)
|
||||
return EQUIP_ERR_CANT_EQUIP_EVER;
|
||||
|
||||
if ((proto->GetAllowableClass() & getClassMask()) == 0 || (proto->GetAllowableRace() & getRaceMask()) == 0)
|
||||
@@ -12221,7 +12221,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 (ItemTemplate const* pTmp = pItem->GetTemplate())
|
||||
if (pTmp->GetFlags() & ITEM_FLAG_OPENABLE)
|
||||
if (pTmp->GetFlags() & ITEM_FLAG_HAS_LOOT)
|
||||
pItem->ItemContainerDeleteLootMoneyAndLootItemsFromDB();
|
||||
|
||||
if (IsInWorld() && update)
|
||||
@@ -21856,7 +21856,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c
|
||||
if (!bStore)
|
||||
AutoUnequipOffhandIfNeed();
|
||||
|
||||
if (pProto->GetFlags() & ITEM_FLAG_REFUNDABLE && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1)
|
||||
if (pProto->GetFlags() & ITEM_FLAG_ITEM_PURCHASE_RECORD && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1)
|
||||
{
|
||||
it->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE);
|
||||
it->SetRefundRecipient(GetGUID());
|
||||
@@ -22051,7 +22051,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!IsGameMaster() && ((pProto->GetFlags2() & ITEM_FLAG2_HORDE_ONLY && GetTeam() == ALLIANCE) || (pProto->GetFlags2() == ITEM_FLAG2_ALLIANCE_ONLY && GetTeam() == HORDE)))
|
||||
if (!IsGameMaster() && ((pProto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE && GetTeam() == ALLIANCE) || (pProto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE && GetTeam() == HORDE)))
|
||||
return false;
|
||||
|
||||
Creature* creature = GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR);
|
||||
@@ -24036,7 +24036,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_DUAL_WIELD_NOT_REQUIRED))
|
||||
&& ((offItem->GetTemplate()->GetInventoryType() == INVTYPE_WEAPONOFFHAND && !(offItem->GetTemplate()->GetFlags3() & ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD))
|
||||
|| offItem->GetTemplate()->GetInventoryType() == INVTYPE_WEAPON))
|
||||
force = true;
|
||||
|
||||
@@ -25326,7 +25326,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_EQUIPPED)
|
||||
if (itemProto->GetFlags() & ITEM_FLAG_UNIQUE_EQUIPPABLE)
|
||||
{
|
||||
// there is an equip limit on this item
|
||||
if (HasItemOrGemWithIdEquipped(itemProto->GetId(), 1, except_slot))
|
||||
|
||||
@@ -376,7 +376,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
|
||||
{
|
||||
UpdateDamagePhysical(BASE_ATTACK);
|
||||
if (Item* offhand = GetWeaponForAttack(OFF_ATTACK, true))
|
||||
if (CanDualWield() || offhand->GetTemplate()->GetFlags3() & ITEM_FLAG3_DUAL_WIELD_NOT_REQUIRED)
|
||||
if (CanDualWield() || offhand->GetTemplate()->GetFlags3() & ITEM_FLAG3_ALWAYS_ALLOW_DUAL_WIELD)
|
||||
UpdateDamagePhysical(OFF_ATTACK);
|
||||
|
||||
if (HasAuraType(SPELL_AURA_MOD_SPELL_DAMAGE_OF_ATTACK_POWER) ||
|
||||
|
||||
@@ -2479,7 +2479,7 @@ void FillDisenchantFields(uint32* disenchantID, uint32* requiredDisenchantSkill,
|
||||
{
|
||||
*disenchantID = 0;
|
||||
*(int32*)requiredDisenchantSkill = -1;
|
||||
if ((itemTemplate.GetFlags() & (ITEM_FLAG_CONJURED | ITEM_FLAG_UNK6)) ||
|
||||
if ((itemTemplate.GetFlags() & (ITEM_FLAG_CONJURED | ITEM_FLAG_NO_DISENCHANT)) ||
|
||||
itemTemplate.GetBonding() == BIND_QUEST_ITEM || itemTemplate.GetArea() || itemTemplate.GetMap() ||
|
||||
itemTemplate.GetMaxStackSize() > 1 ||
|
||||
itemTemplate.GetQuality() < ITEM_QUALITY_UNCOMMON || itemTemplate.GetQuality() > ITEM_QUALITY_EPIC ||
|
||||
|
||||
@@ -1023,7 +1023,7 @@ void Group::GroupLoot(Loot* loot, WorldObject* lootedObject)
|
||||
if (item->DisenchantID && m_maxEnchantingLevel >= item->RequiredDisenchantSkill)
|
||||
r->rollVoteMask |= ROLL_FLAG_TYPE_DISENCHANT;
|
||||
|
||||
if (item->GetFlags2() & ITEM_FLAG2_NEED_ROLL_DISABLED)
|
||||
if (item->GetFlags2() & ITEM_FLAG2_CAN_ONLY_ROLL_GREED)
|
||||
r->rollVoteMask &= ~ROLL_FLAG_TYPE_NEED;
|
||||
|
||||
loot->items[itemSlot].is_blocked = true;
|
||||
|
||||
@@ -329,7 +329,7 @@ void WorldSession::HandleDestroyItemOpcode(WorldPackets::Item::DestroyItem& dest
|
||||
return;
|
||||
}
|
||||
|
||||
if (item->GetTemplate()->GetFlags() & ITEM_FLAG_INDESTRUCTIBLE)
|
||||
if (item->GetTemplate()->GetFlags() & ITEM_FLAG_NO_USER_DESTROY)
|
||||
{
|
||||
_player->SendEquipError(EQUIP_ERR_DROP_BOUND_ITEM, NULL, NULL);
|
||||
return;
|
||||
@@ -623,8 +623,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_HORDE_ONLY && _player->GetTeam() == ALLIANCE) ||
|
||||
(itemTemplate->GetFlags2() & ITEM_FLAG2_ALLIANCE_ONLY && _player->GetTeam() == HORDE))
|
||||
if ((itemTemplate->GetFlags2() & ITEM_FLAG2_FACTION_HORDE && _player->GetTeam() == ALLIANCE) ||
|
||||
(itemTemplate->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE && _player->GetTeam() == HORDE))
|
||||
continue;
|
||||
|
||||
// Items sold out are not displayed in list
|
||||
@@ -780,7 +780,7 @@ void WorldSession::HandleWrapItem(WorldPackets::Item::WrapItem& packet)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(gift->GetTemplate()->GetFlags() & ITEM_FLAG_WRAPPER)) // cheating: non-wrapper wrapper
|
||||
if (!(gift->GetTemplate()->GetFlags() & ITEM_FLAG_IS_WRAPPER)) // cheating: non-wrapper wrapper
|
||||
{
|
||||
_player->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, gift, NULL);
|
||||
return;
|
||||
@@ -970,7 +970,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_EQUIPPED)
|
||||
if (iGemProto->GetFlags() & ITEM_FLAG_UNIQUE_EQUIPPABLE)
|
||||
{
|
||||
for (uint32 j = 0; j < MAX_GEM_SOCKETS; ++j)
|
||||
{
|
||||
|
||||
@@ -323,7 +323,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)
|
||||
ItemTemplate const* proto = pItem->GetTemplate();
|
||||
|
||||
// destroy only 5 items from stack in case prospecting and milling
|
||||
if (proto->GetFlags() & (ITEM_FLAG_PROSPECTABLE | ITEM_FLAG_MILLABLE))
|
||||
if (proto->GetFlags() & (ITEM_FLAG_IS_PROSPECTABLE | ITEM_FLAG_IS_MILLABLE))
|
||||
{
|
||||
pItem->m_lootGenerated = false;
|
||||
pItem->loot.clear();
|
||||
@@ -339,7 +339,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_OPENABLE))
|
||||
if (pItem->loot.isLooted() || !(proto->GetFlags() & ITEM_FLAG_HAS_LOOT))
|
||||
player->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true);
|
||||
}
|
||||
return; // item can be looted only single player
|
||||
|
||||
@@ -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_BIND_TO_ACCOUNT))
|
||||
if (!itemProto || !(itemProto->GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT))
|
||||
{
|
||||
accountBound = false;
|
||||
break;
|
||||
|
||||
@@ -77,7 +77,7 @@ 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_USEABLE_IN_ARENA) && user->InArena())
|
||||
if (proto->GetClass() == ITEM_CLASS_CONSUMABLE && !(proto->GetFlags() & ITEM_FLAG_IGNORE_DEFAULT_ARENA_RESTRICTIONS) && user->InArena())
|
||||
{
|
||||
user->SendEquipError(EQUIP_ERR_NOT_DURING_ARENA_MATCH, item, NULL);
|
||||
return;
|
||||
@@ -150,7 +150,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_OPENABLE) && !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
|
||||
if (!(proto->GetFlags() & ITEM_FLAG_HAS_LOOT) && !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))
|
||||
{
|
||||
player->SendEquipError(EQUIP_ERR_CLIENT_LOCKED_OUT, item, NULL);
|
||||
TC_LOG_ERROR("network", "Possible hacking attempt: Player %s [%s] tried to open item [%s, entry: %u] which is not openable!",
|
||||
|
||||
@@ -359,7 +359,7 @@ LootItem::LootItem(LootStoreItem const& li)
|
||||
conditions = li.conditions;
|
||||
|
||||
ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemid);
|
||||
freeforall = proto && (proto->GetFlags() & ITEM_FLAG_PARTY_LOOT);
|
||||
freeforall = proto && (proto->GetFlags() & ITEM_FLAG_MULTI_DROP);
|
||||
follow_loot_rules = proto && (proto->FlagsCu & ITEM_FLAGS_CU_FOLLOW_LOOT_RULES);
|
||||
|
||||
needs_quest = li.needs_quest;
|
||||
@@ -387,14 +387,14 @@ bool LootItem::AllowedForPlayer(Player const* player) const
|
||||
return false;
|
||||
|
||||
// not show loot for players without profession or those who already know the recipe
|
||||
if ((pProto->GetFlags() & ITEM_FLAG_SMART_LOOT) && (!player->HasSkill(pProto->GetRequiredSkill()) || player->HasSpell(pProto->Effects[1]->SpellID)))
|
||||
if ((pProto->GetFlags() & ITEM_FLAG_HIDE_UNUSABLE_RECIPE) && (!player->HasSkill(pProto->GetRequiredSkill()) || player->HasSpell(pProto->Effects[1]->SpellID)))
|
||||
return false;
|
||||
|
||||
// not show loot for not own team
|
||||
if ((pProto->GetFlags2() & ITEM_FLAG2_HORDE_ONLY) && player->GetTeam() != HORDE)
|
||||
if ((pProto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE) && player->GetTeam() != HORDE)
|
||||
return false;
|
||||
|
||||
if ((pProto->GetFlags2() & ITEM_FLAG2_ALLIANCE_ONLY) && player->GetTeam() != ALLIANCE)
|
||||
if ((pProto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE) && player->GetTeam() != ALLIANCE)
|
||||
return false;
|
||||
|
||||
// check quest requirements
|
||||
@@ -442,7 +442,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_PARTY_LOOT))
|
||||
if (!item.needs_quest && item.conditions.empty() && !(proto->GetFlags() & ITEM_FLAG_MULTI_DROP))
|
||||
++unlootedCount;
|
||||
}
|
||||
}
|
||||
@@ -1624,7 +1624,7 @@ void LoadLootTemplates_Item()
|
||||
// remove real entries and check existence loot
|
||||
ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
|
||||
for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
|
||||
if (lootIdSet.find(itr->second.GetId()) != lootIdSet.end() && itr->second.GetFlags() & ITEM_FLAG_OPENABLE)
|
||||
if (lootIdSet.find(itr->second.GetId()) != lootIdSet.end() && itr->second.GetFlags() & ITEM_FLAG_HAS_LOOT)
|
||||
lootIdSet.erase(itr->second.GetId());
|
||||
|
||||
// output error for any still listed (not referenced from appropriate table) ids
|
||||
@@ -1649,7 +1649,7 @@ void LoadLootTemplates_Milling()
|
||||
ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
|
||||
for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
|
||||
{
|
||||
if (!(itr->second.GetFlags() & ITEM_FLAG_MILLABLE))
|
||||
if (!(itr->second.GetFlags() & ITEM_FLAG_IS_MILLABLE))
|
||||
continue;
|
||||
|
||||
if (lootIdSet.find(itr->second.GetId()) != lootIdSet.end())
|
||||
@@ -1712,7 +1712,7 @@ void LoadLootTemplates_Prospecting()
|
||||
ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
|
||||
for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
|
||||
{
|
||||
if (!(itr->second.GetFlags() & ITEM_FLAG_PROSPECTABLE))
|
||||
if (!(itr->second.GetFlags() & ITEM_FLAG_IS_PROSPECTABLE))
|
||||
continue;
|
||||
|
||||
if (lootIdSet.find(itr->second.GetId()) != lootIdSet.end())
|
||||
|
||||
@@ -4588,7 +4588,7 @@ void Spell::TakeReagents()
|
||||
ItemTemplate const* castItemTemplate = m_CastItem ? m_CastItem->GetTemplate() : NULL;
|
||||
|
||||
// do not take reagents for these item casts
|
||||
if (castItemTemplate && castItemTemplate->GetFlags() & ITEM_FLAG_TRIGGERED_CAST)
|
||||
if (castItemTemplate && castItemTemplate->GetFlags() & ITEM_FLAG_NO_REAGENT_COST)
|
||||
return;
|
||||
|
||||
Player* p_caster = m_caster->ToPlayer();
|
||||
@@ -6125,7 +6125,7 @@ SpellCastResult Spell::CheckItems()
|
||||
}
|
||||
|
||||
// do not take reagents for these item casts
|
||||
if (!(m_CastItem && m_CastItem->GetTemplate()->GetFlags() & ITEM_FLAG_TRIGGERED_CAST))
|
||||
if (!(m_CastItem && m_CastItem->GetTemplate()->GetFlags() & 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
|
||||
@@ -6252,7 +6252,7 @@ SpellCastResult Spell::CheckItems()
|
||||
if (m_targets.GetItemTarget()->GetOwner() != m_caster)
|
||||
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_TRIGGERED_CAST)
|
||||
if (m_CastItem && m_CastItem->GetTemplate()->GetFlags() & ITEM_FLAG_NO_REAGENT_COST)
|
||||
return SPELL_FAILED_TOTEM_CATEGORY;
|
||||
ItemPosCountVec dest;
|
||||
InventoryResult msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, effect->ItemType, 1);
|
||||
@@ -6373,7 +6373,7 @@ SpellCastResult Spell::CheckItems()
|
||||
if (!m_targets.GetItemTarget())
|
||||
return SPELL_FAILED_CANT_BE_PROSPECTED;
|
||||
//ensure item is a prospectable ore
|
||||
if (!(m_targets.GetItemTarget()->GetTemplate()->GetFlags() & ITEM_FLAG_PROSPECTABLE))
|
||||
if (!(m_targets.GetItemTarget()->GetTemplate()->GetFlags() & ITEM_FLAG_IS_PROSPECTABLE))
|
||||
return SPELL_FAILED_CANT_BE_PROSPECTED;
|
||||
//prevent prospecting in trade slot
|
||||
if (m_targets.GetItemTarget()->GetOwnerGUID() != m_caster->GetGUID())
|
||||
@@ -6396,7 +6396,7 @@ SpellCastResult Spell::CheckItems()
|
||||
if (!m_targets.GetItemTarget())
|
||||
return SPELL_FAILED_CANT_BE_MILLED;
|
||||
//ensure item is a millable herb
|
||||
if (!(m_targets.GetItemTarget()->GetTemplate()->GetFlags() & ITEM_FLAG_MILLABLE))
|
||||
if (!(m_targets.GetItemTarget()->GetTemplate()->GetFlags() & ITEM_FLAG_IS_MILLABLE))
|
||||
return SPELL_FAILED_CANT_BE_MILLED;
|
||||
//prevent milling in trade slot
|
||||
if (m_targets.GetItemTarget()->GetOwnerGUID() != m_caster->GetGUID())
|
||||
|
||||
@@ -2505,7 +2505,7 @@ void Spell::EffectEnchantItemPerm(SpellEffIndex effIndex)
|
||||
else
|
||||
{
|
||||
// do not increase skill if vellum used
|
||||
if (!(m_CastItem && m_CastItem->GetTemplate()->GetFlags() & ITEM_FLAG_TRIGGERED_CAST))
|
||||
if (!(m_CastItem && m_CastItem->GetTemplate()->GetFlags() & ITEM_FLAG_NO_REAGENT_COST))
|
||||
player->UpdateCraftSkill(m_spellInfo->Id);
|
||||
|
||||
uint32 enchant_id = effectInfo->MiscValue;
|
||||
@@ -4882,7 +4882,7 @@ void Spell::EffectProspecting(SpellEffIndex /*effIndex*/)
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
if (!itemTarget || !(itemTarget->GetTemplate()->GetFlags() & ITEM_FLAG_PROSPECTABLE))
|
||||
if (!itemTarget || !(itemTarget->GetTemplate()->GetFlags() & ITEM_FLAG_IS_PROSPECTABLE))
|
||||
return;
|
||||
|
||||
if (itemTarget->GetCount() < 5)
|
||||
@@ -4907,7 +4907,7 @@ void Spell::EffectMilling(SpellEffIndex /*effIndex*/)
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
if (!itemTarget || !(itemTarget->GetTemplate()->GetFlags() & ITEM_FLAG_MILLABLE))
|
||||
if (!itemTarget || !(itemTarget->GetTemplate()->GetFlags() & ITEM_FLAG_IS_MILLABLE))
|
||||
return;
|
||||
|
||||
if (itemTarget->GetCount() < 5)
|
||||
|
||||
Reference in New Issue
Block a user