/*	EQEMu: Everquest Server Emulator

	Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.net)

	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; version 2 of the License.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY except by those people which sell it, which
	are required to give you total support for your newly bought product;
	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, write to the Free Software
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  04111-1307  USA
*/

#ifndef COMMON_ITEM_DATA_H
#define COMMON_ITEM_DATA_H


/*
 * Note: (Doodman)
 *	This structure has field names that match the DB name exactly.
 *	Please take care as to not mess this up as it should make
 *	everyones life (i.e. mine) much easier. And the DB names
 *	match the field name from the 13th floor (SEQ) item collectors,
 *	so please maintain that as well.
 *
 * Note #2: (Doodman)
 *	UnkXXX fields are left in here for completeness but commented
 *	out since they are really unknown and since the items are now
 *	preserialized they should not be needed. Conversly if they
 *	-are- needed, then they shouldn't be unkown.
 *
 * Note #3: (Doodman)
 *	Please take care when adding new found data fields to add them
 *	to the appropriate structure. Item_Struct has elements that are
 *	global to all types of items only.
 *
 * Note #4: (Doodman)
 *	Made ya look! Ha!
 */

#include "emu_constants.h"


namespace EQ
{
	namespace item {
		enum ItemClass {
			ItemClassCommon = 0,
			ItemClassBag,
			ItemClassBook,
			ItemClassCount
		};

		enum ItemType : uint8 {
			/*9138*/ ItemType1HSlash = 0,
			/*9141*/ ItemType2HSlash,
			/*9140*/ ItemType1HPiercing,
			/*9139*/ ItemType1HBlunt,
			/*9142*/ ItemType2HBlunt,
			/*5504*/ ItemTypeBow,                 // 5
			/*----*/ ItemTypeUnknown1,
			/*----*/ ItemTypeLargeThrowing,
			/*5505*/ ItemTypeShield,
			/*5506*/ ItemTypeScroll,
			/*5507*/ ItemTypeArmor,               // 10
			/*5508*/ ItemTypeMisc,                // a lot of random crap has this item use.
			/*7564*/ ItemTypeLockPick,
			/*----*/ ItemTypeUnknown2,
			/*5509*/ ItemTypeFood,
			/*5510*/ ItemTypeDrink,               // 15
			/*5511*/ ItemTypeLight,
			/*5512*/ ItemTypeCombinable,          // not all stackable items are this use...
			/*5513*/ ItemTypeBandage,
			/*----*/ ItemTypeSmallThrowing,
			/*----*/ ItemTypeSpell,               // 20	// spells and tomes
			/*5514*/ ItemTypePotion,
			/*----*/ ItemTypeUnknown3,
			/*0406*/ ItemTypeWindInstrument,
			/*0407*/ ItemTypeStringedInstrument,
			/*0408*/ ItemTypeBrassInstrument,     // 25
			/*0405*/ ItemTypePercussionInstrument,
			/*5515*/ ItemTypeArrow,
			/*----*/ ItemTypeUnknown4,
			/*5521*/ ItemTypeJewelry,
			/*----*/ ItemTypeSkull,               // 30
			/*5516*/ ItemTypeBook,                // skill-up tomes/books? (would probably need a pp flag if true...)
			/*5517*/ ItemTypeNote,
			/*5518*/ ItemTypeKey,
			/*----*/ ItemTypeCoin,
			/*5520*/ ItemType2HPiercing,          // 35
			/*----*/ ItemTypeFishingPole,
			/*----*/ ItemTypeFishingBait,
			/*5519*/ ItemTypeAlcohol,
			/*----*/ ItemTypeKey2,                // keys and satchels?? (questable keys?)
			/*----*/ ItemTypeCompass,             // 40
			/*----*/ ItemTypeUnknown5,
			/*----*/ ItemTypePoison,              // might be wrong, but includes poisons
			/*----*/ ItemTypeUnknown6,
			/*----*/ ItemTypeUnknown7,
			/*5522*/ ItemTypeMartial,             // 45
			/*----*/ ItemTypeAllEffects,
			/*----*/ ItemTypeUnknown9,
			/*----*/ ItemTypeUnknown10,
			/*----*/ ItemTypeFocusEffect,
			/*----*/ ItemTypeSinging,             // 50
			/*5750*/ ItemTypeAllInstrumentTypes,
			/*5776*/ ItemTypeCharm,
			/*----*/ ItemTypeDye,
			/*----*/ ItemTypeAugmentation,
			/*----*/ ItemTypeAugmentationSolvent, // 55
			/*----*/ ItemTypeAugmentationDistiller,
			/*----*/ ItemTypeAlternateAbility,
			/*----*/ ItemTypeFellowshipKit,
			/*----*/ ItemTypeUnknown13,
			/*----*/ ItemTypeRecipe,              // 60
			/*----*/ ItemTypeAdvancedRecipe,
			/*----*/ ItemTypeJournal,             // only one(1) database entry
			/*----*/ ItemTypeAltCurrency,         // alt-currency (as opposed to coinage)
			/*5881*/ ItemTypePerfectedAugmentationDistiller,
			/*----*/ ItemTypeCount,
			/*----*/ ItemTypeCollectible,
			/*----*/ ItemTypeContainer,
			/*----*/ ItemTypeAll     = 0xFF

/*
			Unknowns:

			Mounts?
			Ornamentations?
			GuildBanners?
			Collectible?
			Placeable?
			(others?)
*/
		};

