* implemented basic spellcasting, more to come. * new conf option: "disablespellcheck" * reactivated DefScript command "castspell" * added selfheal.def for GMs * misc stuff
414 lines
12 KiB
C++
414 lines
12 KiB
C++
#ifndef _ITEM_H
|
|
#define _ITEM_H
|
|
|
|
#include "common.h"
|
|
#include "Object.h"
|
|
|
|
class Bag;
|
|
|
|
enum InventoryChangeFailure
|
|
{
|
|
EQUIP_ERR_OK = 0,
|
|
EQUIP_ERR_YOU_MUST_REACH_LEVEL_N = 1,
|
|
EQUIP_ERR_SKILL_ISNT_HIGH_ENOUGH = 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_BAG_FULL2 = 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_CANT_DO_IN_COMBAT = 60,
|
|
EQUIP_CANT_DO_WHILE_DISARMED = 61,
|
|
EQUIP_ERR_BAG_FULL6 = 62,
|
|
EQUIP_ITEM_RANK_NOT_ENOUGH = 63,
|
|
EQUIP_ITEM_REPUTATION_NOT_ENOUGH = 64,
|
|
EQUIP_MORE_THAN1_SPECIAL_BAG = 65
|
|
};
|
|
|
|
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_CANT_CARRY_MORE = 8,
|
|
BUY_ERR_LEVEL_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
|
|
};
|
|
|
|
enum ITEM_STAT_TYPE
|
|
{
|
|
ITEM_STAT_POWER = 0,
|
|
ITEM_STAT_HEALTH = 1,
|
|
ITEM_STAT_UNKNOWN = 2,
|
|
ITEM_STAT_AGILITY = 3,
|
|
ITEM_STAT_STRENGTH = 4,
|
|
ITEM_STAT_INTELLECT = 5,
|
|
ITEM_STAT_SPIRIT = 6,
|
|
ITEM_STAT_STAMINA = 7
|
|
};
|
|
|
|
enum ITEM_DAMAGE_TYPE
|
|
{
|
|
NORMAL_DAMAGE = 0,
|
|
HOLY_DAMAGE = 1,
|
|
FIRE_DAMAGE = 2,
|
|
NATURE_DAMAGE = 3,
|
|
FROST_DAMAGE = 4,
|
|
SHADOW_DAMAGE = 5,
|
|
ARCANE_DAMAGE = 6
|
|
};
|
|
|
|
enum ITEM_SPELLTRIGGER_TYPE
|
|
{
|
|
USE = 0,
|
|
ON_EQUIP = 1,
|
|
CHANCE_ON_HIT = 2,
|
|
SOULSTONE = 4
|
|
};
|
|
|
|
enum ITEM_BONDING_TYPE
|
|
{
|
|
NO_BIND = 0,
|
|
BIND_WHEN_PICKED_UP = 1,
|
|
BIND_WHEN_EQUIPED = 2,
|
|
BIND_WHEN_USE = 3,
|
|
//TODO: Better name these
|
|
QUEST_ITEM = 4,
|
|
QUEST_ITEM1 = 5
|
|
};
|
|
|
|
// masks for ITEM_FIELD_FLAGS field
|
|
enum ITEM_FLAGS
|
|
{
|
|
ITEM_FLAGS_BINDED = 1
|
|
};
|
|
|
|
enum BAG_FAMILY
|
|
{
|
|
BAG_FAMILY_NONE = 0,
|
|
BAG_FAMILY_ARROWS = 1,
|
|
BAG_FAMILY_BULLETS = 2,
|
|
BAG_FAMILY_SOUL_SHARDS = 3,
|
|
//BAG_FAMILY_UNK1 = 4,
|
|
//BAG_FAMILY_UNK1 = 5,
|
|
BAG_FAMILY_HERBS = 6,
|
|
BAG_FAMILY_ENCHANTING_SUPP = 7,
|
|
BAG_FAMILY_ENGINEERING_SUPP = 8,
|
|
BAG_FAMILY_KEYS = 9,
|
|
BAG_FAMILY_GEMS = 10,
|
|
//BAG_FAMILY_UNK3 = 11,
|
|
BAG_FAMILY_MINING_SUPP = 12
|
|
};
|
|
|
|
enum INVENTORY_TYPES
|
|
{
|
|
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_SLOT_ITEM = 27,
|
|
INVTYPE_RELIC = 28,
|
|
NUM_INVENTORY_TYPES = 29
|
|
};
|
|
|
|
enum INVENTORY_CLASS
|
|
{
|
|
ITEM_CLASS_CONSUMABLE = 0,
|
|
ITEM_CLASS_CONTAINER = 1,
|
|
ITEM_CLASS_WEAPON = 2,
|
|
ITEM_CLASS_JEWELRY = 3,
|
|
ITEM_CLASS_ARMOR = 4,
|
|
ITEM_CLASS_REAGENT = 5,
|
|
ITEM_CLASS_PROJECTILE = 6,
|
|
ITEM_CLASS_TRADE_GOODS = 7,
|
|
ITEM_CLASS_GENERIC = 8,
|
|
ITEM_CLASS_BOOK = 9,
|
|
ITEM_CLASS_MONEY = 10,
|
|
ITEM_CLASS_QUIVER = 11,
|
|
ITEM_CLASS_QUEST = 12,
|
|
ITEM_CLASS_KEY = 13,
|
|
ITEM_CLASS_PERMANENT = 14,
|
|
ITEM_CLASS_JUNK = 15
|
|
};
|
|
|
|
// Client understand only 0 subclass for ITEM_CLASS_CONSUMABLE
|
|
// but this value used in code as implementation workaround
|
|
enum ITEM_SUBCLASS_CONSUMABLE
|
|
{
|
|
ITEM_SUBCLASS_FOOD = 1,
|
|
ITEM_SUBCLASS_LIQUID = 2,
|
|
ITEM_SUBCLASS_POTION = 3,
|
|
ITEM_SUBCLASS_SCROLL = 4,
|
|
ITEM_SUBCLASS_BANDAGE = 5,
|
|
ITEM_SUBCLASS_HEALTHSTONE = 6,
|
|
ITEM_SUBCLASS_COMBAT_EFFECT = 7
|
|
};
|
|
|
|
enum ITEM_SUBCLASS_CONTAINER
|
|
{
|
|
ITEM_SUBCLASS_CONTAINER = 0,
|
|
ITEM_SUBCLASS_SOUL_CONTAINER = 1,
|
|
ITEM_SUBCLASS_HERB_CONTAINER = 2,
|
|
ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
|
|
ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4
|
|
};
|
|
|
|
enum INVENTORY_SUBCLASS_WEAPON
|
|
{
|
|
ITEM_SUBCLASS_WEAPON_AXE = 0,
|
|
ITEM_SUBCLASS_WEAPON_AXE2 = 1,
|
|
ITEM_SUBCLASS_WEAPON_BOW = 2,
|
|
ITEM_SUBCLASS_WEAPON_GUN = 3,
|
|
ITEM_SUBCLASS_WEAPON_MACE = 4,
|
|
ITEM_SUBCLASS_WEAPON_MACE2 = 5,
|
|
ITEM_SUBCLASS_WEAPON_POLEARM = 6,
|
|
ITEM_SUBCLASS_WEAPON_SWORD = 7,
|
|
ITEM_SUBCLASS_WEAPON_SWORD2 = 8,
|
|
ITEM_SUBCLASS_WEAPON_obsolete = 9,
|
|
ITEM_SUBCLASS_WEAPON_STAFF = 10,
|
|
ITEM_SUBCLASS_WEAPON_EXOTIC = 11,
|
|
ITEM_SUBCLASS_WEAPON_EXOTIC2 = 12,
|
|
ITEM_SUBCLASS_WEAPON_UNARMED = 13,
|
|
ITEM_SUBCLASS_WEAPON_GENERIC = 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
|
|
};
|
|
|
|
enum ITEM_SUBCLASS_ARMOR
|
|
{
|
|
ITEM_SUBCLASS_ARMOR_GENERIC = 0,
|
|
ITEM_SUBCLASS_ARMOR_CLOTH = 1,
|
|
ITEM_SUBCLASS_ARMOR_LEATHER = 2,
|
|
ITEM_SUBCLASS_ARMOR_MAIL = 3,
|
|
ITEM_SUBCLASS_ARMOR_PLATE = 4,
|
|
ITEM_SUBCLASS_ARMOR_BUCKLER = 5,
|
|
ITEM_SUBCLASS_ARMOR_SHIELD = 6
|
|
};
|
|
|
|
enum ITEM_SUBCLASS_PROJECTILE
|
|
{
|
|
ITEM_SUBCLASS_ARROW = 2,
|
|
ITEM_SUBCLASS_BULLET = 3
|
|
};
|
|
|
|
enum ITEM_SUBCLASS_TRADE_GOODS
|
|
{
|
|
ITEM_SUBCLASS_TRADE_GOODS = 0,
|
|
ITEM_SUBCLASS_PARTS = 1,
|
|
ITEM_SUBCLASS_EXPLOSIVES = 2,
|
|
ITEM_SUBCLASS_DEVICES = 3
|
|
};
|
|
|
|
enum ITEM_SUBCLASS_BOOK
|
|
{
|
|
ITEM_SUBCLASS_BOOK = 0,
|
|
ITEM_SUBCLASS_LEATHERWORKING_PATTERN = 1,
|
|
ITEM_SUBCLASS_TAILORING_PATTERN = 2,
|
|
ITEM_SUBCLASS_ENGINEERING_SCHEMATIC = 3,
|
|
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
|
|
};
|
|
|
|
enum ITEM_SUBCLASS_QUIVER
|
|
{
|
|
ITEM_SUBCLASS_QUIVER = 2,
|
|
ITEM_SUBCLASS_AMMO_POUCH = 3
|
|
};
|
|
|
|
struct _ItemStat
|
|
{
|
|
uint32 ItemStatType;
|
|
uint32 ItemStatValue;
|
|
|
|
};
|
|
|
|
struct _ItemSpell
|
|
{
|
|
uint32 SpellId;
|
|
uint32 SpellTrigger;
|
|
uint32 SpellCharges;
|
|
uint32 SpellCooldown;
|
|
uint32 SpellCategory;
|
|
uint32 SpellCategoryCooldown;
|
|
|
|
};
|
|
|
|
struct _ItemDamage
|
|
{
|
|
float DamageMin;
|
|
float DamageMax;
|
|
uint32 DamageType;
|
|
|
|
};
|
|
|
|
struct ItemProto
|
|
{
|
|
uint32 Id;
|
|
uint32 Class;
|
|
uint32 SubClass;
|
|
std::string Name[4];
|
|
uint32 DisplayInfoID;
|
|
uint32 Quality;
|
|
uint32 Flags;
|
|
uint32 BuyCount;
|
|
uint32 BuyPrice;
|
|
uint32 SellPrice;
|
|
uint32 InventoryType;
|
|
uint32 AllowableClass;
|
|
uint32 AllowableRace;
|
|
uint32 ItemLevel;
|
|
uint32 RequiredLevel;
|
|
uint32 RequiredSkill;
|
|
uint32 RequiredSkillRank;
|
|
uint32 RequiredSpell;
|
|
uint32 RequiredHonorRank;
|
|
uint32 RequiredCityRank;
|
|
uint32 RequiredReputationFaction;
|
|
uint32 RequiredReputationRank;
|
|
uint32 MaxCount;
|
|
uint32 Stackable;
|
|
uint32 ContainerSlots;
|
|
_ItemStat ItemStat[10];
|
|
_ItemDamage Damage[5];
|
|
uint32 Armor;
|
|
uint32 HolyRes;
|
|
uint32 FireRes;
|
|
uint32 NatureRes;
|
|
uint32 FrostRes;
|
|
uint32 ShadowRes;
|
|
uint32 ArcaneRes;
|
|
uint32 Delay;
|
|
uint32 Ammo_type;
|
|
float RangedModRange;
|
|
_ItemSpell Spells[5];
|
|
uint32 Bonding;
|
|
std::string Description;
|
|
uint32 PageText;
|
|
uint32 LanguageID;
|
|
uint32 PageMaterial;
|
|
uint32 StartQuest;
|
|
uint32 LockID;
|
|
uint32 Material;
|
|
uint32 Sheath;
|
|
uint32 Extra;
|
|
uint32 Block;
|
|
uint32 ItemSet;
|
|
uint32 MaxDurability;
|
|
uint32 Area;
|
|
uint32 BagFamily;
|
|
uint32 Unknown1;
|
|
uint32 Unknown2;
|
|
};
|
|
|
|
class Item : public Object
|
|
{
|
|
public:
|
|
Item();
|
|
void Create(uint64);
|
|
uint8 GetSlot(void) { return _slot; }
|
|
void SetSlot(uint8 nr) { _slot = nr; }
|
|
uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); }
|
|
uint32 GetCount() const { return GetUInt32Value(ITEM_FIELD_STACK_COUNT); }
|
|
Bag *GetBag(void) { return _bag; }
|
|
bool IsInBag() const { return _bag != NULL; }
|
|
|
|
protected:
|
|
uint8 _slot;
|
|
Bag *_bag;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif |