OregonCore  revision fb2a440-git
Your Favourite TBC server
Item.h File Reference
#include "Common.h"
#include "Object.h"
#include "LootMgr.h"
#include "ItemPrototype.h"
#include "QueryResult.h"

Go to the source code of this file.

Classes

struct  ItemSetEffect
 
class  Item
 

Macros

#define MAX_VISIBLE_ITEM_OFFSET   16
 
#define MAX_ENCHANTMENT_OFFSET   3
 
#define MAX_ITEM_REQ_TARGET_TYPE   2
 

Enumerations

enum  InventoryChangeFailure {
  EQUIP_ERR_OK = 0, EQUIP_ERR_CANT_EQUIP_LEVEL_I = 1, EQUIP_ERR_ERR_CANT_EQUIP_SKILL = 2, EQUIP_ERR_ITEM_DOESNT_GO_TO_SLOT = 3,
  EQUIP_ERR_BAG_FULL = 4, EQUIP_ERR_NONEMPTY_BAG_OVER_OTHER_BAG = 5, EQUIP_ERR_CANT_TRADE_EQUIP_BAGS = 6, EQUIP_ERR_ONLY_AMMO_CAN_GO_HERE = 7,
  EQUIP_ERR_NO_REQUIRED_PROFICIENCY = 8, EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE = 9, EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM = 10, EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM2 = 11,
  EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE2 = 12, EQUIP_ERR_CANT_EQUIP_WITH_TWOHANDED = 13, EQUIP_ERR_CANT_DUAL_WIELD = 14, EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG = 15,
  EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG2 = 16, EQUIP_ERR_CANT_CARRY_MORE_OF_THIS = 17, EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE3 = 18, EQUIP_ERR_ITEM_CANT_STACK = 19,
  EQUIP_ERR_ITEM_CANT_BE_EQUIPPED = 20, EQUIP_ERR_ITEMS_CANT_BE_SWAPPED = 21, EQUIP_ERR_SLOT_IS_EMPTY = 22, EQUIP_ERR_ITEM_NOT_FOUND = 23,
  EQUIP_ERR_CANT_DROP_SOULBOUND = 24, EQUIP_ERR_OUT_OF_RANGE = 25, EQUIP_ERR_TRIED_TO_SPLIT_MORE_THAN_COUNT = 26, EQUIP_ERR_COULDNT_SPLIT_ITEMS = 27,
  EQUIP_ERR_MISSING_REAGENT = 28, EQUIP_ERR_NOT_ENOUGH_MONEY = 29, EQUIP_ERR_NOT_A_BAG = 30, EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS = 31,
  EQUIP_ERR_DONT_OWN_THAT_ITEM = 32, EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER = 33, EQUIP_ERR_MUST_PURCHASE_THAT_BAG_SLOT = 34, EQUIP_ERR_TOO_FAR_AWAY_FROM_BANK = 35,
  EQUIP_ERR_ITEM_LOCKED = 36, EQUIP_ERR_YOU_ARE_STUNNED = 37, EQUIP_ERR_YOU_ARE_DEAD = 38, EQUIP_ERR_CANT_DO_RIGHT_NOW = 39,
  EQUIP_ERR_INT_BAG_ERROR = 40, EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER2 = 41, EQUIP_ERR_CAN_EQUIP_ONLY1_AMMOPOUCH = 42, EQUIP_ERR_STACKABLE_CANT_BE_WRAPPED = 43,
  EQUIP_ERR_EQUIPPED_CANT_BE_WRAPPED = 44, EQUIP_ERR_WRAPPED_CANT_BE_WRAPPED = 45, EQUIP_ERR_BOUND_CANT_BE_WRAPPED = 46, EQUIP_ERR_UNIQUE_CANT_BE_WRAPPED = 47,
  EQUIP_ERR_BAGS_CANT_BE_WRAPPED = 48, EQUIP_ERR_ALREADY_LOOTED = 49, EQUIP_ERR_INVENTORY_FULL = 50, EQUIP_ERR_BANK_FULL = 51,
  EQUIP_ERR_ITEM_IS_CURRENTLY_SOLD_OUT = 52, EQUIP_ERR_BAG_FULL3 = 53, EQUIP_ERR_ITEM_NOT_FOUND2 = 54, EQUIP_ERR_ITEM_CANT_STACK2 = 55,
  EQUIP_ERR_BAG_FULL4 = 56, EQUIP_ERR_ITEM_SOLD_OUT = 57, EQUIP_ERR_OBJECT_IS_BUSY = 58, EQUIP_ERR_NONE = 59,
  EQUIP_ERR_NOT_IN_COMBAT = 60, EQUIP_ERR_NOT_WHILE_DISARMED = 61, EQUIP_ERR_BAG_FULL6 = 62, EQUIP_ERR_CANT_EQUIP_RANK = 63,
  EQUIP_ERR_CANT_EQUIP_REPUTATION = 64, EQUIP_ERR_TOO_MANY_SPECIAL_BAGS = 65, EQUIP_ERR_LOOT_CANT_LOOT_THAT_NOW = 66, EQUIP_ERR_ITEM_UNIQUE_EQUIPABLE = 67,
  EQUIP_ERR_VENDOR_MISSING_TURNINS = 68, EQUIP_ERR_NOT_ENOUGH_HONOR_POINTS = 69, EQUIP_ERR_NOT_ENOUGH_ARENA_POINTS = 70, EQUIP_ERR_ITEM_MAX_COUNT_SOCKETED = 71,
  EQUIP_ERR_MAIL_BOUND_ITEM = 72, EQUIP_ERR_NO_SPLIT_WHILE_PROSPECTING = 73, EQUIP_ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 75, EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 76,
  EQUIP_ERR_TOO_MUCH_GOLD = 77, EQUIP_ERR_NOT_DURING_ARENA_MATCH = 78, EQUIP_ERR_CANNOT_TRADE_THAT = 79, EQUIP_ERR_PERSONAL_ARENA_RATING_TOO_LOW = 80
}
 