		enum AugTypeBit : uint32 {
			bit_AugTypeNone = 0x00000000,
			bit_AugTypeGeneralSingleStat = 0x00000001,		/*1^16^1 (General: Single Stat)^0*/
			bit_AugTypeGeneralMultipleStat = 0x00000002,	/*2^16^2 (General: Multiple Stat)^0*/
			bit_AugTypeGeneralSpellEffect = 0x00000004,		/*3^16^3 (General: Spell Effect)^0*/
			bit_AugTypeWeaponGeneral = 0x00000008,			/*4^16^4 (Weapon: General)^0*/
			bit_AugTypeWeaponElemDamage = 0x00000010,		/*5^16^5 (Weapon: Elem Damage)^0*/
			bit_AugTypeWeaponBaseDamage = 0x00000020,		/*6^16^6 (Weapon: Base Damage)^0*/
			bit_AugTypeGeneralGroup = 0x00000040,			/*7^16^7 (General: Group)^0*/
			bit_AugTypeGeneralRaid = 0x00000080,			/*8^16^8 (General: Raid)^0*/
			bit_AugTypeGeneralDragonsPoints = 0x00000100,	/*9^16^9 (General: Dragons Points)^0*/
			bit_AugTypeCraftedCommon = 0x00000200,			/*10^16^10 (Crafted: Common)^0*/
			bit_AugTypeCraftedGroup1 = 0x00000400,			/*11^16^11 (Crafted: Group)^0*/
			bit_AugTypeCraftedRaid1 = 0x00000800,			/*12^16^12 (Crafted: Raid)^0*/
			bit_AugTypeEnergeiacGroup = 0x00001000,			/*13^16^13 (Energeiac: Group)^0*/
			bit_AugTypeEnergeiacRaid = 0x00002000,			/*14^16^14 (Energeiac: Raid)^0*/
			bit_AugTypeEmblem = 0x00004000,					/*15^16^15 (Emblem)^0*/
			bit_AugTypeCraftedGroup2 = 0x00008000,			/*16^16^16 (Crafted: Group)^0*/
			bit_AugTypeCraftedRaid2 = 0x00010000,			/*17^16^17 (Crafted: Raid)^0*/
			bit_AugTypeUnknown1 = 0x00020000,				/*18^16^18^0*/
			bit_AugTypeUnknown2 = 0x00040000,				/*19^16^19^0*/
			bit_AugTypeOrnamentation = 0x00080000,			/*20^16^20 (Ornamentation)^0*/
			bit_AugTypeSpecialOrnamentation = 0x00100000,	/*21^16^21 (Special Ornamentation)^0*/
			bit_AugTypeUnknown3 = 0x00200000,				/*22^16^22^0*/
			bit_AugTypeUnknown4 = 0x00400000,				/*23^16^23^0*/
			bit_AugTypeUnknown5 = 0x00800000,				/*24^16^24^0*/
			bit_AugTypeUnknown6 = 0x01000000,				/*25^16^25^0*/
			bit_AugTypeUnknown7 = 0x02000000,				/*26^16^26^0*/
			bit_AugTypeUnknown8 = 0x04000000,				/*27^16^27^0*/
			bit_AugTypeUnknown9 = 0x08000000,				/*28^16^28^0*/
			bit_AugTypeUnknown10 = 0x10000000,				/*29^16^29^0*/
			bit_AugTypeEpic2_5 = 0x20000000,				/*30^16^30^0*/
			bit_AugTypeTest = 0x40000000,					/*31^16^Test^0*/ // listed as 31^16^31^0 in 5-10 client
			bit_AugTypeAll = 0xFFFFFFFF
		};

