Updated Copyright year to 2013
[getmangos.git] / src / game / ItemPrototype.h
blobe32d5d564dd78e19e52156793e6c3013f479dd6c
1 /*
2 * Copyright (C) 2005-2013 MaNGOS <http://getmangos.com/>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #ifndef _ITEMPROTOTYPE_H
20 #define _ITEMPROTOTYPE_H
22 #include "Common.h"
24 enum ItemModType
26 ITEM_MOD_NONE = 0,
27 ITEM_MOD_HEALTH = 1, // deprecated
28 ITEM_MOD_AGILITY = 3,
29 ITEM_MOD_STRENGTH = 4,
30 ITEM_MOD_INTELLECT = 5,
31 ITEM_MOD_SPIRIT = 6,
32 ITEM_MOD_STAMINA = 7,
33 ITEM_MOD_DEFENSE_SKILL_RATING = 12, // deprecated
34 ITEM_MOD_DODGE_RATING = 13,
35 ITEM_MOD_PARRY_RATING = 14,
36 ITEM_MOD_BLOCK_RATING = 15, // deprecated
37 ITEM_MOD_HIT_MELEE_RATING = 16, // deprecated
38 ITEM_MOD_HIT_RANGED_RATING = 17, // deprecated
39 ITEM_MOD_HIT_SPELL_RATING = 18, // deprecated
40 ITEM_MOD_CRIT_MELEE_RATING = 19, // deprecated
41 ITEM_MOD_CRIT_RANGED_RATING = 20,
42 ITEM_MOD_CRIT_SPELL_RATING = 21, // deprecated
43 ITEM_MOD_HIT_TAKEN_MELEE_RATING = 22, // deprecated
44 ITEM_MOD_HIT_TAKEN_RANGED_RATING = 23, // deprecated
45 ITEM_MOD_HIT_TAKEN_SPELL_RATING = 24, // deprecated
46 ITEM_MOD_CRIT_TAKEN_MELEE_RATING = 25, // deprecated
47 ITEM_MOD_CRIT_TAKEN_RANGED_RATING = 26, // deprecated
48 ITEM_MOD_CRIT_TAKEN_SPELL_RATING = 27, // deprecated
49 ITEM_MOD_HASTE_MELEE_RATING = 28, // deprecated
50 ITEM_MOD_HASTE_RANGED_RATING = 29, // deprecated
51 ITEM_MOD_HASTE_SPELL_RATING = 30, // deprecated
52 ITEM_MOD_HIT_RATING = 31,
53 ITEM_MOD_CRIT_RATING = 32,
54 ITEM_MOD_HIT_TAKEN_RATING = 33, // deprecated
55 ITEM_MOD_CRIT_TAKEN_RATING = 34, // deprecated
56 ITEM_MOD_RESILIENCE_RATING = 35,
57 ITEM_MOD_HASTE_RATING = 36,
58 ITEM_MOD_EXPERTISE_RATING = 37,
59 ITEM_MOD_ATTACK_POWER = 38,
60 ITEM_MOD_RANGED_ATTACK_POWER = 39,
61 ITEM_MOD_FERAL_ATTACK_POWER = 40, // deprecated
62 ITEM_MOD_SPELL_HEALING_DONE = 41, // deprecated
63 ITEM_MOD_SPELL_DAMAGE_DONE = 42, // deprecated
64 ITEM_MOD_MANA_REGENERATION = 43, // deprecated
65 ITEM_MOD_ARMOR_PENETRATION_RATING = 44, // deprecated
66 ITEM_MOD_SPELL_POWER = 45,
67 ITEM_MOD_HEALTH_REGEN = 46,
68 ITEM_MOD_SPELL_PENETRATION = 47,
69 ITEM_MOD_BLOCK_VALUE = 48, // deprecated
70 ITEM_MOD_MASTERY_RATING = 49,
71 ITEM_MOD_EXTRA_ARMOR = 50,
72 ITEM_MOD_FIRE_RESISTANCE = 51,
73 ITEM_MOD_FROST_RESISTANCE = 52,
74 ITEM_MOD_HOLY_RESISTANCE = 53,
75 ITEM_MOD_SHADOW_RESISTANCE = 54,
76 ITEM_MOD_NATURE_RESISTANCE = 55,
77 ITEM_MOD_ARCANE_RESISTANCE = 56
80 #define MAX_ITEM_MOD 57
82 enum ItemSpelltriggerType
84 ITEM_SPELLTRIGGER_ON_USE = 0, // use after equip cooldown
85 ITEM_SPELLTRIGGER_ON_EQUIP = 1,
86 ITEM_SPELLTRIGGER_CHANCE_ON_HIT = 2,
87 ITEM_SPELLTRIGGER_SOULSTONE = 4,
88 ITEM_SPELLTRIGGER_ON_STORE = 5, // casted at add item to inventory/equip, applied aura removed at remove item, item deleted at aura cancel/expire/etc
89 ITEM_SPELLTRIGGER_LEARN_SPELL_ID = 6 // used in item_template.spell_2 with spell_id with SPELL_GENERIC_LEARN in spell_1
92 #define MAX_ITEM_SPELLTRIGGER 7
94 enum ItemBondingType
96 NO_BIND = 0,
97 BIND_WHEN_PICKED_UP = 1,
98 BIND_WHEN_EQUIPPED = 2,
99 BIND_WHEN_USE = 3,
100 BIND_QUEST_ITEM = 4,
101 BIND_QUEST_ITEM1 = 5 // not used in game
104 #define MAX_BIND_TYPE 6
106 // Mask for ItemPrototype.Flags field
107 enum ItemPrototypeFlags
109 ITEM_FLAG_UNK0 = 0x00000001, // not used
110 ITEM_FLAG_CONJURED = 0x00000002,
111 ITEM_FLAG_LOOTABLE = 0x00000004, // affect only non container items that can be "open" for loot. It or lockid set enable for client show "Right click to open". See also ITEM_DYNFLAG_UNLOCKED
112 ITEM_FLAG_HEROIC = 0x00000008, // heroic item version
113 ITEM_FLAG_UNK4 = 0x00000010, // can't repeat old note: appears red icon (like when item durability==0)
114 ITEM_FLAG_INDESTRUCTIBLE = 0x00000020, // used for totem. Item can not be destroyed, except by using spell (item can be reagent for spell and then allowed)
115 ITEM_FLAG_UNK6 = 0x00000040, // ? old note: usable
116 ITEM_FLAG_NO_EQUIP_COOLDOWN = 0x00000080,
117 ITEM_FLAG_UNK8 = 0x00000100, // saw this on item 47115, 49295...
118 ITEM_FLAG_WRAPPER = 0x00000200, // used or not used wrapper
119 ITEM_FLAG_IGNORE_BAG_SPACE = 0x00000400, // ignore bag space at new item creation?
120 ITEM_FLAG_PARTY_LOOT = 0x00000800, // determines if item is party loot or not
121 ITEM_FLAG_REFUNDABLE = 0x00001000, // item cost can be refunded within 2 hours after purchase
122 ITEM_FLAG_CHARTER = 0x00002000, // arena/guild charter
123 ITEM_FLAG_UNK14 = 0x00004000,
124 ITEM_FLAG_UNK15 = 0x00008000, // a lot of items have this
125 ITEM_FLAG_UNK16 = 0x00010000, // a lot of items have this
126 ITEM_FLAG_UNK17 = 0x00020000,
127 ITEM_FLAG_PROSPECTABLE = 0x00040000, // item can have prospecting loot (in fact some items expected have empty loot)
128 ITEM_FLAG_UNIQUE_EQUIPPED = 0x00080000,
129 ITEM_FLAG_UNK20 = 0x00100000,
130 ITEM_FLAG_USEABLE_IN_ARENA = 0x00200000,
131 ITEM_FLAG_THROWABLE = 0x00400000, // Only items of ITEM_SUBCLASS_WEAPON_THROWN have it but not all, so can't be used as in game check
132 ITEM_FLAG_SPECIALUSE = 0x00800000, // last used flag in 2.3.0
133 ITEM_FLAG_UNK24 = 0x01000000,
134 ITEM_FLAG_UNK25 = 0x02000000,
135 ITEM_FLAG_UNK26 = 0x04000000,
136 ITEM_FLAG_BOA = 0x08000000, // bind on account (set in template for items that can binded in like way)
137 ITEM_FLAG_ENCHANT_SCROLL = 0x10000000, // for enchant scrolls
138 ITEM_FLAG_MILLABLE = 0x20000000, // item can have milling loot
139 ITEM_FLAG_UNK30 = 0x40000000,
140 ITEM_FLAG_BOP_TRADEABLE = 0x80000000, // bound item that can be traded
143 enum ItemPrototypeFlags2
145 ITEM_FLAG2_HORDE_ONLY = 0x00000001, // drop in loot, sell by vendor and equipping only for horde
146 ITEM_FLAG2_ALLIANCE_ONLY = 0x00000002, // drop in loot, sell by vendor and equipping only for alliance
147 ITEM_FLAG2_EXT_COST_REQUIRES_GOLD = 0x00000004, // item cost include gold part in case extended cost use also
148 ITEM_FLAG2_UNK4 = 0x00000008,
149 ITEM_FLAG2_UNK5 = 0x00000010,
150 ITEM_FLAG2_UNK6 = 0x00000020,
151 ITEM_FLAG2_UNK7 = 0x00000040,
152 ITEM_FLAG2_UNK8 = 0x00000080,
153 ITEM_FLAG2_NEED_ROLL_DISABLED = 0x00000100, // need roll during looting is not allowed for this item
154 ITEM_FLAG2_CASTER_WEAPON = 0x00000200, // uses caster specific dbc file for DPS calculations
157 enum BagFamilyMask
159 BAG_FAMILY_MASK_NONE = 0x00000000,
160 BAG_FAMILY_MASK_ARROWS = 0x00000001,
161 BAG_FAMILY_MASK_BULLETS = 0x00000002,
162 BAG_FAMILY_MASK_SOUL_SHARDS = 0x00000004,
163 BAG_FAMILY_MASK_LEATHERWORKING_SUPP = 0x00000008,
164 BAG_FAMILY_MASK_INSCRIPTION_SUPP = 0x00000010,
165 BAG_FAMILY_MASK_HERBS = 0x00000020,
166 BAG_FAMILY_MASK_ENCHANTING_SUPP = 0x00000040,
167 BAG_FAMILY_MASK_ENGINEERING_SUPP = 0x00000080,
168 BAG_FAMILY_MASK_KEYS = 0x00000100,
169 BAG_FAMILY_MASK_GEMS = 0x00000200,
170 BAG_FAMILY_MASK_MINING_SUPP = 0x00000400,
171 BAG_FAMILY_MASK_SOULBOUND_EQUIPMENT = 0x00000800,
172 BAG_FAMILY_MASK_VANITY_PETS = 0x00001000,
173 BAG_FAMILY_MASK_CURRENCY_TOKENS = 0x00002000,
174 BAG_FAMILY_MASK_QUEST_ITEMS = 0x00004000,
175 BAG_FAMILY_MASK_FISHING_SUPP = 0x00008000,
178 enum SocketColor
180 SOCKET_COLOR_META = 1,
181 SOCKET_COLOR_RED = 2,
182 SOCKET_COLOR_YELLOW = 4,
183 SOCKET_COLOR_BLUE = 8,
184 SOCKET_COLOR_HYDRAULIC = 16, // unused
185 SOCKET_COLOR_COGWHEEL = 32,
188 #define SOCKET_COLOR_ALL (SOCKET_COLOR_META | SOCKET_COLOR_RED | SOCKET_COLOR_YELLOW | SOCKET_COLOR_BLUE | SOCKET_COLOR_COGWHEEL)
190 enum InventoryType
192 INVTYPE_NON_EQUIP = 0,
193 INVTYPE_HEAD = 1,
194 INVTYPE_NECK = 2,
195 INVTYPE_SHOULDERS = 3,
196 INVTYPE_BODY = 4,
197 INVTYPE_CHEST = 5,
198 INVTYPE_WAIST = 6,
199 INVTYPE_LEGS = 7,
200 INVTYPE_FEET = 8,
201 INVTYPE_WRISTS = 9,
202 INVTYPE_HANDS = 10,
203 INVTYPE_FINGER = 11,
204 INVTYPE_TRINKET = 12,
205 INVTYPE_WEAPON = 13,
206 INVTYPE_SHIELD = 14,
207 INVTYPE_RANGED = 15,
208 INVTYPE_CLOAK = 16,
209 INVTYPE_2HWEAPON = 17,
210 INVTYPE_BAG = 18,
211 INVTYPE_TABARD = 19,
212 INVTYPE_ROBE = 20,
213 INVTYPE_WEAPONMAINHAND = 21,
214 INVTYPE_WEAPONOFFHAND = 22,
215 INVTYPE_HOLDABLE = 23,
216 INVTYPE_AMMO = 24,
217 INVTYPE_THROWN = 25,
218 INVTYPE_RANGEDRIGHT = 26,
219 INVTYPE_QUIVER = 27,
220 INVTYPE_RELIC = 28
223 #define MAX_INVTYPE 29
225 enum ItemClass
227 ITEM_CLASS_CONSUMABLE = 0,
228 ITEM_CLASS_CONTAINER = 1,
229 ITEM_CLASS_WEAPON = 2,
230 ITEM_CLASS_GEM = 3,
231 ITEM_CLASS_ARMOR = 4,
232 ITEM_CLASS_REAGENT = 5,
233 ITEM_CLASS_PROJECTILE = 6,
234 ITEM_CLASS_TRADE_GOODS = 7,
235 ITEM_CLASS_GENERIC = 8,
236 ITEM_CLASS_RECIPE = 9,
237 ITEM_CLASS_MONEY = 10,
238 ITEM_CLASS_QUIVER = 11,
239 ITEM_CLASS_QUEST = 12,
240 ITEM_CLASS_KEY = 13,
241 ITEM_CLASS_PERMANENT = 14,
242 ITEM_CLASS_MISC = 15,
243 ITEM_CLASS_GLYPH = 16
246 #define MAX_ITEM_CLASS 17
248 enum ItemSubclassConsumable
250 ITEM_SUBCLASS_CONSUMABLE = 0,
251 ITEM_SUBCLASS_POTION = 1,
252 ITEM_SUBCLASS_ELIXIR = 2,
253 ITEM_SUBCLASS_FLASK = 3,
254 ITEM_SUBCLASS_SCROLL = 4,
255 ITEM_SUBCLASS_FOOD = 5,
256 ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6,
257 ITEM_SUBCLASS_BANDAGE = 7,
258 ITEM_SUBCLASS_CONSUMABLE_OTHER = 8
261 #define MAX_ITEM_SUBCLASS_CONSUMABLE 9
263 enum ItemSubclassContainer
265 ITEM_SUBCLASS_CONTAINER = 0,
266 ITEM_SUBCLASS_SOUL_CONTAINER = 1,
267 ITEM_SUBCLASS_HERB_CONTAINER = 2,
268 ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
269 ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4,
270 ITEM_SUBCLASS_GEM_CONTAINER = 5,
271 ITEM_SUBCLASS_MINING_CONTAINER = 6,
272 ITEM_SUBCLASS_LEATHERWORKING_CONTAINER = 7,
273 ITEM_SUBCLASS_INSCRIPTION_CONTAINER = 8,
274 ITEM_SUBCLASS_FISHING_CONTAINER = 9,
277 #define MAX_ITEM_SUBCLASS_CONTAINER 10
279 enum ItemSubclassWeapon
281 ITEM_SUBCLASS_WEAPON_AXE = 0,
282 ITEM_SUBCLASS_WEAPON_AXE2 = 1,
283 ITEM_SUBCLASS_WEAPON_BOW = 2,
284 ITEM_SUBCLASS_WEAPON_GUN = 3,
285 ITEM_SUBCLASS_WEAPON_MACE = 4,
286 ITEM_SUBCLASS_WEAPON_MACE2 = 5,
287 ITEM_SUBCLASS_WEAPON_POLEARM = 6,
288 ITEM_SUBCLASS_WEAPON_SWORD = 7,
289 ITEM_SUBCLASS_WEAPON_SWORD2 = 8,
290 ITEM_SUBCLASS_WEAPON_obsolete = 9,
291 ITEM_SUBCLASS_WEAPON_STAFF = 10,
292 ITEM_SUBCLASS_WEAPON_EXOTIC = 11,
293 ITEM_SUBCLASS_WEAPON_EXOTIC2 = 12,
294 ITEM_SUBCLASS_WEAPON_FIST = 13,
295 ITEM_SUBCLASS_WEAPON_MISC = 14,
296 ITEM_SUBCLASS_WEAPON_DAGGER = 15,
297 ITEM_SUBCLASS_WEAPON_THROWN = 16,
298 ITEM_SUBCLASS_WEAPON_SPEAR = 17,
299 ITEM_SUBCLASS_WEAPON_CROSSBOW = 18,
300 ITEM_SUBCLASS_WEAPON_WAND = 19,
301 ITEM_SUBCLASS_WEAPON_FISHING_POLE = 20
304 #define MAX_ITEM_SUBCLASS_WEAPON 21
306 enum ItemSubclassGem
308 ITEM_SUBCLASS_GEM_RED = 0,
309 ITEM_SUBCLASS_GEM_BLUE = 1,
310 ITEM_SUBCLASS_GEM_YELLOW = 2,
311 ITEM_SUBCLASS_GEM_PURPLE = 3,
312 ITEM_SUBCLASS_GEM_GREEN = 4,
313 ITEM_SUBCLASS_GEM_ORANGE = 5,
314 ITEM_SUBCLASS_GEM_META = 6,
315 ITEM_SUBCLASS_GEM_SIMPLE = 7,
316 ITEM_SUBCLASS_GEM_PRISMATIC = 8,
317 ITEM_SUBCLASS_GEM_HYDRAULIC = 9, // ABS
318 ITEM_SUBCLASS_GEM_COGWHEEL = 10,
321 #define MAX_ITEM_SUBCLASS_GEM 11
323 enum ItemSubclassArmor
325 ITEM_SUBCLASS_ARMOR_MISC = 0,
326 ITEM_SUBCLASS_ARMOR_CLOTH = 1,
327 ITEM_SUBCLASS_ARMOR_LEATHER = 2,
328 ITEM_SUBCLASS_ARMOR_MAIL = 3,
329 ITEM_SUBCLASS_ARMOR_PLATE = 4,
330 ITEM_SUBCLASS_ARMOR_BUCKLER = 5,
331 ITEM_SUBCLASS_ARMOR_SHIELD = 6,
332 ITEM_SUBCLASS_ARMOR_LIBRAM = 7,
333 ITEM_SUBCLASS_ARMOR_IDOL = 8,
334 ITEM_SUBCLASS_ARMOR_TOTEM = 9,
335 ITEM_SUBCLASS_ARMOR_SIGIL = 10,
336 ITEM_SUBCLASS_ARMOR_RELIC = 11,
339 #define MAX_ITEM_SUBCLASS_ARMOR 12
341 enum ItemSubclassReagent
343 ITEM_SUBCLASS_REAGENT = 0
346 #define MAX_ITEM_SUBCLASS_REAGENT 1
348 enum ItemSubclassProjectile
350 ITEM_SUBCLASS_WAND = 0, // ABS
351 ITEM_SUBCLASS_BOLT = 1, // ABS
352 ITEM_SUBCLASS_ARROW = 2,
353 ITEM_SUBCLASS_BULLET = 3,
354 ITEM_SUBCLASS_THROWN = 4 // ABS
357 #define MAX_ITEM_SUBCLASS_PROJECTILE 4
359 enum ItemSubclassTradeGoods
361 ITEM_SUBCLASS_TRADE_GOODS = 0,
362 ITEM_SUBCLASS_PARTS = 1,
363 ITEM_SUBCLASS_EXPLOSIVES = 2,
364 ITEM_SUBCLASS_DEVICES = 3,
365 ITEM_SUBCLASS_JEWELCRAFTING = 4,
366 ITEM_SUBCLASS_CLOTH = 5,
367 ITEM_SUBCLASS_LEATHER = 6,
368 ITEM_SUBCLASS_METAL_STONE = 7,
369 ITEM_SUBCLASS_MEAT = 8,
370 ITEM_SUBCLASS_HERB = 9,
371 ITEM_SUBCLASS_ELEMENTAL = 10,
372 ITEM_SUBCLASS_TRADE_GOODS_OTHER = 11,
373 ITEM_SUBCLASS_ENCHANTING = 12,
374 ITEM_SUBCLASS_MATERIAL = 13,
375 ITEM_SUBCLASS_VELLUM = 14,
378 #define MAX_ITEM_SUBCLASS_TRADE_GOODS 15
380 enum ItemSubclassGeneric
382 ITEM_SUBCLASS_GENERIC = 0
385 #define MAX_ITEM_SUBCLASS_GENERIC 1
387 enum ItemSubclassRecipe
389 ITEM_SUBCLASS_BOOK = 0,
390 ITEM_SUBCLASS_LEATHERWORKING_PATTERN = 1,
391 ITEM_SUBCLASS_TAILORING_PATTERN = 2,
392 ITEM_SUBCLASS_ENGINEERING_SCHEMATIC = 3,
393 ITEM_SUBCLASS_BLACKSMITHING = 4,
394 ITEM_SUBCLASS_COOKING_RECIPE = 5,
395 ITEM_SUBCLASS_ALCHEMY_RECIPE = 6,
396 ITEM_SUBCLASS_FIRST_AID_MANUAL = 7,
397 ITEM_SUBCLASS_ENCHANTING_FORMULA = 8,
398 ITEM_SUBCLASS_FISHING_MANUAL = 9,
399 ITEM_SUBCLASS_JEWELCRAFTING_RECIPE = 10,
400 ITEM_SUBCLASS_INSCRIPTION_RECIPE = 11,
403 #define MAX_ITEM_SUBCLASS_RECIPE 12
405 enum ItemSubclassMoney
407 ITEM_SUBCLASS_MONEY = 0
408 // = 7 one test item
411 #define MAX_ITEM_SUBCLASS_MONEY 8
413 enum ItemSubclassQuiver
415 ITEM_SUBCLASS_QUIVER0 = 0, // ABS
416 ITEM_SUBCLASS_QUIVER1 = 1, // ABS
417 ITEM_SUBCLASS_QUIVER = 2,
418 ITEM_SUBCLASS_AMMO_POUCH = 3
421 #define MAX_ITEM_SUBCLASS_QUIVER 4
423 enum ItemSubclassQuest
425 ITEM_SUBCLASS_QUEST = 0
426 // 3 one unavailable item
427 // 8 two quest items
430 #define MAX_ITEM_SUBCLASS_QUEST 9
432 enum ItemSubclassKey
434 ITEM_SUBCLASS_KEY = 0,
435 ITEM_SUBCLASS_LOCKPICK = 1
438 #define MAX_ITEM_SUBCLASS_KEY 2
440 enum ItemSubclassPermanent
442 ITEM_SUBCLASS_PERMANENT = 0
445 #define MAX_ITEM_SUBCLASS_PERMANENT 1
447 enum ItemSubclassJunk
449 ITEM_SUBCLASS_JUNK = 0,
450 ITEM_SUBCLASS_JUNK_REAGENT = 1,
451 ITEM_SUBCLASS_JUNK_PET = 2,
452 ITEM_SUBCLASS_JUNK_HOLIDAY = 3,
453 ITEM_SUBCLASS_JUNK_OTHER = 4,
454 ITEM_SUBCLASS_JUNK_MOUNT = 5
455 // 12 single item 37677
458 #define MAX_ITEM_SUBCLASS_JUNK 13
460 enum ItemSubclassGlyph
462 ITEM_SUBCLASS_GLYPH_WARRIOR = 1,
463 ITEM_SUBCLASS_GLYPH_PALADIN = 2,
464 ITEM_SUBCLASS_GLYPH_HUNTER = 3,
465 ITEM_SUBCLASS_GLYPH_ROGUE = 4,
466 ITEM_SUBCLASS_GLYPH_PRIEST = 5,
467 ITEM_SUBCLASS_GLYPH_DEATH_KNIGHT = 6,
468 ITEM_SUBCLASS_GLYPH_SHAMAN = 7,
469 ITEM_SUBCLASS_GLYPH_MAGE = 8,
470 ITEM_SUBCLASS_GLYPH_WARLOCK = 9,
471 ITEM_SUBCLASS_GLYPH_DRUID = 11
474 #define MAX_ITEM_SUBCLASS_GLYPH 12
476 const uint32 MaxItemSubclassValues[MAX_ITEM_CLASS] =
478 MAX_ITEM_SUBCLASS_CONSUMABLE,
479 MAX_ITEM_SUBCLASS_CONTAINER,
480 MAX_ITEM_SUBCLASS_WEAPON,
481 MAX_ITEM_SUBCLASS_GEM,
482 MAX_ITEM_SUBCLASS_ARMOR,
483 MAX_ITEM_SUBCLASS_REAGENT,
484 MAX_ITEM_SUBCLASS_PROJECTILE,
485 MAX_ITEM_SUBCLASS_TRADE_GOODS,
486 MAX_ITEM_SUBCLASS_GENERIC,
487 MAX_ITEM_SUBCLASS_RECIPE,
488 MAX_ITEM_SUBCLASS_MONEY,
489 MAX_ITEM_SUBCLASS_QUIVER,
490 MAX_ITEM_SUBCLASS_QUEST,
491 MAX_ITEM_SUBCLASS_KEY,
492 MAX_ITEM_SUBCLASS_PERMANENT,
493 MAX_ITEM_SUBCLASS_JUNK,
494 MAX_ITEM_SUBCLASS_GLYPH
497 inline uint8 ItemSubClassToDurabilityMultiplierId(uint32 ItemClass, uint32 ItemSubClass)
499 switch (ItemClass)
501 case ITEM_CLASS_WEAPON: return ItemSubClass;
502 case ITEM_CLASS_ARMOR: return ItemSubClass + 21;
504 return 0;
507 enum ItemExtraFlags
509 ITEM_EXTRA_NON_CONSUMABLE = 0x01, // use as additional flag to spellcharges_N negative values, item not expire at no chanrges
510 ITEM_EXTRA_REAL_TIME_DURATION = 0x02, // if set and have Duration time, then offline time included in counting, if not set then counted only in game time
512 ITEM_EXTRA_ALL = 0x03 // all used flags, used for check DB data (mask all above flags)
515 // 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
516 #if defined( __GNUC__ )
517 #pragma pack(1)
518 #else
519 #pragma pack(push,1)
520 #endif
522 struct _ItemStat
524 uint32 ItemStatType;
525 int32 ItemStatValue;
526 uint32 ItemStatType2;
527 int32 ItemStatValue2;
529 struct _Spell
531 uint32 SpellId; // id from Spell.dbc
532 uint32 SpellTrigger;
533 int32 SpellCharges;
534 float SpellPPMRate;
535 int32 SpellCooldown;
536 uint32 SpellCategory; // id from SpellCategory.dbc
537 int32 SpellCategoryCooldown;
540 struct _Socket
542 uint32 Color;
543 uint32 Content;
546 #define MAX_ITEM_PROTO_SOCKETS 3
547 #define MAX_ITEM_PROTO_SPELLS 5
548 #define MAX_ITEM_PROTO_STATS 10
550 struct ItemPrototype
552 uint32 ItemId;
553 uint32 Class; // id from ItemClass.dbc
554 uint32 SubClass; // id from ItemSubClass.dbc
555 int32 Unk0;
556 char* Name1;
557 uint32 DisplayInfoID; // id from ItemDisplayInfo.dbc
558 uint32 Quality;
559 uint32 Flags;
560 uint32 Flags2;
561 float Unknown;
562 float Unknown1;
563 uint32 Unknown2;
564 uint32 BuyCount;
565 uint32 BuyPrice;
566 uint32 SellPrice;
567 uint32 InventoryType;
568 uint32 AllowableClass;
569 uint32 AllowableRace;
570 uint32 ItemLevel;
571 uint32 RequiredLevel;
572 uint32 RequiredSkill; // id from SkillLine.dbc
573 uint32 RequiredSkillRank;
574 uint32 RequiredSpell; // id from Spell.dbc
575 uint32 RequiredHonorRank;
576 uint32 RequiredCityRank;
577 uint32 RequiredReputationFaction; // id from Faction.dbc
578 uint32 RequiredReputationRank;
579 int32 MaxCount; // <=0: no limit
580 int32 Stackable; // 0: not allowed, -1: put in player coin info tab and don't limit stacking (so 1 slot)
581 uint32 ContainerSlots;
582 _ItemStat ItemStat[MAX_ITEM_PROTO_STATS];
583 uint32 ScalingStatDistribution; // id from ScalingStatDistribution.dbc
584 uint32 DamageType;
585 uint32 Delay;
586 float RangedModRange;
587 _Spell Spells[MAX_ITEM_PROTO_SPELLS];
588 uint32 Bonding;
589 char* Description;
590 uint32 PageText;
591 uint32 LanguageID;
592 uint32 PageMaterial;
593 uint32 StartQuest; // id from QuestCache.wdb
594 uint32 LockID;
595 int32 Material; // id from Material.dbc
596 uint32 Sheath;
597 uint32 RandomProperty; // id from ItemRandomProperties.dbc
598 uint32 RandomSuffix; // id from ItemRandomSuffix.dbc
599 uint32 ItemSet; // id from ItemSet.dbc
600 uint32 MaxDurability;
601 uint32 Area; // id from AreaTable.dbc
602 uint32 Map; // id from Map.dbc
603 uint32 BagFamily; // bit mask (1 << id from ItemBagFamily.dbc)
604 uint32 TotemCategory; // id from TotemCategory.dbc
605 _Socket Socket[MAX_ITEM_PROTO_SOCKETS];
606 uint32 socketBonus; // id from SpellItemEnchantment.dbc
607 uint32 GemProperties; // id from GemProperties.dbc
608 int32 RequiredDisenchantSkill;
609 float ArmorDamageModifier;
610 uint32 Duration;
611 uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc
612 uint32 HolidayId; // id from Holidays.dbc
613 uint32 ScriptId;
614 uint32 DisenchantID;
615 uint32 FoodType;
616 float StatScalingFactor;
617 uint32 Unknown400_1;
618 uint32 Unknown400_2;
619 uint32 MinMoneyLoot;
620 uint32 MaxMoneyLoot;
621 uint32 ExtraFlags; // see ItemExtraFlags
623 // helpers
624 bool CanChangeEquipStateInCombat() const
626 switch (InventoryType)
628 case INVTYPE_RELIC:
629 case INVTYPE_SHIELD:
630 case INVTYPE_HOLDABLE:
631 return true;
634 switch (Class)
636 case ITEM_CLASS_WEAPON:
637 case ITEM_CLASS_PROJECTILE:
638 return true;
641 return false;
644 uint32 GetMaxStackSize() const { return Stackable > 0 ? uint32(Stackable) : uint32(0x7FFFFFFF - 1); }
645 float getDPS() const;
647 uint32 GetArmor() const;
648 float GetMinDamage() const { return floor(getDPS() * float(Delay) / 1000.0f * 0.7f + 0.5f); }
649 float GetMaxDamage() const { return floor(getDPS() * float(Delay) / 1000.0f * 1.3f + 0.5f); }
651 bool IsPotion() const { return Class==ITEM_CLASS_CONSUMABLE && SubClass==ITEM_SUBCLASS_POTION; }
652 bool IsConjuredConsumable() const { return Class == ITEM_CLASS_CONSUMABLE && (Flags & ITEM_FLAG_CONJURED); }
653 bool IsVellum() const
655 return Class == ITEM_CLASS_TRADE_GOODS && (1 << SubClass) & (1 << ITEM_SUBCLASS_VELLUM);
659 // GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform
660 #if defined( __GNUC__ )
661 #pragma pack()
662 #else
663 #pragma pack(pop)
664 #endif
666 struct ItemLocale
668 std::vector<std::string> Name;
669 std::vector<std::string> Description;
672 #endif