enum  BuyFailure {
  BUY_ERR_CANT_FIND_ITEM = 0, BUY_ERR_ITEM_ALREADY_SOLD = 1, BUY_ERR_NOT_ENOUGHT_MONEY = 2, BUY_ERR_SELLER_DONT_LIKE_YOU = 4,
  BUY_ERR_DISTANCE_TOO_FAR = 5, BUY_ERR_ITEM_SOLD_OUT = 7, BUY_ERR_CANT_CARRY_MORE = 8, BUY_ERR_RANK_REQUIRE = 11,
  BUY_ERR_REPUTATION_REQUIRE = 12
}
 
enum  SellFailure {
  SELL_ERR_CANT_FIND_ITEM = 1, SELL_ERR_CANT_SELL_ITEM = 2, SELL_ERR_CANT_FIND_VENDOR = 3, SELL_ERR_YOU_DONT_OWN_THAT_ITEM = 4,
  SELL_ERR_UNK = 5, SELL_ERR_ONLY_EMPTY_BAG = 6
}
 
enum  EnchantmentSlot {
  PERM_ENCHANTMENT_SLOT = 0, TEMP_ENCHANTMENT_SLOT = 1, SOCK_ENCHANTMENT_SLOT = 2, SOCK_ENCHANTMENT_SLOT_2 = 3,
  SOCK_ENCHANTMENT_SLOT_3 = 4, BONUS_ENCHANTMENT_SLOT = 5, MAX_INSPECTED_ENCHANTMENT_SLOT = 6, PROP_ENCHANTMENT_SLOT_0 = 6,
  PROP_ENCHANTMENT_SLOT_1 = 7, PROP_ENCHANTMENT_SLOT_2 = 8, PROP_ENCHANTMENT_SLOT_3 = 9, PROP_ENCHANTMENT_SLOT_4 = 10,
  MAX_ENCHANTMENT_SLOT = 11
}
 
enum  EnchantmentOffset { ENCHANTMENT_ID_OFFSET = 0, ENCHANTMENT_DURATION_OFFSET = 1, ENCHANTMENT_CHARGES_OFFSET = 2 }
 
enum  EnchantmentSlotMask { ENCHANTMENT_CAN_SOULBOUND = 0x01, ENCHANTMENT_UNK1 = 0x02, ENCHANTMENT_UNK2 = 0x04, ENCHANTMENT_UNK3 = 0x08 }
 