		enum AugType : uint8 {
			AugTypeNone = 0,
			AugTypeGeneralSingleStat,
			AugTypeGeneralMultipleStat,
			AugTypeGeneralSpellEffect,
			AugTypeWeaponGeneral,
			AugTypeWeaponElemDamage, // 5
			AugTypeWeaponBaseDamage,
			AugTypeGeneralGroup,
			AugTypeGeneralRaid,
			AugTypeGeneralDragonsPoints,
			AugTypeCraftedCommon, // 10
			AugTypeCraftedGroup1,
			AugTypeCraftedRaid1,
			AugTypeEnergeiacGroup,
			AugTypeEnergeiacRaid,
			AugTypeEmblem, // 15
			AugTypeCraftedGroup2,
			AugTypeCraftedRaid2,
			AugTypeUnknown1,
			AugTypeUnknown2,
			AugTypeOrnamentation, // 20
			AugTypeSpecialOrnamentation,
			AugTypeUnknown3,
			AugTypeUnknown4,
			AugTypeUnknown5,
			AugTypeUnknown6, // 25
			AugTypeUnknown7,
			AugTypeUnknown8,
			AugTypeUnknown9,
			AugTypeUnknown10,
			AugTypeEpic2_5, // 30
			AugTypeTest,
			AugTypeCount,
			AugTypeAll = 255
		};

		enum AugRestriction : uint8 {
/*4690*/	AugRestrictionAny = 0,
/*9134*/	AugRestrictionArmor,
/*9135*/	AugRestrictionWeapons,
/*9136*/	AugRestriction1HWeapons,
/*9137*/	AugRestriction2HWeapons,
/*9138*/	AugRestriction1HSlash, // 5
/*9139*/	AugRestriction1HBlunt,
/*9140*/	AugRestrictionPiercing,
/*9148*/	AugRestrictionHandToHand,
/*9141*/	AugRestriction2HSlash,
/*9142*/	AugRestriction2HBlunt, // 10
/*9143*/	AugRestriction2HPierce,
/*9144*/	AugRestrictionBows,
/*9145*/	AugRestrictionShields,
/*8052*/	AugRestriction1HSlash1HBluntOrHandToHand,
/*9200*/	AugRestriction1HBluntOrHandToHand, // 15	// no listed peq entries

		// these three appear to be post-RoF (12-10-2012) and can not be verified until RoF (05-10-2013) is supported
/*????*/	AugRestrictionUnknown1,
/*????*/	AugRestrictionUnknown2,
/*????*/	AugRestrictionUnknown3,					// last value in peq entries
			AugRestrictionCount

/*4687*/	//AugTypeAllItems, // ?? unknown atm
/*4688*/	//AugTypePrestige, // ?? unknown atm
/*4689*/	//AugTypeNonPrestige, // ?? unknown atm
		};

