/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*/
#ifndef _ITEMPROTOTYPE_H
#define _ITEMPROTOTYPE_H
#include "Common.h"
#include "DB2Structure.h"
#include "Errors.h"
#include "SharedDefines.h"
#include
#include
enum ItemModType
{
ITEM_MOD_MANA = 0,
ITEM_MOD_HEALTH = 1,
ITEM_MOD_AGILITY = 3,
ITEM_MOD_STRENGTH = 4,
ITEM_MOD_INTELLECT = 5,
ITEM_MOD_SPIRIT = 6,
ITEM_MOD_STAMINA = 7,
ITEM_MOD_DEFENSE_SKILL_RATING = 12,
ITEM_MOD_DODGE_RATING = 13,
ITEM_MOD_PARRY_RATING = 14,
ITEM_MOD_BLOCK_RATING = 15,
ITEM_MOD_HIT_MELEE_RATING = 16,
ITEM_MOD_HIT_RANGED_RATING = 17,
ITEM_MOD_HIT_SPELL_RATING = 18,
ITEM_MOD_CRIT_MELEE_RATING = 19,
ITEM_MOD_CRIT_RANGED_RATING = 20,
ITEM_MOD_CRIT_SPELL_RATING = 21,
ITEM_MOD_CORRUPTION = 22,
ITEM_MOD_CORRUPTION_RESISTANCE = 23,
ITEM_MOD_MODIFIED_CRAFTING_STAT_1 = 24,
ITEM_MOD_MODIFIED_CRAFTING_STAT_2 = 25,
ITEM_MOD_CRIT_TAKEN_RANGED_RATING = 26,
ITEM_MOD_CRIT_TAKEN_SPELL_RATING = 27,
ITEM_MOD_HASTE_MELEE_RATING = 28,
ITEM_MOD_HASTE_RANGED_RATING = 29,
ITEM_MOD_HASTE_SPELL_RATING = 30,
ITEM_MOD_HIT_RATING = 31,
ITEM_MOD_CRIT_RATING = 32,
ITEM_MOD_HIT_TAKEN_RATING = 33,
ITEM_MOD_CRIT_TAKEN_RATING = 34,
ITEM_MOD_RESILIENCE_RATING = 35,
ITEM_MOD_HASTE_RATING = 36,
ITEM_MOD_EXPERTISE_RATING = 37,
ITEM_MOD_ATTACK_POWER = 38,
ITEM_MOD_RANGED_ATTACK_POWER = 39,
ITEM_MOD_VERSATILITY = 40,
ITEM_MOD_SPELL_HEALING_DONE = 41,
ITEM_MOD_SPELL_DAMAGE_DONE = 42,
ITEM_MOD_MANA_REGENERATION = 43,
ITEM_MOD_ARMOR_PENETRATION_RATING = 44,
ITEM_MOD_SPELL_POWER = 45,
ITEM_MOD_HEALTH_REGEN = 46,
ITEM_MOD_SPELL_PENETRATION = 47,
ITEM_MOD_BLOCK_VALUE = 48,
ITEM_MOD_MASTERY_RATING = 49,
ITEM_MOD_EXTRA_ARMOR = 50,
ITEM_MOD_FIRE_RESISTANCE = 51,
ITEM_MOD_FROST_RESISTANCE = 52,
ITEM_MOD_HOLY_RESISTANCE = 53,
ITEM_MOD_SHADOW_RESISTANCE = 54,
ITEM_MOD_NATURE_RESISTANCE = 55,
ITEM_MOD_ARCANE_RESISTANCE = 56,
ITEM_MOD_PVP_POWER = 57,
ITEM_MOD_CR_UNUSED_0 = 58,
ITEM_MOD_CR_UNUSED_1 = 59,
ITEM_MOD_CR_UNUSED_3 = 60,
ITEM_MOD_CR_SPEED = 61,
ITEM_MOD_CR_LIFESTEAL = 62,
ITEM_MOD_CR_AVOIDANCE = 63,
ITEM_MOD_CR_STURDINESS = 64,
ITEM_MOD_CR_UNUSED_7 = 65,
ITEM_MOD_CR_UNUSED_27 = 66,
ITEM_MOD_CR_UNUSED_9 = 67,
ITEM_MOD_CR_UNUSED_10 = 68,
ITEM_MOD_CR_UNUSED_11 = 69,
ITEM_MOD_CR_UNUSED_12 = 70,
ITEM_MOD_AGI_STR_INT = 71,
ITEM_MOD_AGI_STR = 72,
ITEM_MOD_AGI_INT = 73,
ITEM_MOD_STR_INT = 74
};
enum ItemSpelltriggerType
{
ITEM_SPELLTRIGGER_ON_USE = 0, // use after equip cooldown
ITEM_SPELLTRIGGER_ON_EQUIP = 1,
ITEM_SPELLTRIGGER_ON_PROC = 2,
ITEM_SPELLTRIGGER_SUMMONED_BY_SPELL = 3,
ITEM_SPELLTRIGGER_ON_DEATH = 4,
ITEM_SPELLTRIGGER_ON_PICKUP = 5,
ITEM_SPELLTRIGGER_ON_LEARN = 6, // used in ItemEffect in second slot with spell_id with SPELL_GENERIC_LEARN in spell_1
ITEM_SPELLTRIGGER_ON_LOOTED = 7,
ITEM_SPELLTRIGGER_TEACH_MOUNT = 8,
ITEM_SPELLTRIGGER_ON_PICKUP_FORCED = 9,
ITEM_SPELLTRIGGER_ON_LOOTED_FORCED = 10,
};
enum ItemBondingType
{
BIND_NONE = 0,
BIND_ON_ACQUIRE = 1,
BIND_ON_EQUIP = 2,
BIND_ON_USE = 3,
BIND_QUEST = 4,
BIND_UNUSED_1 = 5,
BIND_UNUSED_2 = 6,
BIND_WOW_ACCOUNT = 7,
BIND_BNET_ACCOUNT = 8,
BIND_BNET_ACCOUNT_UNTIL_EQUIPPED = 9,
};
/* /// @todo: Requiring actual cases in which using (an) item isn't allowed while shapeshifted. Else, this flag would need an implementation.
ITEM_FLAG_USE_WHEN_SHAPESHIFTED = 0x00800000, // Item can be used in shapeshift forms */
// ITEM_FIELD_FLAGS
enum ItemFieldFlags : uint32
{
ITEM_FIELD_FLAG_SOULBOUND = 0x00000001, // Item is soulbound and cannot be traded <<--
ITEM_FIELD_FLAG_TRANSLATED = 0x00000002, // Item text will not read as garbage when player does not know the language
ITEM_FIELD_FLAG_UNLOCKED = 0x00000004, // Item had lock but can be opened now
ITEM_FIELD_FLAG_WRAPPED = 0x00000008, // Item is wrapped and contains another item
ITEM_FIELD_FLAG_UNK2 = 0x00000010,
ITEM_FIELD_FLAG_UNK3 = 0x00000020,
ITEM_FIELD_FLAG_UNK4 = 0x00000040,
ITEM_FIELD_FLAG_UNK5 = 0x00000080,
ITEM_FIELD_FLAG_BOP_TRADEABLE = 0x00000100, // Allows trading soulbound items
ITEM_FIELD_FLAG_READABLE = 0x00000200, // Opens text page when right clicked
ITEM_FIELD_FLAG_UNK6 = 0x00000400,
ITEM_FIELD_FLAG_UNK7 = 0x00000800,
ITEM_FIELD_FLAG_REFUNDABLE = 0x00001000, // Item can be returned to vendor for its original cost (extended cost)
ITEM_FIELD_FLAG_UNK8 = 0x00002000,
ITEM_FIELD_FLAG_UNK9 = 0x00004000,
ITEM_FIELD_FLAG_UNK10 = 0x00008000,
ITEM_FIELD_FLAG_UNK11 = 0x00010000,
ITEM_FIELD_FLAG_UNK12 = 0x00020000,
ITEM_FIELD_FLAG_UNK13 = 0x00040000,
ITEM_FIELD_FLAG_CHILD = 0x00080000,
ITEM_FIELD_FLAG_UNK15 = 0x00100000,
ITEM_FIELD_FLAG_NEW_ITEM = 0x00200000, // Item glows in inventory
ITEM_FIELD_FLAG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x00400000, // Won't play azerite powers animation when viewing it
ITEM_FIELD_FLAG_UNK18 = 0x00800000,
ITEM_FIELD_FLAG_UNK19 = 0x01000000,
ITEM_FIELD_FLAG_UNK20 = 0x02000000,
ITEM_FIELD_FLAG_UNK21 = 0x04000000,
ITEM_FIELD_FLAG_UNK22 = 0x08000000,
ITEM_FIELD_FLAG_UNK23 = 0x10000000,
ITEM_FIELD_FLAG_UNK24 = 0x20000000,
ITEM_FIELD_FLAG_UNK25 = 0x40000000,
ITEM_FIELD_FLAG_UNK26 = 0x80000000
};
DEFINE_ENUM_FLAG(ItemFieldFlags);
enum ItemZoneFlags : uint32
{
ITEM_FIELD_FLAG2_EQUIPPED = 0x1
};
DEFINE_ENUM_FLAG(ItemZoneFlags);
enum ItemFlags : uint32
{
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's spells are castable by players
ITEM_FLAG_NO_EQUIP_COOLDOWN = 0x00000080, // No default 30 seconds cooldown when equipped
ITEM_FLAG_LEGACY = 0x00000100, // Effects are disabled
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, // Only readable items have this (but not all)
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_DISABLE_AUTO_QUOTES = 0x00100000, // Disables quotes around item description in tooltip
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_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_FACTION_HORDE = 0x00000001,
ITEM_FLAG2_FACTION_ALLIANCE = 0x00000002,
ITEM_FLAG2_DONT_IGNORE_BUY_PRICE = 0x00000004, // when item uses extended cost, gold is also required // deprecated
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_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,
ITEM_FLAG3_HIDE_QUEST_ITEM_FROM_OBJECT_TOOLTIP = 0x02000000,
ITEM_FLAG3_DO_NOT_TOAST = 0x04000000,
ITEM_FLAG3_IGNORE_CREATION_CONTEXT_FOR_PROGRESSIVE_WIN_HISTORY = 0x08000000,
ITEM_FLAG3_FORCE_ALL_SPECS_FOR_ITEM_HISTORY = 0x10000000,
ITEM_FLAG3_SAVE_ON_CONSUME = 0x20000000,
ITEM_FLAG3_CONTAINER_SAVES_PLAYER_DATA = 0x40000000,
ITEM_FLAG3_NO_VOID_STORAGE = 0x80000000
};
enum ItemFlags4
{
ITEM_FLAG4_HANDLE_ON_USE_EFFECT_IMMEDIATELY = 0x00000001,
ITEM_FLAG4_ALWAYS_SHOW_ITEM_LEVEL_IN_TOOLTIP = 0x00000002,
ITEM_FLAG4_SHOWS_GENERATION_WITH_RANDOM_STATS = 0x00000004,
ITEM_FLAG4_ACTIVATE_ON_EQUIP_EFFECTS_WHEN_TRANSMOGRIFIED = 0x00000008,
ITEM_FLAG4_ENFORCE_TRANSMOG_WITH_CHILD_ITEM = 0x00000010,
ITEM_FLAG4_SCRAPABLE = 0x00000020,
ITEM_FLAG4_BYPASS_REP_REQUIREMENTS_FOR_TRANSMOG = 0x00000040,
ITEM_FLAG4_DISPLAY_ONLY_ON_DEFINED_RACES = 0x00000080,
ITEM_FLAG4_REGULATED_COMMODITY = 0x00000100,
ITEM_FLAG4_CREATE_LOOT_IMMEDIATELY = 0x00000200,
ITEM_FLAG4_GENERATE_LOOT_SPEC_ITEM = 0x00000400,
ITEM_FLAG4_HIDDEN_IN_REWARD_SUMMARIES = 0x00000800,
ITEM_FLAG4_DISALLOW_WHILE_LEVEL_LINKED = 0x00001000,
ITEM_FLAG4_DISALLOW_ENCHANT = 0x00002000,
ITEM_FLAG4_SQUISH_USING_ITEM_LEVEL_AS_PLAYER_LEVEL = 0x00004000,
ITEM_FLAG4_ALWAYS_SHOW_SELL_PRICE_IN_TOOLTIP = 0x00008000,
ITEM_FLAG4_COSMETIC_ITEM = 0x00010000,
ITEM_FLAG4_NO_SPELL_EFFECT_TOOLTIP_PREFIXES = 0x00020000,
ITEM_FLAG4_IGNORE_COSMETIC_COLLECTION_BEHAVIOR = 0x00040000,
ITEM_FLAG4_NPC_ONLY = 0x00080000,
ITEM_FLAG4_NOT_RESTORABLE = 0x00100000,
ITEM_FLAG4_DONT_DISPLAY_AS_CRAFTING_REAGENT = 0x00200000,
ITEM_FLAG4_DISPLAY_REAGENT_QUALITY_AS_CRAFTED_QUALITY = 0x00400000,
ITEM_FLAG4_NO_SALVAGE = 0x00800000,
ITEM_FLAG4_RECRAFTABLE = 0x01000000,
ITEM_FLAG4_CC_TRINKET = 0x02000000,
ITEM_FLAG4_KEEP_THROUGH_FACTION_CHANGE = 0x04000000,
ITEM_FLAG4_NOT_MULTICRAFTABLE = 0x08000000,
ITEM_FLAG4_DONT_REPORT_LOOT_LOG_TO_SELF = 0x10000000,
};
enum ItemFlagsCustom
{
ITEM_FLAGS_CU_UNUSED = 0x0001,
ITEM_FLAGS_CU_IGNORE_QUEST_STATUS = 0x0002, // No quest status will be checked when this item drops
ITEM_FLAGS_CU_FOLLOW_LOOT_RULES = 0x0004 // Item will always follow group/master/need before greed looting rules
};
enum BAG_FAMILY_MASK
{
BAG_FAMILY_MASK_NONE = 0x00000000,
BAG_FAMILY_MASK_ARROWS = 0x00000001,
BAG_FAMILY_MASK_BULLETS = 0x00000002,
BAG_FAMILY_MASK_SOUL_SHARDS = 0x00000004,
BAG_FAMILY_MASK_LEATHERWORKING_SUPP = 0x00000008,
BAG_FAMILY_MASK_INSCRIPTION_SUPP = 0x00000010,
BAG_FAMILY_MASK_HERBS = 0x00000020,
BAG_FAMILY_MASK_ENCHANTING_SUPP = 0x00000040,
BAG_FAMILY_MASK_ENGINEERING_SUPP = 0x00000080,
BAG_FAMILY_MASK_KEYS = 0x00000100,
BAG_FAMILY_MASK_GEMS = 0x00000200,
BAG_FAMILY_MASK_MINING_SUPP = 0x00000400,
BAG_FAMILY_MASK_SOULBOUND_EQUIPMENT = 0x00000800,
BAG_FAMILY_MASK_VANITY_PETS = 0x00001000,
BAG_FAMILY_MASK_CURRENCY_TOKENS = 0x00002000,
BAG_FAMILY_MASK_QUEST_ITEMS = 0x00004000,
BAG_FAMILY_MASK_FISHING_SUPP = 0x00008000,
BAG_FAMILY_MASK_COOKING_SUPP = 0x00010000,
};
enum SocketColor
{
SOCKET_COLOR_META = 0x00000001,
SOCKET_COLOR_RED = 0x00000002,
SOCKET_COLOR_YELLOW = 0x00000004,
SOCKET_COLOR_BLUE = 0x00000008,
SOCKET_COLOR_HYDRAULIC = 0x00000010,
SOCKET_COLOR_COGWHEEL = 0x00000020,
SOCKET_COLOR_RELIC_IRON = 0x00000040,
SOCKET_COLOR_RELIC_BLOOD = 0x00000080,
SOCKET_COLOR_RELIC_SHADOW = 0x00000100,
SOCKET_COLOR_RELIC_FEL = 0x00000200,
SOCKET_COLOR_RELIC_ARCANE = 0x00000400,
SOCKET_COLOR_RELIC_FROST = 0x00000800,
SOCKET_COLOR_RELIC_FIRE = 0x00001000,
SOCKET_COLOR_RELIC_WATER = 0x00002000,
SOCKET_COLOR_RELIC_LIFE = 0x00004000,
SOCKET_COLOR_RELIC_WIND = 0x00008000,
SOCKET_COLOR_RELIC_HOLY = 0x00010000,
SOCKET_COLOR_PUNCHCARD_RED = 0x00020000,
SOCKET_COLOR_PUNCHCARD_YELLOW = 0x00040000,
SOCKET_COLOR_PUNCHCARD_BLUE = 0x00080000,
SOCKET_COLOR_DOMINATION_BLOOD = 0x00100000,
SOCKET_COLOR_DOMINATION_FROST = 0x00200000,
SOCKET_COLOR_DOMINATION_UNHOLY = 0x00400000,
SOCKET_COLOR_CYPHER = 0x00800000,
SOCKET_COLOR_TINKER = 0x01000000,
SOCKET_COLOR_PRIMORDIAL = 0x02000000,
SOCKET_COLOR_FRAGRANCE = 0x04000000,
SOCKET_COLOR_SINGING_THUNDER = 0x08000000,
SOCKET_COLOR_SINGING_SEA = 0x10000000,
SOCKET_COLOR_SINGING_WIND = 0x20000000,
SOCKET_COLOR_FIBER = 0x40000000,
};
extern int32 const SocketColorToGemTypeMask[31];
#define SOCKET_COLOR_STANDARD (SOCKET_COLOR_RED | SOCKET_COLOR_YELLOW | SOCKET_COLOR_BLUE)
enum InventoryType : uint8
{
INVTYPE_NON_EQUIP = 0,
INVTYPE_HEAD = 1,
INVTYPE_NECK = 2,
INVTYPE_SHOULDERS = 3,
INVTYPE_BODY = 4,
INVTYPE_CHEST = 5,
INVTYPE_WAIST = 6,
INVTYPE_LEGS = 7,
INVTYPE_FEET = 8,
INVTYPE_WRISTS = 9,
INVTYPE_HANDS = 10,
INVTYPE_FINGER = 11,
INVTYPE_TRINKET = 12,
INVTYPE_WEAPON = 13,
INVTYPE_SHIELD = 14,
INVTYPE_RANGED = 15,
INVTYPE_CLOAK = 16,
INVTYPE_2HWEAPON = 17,
INVTYPE_BAG = 18,
INVTYPE_TABARD = 19,
INVTYPE_ROBE = 20,
INVTYPE_WEAPONMAINHAND = 21,
INVTYPE_WEAPONOFFHAND = 22,
INVTYPE_HOLDABLE = 23,
INVTYPE_AMMO = 24,
INVTYPE_THROWN = 25,
INVTYPE_RANGEDRIGHT = 26,
INVTYPE_QUIVER = 27,
INVTYPE_RELIC = 28,
INVTYPE_PROFESSION_TOOL = 29,
INVTYPE_PROFESSION_GEAR = 30,
INVTYPE_EQUIPABLE_SPELL_OFFENSIVE = 31,
INVTYPE_EQUIPABLE_SPELL_UTILITY = 32,
INVTYPE_EQUIPABLE_SPELL_DEFENSIVE = 33,
INVTYPE_EQUIPABLE_SPELL_MOBILITY = 34
};
#define MAX_INVTYPE 35
constexpr std::array InventoryTypesEquipable =
{
INVTYPE_WEAPON,
INVTYPE_SHIELD,
INVTYPE_RANGED,
INVTYPE_2HWEAPON,
INVTYPE_WEAPONMAINHAND,
INVTYPE_WEAPONOFFHAND,
INVTYPE_HOLDABLE,
INVTYPE_THROWN,
INVTYPE_RANGEDRIGHT,
INVTYPE_PROFESSION_TOOL
};
enum ItemClass : uint8
{
ITEM_CLASS_CONSUMABLE = 0,
ITEM_CLASS_CONTAINER = 1,
ITEM_CLASS_WEAPON = 2,
ITEM_CLASS_GEM = 3,
ITEM_CLASS_ARMOR = 4,
ITEM_CLASS_REAGENT = 5,
ITEM_CLASS_PROJECTILE = 6,
ITEM_CLASS_TRADE_GOODS = 7,
ITEM_CLASS_ITEM_ENHANCEMENT = 8,
ITEM_CLASS_RECIPE = 9,
ITEM_CLASS_MONEY = 10, // OBSOLETE
ITEM_CLASS_QUIVER = 11,
ITEM_CLASS_QUEST = 12,
ITEM_CLASS_KEY = 13,
ITEM_CLASS_PERMANENT = 14, // OBSOLETE
ITEM_CLASS_MISCELLANEOUS = 15,
ITEM_CLASS_GLYPH = 16,
ITEM_CLASS_BATTLE_PETS = 17,
ITEM_CLASS_WOW_TOKEN = 18,
ITEM_CLASS_PROFESSION = 19
};
#define MAX_ITEM_CLASS 20
enum ItemSubclassConsumable
{
ITEM_SUBCLASS_CONSUMABLE = 0,
ITEM_SUBCLASS_POTION = 1,
ITEM_SUBCLASS_ELIXIR = 2,
ITEM_SUBCLASS_FLASK = 3,
ITEM_SUBCLASS_SCROLL = 4,
ITEM_SUBCLASS_FOOD_DRINK = 5,
ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6,
ITEM_SUBCLASS_BANDAGE = 7,
ITEM_SUBCLASS_CONSUMABLE_OTHER = 8,
ITEM_SUBCLASS_VANTUS_RUNE = 9,
ITEM_SUBCLASS_UTILITY_CURIO = 10,
ITEM_SUBCLASS_COMBAT_CURIO = 11,
};
#define MAX_ITEM_SUBCLASS_CONSUMABLE 12
enum ItemSubclassContainer
{
ITEM_SUBCLASS_CONTAINER = 0,
ITEM_SUBCLASS_SOUL_CONTAINER = 1,
ITEM_SUBCLASS_HERB_CONTAINER = 2,
ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4,
ITEM_SUBCLASS_GEM_CONTAINER = 5,
ITEM_SUBCLASS_MINING_CONTAINER = 6,
ITEM_SUBCLASS_LEATHERWORKING_CONTAINER = 7,
ITEM_SUBCLASS_INSCRIPTION_CONTAINER = 8,
ITEM_SUBCLASS_TACKLE_CONTAINER = 9,
ITEM_SUBCLASS_COOKING_CONTAINER = 10,
ITEM_SUBCLASS_REAGENT_CONTAINER = 11
};
#define MAX_ITEM_SUBCLASS_CONTAINER 12
enum ItemSubclassWeapon
{
ITEM_SUBCLASS_WEAPON_AXE = 0, // One-Handed Axes
ITEM_SUBCLASS_WEAPON_AXE2 = 1, // Two-Handed Axes
ITEM_SUBCLASS_WEAPON_BOW = 2,
ITEM_SUBCLASS_WEAPON_GUN = 3,
ITEM_SUBCLASS_WEAPON_MACE = 4, // One-Handed Maces
ITEM_SUBCLASS_WEAPON_MACE2 = 5, // Two-Handed Maces
ITEM_SUBCLASS_WEAPON_POLEARM = 6,
ITEM_SUBCLASS_WEAPON_SWORD = 7, // One-Handed Swords
ITEM_SUBCLASS_WEAPON_SWORD2 = 8, // Two-Handed Swords
ITEM_SUBCLASS_WEAPON_WARGLAIVES = 9,
ITEM_SUBCLASS_WEAPON_STAFF = 10,
ITEM_SUBCLASS_WEAPON_EXOTIC = 11, // One-Handed Exotics
ITEM_SUBCLASS_WEAPON_EXOTIC2 = 12, // Two-Handed Exotics
ITEM_SUBCLASS_WEAPON_FIST_WEAPON = 13,
ITEM_SUBCLASS_WEAPON_MISCELLANEOUS = 14,
ITEM_SUBCLASS_WEAPON_DAGGER = 15,
ITEM_SUBCLASS_WEAPON_THROWN = 16,
ITEM_SUBCLASS_WEAPON_SPEAR = 17,
ITEM_SUBCLASS_WEAPON_CROSSBOW = 18,
ITEM_SUBCLASS_WEAPON_WAND = 19,
ITEM_SUBCLASS_WEAPON_FISHING_POLE = 20
};
#define ITEM_SUBCLASS_MASK_WEAPON_RANGED (\
(1 << ITEM_SUBCLASS_WEAPON_BOW) | (1 << ITEM_SUBCLASS_WEAPON_GUN) |\
(1 << ITEM_SUBCLASS_WEAPON_CROSSBOW))
#define MAX_ITEM_SUBCLASS_WEAPON 21
enum ItemSubclassGem
{
ITEM_SUBCLASS_GEM_INTELLECT = 0,
ITEM_SUBCLASS_GEM_AGILITY = 1,
ITEM_SUBCLASS_GEM_STRENGTH = 2,
ITEM_SUBCLASS_GEM_STAMINA = 3,
ITEM_SUBCLASS_GEM_SPIRIT = 4,
ITEM_SUBCLASS_GEM_CRITICAL_STRIKE = 5,
ITEM_SUBCLASS_GEM_MASTERY = 6,
ITEM_SUBCLASS_GEM_HASTE = 7,
ITEM_SUBCLASS_GEM_VERSATILITY = 8,
ITEM_SUBCLASS_GEM_OTHER = 9,
ITEM_SUBCLASS_GEM_MULTIPLE_STATS = 10,
ITEM_SUBCLASS_GEM_ARTIFACT_RELIC = 11
};
#define MAX_ITEM_SUBCLASS_GEM 12
enum ItemSubclassArmor
{
ITEM_SUBCLASS_ARMOR_MISCELLANEOUS = 0,
ITEM_SUBCLASS_ARMOR_CLOTH = 1,
ITEM_SUBCLASS_ARMOR_LEATHER = 2,
ITEM_SUBCLASS_ARMOR_MAIL = 3,
ITEM_SUBCLASS_ARMOR_PLATE = 4,
ITEM_SUBCLASS_ARMOR_COSMETIC = 5,
ITEM_SUBCLASS_ARMOR_SHIELD = 6,
ITEM_SUBCLASS_ARMOR_LIBRAM = 7,
ITEM_SUBCLASS_ARMOR_IDOL = 8,
ITEM_SUBCLASS_ARMOR_TOTEM = 9,
ITEM_SUBCLASS_ARMOR_SIGIL = 10,
ITEM_SUBCLASS_ARMOR_RELIC = 11,
};
#define MAX_ITEM_SUBCLASS_ARMOR 12
enum ItemSubclassReagent
{
ITEM_SUBCLASS_REAGENT = 0,
ITEM_SUBCLASS_KEYSTONE = 1,
ITEM_SUBCLASS_CONTEXT_TOKEN = 2
};
#define MAX_ITEM_SUBCLASS_REAGENT 3
enum ItemSubclassProjectile
{
ITEM_SUBCLASS_WAND = 0, // OBSOLETE
ITEM_SUBCLASS_BOLT = 1, // OBSOLETE
ITEM_SUBCLASS_ARROW = 2,
ITEM_SUBCLASS_BULLET = 3,
ITEM_SUBCLASS_THROWN = 4 // OBSOLETE
};
#define MAX_ITEM_SUBCLASS_PROJECTILE 5
enum ItemSubclassTradeGoods
{
ITEM_SUBCLASS_TRADE_GOODS = 0,
ITEM_SUBCLASS_PARTS = 1,
ITEM_SUBCLASS_EXPLOSIVES = 2,
ITEM_SUBCLASS_DEVICES = 3,
ITEM_SUBCLASS_JEWELCRAFTING = 4,
ITEM_SUBCLASS_CLOTH = 5,
ITEM_SUBCLASS_LEATHER = 6,
ITEM_SUBCLASS_METAL_STONE = 7,
ITEM_SUBCLASS_MEAT = 8,
ITEM_SUBCLASS_HERB = 9,
ITEM_SUBCLASS_ELEMENTAL = 10,
ITEM_SUBCLASS_TRADE_GOODS_OTHER = 11,
ITEM_SUBCLASS_ENCHANTING = 12,
ITEM_SUBCLASS_MATERIAL = 13,
ITEM_SUBCLASS_ENCHANTMENT = 14,
ITEM_SUBCLASS_WEAPON_ENCHANTMENT = 15,
ITEM_SUBCLASS_INSCRIPTION = 16,
ITEM_SUBCLASS_EXPLOSIVES_DEVICES = 17,
ITEM_SUBCLASS_OPTIONAL_REAGENT = 18,
ITEM_SUBCLASS_FINISHING_REAGENT = 19,
};
#define MAX_ITEM_SUBCLASS_TRADE_GOODS 20
enum ItemSubclassItemEnhancement
{
ITEM_SUBCLASS_ITEM_ENHANCEMENT_HEAD = 0,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_NECK = 1,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_SHOULDER = 2,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_CLOAK = 3,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_CHEST = 4,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_WRIST = 5,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_HANDS = 6,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_WAIST = 7,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_LEGS = 8,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_FEET = 9,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_FINGER = 10,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_WEAPON = 11,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_TWO_HANDED_WEAPON = 12,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_SHIELD_OFF_HAND = 13,
ITEM_SUBCLASS_ITEM_ENHANCEMENT_MISC = 14
};
#define MAX_ITEM_SUBCLASS_ITEM_ENHANCEMENT 15
enum ItemSubclassRecipe
{
ITEM_SUBCLASS_BOOK = 0,
ITEM_SUBCLASS_LEATHERWORKING_PATTERN = 1,
ITEM_SUBCLASS_TAILORING_PATTERN = 2,
ITEM_SUBCLASS_ENGINEERING_SCHEMATIC = 3,
ITEM_SUBCLASS_BLACKSMITHING = 4,
ITEM_SUBCLASS_COOKING_RECIPE = 5,
ITEM_SUBCLASS_ALCHEMY_RECIPE = 6,
ITEM_SUBCLASS_FIRST_AID_MANUAL = 7,
ITEM_SUBCLASS_ENCHANTING_FORMULA = 8,
ITEM_SUBCLASS_FISHING_MANUAL = 9,
ITEM_SUBCLASS_JEWELCRAFTING_RECIPE = 10,
ITEM_SUBCLASS_INSCRIPTION_TECHNIQUE = 11
};
#define MAX_ITEM_SUBCLASS_RECIPE 12
enum ItemSubclassMoney
{
ITEM_SUBCLASS_MONEY = 0, // OBSOLETE
};
#define MAX_ITEM_SUBCLASS_MONEY 1
enum ItemSubclassQuiver
{
ITEM_SUBCLASS_QUIVER0 = 0, // OBSOLETE
ITEM_SUBCLASS_QUIVER1 = 1, // OBSOLETE
ITEM_SUBCLASS_QUIVER = 2,
ITEM_SUBCLASS_AMMO_POUCH = 3
};
#define MAX_ITEM_SUBCLASS_QUIVER 4
enum ItemSubclassQuest
{
ITEM_SUBCLASS_QUEST = 0,
ITEM_SUBCLASS_QUEST_UNK3 = 3, // 1 item (33604)
ITEM_SUBCLASS_QUEST_UNK8 = 8, // 2 items (37445, 49700)
};
#define MAX_ITEM_SUBCLASS_QUEST 9
enum ItemSubclassKey
{
ITEM_SUBCLASS_KEY = 0,
ITEM_SUBCLASS_LOCKPICK = 1
};
#define MAX_ITEM_SUBCLASS_KEY 2
enum ItemSubclassPermanent
{
ITEM_SUBCLASS_PERMANENT = 0
};
#define MAX_ITEM_SUBCLASS_PERMANENT 1
enum ItemSubclassJunk
{
ITEM_SUBCLASS_MISCELLANEOUS_JUNK = 0,
ITEM_SUBCLASS_MISCELLANEOUS_REAGENT = 1,
ITEM_SUBCLASS_MISCELLANEOUS_COMPANION_PET = 2,
ITEM_SUBCLASS_MISCELLANEOUS_HOLIDAY = 3,
ITEM_SUBCLASS_MISCELLANEOUS_OTHER = 4,
ITEM_SUBCLASS_MISCELLANEOUS_MOUNT = 5,
ITEM_SUBCLASS_MISCELLANEOUS_MOUNT_EQUIPMENT = 6
};
#define MAX_ITEM_SUBCLASS_MISCELLANEOUS 7
enum ItemSubclassGlyph
{
ITEM_SUBCLASS_GLYPH_WARRIOR = 1,
ITEM_SUBCLASS_GLYPH_PALADIN = 2,
ITEM_SUBCLASS_GLYPH_HUNTER = 3,
ITEM_SUBCLASS_GLYPH_ROGUE = 4,
ITEM_SUBCLASS_GLYPH_PRIEST = 5,
ITEM_SUBCLASS_GLYPH_DEATH_KNIGHT = 6,
ITEM_SUBCLASS_GLYPH_SHAMAN = 7,
ITEM_SUBCLASS_GLYPH_MAGE = 8,
ITEM_SUBCLASS_GLYPH_WARLOCK = 9,
ITEM_SUBCLASS_GLYPH_MONK = 10,
ITEM_SUBCLASS_GLYPH_DRUID = 11,
ITEM_SUBCLASS_GLYPH_DEMON_HUNTER = 12
};
#define MAX_ITEM_SUBCLASS_GLYPH 13
enum ItemSubclassBattlePet
{
ITEM_SUBCLASS_BATTLE_PET = 0
};
#define MAX_ITEM_SUBCLASS_BATTLE_PET 1
enum ItemSubclassWowToken
{
ITEM_SUBCLASS_WOW_TOKEN = 0
};
#define MAX_ITEM_SUBCLASS_WOW_TOKEN 1
enum ItemSubclassProfession
{
ITEM_SUBCLASS_PROFESSION_BLACKSMITHING = 0,
ITEM_SUBCLASS_PROFESSION_LEATHERWORKING = 1,
ITEM_SUBCLASS_PROFESSION_ALCHEMY = 2,
ITEM_SUBCLASS_PROFESSION_HERBALISM = 3,
ITEM_SUBCLASS_PROFESSION_COOKING = 4,
ITEM_SUBCLASS_PROFESSION_MINING = 5,
ITEM_SUBCLASS_PROFESSION_TAILORING = 6,
ITEM_SUBCLASS_PROFESSION_ENGINEERING = 7,
ITEM_SUBCLASS_PROFESSION_ENCHANTING = 8,
ITEM_SUBCLASS_PROFESSION_FISHING = 9,
ITEM_SUBCLASS_PROFESSION_SKINNING = 10,
ITEM_SUBCLASS_PROFESSION_JEWELCRAFTING = 11,
ITEM_SUBCLASS_PROFESSION_INSCRIPTION = 12,
ITEM_SUBCLASS_PROFESSION_ARCHAEOLOGY = 13
};
#define MAX_ITEM_SUBCLASS_PROFESSION 14
const uint32 MaxItemSubclassValues[MAX_ITEM_CLASS] =
{
MAX_ITEM_SUBCLASS_CONSUMABLE,
MAX_ITEM_SUBCLASS_CONTAINER,
MAX_ITEM_SUBCLASS_WEAPON,
MAX_ITEM_SUBCLASS_GEM,
MAX_ITEM_SUBCLASS_ARMOR,
MAX_ITEM_SUBCLASS_REAGENT,
MAX_ITEM_SUBCLASS_PROJECTILE,
MAX_ITEM_SUBCLASS_TRADE_GOODS,
MAX_ITEM_SUBCLASS_ITEM_ENHANCEMENT,
MAX_ITEM_SUBCLASS_RECIPE,
MAX_ITEM_SUBCLASS_MONEY,
MAX_ITEM_SUBCLASS_QUIVER,
MAX_ITEM_SUBCLASS_QUEST,
MAX_ITEM_SUBCLASS_KEY,
MAX_ITEM_SUBCLASS_PERMANENT,
MAX_ITEM_SUBCLASS_MISCELLANEOUS,
MAX_ITEM_SUBCLASS_GLYPH,
MAX_ITEM_SUBCLASS_BATTLE_PET,
MAX_ITEM_SUBCLASS_WOW_TOKEN,
MAX_ITEM_SUBCLASS_PROFESSION
};
#define MAX_ITEM_SUBCLASS_TOTAL 21
enum ItemLevelConstants : uint32
{
MIN_ITEM_LEVEL = 1,
MAX_ITEM_LEVEL = 1300
};
enum ItemIdConstants
{
ITEM_HEARTHSTONE = 6948, // Hearthstone
ITEM_GARRISON_HEARTHSTONE = 110560, // Garrison Hearthstone
ITEM_DALARAN_HEARTHSTONE = 140192, // Dalaran Hearthstone
ITEM_FLIGHT_MASTER_WHISTLE = 141605, // Flight Master Whistle
ITEM_RED_RIBBONED_WRAPPING_PAPER = 5042, // Red Ribboned Wrapping Paper
ITEM_RED_RIBBONED_GIFT = 5043, // Red Ribboned Gift
ITEM_BLUE_RIBBONED_WRAPPING_PAPER = 5048, // Blue Ribboned Wrapping Paper
ITEM_BLUE_RIBBONED_GIFT = 5044, // Blue Ribboned Gift
ITEM_BLUE_RIBBONED_HOLIDAY_WRAPPING_PAPER = 17303, // Blue Ribboned Wrapping Paper
ITEM_BLUE_RIBBONED_HOLIDAY_GIFT = 17302, // Blue Ribboned Holiday Gift
ITEM_GREEN_RIBBONED_WRAPPING_PAPER = 17304, // Green Ribboned Wrapping Paper
ITEM_GREEN_RIBBONED_HOLIDAY_GIFT = 17305, // Green Ribboned Holiday Gift
ITEM_PURPLE_RIBBONED_WRAPPING_PAPER = 17307, // Purple Ribboned Wrapping Paper
ITEM_PURPLE_RIBBONED_HOLIDAY_GIFT = 17308, // Purple Ribboned Holiday Gift
ITEM_EMPTY_WRAPPER = 21830, // Empty Wrapper
ITEM_WRAPPED_GIFT = 21831, // Wrappered Gift
ITEM_ACCOUNT_BANK_TAB_BAG = 208392, // Account Bank Tab Bag (DNT)
ITEM_CHARACTER_BANK_TAB_BAG = 242709, // Character Bank Tab Bag (DNT)
};
class Player;
struct ChrSpecializationEntry;
struct TC_GAME_API ItemTemplate
{
ItemEntry const* BasicData;
ItemSparseEntry const* ExtendedData;
uint32 GetId() const { return BasicData->ID; }
uint32 GetClass() const { return BasicData->ClassID; }
uint32 GetSubClass() const { return BasicData->SubclassID; }
uint32 GetQuality() const { return ExtendedData->OverallQualityID; }
uint32 GetOtherFactionItemId() const { return ExtendedData->FactionRelated; }
float GetPriceRandomValue() const { return ExtendedData->PriceRandomValue; }
float GetPriceVariance() const { return ExtendedData->PriceVariance; }
uint32 GetBuyCount() const { return std::max(ExtendedData->VendorStackCount, 1u); }
uint32 GetBuyPrice() const { return ExtendedData->BuyPrice; }
uint32 GetSellPrice() const { return ExtendedData->SellPrice; }
InventoryType GetInventoryType() const { return InventoryType(ExtendedData->InventoryType); }
int32 GetAllowableClass() const { return ExtendedData->AllowableClass; }
Trinity::RaceMask GetAllowableRace() const { return ExtendedData->AllowableRace; }
uint32 GetBaseItemLevel() const { return ExtendedData->ItemLevel; }
int32 GetBaseRequiredLevel() const { return ExtendedData->RequiredLevel; }
uint32 GetRequiredSkill() const { return ExtendedData->RequiredSkill; }
uint32 GetRequiredSkillRank() const { return ExtendedData->RequiredSkillRank; }
uint32 GetRequiredSpell() const { return ExtendedData->RequiredAbility; }
uint32 GetRequiredReputationFaction() const { return ExtendedData->MinFactionID; }
uint32 GetRequiredReputationRank() const { return ExtendedData->MinReputation; }
uint32 GetMaxCount() const { return ExtendedData->MaxCount; }
uint32 GetContainerSlots() const { return ExtendedData->ContainerSlots; }
int32 GetStatModifierBonusStat(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatModifierBonusStat[index]; }
int32 GetStatPercentEditor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatPercentEditor[index]; }
float GetStatPercentageOfSocket(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatPercentageOfSocket[index]; }
uint32 GetScalingStatContentTuning() const { return ExtendedData->ContentTuningID; }
uint32 GetPlayerLevelToItemLevelCurveId() const { return ExtendedData->PlayerLevelToItemLevelCurveID; }
uint32 GetDamageType() const { return ExtendedData->DamageDamageType; }
uint32 GetDelay() const { return ExtendedData->ItemDelay; }
float GetRangedModRange() const { return ExtendedData->ItemRange; }
ItemBondingType GetBonding() const { return ItemBondingType(ExtendedData->Bonding); }
char const* GetName(LocaleConstant locale) const;
uint32 GetPageText() const { return ExtendedData->PageID; }
uint32 GetStartQuest() const { return ExtendedData->StartQuestID; }
uint32 GetLockID() const { return ExtendedData->LockID; }
uint32 GetItemSet() const { return ExtendedData->ItemSet; }
uint32 GetArea(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_ZONES); return ExtendedData->ZoneBound[index]; }
uint32 GetMap() const { return ExtendedData->InstanceBound; }
uint32 GetBagFamily() const { return ExtendedData->BagFamily; }
uint32 GetTotemCategory() const { return ExtendedData->TotemCategoryID; }
SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(ExtendedData->SocketType[index]); }
uint32 GetSocketBonus() const { return ExtendedData->SocketMatchEnchantmentId; }
uint32 GetGemProperties() const { return ExtendedData->GemProperties; }
float GetQualityModifier() const { return ExtendedData->QualityModifier; }
uint32 GetDuration() const { return ExtendedData->DurationInInventory; }
uint32 GetItemLimitCategory() const { return ExtendedData->LimitCategory; }
HolidayIds GetHolidayID() const { return HolidayIds(ExtendedData->RequiredHoliday); }
float GetDmgVariance() const { return ExtendedData->DmgVariance; }
uint8 GetArtifactID() const { return ExtendedData->ArtifactID; }
uint8 GetRequiredExpansion() const { return ExtendedData->ExpansionID; }
uint32 MaxDurability;
std::vector Effects;
// extra fields, not part of db2 files
uint32 ScriptId;
uint32 FoodType;
uint32 MinMoneyLoot;
uint32 MaxMoneyLoot;
uint32 FlagsCu;
float SpellPPMRate;
uint32 RandomBonusListTemplateId;
std::bitset Specializations[3]; // one set for 1-40 level range and another for 41-109 and one for 110
uint32 ItemSpecClassMask;
int32 QuestLogItemId;
// helpers
bool CanChangeEquipStateInCombat() const;
bool IsCurrencyToken() const { return (GetBagFamily() & BAG_FAMILY_MASK_CURRENCY_TOKENS) != 0; }
uint32 GetMaxStackSize() const
{
return (ExtendedData->Stackable == 2147483647 || ExtendedData->Stackable <= 0) ? uint32(0x7FFFFFFF - 1) : uint32(ExtendedData->Stackable);
}
uint32 GetSkill() const;
bool IsPotion() const { return GetClass() == ITEM_CLASS_CONSUMABLE && GetSubClass() == ITEM_SUBCLASS_POTION; }
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; }
bool IsArmor() const { return GetClass() == ITEM_CLASS_ARMOR; }
bool IsRangedWeapon() const
{
if (!IsWeapon())
return false;
switch (ItemSubclassWeapon(GetSubClass()))
{
case ITEM_SUBCLASS_WEAPON_BOW:
case ITEM_SUBCLASS_WEAPON_GUN:
case ITEM_SUBCLASS_WEAPON_CROSSBOW:
case ITEM_SUBCLASS_WEAPON_WAND:
return true;
default:
break;
}
return false;
}
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;
void GetDamage(uint32 itemLevel, float& minDamage, float& maxDamage) const;
bool IsUsableByLootSpecialization(Player const* player, bool alwaysAllowBoundToAccount) const;
static std::size_t CalculateItemSpecBit(ChrSpecializationEntry const* spec);
};
#endif