enum  ItemUpdateState { ITEM_UNCHANGED = 0, ITEM_CHANGED = 1, ITEM_NEW = 2, ITEM_REMOVED = 3 }
 

Functions

bool ItemCanGoIntoBag (ItemTemplate const *proto, ItemTemplate const *pBagProto)
 

Macro Definition Documentation

#define MAX_ITEM_REQ_TARGET_TYPE   2

Definition at line 192 of file Item.h.

#define MAX_VISIBLE_ITEM_OFFSET   16

Enumeration Type Documentation

enum BuyFailure
Enumerator
BUY_ERR_CANT_FIND_ITEM 
BUY_ERR_ITEM_ALREADY_SOLD 
BUY_ERR_NOT_ENOUGHT_MONEY 
BUY_ERR_SELLER_DONT_LIKE_YOU 
BUY_ERR_DISTANCE_TOO_FAR 
BUY_ERR_ITEM_SOLD_OUT 
BUY_ERR_CANT_CARRY_MORE 
BUY_ERR_RANK_REQUIRE 
BUY_ERR_REPUTATION_REQUIRE 

Definition at line 123 of file Item.h.

Enumerator
ENCHANTMENT_ID_OFFSET 
ENCHANTMENT_DURATION_OFFSET 
ENCHANTMENT_CHARGES_OFFSET 

Definition at line 167 of file Item.h.

Enumerator
PERM_ENCHANTMENT_SLOT 
TEMP_ENCHANTMENT_SLOT 
SOCK_ENCHANTMENT_SLOT 
SOCK_ENCHANTMENT_SLOT_2 
SOCK_ENCHANTMENT_SLOT_3 
BONUS_ENCHANTMENT_SLOT 
MAX_INSPECTED_ENCHANTMENT_SLOT 
PROP_ENCHANTMENT_SLOT_0 
PROP_ENCHANTMENT_SLOT_1 
PROP_ENCHANTMENT_SLOT_2 
PROP_ENCHANTMENT_SLOT_3 
PROP_ENCHANTMENT_SLOT_4 
MAX_ENCHANTMENT_SLOT 

Definition at line 147 of file Item.h.

148 {
156 
157  PROP_ENCHANTMENT_SLOT_0 = 6, // used with RandomSuffix
158  PROP_ENCHANTMENT_SLOT_1 = 7, // used with RandomSuffix
159  PROP_ENCHANTMENT_SLOT_2 = 8, // used with RandomSuffix and RandomProperty
160  PROP_ENCHANTMENT_SLOT_3 = 9, // used with RandomProperty
161  PROP_ENCHANTMENT_SLOT_4 = 10, // used with RandomProperty
163 };
Enumerator
ENCHANTMENT_CAN_SOULBOUND 
ENCHANTMENT_UNK1 
ENCHANTMENT_UNK2 
ENCHANTMENT_UNK3 

Definition at line 176 of file Item.h.