		enum BagType : uint8 {
/*3400*/	BagTypeSmallBag = 0,
/*3401*/	BagTypeLargeBag,
/*3402*/	BagTypeQuiver,
/*3403*/	BagTypeBeltPouch,
/*3404*/	BagTypeWristPouch,
/*3405*/	BagTypeBackPack, // 5
/*3406*/	BagTypeSmallChest,
/*3407*/	BagTypeLargeChest,
/*----*/	BagTypeBandolier,				// <*Database Reference Only>
/*3408*/	BagTypeMedicineBag,
/*3409*/	BagTypeToolBox, // 10
/*3410*/	BagTypeLexicon,
/*3411*/	BagTypeMortar,
/*3412*/	BagTypeSelfDusting,				// Quest container (Auto-clear contents?)
/*3413*/	BagTypeMixingBowl,
/*3414*/	BagTypeOven, // 15
/*3415*/	BagTypeSewingKit,
/*3416*/	BagTypeForge,
/*3417*/	BagTypeFletchingKit,
/*3418*/	BagTypeBrewBarrel,
/*3419*/	BagTypeJewelersKit, // 20
/*3420*/	BagTypePotteryWheel,
/*3421*/	BagTypeKiln,
/*3422*/	BagTypeKeymaker,				// (no database entries as of peq rev 69)
/*3423*/	BagTypeWizardsLexicon,
/*3424*/	BagTypeMagesLexicon, // 25
/*3425*/	BagTypeNecromancersLexicon,
/*3426*/	BagTypeEnchantersLexicon,
/*----*/	BagTypeUnknown1,				// (a coin pouch/purse?) (no database entries as of peq rev 69)
/*----*/	BagTypeConcordanceofResearch,	// <*Database Reference Only>
/*3427*/	BagTypeAlwaysWorks, // 30		// Quest container (Never-fail combines?)
/*3428*/	BagTypeKoadaDalForge,			// High Elf
/*3429*/	BagTypeTeirDalForge,			// Dark Elf
/*3430*/	BagTypeOggokForge,				// Ogre
/*3431*/	BagTypeStormguardForge,			// Dwarf
/*3432*/	BagTypeAkanonForge, // 35		// Gnome
/*3433*/	BagTypeNorthmanForge,			// Barbarian
/*----*/	BagTypeUnknown2,				// (no database entries as of peq rev 69)
/*3434*/	BagTypeCabilisForge,			// Iksar
/*3435*/	BagTypeFreeportForge,			// Human 1
/*3436*/	BagTypeRoyalQeynosForge, // 40	// Human 2
/*3439*/	BagTypeHalflingTailoringKit,
/*3438*/	BagTypeErudTailoringKit,
/*3440*/	BagTypeFierDalTailoringKit,		// Wood Elf
/*3441*/	BagTypeFierDalFletchingKit,		// Wood Elf
/*3437*/	BagTypeIksarPotteryWheel, // 45
/*3442*/	BagTypeTackleBox,
/*3443*/	BagTypeTrollForge,
/*3445*/	BagTypeFierDalForge,			// Wood Elf
/*3444*/	BagTypeValeForge,				// Halfling
/*3446*/	BagTypeErudForge, // 50
/*----*/	BagTypeTradersSatchel,			// <*Database Reference Only> (db: Yellow Trader's Satchel Token?)
/*5785*/	BagTypeGuktaForge,				// Froglok (no database entries as of peq rev 69)
/*3359*/	BagTypeAugmentationSealer,
/*----*/	BagTypeIceCreamChurn,			// <*Database Reference Only>
/*6325*/	BagTypeTransformationmold, // 55	// Ornamentation
/*6340*/	BagTypeDetransformationmold,	// Ornamentation Stripper
/*5400*/	BagTypeUnattuner,
/*7684*/	BagTypeTradeskillBag,
/*7692*/	BagTypeCollectibleBag,
/*----*/	BagTypeCount
		};

		enum ItemEffect {
			ItemEffectCombatProc = 0,
			ItemEffectClick,
			ItemEffectWorn,
			ItemEffectExpendable,
			ItemEffectEquipClick,
			ItemEffectClick2, //5		//name unknown
			ItemEffectFocus,
			ItemEffectScroll,
			ItemEffectCount
		};

		enum ItemSize : uint8 {
			ItemSizeTiny = 0,
			ItemSizeSmall,
			ItemSizeMedium,
			ItemSizeLarge,
			ItemSizeGiant,
			ItemSizeCount
		};

		enum ItemDataType : uint8 {
			ItemDataBase = 0,
			ItemDataScaling,
			ItemDataEvolving,
			ItemDataCount
		};

		struct ItemEffect_Struct {
			int32	Effect;
			uint8	Type;
			uint8	Level;
			uint8	Level2;
			//MaxCharges
			//CastTime
			//RecastDelay
			//RecastType
			//ProcRate
		};

		uint32 ConvertAugTypeToAugTypeBit(uint8 aug_type);
		uint8 ConvertAugTypeBitToAugType(uint32 aug_type_bit);

	} /*item*/

	struct InternalSerializedItem_Struct {
		int16 slot_id;
		const void * inst;
	};

	struct ItemData {
		// Non packet based fields
		uint8	MinStatus {};
		char	Comment[255] {};

