Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
ItemPrototype.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SF_ITEMPROTOTYPE_H
7#define SF_ITEMPROTOTYPE_H
8
9#include "Common.h"
10#include "DBCStores.h"
11#include "SharedDefines.h"
12
14{
65};
66
67#define MAX_ITEM_MOD 58
68
70{
71 ITEM_SPELLTRIGGER_ON_USE = 0, // use after equip cooldown
75 /*
76 * ItemSpelltriggerType 5 might have changed on 2.4.3/3.0.3: Such auras
77 * will be applied on item pickup and removed on item loss - maybe on the
78 * other hand the item is destroyed if the aura is removed ("removed on
79 * death" of spell 57348 makes me think so)
80 */
81 ITEM_SPELLTRIGGER_ON_NO_DELAY_USE = 5, // no equip cooldown
82 ITEM_SPELLTRIGGER_LEARN_SPELL_ID = 6 // used in item_template.spell_2 with spell_id with SPELL_GENERIC_LEARN in spell_1
83};
84
85#define MAX_ITEM_SPELLTRIGGER 7
86
96
97#define MAX_BIND_TYPE 6
98
99/* /// @todo: Requiring actual cases in which using (an) item isn't allowed while shapeshifted. Else, this flag would need an implementation.
100 ITEM_PROTO_FLAG_USABLE_WHEN_SHAPESHIFTED = 0x00800000, // Item can be used in shapeshift forms */
101
103{
104 ITEM_PROTO_FLAG_UNK1 = 0x00000001, // ?
105 ITEM_PROTO_FLAG_CONJURED = 0x00000002, // Conjured item
106 ITEM_PROTO_FLAG_OPENABLE = 0x00000004, // Item can be right clicked to open for loot
107 ITEM_PROTO_FLAG_HEROIC = 0x00000008, // Makes green "Heroic" text appear on item
108 ITEM_PROTO_FLAG_DEPRECATED = 0x00000010, // Cannot equip or use
109 ITEM_PROTO_FLAG_INDESTRUCTIBLE = 0x00000020, // Item can not be destroyed, except by using spell (item can be reagent for spell)
110 ITEM_PROTO_FLAG_UNK2 = 0x00000040, // ?
111 ITEM_PROTO_FLAG_NO_EQUIP_COOLDOWN = 0x00000080, // No default 30 seconds cooldown when equipped
112 ITEM_PROTO_FLAG_UNK3 = 0x00000100, // ?
113 ITEM_PROTO_FLAG_WRAPPER = 0x00000200, // Item can wrap other items
114 ITEM_PROTO_FLAG_UNK4 = 0x00000400, // ?
115 ITEM_PROTO_FLAG_PARTY_LOOT = 0x00000800, // Looting this item does not remove it from available loot
116 ITEM_PROTO_FLAG_REFUNDABLE = 0x00001000, // Item can be returned to vendor for its original cost (extended cost)
117 ITEM_PROTO_FLAG_CHARTER = 0x00002000, // Item is guild or arena charter
118 ITEM_PROTO_FLAG_UNK5 = 0x00004000, // Only readable items have this (but not all)
119 ITEM_PROTO_FLAG_UNK6 = 0x00008000, // ?
120 ITEM_PROTO_FLAG_UNK7 = 0x00010000, // ?
121 ITEM_PROTO_FLAG_UNK8 = 0x00020000, // ?
122 ITEM_PROTO_FLAG_PROSPECTABLE = 0x00040000, // Item can be prospected
123 ITEM_PROTO_FLAG_UNIQUE_EQUIPPED = 0x00080000, // You can only equip one of these
124 ITEM_PROTO_FLAG_UNK9 = 0x00100000, // ?
125 ITEM_PROTO_FLAG_USEABLE_IN_ARENA = 0x00200000, // Item can be used during arena match
126 ITEM_PROTO_FLAG_THROWABLE = 0x00400000, // Some Thrown weapons have it (and only Thrown) but not all
127 ITEM_PROTO_FLAG_USABLE_WHEN_SHAPESHIFTED = 0x00800000, // Item can be used in shapeshift forms
128 ITEM_PROTO_FLAG_UNK10 = 0x01000000, // ?
129 ITEM_PROTO_FLAG_SMART_LOOT = 0x02000000, // Profession recipes: can only be looted if you meet requirements and don't already know it
130 ITEM_PROTO_FLAG_NOT_USEABLE_IN_ARENA = 0x04000000, // Item cannot be used in arena
131 ITEM_PROTO_FLAG_BIND_TO_ACCOUNT = 0x08000000, // Item binds to account and can be sent only to your own characters
132 ITEM_PROTO_FLAG_TRIGGERED_CAST = 0x10000000, // Spell is cast with triggered flag
133 ITEM_PROTO_FLAG_MILLABLE = 0x20000000, // Item can be milled
134 ITEM_PROTO_FLAG_UNK11 = 0x40000000, // ?
135 ITEM_PROTO_FLAG_BOP_TRADEABLE = 0x80000000 // bound item that can be traded
136};
137
139{
140 ITEM_FLAG_SOULBOUND = 0x00000001, // Item is soulbound and cannot be traded <<--
141 ITEM_FLAG_UNK1 = 0x00000002, // ?
142 ITEM_FLAG_UNLOCKED = 0x00000004, // Item had lock but can be opened now
143 ITEM_FLAG_WRAPPED = 0x00000008, // Item is wrapped and contains another item
144 ITEM_FLAG_UNK2 = 0x00000010, // ?
145 ITEM_FLAG_UNK3 = 0x00000020, // ?
146 ITEM_FLAG_UNK4 = 0x00000040, // ?
147 ITEM_FLAG_UNK5 = 0x00000080, // ?
148 ITEM_FLAG_BOP_TRADEABLE = 0x00000100, // Allows trading soulbound items
149 ITEM_FLAG_READABLE = 0x00000200, // Opens text page when right clicked
150 ITEM_FLAG_UNK6 = 0x00000400, // ?
151 ITEM_FLAG_UNK7 = 0x00000800, // ?
152 ITEM_FLAG_REFUNDABLE = 0x00001000, // Item can be returned to vendor for its original cost (extended cost)
153 ITEM_FLAG_UNK8 = 0x00002000, // ?
154 ITEM_FLAG_UNK9 = 0x00004000, // ?
155 ITEM_FLAG_UNK10 = 0x00008000, // ?
156 ITEM_FLAG_UNK11 = 0x00010000, // ?
157 ITEM_FLAG_UNK12 = 0x00020000, // ?
158 ITEM_FLAG_UNK13 = 0x00040000, // ?
159 ITEM_FLAG_UNK14 = 0x00080000, // ?
160 ITEM_FLAG_UNK15 = 0x00100000, // ?
161 ITEM_FLAG_UNK16 = 0x00200000, // ?
162 ITEM_FLAG_UNK17 = 0x00400000, // ?
163 ITEM_FLAG_UNK18 = 0x00800000, // ?
164 ITEM_FLAG_UNK19 = 0x01000000, // ?
165 ITEM_FLAG_UNK20 = 0x02000000, // ?
166 ITEM_FLAG_UNK21 = 0x04000000, // ?
167 ITEM_FLAG_UNK22 = 0x08000000, // ?
168 ITEM_FLAG_UNK23 = 0x10000000, // ?
169 ITEM_FLAG_UNK24 = 0x20000000, // ?
170 ITEM_FLAG_UNK25 = 0x40000000, // ?
171 ITEM_FLAG_UNK26 = 0x80000000, // ?
172
174};
175
189
191{
192 ITEM_FLAGS_CU_DURATION_REAL_TIME = 0x0001, // Item duration will tick even if player is offline
193 ITEM_FLAGS_CU_IGNORE_QUEST_STATUS = 0x0002, // No quest status will be checked when this item drops
194 ITEM_FLAGS_CU_FOLLOW_LOOT_RULES = 0x0004 // Item will always follow group/master/need before greed looting rules
195};
196
205
211
217
239
249
250#define SOCKET_COLOR_ALL (SOCKET_COLOR_META | SOCKET_COLOR_RED | SOCKET_COLOR_YELLOW | SOCKET_COLOR_BLUE | SOCKET_COLOR_COGWHEEL)
251
284
285#define MAX_INVTYPE 29
286
308
309#define MAX_ITEM_CLASS 18
310
323
324#define MAX_ITEM_SUBCLASS_CONSUMABLE 9
325
340
341#define MAX_ITEM_SUBCLASS_CONTAINER 11
342
367
368#define ITEM_SUBCLASS_MASK_WEAPON_RANGED (\
369 (1 << ITEM_SUBCLASS_WEAPON_BOW) | (1 << ITEM_SUBCLASS_WEAPON_GUN) |\
370 (1 << ITEM_SUBCLASS_WEAPON_CROSSBOW) | (1 << ITEM_SUBCLASS_WEAPON_THROWN))
371
372#define MAX_ITEM_SUBCLASS_WEAPON 21
373
388
389#define MAX_ITEM_SUBCLASS_GEM 11
390
406
407#define MAX_ITEM_SUBCLASS_ARMOR 12
408
413
414#define MAX_ITEM_SUBCLASS_REAGENT 1
415
424
425#define MAX_ITEM_SUBCLASS_PROJECTILE 5
426
445
446#define MAX_ITEM_SUBCLASS_TRADE_GOODS 15
447
449{
450 ITEM_SUBCLASS_GENERIC = 0 // OBSOLETE
451};
452
453#define MAX_ITEM_SUBCLASS_GENERIC 1
454
470
471#define MAX_ITEM_SUBCLASS_RECIPE 12
472
474{
475 ITEM_SUBCLASS_MONEY = 0, // OBSOLETE
476 ITEM_SUBCLASS_MONEY_UNK_7 = 7, // OBSOLETE, 1 item (41749)
477};
478
479#define MAX_ITEM_SUBCLASS_MONEY 8
480
488
489#define MAX_ITEM_SUBCLASS_QUIVER 4
490
492{
494 ITEM_SUBCLASS_QUEST_UNK3 = 3, // 1 item (33604)
495 ITEM_SUBCLASS_QUEST_UNK8 = 8, // 2 items (37445, 49700)
496};
497
498#define MAX_ITEM_SUBCLASS_QUEST 9
499
505
506#define MAX_ITEM_SUBCLASS_KEY 2
507
512
513#define MAX_ITEM_SUBCLASS_PERMANENT 1
514
525
526#define MAX_ITEM_SUBCLASS_JUNK 13
527
542
543#define MAX_ITEM_SUBCLASS_GLYPH 12
544
549
550#define MAX_ITEM_SUBCLASS_BATTLE_PET 1
551
573
575{
576 switch (ItemClass)
577 {
578 case ITEM_CLASS_WEAPON: return ItemSubClass;
579 case ITEM_CLASS_ARMOR: return ItemSubClass + 21;
580 }
581 return 0;
582}
583
584// GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform
585#if defined(__GNUC__)
586#pragma pack(1)
587#else
588#pragma pack(push, 1)
589#endif
590
598
608
614
615// GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform
616#if defined(__GNUC__)
617#pragma pack()
618#else
619#pragma pack(pop)
620#endif
621
622#define MAX_ITEM_PROTO_DAMAGES 2 // changed in 3.1.0
623#define MAX_ITEM_PROTO_SOCKETS 3
624#define MAX_ITEM_PROTO_SPELLS 5
625#define MAX_ITEM_PROTO_STATS 10
626
628{
637
639 uint32 Class; // id from ItemClass.dbc
640 uint32 SubClass; // id from ItemSubClass.dbc
641 int32 SoundOverrideSubclass; // < 0: id from ItemSubClass.dbc, used to override weapon sound from actual SubClass
642 std::string Name1;
643 uint32 DisplayInfoID; // id from ItemDisplayInfo.dbc
648 float Unk430_1;
649 float Unk430_2;
658 uint32 RequiredSkill; // id from SkillLine.dbc
660 uint32 RequiredSpell; // id from Spell.dbc
663 uint32 RequiredReputationFaction; // id from Faction.dbc
665 int32 MaxCount; // <= 0: no limit
666 int32 Stackable; // 0: not allowed, -1: put in player coin info tab and don't limit stacking (so 1 slot)
669 uint32 ScalingStatDistribution; // id from ScalingStatDistribution.dbc
670 uint32 DamageType; // id from Resistances.dbc
675 std::string Description;
679 uint32 StartQuest; // id from QuestCache.wdb
681 int32 Material; // id from Material.dbc
683 int32 RandomProperty; // id from ItemRandomProperties.dbc
684 int32 RandomSuffix; // id from ItemRandomSuffix.dbc
685 uint32 ItemSet; // id from ItemSet.dbc
687 uint32 Area; // id from AreaTable.dbc
688 uint32 Map; // id from Map.dbc
689 uint32 BagFamily; // bit mask (1 << id from ItemBagFamily.dbc)
690 uint32 TotemCategory; // id from TotemCategory.dbc
692 uint32 socketBonus; // id from SpellItemEnchantment.dbc
693 uint32 GemProperties; // id from GemProperties.dbc
696 uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc
697 uint32 HolidayId; // id from Holidays.dbc
699 uint32 CurrencySubstitutionId; // May be used instead of a currency
701
702 // extra fields, not part of db2 files
705 float DPS;
714
715 // helpers
717 {
718 switch (InventoryType)
719 {
720 case INVTYPE_RELIC:
721 case INVTYPE_SHIELD:
722 case INVTYPE_HOLDABLE:
723 return true;
724 }
725
726 switch (Class)
727 {
730 return true;
731 }
732
733 return false;
734 }
735
737
739 {
740 return (Stackable == 2147483647 || Stackable <= 0) ? uint32(0x7FFFFFFF - 1) : uint32(Stackable);
741 }
742
744 {
745 float itemLevel = (float)ItemLevel;
746 switch (Quality)
747 {
753 itemLevel -= 13; // leaving this as a separate statement since we do not know the real behavior in this case
754 break;
756 itemLevel -= 13;
757 break;
760 default:
761 break;
762 }
763 return itemLevel;
764 }
765
769
783
785 {
787 if (quality > ITEM_QUALITY_ARTIFACT)
788 return 0;
789
790 // all items but shields
792 {
793 ItemArmorQualityEntry const* armorQuality = sItemArmorQualityStore.LookupEntry(ItemLevel);
794 ItemArmorTotalEntry const* armorTotal = sItemArmorTotalStore.LookupEntry(ItemLevel);
795 if (!armorQuality || !armorTotal)
796 return 0;
797
798 uint32 inventoryType = InventoryType;
799 if (inventoryType == INVTYPE_ROBE)
800 inventoryType = INVTYPE_CHEST;
801
802 ArmorLocationEntry const* location = sArmorLocationStore.LookupEntry(inventoryType);
803 if (!location)
804 return 0;
805
807 return 0;
808
809 float total = 1.0f;
810 float locationModifier = 1.0f;
811 switch (SubClass)
812 {
814 total = armorTotal->Value[0];
815 locationModifier = location->Value[0];
816 break;
818 total = armorTotal->Value[1];
819 locationModifier = location->Value[1];
820 break;
822 total = armorTotal->Value[2];
823 locationModifier = location->Value[2];
824 break;
826 total = armorTotal->Value[3];
827 locationModifier = location->Value[3];
828 break;
829 default:
830 break;
831 }
832
833 return uint32(armorQuality->Value[quality] * total * locationModifier + 0.5f);
834 }
835
836 // shields
837 ItemArmorShieldEntry const* shield = sItemArmorShieldStore.LookupEntry(ItemLevel);
838 if (!shield)
839 return 0;
840
841 return uint32(shield->Value[quality] + 0.5f);
842 }
843};
844
845
846// Benchmarked: Faster than std::map (insert/find)
848
854
855#endif
std::vector< std::string > StringVector
Definition Common.h:163
DBCStorage< ItemArmorQualityEntry > sItemArmorQualityStore(ItemArmorQualityfmt)
DBCStorage< ArmorLocationEntry > sArmorLocationStore(ArmorLocationfmt)
DBCStorage< ItemArmorTotalEntry > sItemArmorTotalStore(ItemArmorTotalfmt)
DBCStorage< ItemArmorShieldEntry > sItemArmorShieldStore(ItemArmorShieldfmt)
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define MAX_ITEM_SUBCLASS_MONEY
UNORDERED_MAP< uint32, ItemTemplate > ItemTemplateContainer
ItemSubclassWeapon
@ ITEM_SUBCLASS_WEAPON_MISCELLANEOUS
@ ITEM_SUBCLASS_WEAPON_CROSSBOW
@ ITEM_SUBCLASS_WEAPON_GUN
@ ITEM_SUBCLASS_WEAPON_AXE2
@ ITEM_SUBCLASS_WEAPON_SPEAR
@ ITEM_SUBCLASS_WEAPON_STAFF
@ ITEM_SUBCLASS_WEAPON_MACE
@ ITEM_SUBCLASS_WEAPON_EXOTIC2
@ ITEM_SUBCLASS_WEAPON_FISHING_POLE
@ ITEM_SUBCLASS_WEAPON_MACE2
@ ITEM_SUBCLASS_WEAPON_DAGGER
@ ITEM_SUBCLASS_WEAPON_BOW
@ ITEM_SUBCLASS_WEAPON_SWORD
@ ITEM_SUBCLASS_WEAPON_AXE
@ ITEM_SUBCLASS_WEAPON_Obsolete
@ ITEM_SUBCLASS_WEAPON_FIST_WEAPON
@ ITEM_SUBCLASS_WEAPON_WAND
@ ITEM_SUBCLASS_WEAPON_EXOTIC
@ ITEM_SUBCLASS_WEAPON_THROWN
@ ITEM_SUBCLASS_WEAPON_SWORD2
@ ITEM_SUBCLASS_WEAPON_POLEARM
ItemSubclassGlyph
@ ITEM_SUBCLASS_GLYPH_WARLOCK
@ ITEM_SUBCLASS_GLYPH_PRIEST
@ ITEM_SUBCLASS_GLYPH_WARRIOR
@ ITEM_SUBCLASS_GLYPH_MONK
@ ITEM_SUBCLASS_GLYPH_ROGUE
@ ITEM_SUBCLASS_GLYPH_HUNTER
@ ITEM_SUBCLASS_GLYPH_SHAMAN
@ ITEM_SUBCLASS_GLYPH_DEATH_KNIGHT
@ ITEM_SUBCLASS_GLYPH_PALADIN
@ ITEM_SUBCLASS_GLYPH_MAGE
@ ITEM_SUBCLASS_GLYPH_DRUID
#define MAX_ITEM_SUBCLASS_RECIPE
#define MAX_ITEM_SUBCLASS_KEY
CurrencyCategory
@ CURRENCY_CATEGORY_META_CONQUEST
@ CURRENCY_CATEGORY_ARCHAEOLOGY
InventoryType
@ INVTYPE_BODY
@ INVTYPE_FINGER
@ INVTYPE_HEAD
@ INVTYPE_CLOAK
@ INVTYPE_ROBE
@ INVTYPE_HOLDABLE
@ INVTYPE_TRINKET
@ INVTYPE_RELIC
@ INVTYPE_RANGED
@ INVTYPE_THROWN
@ INVTYPE_WAIST
@ INVTYPE_RANGEDRIGHT
@ INVTYPE_WRISTS
@ INVTYPE_WEAPON
@ INVTYPE_WEAPONMAINHAND
@ INVTYPE_WEAPONOFFHAND
@ INVTYPE_2HWEAPON
@ INVTYPE_BAG
@ INVTYPE_NECK
@ INVTYPE_SHOULDERS
@ INVTYPE_FEET
@ INVTYPE_NON_EQUIP
@ INVTYPE_AMMO
@ INVTYPE_QUIVER
@ INVTYPE_SHIELD
@ INVTYPE_TABARD
@ INVTYPE_LEGS
@ INVTYPE_CHEST
@ INVTYPE_HANDS
#define MAX_ITEM_SUBCLASS_GENERIC
ItemSpelltriggerType
@ ITEM_SPELLTRIGGER_LEARN_SPELL_ID
@ ITEM_SPELLTRIGGER_SOULSTONE
@ ITEM_SPELLTRIGGER_ON_USE
@ ITEM_SPELLTRIGGER_CHANCE_ON_HIT
@ ITEM_SPELLTRIGGER_ON_NO_DELAY_USE
@ ITEM_SPELLTRIGGER_ON_EQUIP
BAG_FAMILY_MASK
@ BAG_FAMILY_MASK_MINING_SUPP
@ BAG_FAMILY_MASK_HERBS
@ BAG_FAMILY_MASK_ENCHANTING_SUPP
@ BAG_FAMILY_MASK_SOUL_SHARDS
@ BAG_FAMILY_MASK_CURRENCY_TOKENS
@ BAG_FAMILY_MASK_INSCRIPTION_SUPP
@ BAG_FAMILY_MASK_NONE
@ BAG_FAMILY_MASK_GEMS
@ BAG_FAMILY_MASK_VANITY_PETS
@ BAG_FAMILY_MASK_SOULBOUND_EQUIPMENT
@ BAG_FAMILY_MASK_ARROWS
@ BAG_FAMILY_MASK_BULLETS
@ BAG_FAMILY_MASK_QUEST_ITEMS
@ BAG_FAMILY_MASK_KEYS
@ BAG_FAMILY_MASK_ENGINEERING_SUPP
@ BAG_FAMILY_MASK_COOKING_SUPP
@ BAG_FAMILY_MASK_FISHING_SUPP
@ BAG_FAMILY_MASK_LEATHERWORKING_SUPP
ItemSubclassContainer
@ ITEM_SUBCLASS_CONTAINER
@ ITEM_SUBCLASS_COOKING_CONTAINER
@ ITEM_SUBCLASS_INSCRIPTION_CONTAINER
@ ITEM_SUBCLASS_LEATHERWORKING_CONTAINER
@ ITEM_SUBCLASS_TACKLE_CONTAINER
@ ITEM_SUBCLASS_GEM_CONTAINER
@ ITEM_SUBCLASS_SOUL_CONTAINER
@ ITEM_SUBCLASS_ENCHANTING_CONTAINER
@ ITEM_SUBCLASS_MINING_CONTAINER
@ ITEM_SUBCLASS_HERB_CONTAINER
@ ITEM_SUBCLASS_ENGINEERING_CONTAINER
ItemSubclassQuiver
@ ITEM_SUBCLASS_QUIVER1
@ ITEM_SUBCLASS_QUIVER0
@ ITEM_SUBCLASS_QUIVER
@ ITEM_SUBCLASS_AMMO_POUCH
ItemProtoFlags
@ ITEM_PROTO_FLAG_UNK3
@ ITEM_PROTO_FLAG_THROWABLE
@ ITEM_PROTO_FLAG_WRAPPER
@ ITEM_PROTO_FLAG_REFUNDABLE
@ ITEM_PROTO_FLAG_USABLE_WHEN_SHAPESHIFTED
@ ITEM_PROTO_FLAG_UNK9
@ ITEM_PROTO_FLAG_UNK1
@ ITEM_PROTO_FLAG_UNK2
@ ITEM_PROTO_FLAG_INDESTRUCTIBLE
@ ITEM_PROTO_FLAG_UNIQUE_EQUIPPED
@ ITEM_PROTO_FLAG_UNK5
@ ITEM_PROTO_FLAG_CONJURED
@ ITEM_PROTO_FLAG_SMART_LOOT
@ ITEM_PROTO_FLAG_BOP_TRADEABLE
@ ITEM_PROTO_FLAG_CHARTER
@ ITEM_PROTO_FLAG_UNK4
@ ITEM_PROTO_FLAG_TRIGGERED_CAST
@ ITEM_PROTO_FLAG_UNK8
@ ITEM_PROTO_FLAG_MILLABLE
@ ITEM_PROTO_FLAG_UNK6
@ ITEM_PROTO_FLAG_UNK7
@ ITEM_PROTO_FLAG_BIND_TO_ACCOUNT
@ ITEM_PROTO_FLAG_NOT_USEABLE_IN_ARENA
@ ITEM_PROTO_FLAG_PROSPECTABLE
@ ITEM_PROTO_FLAG_PARTY_LOOT
@ ITEM_PROTO_FLAG_UNK11
@ ITEM_PROTO_FLAG_NO_EQUIP_COOLDOWN
@ ITEM_PROTO_FLAG_UNK10
@ ITEM_PROTO_FLAG_USEABLE_IN_ARENA
@ ITEM_PROTO_FLAG_DEPRECATED
@ ITEM_PROTO_FLAG_OPENABLE
@ ITEM_PROTO_FLAG_HEROIC
ItemModType
@ ITEM_MOD_HOLY_RESISTANCE
@ ITEM_MOD_CRIT_TAKEN_RANGED_RATING
@ ITEM_MOD_NATURE_RESISTANCE
@ ITEM_MOD_HIT_MELEE_RATING
@ ITEM_MOD_MASTERY_RATING
@ ITEM_MOD_HIT_TAKEN_MELEE_RATING
@ ITEM_MOD_STAMINA
@ ITEM_MOD_HIT_SPELL_RATING
@ ITEM_MOD_SPELL_PENETRATION
@ ITEM_MOD_PARRY_RATING
@ ITEM_MOD_DEFENSE_SKILL_RATING
@ ITEM_MOD_HASTE_RANGED_RATING
@ ITEM_MOD_CRIT_TAKEN_RATING
@ ITEM_MOD_EXPERTISE_RATING
@ ITEM_MOD_MANA
@ ITEM_MOD_RANGED_ATTACK_POWER
@ ITEM_MOD_HEALTH
@ ITEM_MOD_CRIT_TAKEN_SPELL_RATING
@ ITEM_MOD_HIT_TAKEN_SPELL_RATING
@ ITEM_MOD_SPIRIT
@ ITEM_MOD_FROST_RESISTANCE
@ ITEM_MOD_SPELL_POWER
@ ITEM_MOD_SHADOW_RESISTANCE
@ ITEM_MOD_EXTRA_ARMOR
@ ITEM_MOD_HASTE_SPELL_RATING
@ ITEM_MOD_ATTACK_POWER
@ ITEM_MOD_FIRE_RESISTANCE
@ ITEM_MOD_HASTE_RATING
@ ITEM_MOD_HIT_RANGED_RATING
@ ITEM_MOD_CRIT_SPELL_RATING
@ ITEM_MOD_BLOCK_VALUE
@ ITEM_MOD_CRIT_RANGED_RATING
@ ITEM_MOD_CRIT_MELEE_RATING
@ ITEM_MOD_STRENGTH
@ ITEM_MOD_HEALTH_REGEN
@ ITEM_MOD_BLOCK_RATING
@ ITEM_MOD_PVP_POWER
@ ITEM_MOD_ARMOR_PENETRATION_RATING
@ ITEM_MOD_CRIT_TAKEN_MELEE_RATING
@ ITEM_MOD_HIT_TAKEN_RATING
@ ITEM_MOD_ARCANE_RESISTANCE
@ ITEM_MOD_HASTE_MELEE_RATING
@ ITEM_MOD_MANA_REGENERATION
@ ITEM_MOD_HIT_RATING
@ ITEM_MOD_INTELLECT
@ ITEM_MOD_RESILIENCE_RATING
@ ITEM_MOD_AGILITY
@ ITEM_MOD_DODGE_RATING
@ ITEM_MOD_CRIT_RATING
@ ITEM_MOD_HIT_TAKEN_RANGED_RATING
#define MAX_ITEM_SUBCLASS_REAGENT
uint8 ItemSubClassToDurabilityMultiplierId(uint32 ItemClass, uint32 ItemSubClass)
#define MAX_ITEM_CLASS
ItemSubclassArmor
@ ITEM_SUBCLASS_ARMOR_MAIL
@ ITEM_SUBCLASS_ARMOR_BUCKLER
@ ITEM_SUBCLASS_ARMOR_LIBRAM
@ ITEM_SUBCLASS_ARMOR_CLOTH
@ ITEM_SUBCLASS_ARMOR_RELIC
@ ITEM_SUBCLASS_ARMOR_LEATHER
@ ITEM_SUBCLASS_ARMOR_SHIELD
@ ITEM_SUBCLASS_ARMOR_SIGIL
@ ITEM_SUBCLASS_ARMOR_PLATE
@ ITEM_SUBCLASS_ARMOR_TOTEM
@ ITEM_SUBCLASS_ARMOR_IDOL
@ ITEM_SUBCLASS_ARMOR_MISCELLANEOUS
#define MAX_ITEM_SUBCLASS_PERMANENT
ItemSubclassProjectile
@ ITEM_SUBCLASS_ARROW
@ ITEM_SUBCLASS_THROWN
@ ITEM_SUBCLASS_BULLET
@ ITEM_SUBCLASS_BOLT
@ ITEM_SUBCLASS_WAND
ItemSubclassTradeGoods
@ ITEM_SUBCLASS_PARTS
@ ITEM_SUBCLASS_ENCHANTING
@ ITEM_SUBCLASS_TRADE_GOODS
@ ITEM_SUBCLASS_HERB
@ ITEM_SUBCLASS_ENCHANTMENT
@ ITEM_SUBCLASS_EXPLOSIVES
@ ITEM_SUBCLASS_TRADE_GOODS_OTHER
@ ITEM_SUBCLASS_METAL_STONE
@ ITEM_SUBCLASS_JEWELCRAFTING
@ ITEM_SUBCLASS_MATERIAL
@ ITEM_SUBCLASS_LEATHER
@ ITEM_SUBCLASS_CLOTH
@ ITEM_SUBCLASS_DEVICES
@ ITEM_SUBCLASS_MEAT
@ ITEM_SUBCLASS_ELEMENTAL
#define MAX_ITEM_SUBCLASS_ARMOR
ItemFlagsExtra
@ ITEM_FLAGS_EXTRA_NEED_ROLL_DISABLED
@ ITEM_FLAGS_EXTRA_ALLIANCE_ONLY
@ ITEM_FLAGS_EXTRA_CANNOT_TRANSMOG
@ ITEM_FLAGS_EXTRA_HAS_NORMAL_PRICE
@ ITEM_FLAGS_EXTRA_CASTER_WEAPON
@ ITEM_FLAGS_EXTRA_CAN_TRANSMOG
@ ITEM_FLAGS_EXTRA_HORDE_ONLY
@ ITEM_FLAGS_EXTRA_CANNOT_BE_TRANSMOG
@ ITEM_FLAGS_EXTRA_EXT_COST_REQUIRES_GOLD
@ ITEM_FLAGS_EXTRA_BNET_ACCOUNT_BOUND
#define MAX_ITEM_SUBCLASS_TRADE_GOODS
ItemSubclassRecipe
@ ITEM_SUBCLASS_BOOK
@ ITEM_SUBCLASS_TAILORING_PATTERN
@ ITEM_SUBCLASS_JEWELCRAFTING_RECIPE
@ ITEM_SUBCLASS_COOKING_RECIPE
@ ITEM_SUBCLASS_ALCHEMY_RECIPE
@ ITEM_SUBCLASS_ENGINEERING_SCHEMATIC
@ ITEM_SUBCLASS_ENCHANTING_FORMULA
@ ITEM_SUBCLASS_INSCRIPTION_TECHNIQUE
@ ITEM_SUBCLASS_LEATHERWORKING_PATTERN
@ ITEM_SUBCLASS_FISHING_MANUAL
@ ITEM_SUBCLASS_FIRST_AID_MANUAL
@ ITEM_SUBCLASS_BLACKSMITHING
#define MAX_ITEM_PROTO_SOCKETS
#define MAX_ITEM_SUBCLASS_JUNK
#define MAX_ITEM_SUBCLASS_GEM
#define MAX_ITEM_SUBCLASS_CONTAINER
SocketColor
@ SOCKET_COLOR_META
@ SOCKET_COLOR_YELLOW
@ SOCKET_COLOR_RED
@ SOCKET_COLOR_BLUE
@ SOCKET_COLOR_HYDRAULIC
@ SOCKET_COLOR_COGWHEEL
ItemSubclassGem
@ ITEM_SUBCLASS_GEM_BLUE
@ ITEM_SUBCLASS_GEM_META
@ ITEM_SUBCLASS_GEM_PRISMATIC
@ ITEM_SUBCLASS_GEM_YELLOW
@ ITEM_SUBCLASS_GEM_COGWHEEL
@ ITEM_SUBCLASS_GEM_ORANGE
@ ITEM_SUBCLASS_GEM_RED
@ ITEM_SUBCLASS_GEM_HYDRAULIC
@ ITEM_SUBCLASS_GEM_GREEN
@ ITEM_SUBCLASS_GEM_SIMPLE
@ ITEM_SUBCLASS_GEM_PURPLE
ItemSubclassMoney
@ ITEM_SUBCLASS_MONEY
@ ITEM_SUBCLASS_MONEY_UNK_7
ItemSubclassKey
@ ITEM_SUBCLASS_KEY
@ ITEM_SUBCLASS_LOCKPICK
#define MAX_ITEM_PROTO_SPELLS
ItemBondingType
@ BIND_WHEN_EQUIPED
@ BIND_WHEN_USE
@ NO_BIND
@ BIND_QUEST_ITEM
@ BIND_WHEN_PICKED_UP
@ BIND_QUEST_ITEM1
ItemSubclassReagent
@ ITEM_SUBCLASS_REAGENT
ItemClass
@ ITEM_CLASS_QUIVER
@ ITEM_CLASS_GENERIC
@ ITEM_CLASS_RECIPE
@ ITEM_CLASS_KEY
@ ITEM_CLASS_CONTAINER
@ ITEM_CLASS_TRADE_GOODS
@ ITEM_CLASS_REAGENT
@ ITEM_CLASS_MONEY
@ ITEM_CLASS_PERMANENT
@ ITEM_CLASS_BATTLE_PET
@ ITEM_CLASS_GLYPH
@ ITEM_CLASS_PROJECTILE
@ ITEM_CLASS_GEM
@ ITEM_CLASS_ARMOR
@ ITEM_CLASS_QUEST
@ ITEM_CLASS_MISCELLANEOUS
@ ITEM_CLASS_WEAPON
@ ITEM_CLASS_CONSUMABLE
#define MAX_ITEM_SUBCLASS_CONSUMABLE
ItemSubclassPermanent
@ ITEM_SUBCLASS_PERMANENT
CurrencyFlags
@ CURRENCY_FLAG_HIGH_PRECISION
@ CURRENCY_FLAG_COUNT_SEASON_TOTAL
@ CURRENCY_FLAG_TRADEABLE
#define MAX_ITEM_SUBCLASS_QUIVER
#define MAX_ITEM_SUBCLASS_BATTLE_PET
#define MAX_ITEM_SUBCLASS_PROJECTILE
#define MAX_ITEM_SUBCLASS_QUEST
ItemVendorType
@ ITEM_VENDOR_TYPE_ITEM
@ ITEM_VENDOR_TYPE_CURRENCY
ItemFieldFlags
@ ITEM_FLAG_UNK20
@ ITEM_FLAG_UNK10
@ ITEM_FLAG_UNK12
@ ITEM_FLAG_UNLOCKED
@ ITEM_FLAG_UNK16
@ ITEM_FLAG_MAIL_TEXT_MASK
@ ITEM_FLAG_READABLE
@ ITEM_FLAG_UNK15
@ ITEM_FLAG_UNK7
@ ITEM_FLAG_UNK2
@ ITEM_FLAG_BOP_TRADEABLE
@ ITEM_FLAG_UNK6
@ ITEM_FLAG_UNK23
@ ITEM_FLAG_UNK5
@ ITEM_FLAG_UNK24
@ ITEM_FLAG_UNK19
@ ITEM_FLAG_UNK22
@ ITEM_FLAG_WRAPPED
@ ITEM_FLAG_UNK3
@ ITEM_FLAG_UNK4
@ ITEM_FLAG_SOULBOUND
@ ITEM_FLAG_UNK11
@ ITEM_FLAG_UNK18
@ ITEM_FLAG_UNK17
@ ITEM_FLAG_UNK9
@ ITEM_FLAG_UNK13
@ ITEM_FLAG_UNK25
@ ITEM_FLAG_UNK26
@ ITEM_FLAG_UNK8
@ ITEM_FLAG_UNK14
@ ITEM_FLAG_UNK21
@ ITEM_FLAG_UNK1
@ ITEM_FLAG_REFUNDABLE
#define MAX_ITEM_SUBCLASS_WEAPON
ItemSubclassBattlePet
@ ITEM_SUBCLASS_BATTLE_PET
ItemSubclassJunk
@ ITEM_SUBCLASS_JUNK
@ ITEM_SUBCLASS_JUNK_HOLIDAY
@ ITEM_SUBCLASS_JUNK_MOUNT
@ ITEM_SUBCLASS_JUNK_UNK12
@ ITEM_SUBCLASS_JUNK_PET
@ ITEM_SUBCLASS_JUNK_OTHER
@ ITEM_SUBCLASS_JUNK_REAGENT
ItemSubclassConsumable
@ ITEM_SUBCLASS_CONSUMABLE_OTHER
@ ITEM_SUBCLASS_FOOD_DRINK
@ ITEM_SUBCLASS_SCROLL
@ ITEM_SUBCLASS_FLASK
@ ITEM_SUBCLASS_POTION
@ ITEM_SUBCLASS_CONSUMABLE
@ ITEM_SUBCLASS_ELIXIR
@ ITEM_SUBCLASS_BANDAGE
@ ITEM_SUBCLASS_ITEM_ENHANCEMENT
ItemSubclassQuest
@ ITEM_SUBCLASS_QUEST
@ ITEM_SUBCLASS_QUEST_UNK8
@ ITEM_SUBCLASS_QUEST_UNK3
ItemSubclassGeneric
@ ITEM_SUBCLASS_GENERIC
#define MAX_ITEM_PROTO_STATS
const uint32 MaxItemSubclassValues[MAX_ITEM_CLASS]
#define MAX_ITEM_SUBCLASS_GLYPH
ItemFlagsCustom
@ ITEM_FLAGS_CU_DURATION_REAL_TIME
@ ITEM_FLAGS_CU_FOLLOW_LOOT_RULES
@ ITEM_FLAGS_CU_IGNORE_QUEST_STATUS
ItemQualities
@ ITEM_QUALITY_UNCOMMON
@ ITEM_QUALITY_RARE
@ ITEM_QUALITY_NORMAL
@ ITEM_QUALITY_LEGENDARY
@ ITEM_QUALITY_HEIRLOOM
@ ITEM_QUALITY_POOR
@ ITEM_QUALITY_ARTIFACT
@ ITEM_QUALITY_EPIC
#define UNORDERED_MAP
int32 ItemStatValue
int32 ItemStatUnk2
uint32 ItemStatType
int32 ItemStatUnk1
uint32 Content
uint32 Color
int32 SpellCharges
uint32 SpellTrigger
int32 SpellCategoryCooldown
int32 SpellCooldown
uint32 SpellCategory
int32 SpellId
float Value[5]
float Value[7]
float Value[7]
float Value[4]
StringVector Name
StringVector Description
bool IsVellum() const
uint32 DisenchantID
bool CanChangeEquipStateInCombat() const
bool IsPotion() const
uint32 RequiredCityRank
uint32 RequiredSkill
uint32 RequiredSpell
std::string Description
uint32 AllowableClass
uint32 RequiredSkillRank
uint32 RequiredHonorRank
uint32 GetMaxStackSize() const
uint32 GetArmor() const
bool IsRangedWeapon() const
float ArmorDamageModifier
bool IsCurrencyToken() const
_Spell Spells[MAX_ITEM_PROTO_SPELLS]
float GetItemLevelIncludingQuality() const
uint32 RequiredDisenchantSkill
uint32 TotemCategory
uint32 MinMoneyLoot
uint32 MaxMoneyLoot
bool IsRangedInventoryType() const
float StatScalingFactor
uint32 PageMaterial
uint32 RequiredLevel
std::string Name1
uint32 GemProperties
bool IsConjuredConsumable() const
uint32 CurrencySubstitutionCount
uint32 RequiredReputationRank
uint32 ContainerSlots
uint32 DisplayInfoID
uint32 AllowableRace
uint32 RequiredReputationFaction
uint32 ItemLimitCategory
uint32 ScalingStatDistribution
_ItemStat ItemStat[MAX_ITEM_PROTO_STATS]
uint32 MaxDurability
uint32 InventoryType
uint32 CurrencySubstitutionId
int32 SoundOverrideSubclass
_Socket Socket[MAX_ITEM_PROTO_SOCKETS]