177 {
179  ENCHANTMENT_UNK1 = 0x02,
180  ENCHANTMENT_UNK2 = 0x04,
181  ENCHANTMENT_UNK3 = 0x08
182 };
Enumerator
EQUIP_ERR_OK 
EQUIP_ERR_CANT_EQUIP_LEVEL_I 
EQUIP_ERR_ERR_CANT_EQUIP_SKILL 
EQUIP_ERR_ITEM_DOESNT_GO_TO_SLOT 
EQUIP_ERR_BAG_FULL 
EQUIP_ERR_NONEMPTY_BAG_OVER_OTHER_BAG 
EQUIP_ERR_CANT_TRADE_EQUIP_BAGS 
EQUIP_ERR_ONLY_AMMO_CAN_GO_HERE 
EQUIP_ERR_NO_REQUIRED_PROFICIENCY 
EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE 
EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM 
EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM2 
EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE2 
EQUIP_ERR_CANT_EQUIP_WITH_TWOHANDED 
EQUIP_ERR_CANT_DUAL_WIELD 
EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG 
EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG2 
EQUIP_ERR_CANT_CARRY_MORE_OF_THIS 
EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE3 
EQUIP_ERR_ITEM_CANT_STACK 
EQUIP_ERR_ITEM_CANT_BE_EQUIPPED 
EQUIP_ERR_ITEMS_CANT_BE_SWAPPED 
EQUIP_ERR_SLOT_IS_EMPTY 
EQUIP_ERR_ITEM_NOT_FOUND 
EQUIP_ERR_CANT_DROP_SOULBOUND 
EQUIP_ERR_OUT_OF_RANGE 
EQUIP_ERR_TRIED_TO_SPLIT_MORE_THAN_COUNT 
EQUIP_ERR_COULDNT_SPLIT_ITEMS 
EQUIP_ERR_MISSING_REAGENT 
EQUIP_ERR_NOT_ENOUGH_MONEY 
EQUIP_ERR_NOT_A_BAG 
EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS 
EQUIP_ERR_DONT_OWN_THAT_ITEM 
EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER 
EQUIP_ERR_MUST_PURCHASE_THAT_BAG_SLOT 
EQUIP_ERR_TOO_FAR_AWAY_FROM_BANK 
EQUIP_ERR_ITEM_LOCKED 
EQUIP_ERR_YOU_ARE_STUNNED 
EQUIP_ERR_YOU_ARE_DEAD 
EQUIP_ERR_CANT_DO_RIGHT_NOW 
EQUIP_ERR_INT_BAG_ERROR 
EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER2 
EQUIP_ERR_CAN_EQUIP_ONLY1_AMMOPOUCH 
EQUIP_ERR_STACKABLE_CANT_BE_WRAPPED 
EQUIP_ERR_EQUIPPED_CANT_BE_WRAPPED 
EQUIP_ERR_WRAPPED_CANT_BE_WRAPPED 
EQUIP_ERR_BOUND_CANT_BE_WRAPPED 
EQUIP_ERR_UNIQUE_CANT_BE_WRAPPED 
EQUIP_ERR_BAGS_CANT_BE_WRAPPED 
EQUIP_ERR_ALREADY_LOOTED 
EQUIP_ERR_INVENTORY_FULL 
EQUIP_ERR_BANK_FULL 
EQUIP_ERR_ITEM_IS_CURRENTLY_SOLD_OUT 
EQUIP_ERR_BAG_FULL3 
EQUIP_ERR_ITEM_NOT_FOUND2 
EQUIP_ERR_ITEM_CANT_STACK2 
EQUIP_ERR_BAG_FULL4 
EQUIP_ERR_ITEM_SOLD_OUT 
EQUIP_ERR_OBJECT_IS_BUSY 
EQUIP_ERR_NONE 
EQUIP_ERR_NOT_IN_COMBAT 
EQUIP_ERR_NOT_WHILE_DISARMED 
EQUIP_ERR_BAG_FULL6 
EQUIP_ERR_CANT_EQUIP_RANK 
EQUIP_ERR_CANT_EQUIP_REPUTATION 
EQUIP_ERR_TOO_MANY_SPECIAL_BAGS 
EQUIP_ERR_LOOT_CANT_LOOT_THAT_NOW 
EQUIP_ERR_ITEM_UNIQUE_EQUIPABLE 
EQUIP_ERR_VENDOR_MISSING_TURNINS 
EQUIP_ERR_NOT_ENOUGH_HONOR_POINTS 
EQUIP_ERR_NOT_ENOUGH_ARENA_POINTS 
EQUIP_ERR_ITEM_MAX_COUNT_SOCKETED 
EQUIP_ERR_MAIL_BOUND_ITEM 
EQUIP_ERR_NO_SPLIT_WHILE_PROSPECTING 
EQUIP_ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED 
EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED 
EQUIP_ERR_TOO_MUCH_GOLD 
EQUIP_ERR_NOT_DURING_ARENA_MATCH 
EQUIP_ERR_CANNOT_TRADE_THAT 
EQUIP_ERR_PERSONAL_ARENA_RATING_TOO_LOW 

Definition at line 38 of file Item.h.

39 {
40  EQUIP_ERR_OK = 0,
99  EQUIP_ERR_NONE = 59,
102  EQUIP_ERR_BAG_FULL6 = 62,
120  // probably exist more
121 };
Enumerator
ITEM_UNCHANGED 
ITEM_CHANGED 
ITEM_NEW 
ITEM_REMOVED 

Definition at line 184 of file Item.h.