		// Packet based fields
		uint8	ItemClass {};		// Item Type: 0=common, 1=container, 2=book
		char	Name[64] {};		// Name
		char	Lore[80] {};		// Lore Name: *=lore, &=summoned, #=artifact, ~=pending lore
		char	IDFile[30] {};		// Visible model
		uint32	ID {};				// Unique ID (also PK for DB)
		int32	Weight {};			// Item weight * 10
		uint8	NoRent{} ;			// No Rent: 0=norent, 255=not norent
		uint8	NoDrop {};			// No Drop: 0=nodrop, 255=not nodrop
		uint8	Size {};			// Size: 0=tiny, 1=small, 2=medium, 3=large, 4=giant
		uint32	Slots {};			// Bitfield for which slots this item can be used in
		uint32	Price {};			// Item cost (?)
		uint32	Icon {};			// Icon Number
		int32	LoreGroup {};		// Later items use LoreGroup instead of LoreFlag. we might want to see about changing this to int32 since it is commonly -1 and is constantly being cast from signed (-1) to unsigned (4294967295)
		bool	LoreFlag {};		// This will be true if LoreGroup is non-zero
		bool	PendingLoreFlag {};
		bool	ArtifactFlag {};
		bool	SummonedFlag {};
		uint8	FVNoDrop {};		// Firiona Vie nodrop flag
		uint32	Favor {};			// Individual favor
		uint32	GuildFavor {};		// Guild favor
		uint32	PointType {};

		//uint32	Unk117;
		//uint32	Unk118;
		//uint32	Unk121;
		//uint32	Unk124;

		uint8	BagType {};		// 0:Small Bag, 1:Large Bag, 2:Quiver, 3:Belt Pouch ... there are 50 types
		uint8	BagSlots {};		// Number of slots: can only be 2, 4, 6, 8, or 10
		uint8	BagSize {};		// 0:TINY, 1:SMALL, 2:MEDIUM, 3:LARGE, 4:GIANT
		uint8	BagWR {};			// 0->100

		bool	BenefitFlag {};
		bool	Tradeskills {};	// Is this a tradeskill item?
		int8	CR {};				// Save vs Cold
		int8	DR {};				// Save vs Disease
		int8	PR {};				// Save vs Poison
		int8	MR {};				// Save vs Magic
		int8	FR {};				// Save vs Fire
		int8	AStr {};			// Strength
		int8	ASta {};			// Stamina
		int8	AAgi {};			// Agility
		int8	ADex {};			// Dexterity
		int8	ACha {};			// Charisma
		int8	AInt {};			// Intelligence
		int8	AWis {};			// Wisdom
		int32	HP {};				// HP
		int32	Mana {};			// Mana
		int32	AC {};				// AC
		uint32	Deity {};			// Bitmask of Deities that can equip this item
		//uint32	Unk033
		int32	SkillModValue {};	// % Mod to skill specified in SkillModType
		int32	SkillModMax {};	// Max skill point modification
		uint32	SkillModType {};	// Type of skill for SkillModValue to apply to
		uint32	BaneDmgRace {};	// Bane Damage Race
		int32	BaneDmgAmt {};		// Bane Damage Body Amount
		uint32	BaneDmgBody {};	// Bane Damage Body
		bool	Magic {};			// True=Magic Item, False=not
		int32	CastTime_ {};
		uint8	ReqLevel {};		// Required Level to use item
		uint32	BardType {};		// Bard Skill Type
		int32	BardValue {};		// Bard Skill Amount
		int8	Light {};			// Light
		uint8	Delay {};			// Delay * 10
		uint8	RecLevel {};		// Recommended level to use item
		uint8	RecSkill {};		// Recommended skill to use item (refers to primary skill of item)
		uint8	ElemDmgType {};	// Elemental Damage Type (1=magic, 2=fire)
		uint8	ElemDmgAmt {};		// Elemental Damage
		uint8	Range {};			// Range of item
		uint32	Damage {};			// Delay between item usage (in 0.1 sec increments)
		uint32	Color {};			// RR GG BB 00 <-- as it appears in pc
		uint32	Classes {};		// Bitfield of classes that can equip item (1 << class#)
		uint32	Races {};			// Bitfield of races that can equip item (1 << race#)
		//uint32	Unk054 {};
		int16	MaxCharges {};		// Maximum charges items can hold: -1 if not a chargeable item
		uint8	ItemType {};		// Item Type/Skill (itemClass* from above)
		int32	SubType {};		// Some items have sub types that can be used for other things (unbreakable fishing poles, SpellEffect::FFItemClass)
		uint8	Material {};		// Item material type
		uint32	HerosForgeModel {};// Hero's Forge Armor Model Type (2-13?)
		float	SellRate {};		// Sell rate
		//uint32	Unk059 {};
		union {
			uint32 Fulfilment;	// Food fulfilment (How long it lasts)
			uint32 CastTime;		// Cast Time for clicky effects, in milliseconds
		};
		uint32 EliteMaterial {};
		int32	ProcRate {};
		int8	CombatEffects {};	// PoP: Combat Effects +
		int8	Shielding {};		// PoP: Shielding %
		int8	StunResist {};		// PoP: Stun Resist %
		int8	StrikeThrough {};	// PoP: Strike Through %
		int32	ExtraDmgSkill {};
		int32	ExtraDmgAmt {};
		int8	SpellShield {};	// PoP: Spell Shield %
		int8	Avoidance {};		// PoP: Avoidance +
		int8	Accuracy {};		// PoP: Accuracy +
		uint32	CharmFileID {};
		int32	FactionMod1 {};	// Faction Mod 1
		int32	FactionMod2 {};	// Faction Mod 2
		int32	FactionMod3 {};	// Faction Mod 3
		int32	FactionMod4 {};	// Faction Mod 4
		int32	FactionAmt1 {};	// Faction Amt 1
		int32	FactionAmt2 {};	// Faction Amt 2
		int32	FactionAmt3 {};	// Faction Amt 3
		int32	FactionAmt4 {};	// Faction Amt 4
		char	CharmFile[32] {};	// ?
		uint32	AugType {};
		uint8	AugSlotType[invaug::SOCKET_COUNT] {};	// RoF: Augment Slot 1-6 Type
		uint8	AugSlotVisible[invaug::SOCKET_COUNT] {};	// RoF: Augment Slot 1-6 Visible
		uint8	AugSlotUnk2[invaug::SOCKET_COUNT] {};	// RoF: Augment Slot 1-6 Unknown Most likely Powersource related
		uint32	LDoNTheme {};
		uint32	LDoNPrice {};
		uint32	LDoNSold {};
		uint32	BaneDmgRaceAmt {};
		uint32	AugRestrict {};
		int32	Endur {};
		int32	DotShielding {};
		int32	Attack {};
		int32	Regen {};
		int32	ManaRegen {};
		int32	EnduranceRegen {};
		int32	Haste {};
		int32	DamageShield {};
		uint32	RecastDelay {};
		int	RecastType {};
		uint32	AugDistiller {};
		bool	Attuneable {};
		bool	NoPet {};
		bool	PotionBelt {};
		bool	Stackable {};
		bool	NoTransfer {};
		bool	QuestItemFlag {};
		int16	StackSize {};
		uint8	PotionBeltSlots {};
		item::ItemEffect_Struct Click {};
		item::ItemEffect_Struct Proc {};
		item::ItemEffect_Struct Worn {};
		item::ItemEffect_Struct Focus {};
		item::ItemEffect_Struct Scroll {};
		item::ItemEffect_Struct Bard {};