185 {
186  ITEM_UNCHANGED = 0,
187  ITEM_CHANGED = 1,
188  ITEM_NEW = 2,
189  ITEM_REMOVED = 3
190 };
Definition: Item.h:188
Enumerator
SELL_ERR_CANT_FIND_ITEM 
SELL_ERR_CANT_SELL_ITEM 
SELL_ERR_CANT_FIND_VENDOR 
SELL_ERR_YOU_DONT_OWN_THAT_ITEM 
SELL_ERR_UNK 
SELL_ERR_ONLY_EMPTY_BAG 

Definition at line 136 of file Item.h.

137 {
139  SELL_ERR_CANT_SELL_ITEM = 2, // merchant doesn't like that item
140  SELL_ERR_CANT_FIND_VENDOR = 3, // merchant doesn't like you
141  SELL_ERR_YOU_DONT_OWN_THAT_ITEM = 4, // you don't own that item
142  SELL_ERR_UNK = 5, // nothing appears...
143  SELL_ERR_ONLY_EMPTY_BAG = 6 // can only do with empty bags
144 };

Function Documentation

bool ItemCanGoIntoBag ( ItemTemplate const *  proto,
ItemTemplate const *  pBagProto 
)

Definition at line 166 of file Item.cpp.

References BAG_FAMILY_MASK_ARROWS, BAG_FAMILY_MASK_BULLETS, BAG_FAMILY_MASK_ENCHANTING_SUPP, BAG_FAMILY_MASK_ENGINEERING_SUPP, BAG_FAMILY_MASK_GEMS, BAG_FAMILY_MASK_HERBS, BAG_FAMILY_MASK_LEATHERWORKING_SUPP, BAG_FAMILY_MASK_MINING_SUPP, BAG_FAMILY_MASK_SOUL_SHARDS, ItemTemplate::BagFamily, ItemTemplate::Class, ITEM_CLASS_CONTAINER, ITEM_CLASS_QUIVER, ITEM_SUBCLASS_AMMO_POUCH, ITEM_SUBCLASS_CONTAINER, ITEM_SUBCLASS_ENCHANTING_CONTAINER, ITEM_SUBCLASS_ENGINEERING_CONTAINER, ITEM_SUBCLASS_GEM_CONTAINER, ITEM_SUBCLASS_HERB_CONTAINER, ITEM_SUBCLASS_LEATHERWORKING_CONTAINER, ITEM_SUBCLASS_MINING_CONTAINER, ITEM_SUBCLASS_QUIVER, ITEM_SUBCLASS_SOUL_CONTAINER, and ItemTemplate::SubClass.

Referenced by Player::_CanStoreItem_InBag(), Player::_CanStoreItem_InSpecificSlot(), Player::CanStoreItems(), and Player::SwapItem().

167 {
168  if (!pProto || !pBagProto)
169  return false;
170 
171  switch (pBagProto->Class)
172  {
174  switch (pBagProto->SubClass)
175  {
177  return true;
179  if (!(pProto->BagFamily & BAG_FAMILY_MASK_SOUL_SHARDS))
180  return false;
181  return true;
183  if (!(pProto->BagFamily & BAG_FAMILY_MASK_HERBS))
184  return false;
185  return true;
187  if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENCHANTING_SUPP))
188  return false;
189  return true;
191  if (!(pProto->BagFamily & BAG_FAMILY_MASK_MINING_SUPP))
192  return false;
193  return true;
195  if (!(pProto->BagFamily & BAG_FAMILY_MASK_ENGINEERING_SUPP))
196  return false;
197  return true;
199  if (!(pProto->BagFamily & BAG_FAMILY_MASK_GEMS))
200  return false;
201  return true;
203  if (!(pProto->BagFamily & BAG_FAMILY_MASK_LEATHERWORKING_SUPP))
204  return false;
205  return true;
206  default:
207  return false;
208  }
209  case ITEM_CLASS_QUIVER:
210  switch (pBagProto->SubClass)
211  {
213  if (!(pProto->BagFamily & BAG_FAMILY_MASK_ARROWS))
214  return false;
215  return true;
217  if (!(pProto->BagFamily & BAG_FAMILY_MASK_BULLETS))
218  return false;
219  return true;
220  default:
221  return false;
222  }
223  }
224  return false;
225 }