		uint8	Book {};			// 0=Not book, 1=Book
		uint32	BookType {};
		char	Filename[33] {};	// Filename for book data
		// Begin SoF Fields
		int32 SVCorruption {};
		uint32 Purity {};
		uint8 EvolvingItem {};
		uint32 EvolvingID {};
		uint8 EvolvingLevel {};
		uint8 EvolvingMax {};
		uint32 BackstabDmg {};
		uint32 DSMitigation {};
		int32 HeroicStr {};
		int32 HeroicInt {};
		int32 HeroicWis {};
		int32 HeroicAgi {};
		int32 HeroicDex {};
		int32 HeroicSta {};
		int32 HeroicCha {};
		int32 HeroicMR {};
		int32 HeroicFR {};
		int32 HeroicCR {};
		int32 HeroicDR {};
		int32 HeroicPR {};
		int32 HeroicSVCorrup {};
		int32 HealAmt {};
		int32 SpellDmg {};
		uint32 LDoNSellBackRate {};
		uint32 ScriptFileID {};
		uint16 ExpendableArrow {};
		uint32 Clairvoyance {};
		char	ClickName[65] {};
		char	ProcName[65] {};
		char	WornName[65] {};
		char	FocusName[65] {};
		char	ScrollName[65] {};
		//BardName

		bool IsEquipable(uint16 Race, uint16 Class) const;
		bool IsClassEquipable(uint16 Class) const;
		bool IsRaceEquipable(uint16 Race) const;
		bool IsClassCommon() const;
		bool IsClassBag() const;
		bool IsClassBook() const;
		bool IsType1HWeapon() const;
		bool IsType2HWeapon() const;
		bool IsTypeShield() const;
		bool IsPetUsable() const;
		bool IsQuestItem() const;

		static bool CheckLoreConflict(const ItemData* l_item, const ItemData* r_item);
		bool CheckLoreConflict(const ItemData* item) const { return CheckLoreConflict(this, item); }
	};

} /*EQEmu*/

#endif /*COMMON_ITEM_DATA_H*/
