/*	EQEMu: Everquest Server Emulator
	Copyright (C) 2001-2003 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 02111-1307 USA
*/
#ifndef EQ_CONSTANTS_H
#define EQ_CONSTANTS_H

#include "skills.h"
#include "types.h"

/*
** Light Types
**
*/
enum LightTypes
{
	lightTypeNone = 0,
	lightTypeCandle,
	lightTypeTorch,
	lightTypeTinyGlowingSkull,
	lightTypeSmallLantern,
	lightTypeSteinOfMoggok,
	lightTypeLargeLantern,
	lightTypeFlamelessLantern,
	lightTypeGlobeOfStars,
	lightTypeLightGlobe,
	lightTypeLightstone,
	lightTypeGreaterLightstone,
	lightTypeFireBeetleEye,
	lightTypeColdlight,
	lightTypeUnknown1,
	lightTypeUnknown2
};

#define LIGHT_TYPES_COUNT 16

/*
** Light Levels
**
*/
enum LightLevels
{
	lightLevelUnlit = 0,
	lightLevelCandle,
	lightLevelTorch,
	lightLevelSmallMagic,
	lightLevelRedLight,
	lightLevelBlueLight,
	lightLevelSmallLantern,
	lightLevelMagicLantern,
	lightLevelLargeLantern,
	lightLevelLargeMagic,
	lightLevelBrilliant
};

#define LIGHT_LEVELS_COUNT 11

/*
**	Item attributes
**
**	(There are no grepwin hits other than these declarations... Do they have a use?)
*/
enum ItemAttributes : uint32
{
	ItemAttrNone			= 0x00000000,
	ItemAttrLore			= 0x00000001,
	ItemAttrArtifact		= 0x00000002,
	ItemAttrSummoned		= 0x00000004,
	ItemAttrMagic			= 0x00000008,
	ItemAttrAugment			= 0x00000010,
	ItemAttrPendingLore		= 0x00000020,
	ItemAttrUnknown			= 0xFFFFFFFF
};

/*
**	Item class types
**
*/
enum ItemClassTypes
{
	ItemClassCommon = 0,
	ItemClassContainer,
	ItemClassBook,
	_ItemClassCount
};

/*
**	Item use types
**
**	(ref: database and eqstr_us.txt)
**
**	(Looking at a recent database, it's possible that some of the item values may be off [10-27-2013])
*/
enum ItemUseTypes : uint8
{
/*9138*/	ItemType1HSlash = 0,
/*9141*/	ItemType2HSlash,
/*9140*/	ItemType1HPiercing,
/*9139*/	ItemType1HBlunt,
/*9142*/	ItemType2HBlunt,
/*5504*/	ItemTypeBow,
/*----*/	ItemTypeUnknown1,
/*----*/	ItemTypeLargeThrowing,
/*5505*/	ItemTypeShield,
/*5506*/	ItemTypeScroll,
/*5507*/	ItemTypeArmor,
/*5508*/	ItemTypeMisc,			// a lot of random crap has this item use.
/*7564*/	ItemTypeLockPick,
/*----*/	ItemTypeUnknown2,
/*5509*/	ItemTypeFood,
/*5510*/	ItemTypeDrink,
/*5511*/	ItemTypeLight,
/*5512*/	ItemTypeCombinable,		// not all stackable items are this use...
/*5513*/	ItemTypeBandage,
/*----*/	ItemTypeSmallThrowing,
/*----*/	ItemTypeSpell,			// spells and tomes
/*5514*/	ItemTypePotion,
/*----*/	ItemTypeUnknown3,
/*0406*/	ItemTypeWindInstrument,
/*0407*/	ItemTypeStringedInstrument,
/*0408*/	ItemTypeBrassInstrument,
/*0405*/	ItemTypePercussionInstrument,
/*5515*/	ItemTypeArrow,
/*----*/	ItemTypeUnknown4,
/*5521*/	ItemTypeJewelry,
/*----*/	ItemTypeSkull,
/*5516*/	ItemTypeBook,			// skill-up tomes/books? (would probably need a pp flag if true...)
/*5517*/	ItemTypeNote,
/*5518*/	ItemTypeKey,
/*----*/	ItemTypeCoin,
/*5520*/	ItemType2HPiercing,
/*----*/	ItemTypeFishingPole,
/*----*/	ItemTypeFishingBait,
/*5519*/	ItemTypeAlcohol,
/*----*/	ItemTypeKey2,			// keys and satchels?? (questable keys?)
/*----*/	ItemTypeCompass,
/*----*/	ItemTypeUnknown5,
/*----*/	ItemTypePoison,			// might be wrong, but includes poisons
/*----*/	ItemTypeUnknown6,
/*----*/	ItemTypeUnknown7,
/*5522*/	ItemTypeMartial,
/*----*/	ItemTypeUnknown8,
/*----*/	ItemTypeUnknown9,
/*----*/	ItemTypeUnknown10,
/*----*/	ItemTypeUnknown11,
/*----*/	ItemTypeSinging,
/*5750*/	ItemTypeAllInstrumentTypes,
/*5776*/	ItemTypeCharm,
/*----*/	ItemTypeDye,
/*----*/	ItemTypeAugmentation,
/*----*/	ItemTypeAugmentationSolvent,
/*----*/	ItemTypeAugmentationDistiller,
/*----*/	ItemTypeUnknown12,
/*----*/	ItemTypeFellowshipKit,
/*----*/	ItemTypeUnknown13,
/*----*/	ItemTypeRecipe,
/*----*/	ItemTypeAdvancedRecipe,
/*----*/	ItemTypeJournal,		// only one(1) database entry
/*----*/	ItemTypeAltCurrency,	// alt-currency (as opposed to coinage)
/*5881*/	ItemTypePerfectedAugmentationDistiller,
/*----*/	_ItemTypeCount

/*
	Unknowns:

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

/*
**	Augmentation use type bitmasks (1-based)
**
**	(ref: dbstr_us.txt)
**
*/
enum AugmentationUseTypeBitmasks : uint32 {
	AugUseNone					= 0x00000000,
	AugUseGeneralSingleStat		= 0x00000001,	/*1^16^1 (General: Single Stat)^0*/
	AugUseGeneralMultipleStat	= 0x00000002,	/*2^16^2 (General: Multiple Stat)^0*/
	AugUseGeneralSpellEffect	= 0x00000004,	/*3^16^3 (General: Spell Effect)^0*/
	AugUseWeaponGeneral			= 0x00000008,	/*4^16^4 (Weapon: General)^0*/
	AugUseWeaponElemDamage		= 0x00000010,	/*5^16^5 (Weapon: Elem Damage)^0*/
	AugUseWeaponBaseDamage		= 0x00000020,	/*6^16^6 (Weapon: Base Damage)^0*/
	AugUseGeneralGroup			= 0x00000040,	/*7^16^7 (General: Group)^0*/
	AugUseGeneralRaid			= 0x00000080,	/*8^16^8 (General: Raid)^0*/
	AugUseGeneralDragonsPoints	= 0x00000100,	/*9^16^9 (General: Dragons Points)^0*/
	AugUseCraftedCommon			= 0x00000200,	/*10^16^10 (Crafted: Common)^0*/
	AugUseCraftedGroup1			= 0x00000400,	/*11^16^11 (Crafted: Group)^0*/
	AugUseCraftedRaid1			= 0x00000800,	/*12^16^12 (Crafted: Raid)^0*/
	AugUseEnergeiacGroup		= 0x00001000,	/*13^16^13 (Energeiac: Group)^0*/
	AugUseEnergeiacRaid			= 0x00002000,	/*14^16^14 (Energeiac: Raid)^0*/
	AugUseEmblem				= 0x00004000,	/*15^16^15 (Emblem)^0*/
	AugUseCraftedGroup2			= 0x00008000,	/*16^16^16 (Crafted: Group)^0*/
	AugUseCraftedRaid2			= 0x00010000,	/*17^16^17 (Crafted: Raid)^0*/
	AugUseUnknown1				= 0x00020000,	/*18^16^18^0*/
	AugUseUnknown2				= 0x00040000,	/*19^16^19^0*/
	AugUseOrnamentation			= 0x00080000,	/*20^16^20 (Ornamentation)^0*/
	AugUseSpecialOrnamentation	= 0x00100000,	/*21^16^21 (Special Ornamentation)^0*/
	AugUseUnknown3				= 0x00200000,	/*22^16^22^0*/
	AugUseUnknown4				= 0x00400000,	/*23^16^23^0*/
	AugUseUnknown5				= 0x00800000,	/*24^16^24^0*/
	AugUseUnknown6				= 0x01000000,	/*25^16^25^0*/
	AugUseUnknown7				= 0x02000000,	/*26^16^26^0*/
	AugUseUnknown8				= 0x04000000,	/*27^16^27^0*/
	AugUseUnknown9				= 0x08000000,	/*28^16^28^0*/
	AugUseUnknown10				= 0x10000000,	/*29^16^29^0*/
	AugUseEpic25				= 0x20000000,	/*30^16^30^0*/
	AugUseTest					= 0x40000000,	/*31^16^Test^0*/ // listed as 31^16^31^0 in 5-10 client
	AugUseAll					= 0xFFFFFFFF
};

/*
**	Augmentation use types (enumerated)
**
*/
enum AugmentationUseTypes : uint8 {
	AugTypeNone = 0,
	AugTypeGeneralSingleStat,
	AugTypeGeneralMultipleStat,
	AugTypeGeneralSpellEffect,
	AugTypeWeaponGeneral,
	AugTypeWeaponElemDamage,
	AugTypeWeaponBaseDamage,
	AugTypeGeneralGroup,
	AugTypeGeneralRaid,
	AugTypeGeneralDragonsPoints,
	AugTypeCraftedCommon,
	AugTypeCraftedGroup1,
	AugTypeCraftedRaid1,
	AugTypeEnergeiacGroup,
	AugTypeEnergeiacRaid,
	AugTypeEmblem,
	AugTypeCraftedGroup2,
	AugTypeCraftedRaid2,
	AugTypeUnknown1,
	AugTypeUnknown2,
	AugTypeOrnamentation,
	AugTypeSpecialOrnamentation,
	AugTypeUnknown3,
	AugTypeUnknown4,
	AugTypeUnknown5,
	AugTypeUnknown6,
	AugTypeUnknown7,
	AugTypeUnknown8,
	AugTypeUnknown9,
	AugTypeUnknown10,
	AugTypeEpic25,
	AugTypeTest,
	_AugTypeCount,
	AugTypeAll = 255
};

/*
**	Augmentation restriction types (in-work)
**
**	(ref: eqstr_us.txt)
**
*/
enum AugmentationRestrictionTypes : uint8 {
/*4690*/	AugRestrAny = 0,
/*9134*/	AugRestrArmor,
/*9135*/	AugRestrWeapons,
/*9136*/	AugRestr1HWeapons,
/*9137*/	AugRestr2HWeapons,
/*9138*/	AugRestr1HSlash,
/*9139*/	AugRestr1HBlunt,
/*9140*/	AugRestrPiercing,
/*9148*/	AugRestrHandToHand,
/*9141*/	AugRestr2HSlash,
/*9142*/	AugRestr2HBlunt,
/*9143*/	AugRestr2HPierce,
/*9144*/	AugRestrBows,
/*9145*/	AugRestrShields,
/*8052*/	AugRestr1HSlash1HBluntOrHandToHand,
/*9200*/	AugRestr1HBluntOrHandToHand,		// 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
/*????*/	AugRestrUnknown1,
/*????*/	AugRestrUnknown2,
/*????*/	AugRestrUnknown3,					// last value in peq entries
			_AugRestrCount

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

/*
**	Container use types
**
**	This correlates to world 'object.type' (object.h/Object.cpp) as well as Item_Struct.BagType
**
**	(ref: database, web forums and eqstr_us.txt)
*/
enum ContainerUseTypes : uint8
{
/*3400*/	BagTypeSmallBag = 0,
/*3401*/	BagTypeLargeBag,
/*3402*/	BagTypeQuiver,
/*3403*/	BagTypeBeltPouch,
/*3404*/	BagTypeWristPouch,
/*3405*/	BagTypeBackPack,
/*3406*/	BagTypeSmallChest,
/*3407*/	BagTypeLargeChest,
/*----*/	BagTypeBandolier,				// <*Database Reference Only>
/*3408*/	BagTypeMedicineBag,
/*3409*/	BagTypeToolBox,
/*3410*/	BagTypeLexicon,
/*3411*/	BagTypeMortar,
/*3412*/	BagTypeSelfDusting,				// Quest container (Auto-clear contents?)
/*3413*/	BagTypeMixingBowl,
/*3414*/	BagTypeOven,
/*3415*/	BagTypeSewingKit,
/*3416*/	BagTypeForge,
/*3417*/	BagTypeFletchingKit,
/*3418*/	BagTypeBrewBarrel,
/*3419*/	BagTypeJewelersKit,
/*3420*/	BagTypePotteryWheel,
/*3421*/	BagTypeKiln,
/*3422*/	BagTypeKeymaker,				// (no database entries as of peq rev 69)
/*3423*/	BagTypeWizardsLexicon,
/*3424*/	BagTypeMagesLexicon,
/*3425*/	BagTypeNecromancersLexicon,
/*3426*/	BagTypeEnchantersLexicon,
/*----*/	BagTypeUnknown1,				// (a coin pouch/purse?) (no database entries as of peq rev 69)
/*----*/	BagTypeConcordanceofResearch,	// <*Database Reference Only>
/*3427*/	BagTypeAlwaysWorks,				// Quest container (Never-fail combines?)
/*3428*/	BagTypeKoadaDalForge,			// High Elf
/*3429*/	BagTypeTeirDalForge,			// Dark Elf
/*3430*/	BagTypeOggokForge,				// Ogre
/*3431*/	BagTypeStormguardForge,			// Dwarf
/*3432*/	BagTypeAkanonForge,				// Gnome
/*3433*/	BagTypeNorthmanForge,			// Barbarian
/*----*/	BagTypeUnknown2,				// (no database entries as of peq rev 69)
/*3434*/	BagTypeCabilisForge,			// Iksar
/*3435*/	BagTypeFreeportForge,			// Human 1
/*3436*/	BagTypeRoyalQeynosForge,		// Human 2
/*3439*/	BagTypeHalflingTailoringKit,
/*3438*/	BagTypeErudTailoringKit,
/*3440*/	BagTypeFierDalTailoringKit,		// Wood Elf
/*3441*/	BagTypeFierDalFletchingKit,		// Wood Elf
/*3437*/	BagTypeIksarPotteryWheel,
/*3442*/	BagTypeTackleBox,
/*3443*/	BagTypeTrollForge,
/*3445*/	BagTypeFierDalForge,			// Wood Elf
/*3444*/	BagTypeValeForge,				// Halfling
/*3446*/	BagTypeErudForge,
/*----*/	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,		// Ornamentation
/*6340*/	BagTypeDetransformationmold,	// Ornamentation Stripper
/*5400*/	BagTypeUnattuner,
/*7684*/	BagTypeTradeskillBag,
/*7692*/	BagTypeCollectibleBag,
/*----*/	_BagTypeCount
};

/*
** Item Effect Types
**
*/
enum {
	ET_CombatProc = 0,
	ET_ClickEffect = 1,
	ET_WornEffect = 2,
	ET_Expendable = 3,
	ET_EquipClick = 4,
	ET_ClickEffect2 = 5,	//name unknown
	ET_Focus = 6,
	ET_Scroll = 7
};

//SpawnAppearance types:
#define AT_Die			0	// this causes the client to keel over and zone to bind point
#define AT_WhoLevel		1	// the level that shows up on /who
#define AT_Invis		3	// 0 = visible, 1 = invisible
#define AT_PVP			4	// 0 = blue, 1 = pvp (red)
#define AT_Light		5	// light type emitted by player (lightstone, shiny shield)
#define AT_Anim			14	// 100=standing, 110=sitting, 111=ducking, 115=feigned, 105=looting
#define AT_Sneak		15	// 0 = normal, 1 = sneaking
#define AT_SpawnID		16	// server to client, sets player spawn id
#define AT_HP			17	// Client->Server, my HP has changed (like regen tic)
#define AT_Linkdead		18	// 0 = normal, 1 = linkdead
#define AT_Levitate		19	// 0=off, 1=flymode, 2=levitate
#define AT_GM			20	// 0 = normal, 1 = GM - all odd numbers seem to make it GM
#define AT_Anon			21	// 0 = normal, 1 = anon, 2 = roleplay
#define AT_GuildID		22
#define AT_GuildRank	23	// 0=member, 1=officer, 2=leader
#define AT_AFK			24	// 0 = normal, 1 = afk
#define AT_Pet			25	// Param is EntityID of owner, or 0 for when charm breaks
#define AT_Split		28	// 0 = normal, 1 = autosplit on
#define AT_Size			29	// spawn's size
#define AT_NPCName		31	// change PC's name's color to NPC color 0 = normal, 1 = npc name
#define AT_ShowHelm		43	// 0 = do not show helmet graphic, 1 = show graphic
#define AT_DamageState	44	// The damage state of a destructible object (0 through 4)
//#define AT_Trader		300	// Bazzar Trader Mode

// animations for AT_Anim
#define ANIM_FREEZE	102
#define	ANIM_STAND		0x64
#define	ANIM_SIT		0x6e
#define	ANIM_CROUCH		0x6f
#define	ANIM_DEATH		0x73
#define ANIM_LOOT		0x69

typedef enum {
	eaStanding = 0,
	eaSitting,		//1
	eaCrouching,	//2
	eaDead,			//3
	eaLooting,		//4
	_eaMaxAppearance
} EmuAppearance;

// msg_type's for custom usercolors
#define MT_Say					256
#define MT_Tell					257
#define MT_Group				258
#define MT_Guild				259
#define MT_OOC					260
#define MT_Auction				261
#define MT_Shout				262
#define MT_Emote				263
#define MT_Spells				264
#define MT_YouHitOther			265
#define MT_OtherHitsYou			266
#define MT_YouMissOther			267
#define MT_OtherMissesYou		268
#define MT_Broadcasts			269
#define MT_Skills				270
#define MT_Disciplines			271
#define	MT_Unused1				272
#define MT_DefaultText			273
#define MT_Unused2				274
#define MT_MerchantOffer		275
#define MT_MerchantBuySell		276
#define	MT_YourDeath			277
#define MT_OtherDeath			278
#define MT_OtherHits			279
#define MT_OtherMisses			280
#define	MT_Who					281
#define MT_YellForHelp			282
#define MT_NonMelee				283
#define MT_WornOff				284
#define MT_MoneySplit			285
#define MT_LootMessages			286
#define MT_DiceRoll				287
#define MT_OtherSpells			288
#define MT_SpellFailure			289
#define MT_Chat					290
#define MT_Channel1				291
#define MT_Channel2				292
#define MT_Channel3				293
#define MT_Channel4				294
#define MT_Channel5				295
#define MT_Channel6				296
#define MT_Channel7				297
#define MT_Channel8				298
#define MT_Channel9				299
#define MT_Channel10			300
#define MT_CritMelee			301
#define MT_SpellCrits			302
#define MT_TooFarAway			303
#define MT_NPCRampage			304
#define MT_NPCFlurry			305
#define MT_NPCEnrage			306
#define MT_SayEcho				307
#define MT_TellEcho				308
#define MT_GroupEcho			309
#define MT_GuildEcho			310
#define MT_OOCEcho				311
#define MT_AuctionEcho			312
#define MT_ShoutECho			313
#define MT_EmoteEcho			314
#define MT_Chat1Echo			315
#define MT_Chat2Echo			316
#define MT_Chat3Echo			317
#define MT_Chat4Echo			318
#define MT_Chat5Echo			319
#define MT_Chat6Echo			320
#define MT_Chat7Echo			321
#define MT_Chat8Echo			322
#define MT_Chat9Echo			323
#define MT_Chat10Echo			324
#define MT_DoTDamage			325
#define MT_ItemLink				326
#define MT_RaidSay				327
#define MT_MyPet				328
#define MT_DS					329
#define MT_Leadership			330
#define MT_PetFlurry			331
#define MT_PetCrit				332
#define MT_FocusEffect			333
#define MT_Experience			334
#define MT_System				335
#define MT_PetSpell				336
#define MT_PetResponse			337
#define MT_ItemSpeech			338
#define MT_StrikeThrough		339
#define MT_Stun					340

//from showeq
enum ChatColor
{
	CC_Default					= 0,
	CC_DarkGrey					= 1,
	CC_DarkGreen				= 2,
	CC_DarkBlue					= 3,
	CC_Purple					= 5,
	CC_LightGrey				= 6,
	CC_User_Say					= 256,
	CC_User_Tell				= 257,
	CC_User_Group				= 258,
	CC_User_Guild				= 259,
	CC_User_OOC					= 260,
	CC_User_Auction				= 261,
	CC_User_Shout				= 262,
	CC_User_Emote				= 263,
	CC_User_Spells				= 264,
	CC_User_YouHitOther			= 265,
	CC_User_OtherHitYou			= 266,
	CC_User_YouMissOther		= 267,
	CC_User_OtherMissYou		= 268,
	CC_User_Duels				= 269,
	CC_User_Skills				= 270,
	CC_User_Disciplines			= 271,
	CC_User_Default				= 273,
	CC_User_MerchantOffer		= 275,
	CC_User_MerchantExchange	= 276,
	CC_User_YourDeath			= 277,
	CC_User_OtherDeath			= 278,
	CC_User_OtherHitOther		= 279,
	CC_User_OtherMissOther		= 280,
	CC_User_Who					= 281,
	CC_User_Yell				= 282,
	CC_User_NonMelee			= 283,
	CC_User_SpellWornOff		= 284,
	CC_User_MoneySplit			= 285,
	CC_User_Loot				= 286,
	CC_User_Random				= 287,
	CC_User_OtherSpells			= 288,
	CC_User_SpellFailure		= 289,
	CC_User_ChatChannel			= 290,
	CC_User_Chat1				= 291,
	CC_User_Chat2				= 292,
	CC_User_Chat3				= 293,
	CC_User_Chat4				= 294,
	CC_User_Chat5				= 295,
	CC_User_Chat6				= 296,
	CC_User_Chat7				= 297,
	CC_User_Chat8				= 298,
	CC_User_Chat9				= 299,
	CC_User_Chat10				= 300,
	CC_User_MeleeCrit			= 301,
	CC_User_SpellCrit			= 302,
	CC_User_TooFarAway			= 303,
	CC_User_NPCRampage			= 304,
	CC_User_NPCFurry			= 305,
	CC_User_NPCEnrage			= 306,
	CC_User_EchoSay				= 307,
	CC_User_EchoTell			= 308,
	CC_User_EchoGroup			= 309,
	CC_User_EchoGuild			= 310,
	CC_User_EchoOOC				= 311,
	CC_User_EchoAuction			= 312,
	CC_User_EchoShout			= 313,
	CC_User_EchoEmote			= 314,
	CC_User_EchoChat1			= 315,
	CC_User_EchoChat2			= 316,
	CC_User_EchoChat3			= 317,
	CC_User_EchoChat4			= 318,
	CC_User_EchoChat5			= 319,
	CC_User_EchoChat6			= 320,
	CC_User_EchoChat7			= 321,
	CC_User_EchoChat8			= 322,
	CC_User_EchoChat9			= 323,
	CC_User_EchoChat10			= 324,
	CC_User_UnusedAtThisTime	= 325,
	CC_User_ItemTags			= 326,
	CC_User_RaidSay				= 327,
	CC_User_MyPet				= 328,
	CC_User_DamageShield		= 329,
};

//ZoneChange_Struct->success values
#define ZONE_ERROR_NOMSG 0
#define ZONE_ERROR_NOTREADY -1
#define ZONE_ERROR_VALIDPC -2
#define ZONE_ERROR_STORYZONE -3
#define ZONE_ERROR_NOEXPANSION -6
#define ZONE_ERROR_NOEXPERIENCE -7


typedef enum {
	FilterNone = 0,
	FilterGuildChat = 1,		//0=hide, 1=show
	FilterSocials = 2,			//0=hide, 1=show
	FilterGroupChat = 3,		//0=hide, 1=show
	FilterShouts = 4,			//0=hide, 1=show
	FilterAuctions = 5,			//0=hide, 1=show
	FilterOOC = 6,				//0=hide, 1=show
	FilterBadWords = 7,			//0=hide, 1=show
	FilterPCSpells = 8,			//0=show, 1=hide, 2=group only
	FilterNPCSpells = 9,		//0=show, 1=hide
	FilterBardSongs = 10,		//0=show, 1=mine only, 2=group only, 3=hide
	FilterSpellCrits = 11,		//0=show, 1=mine only, 2=hide
	FilterMeleeCrits = 12,		//0=show, 1=hide
	FilterSpellDamage = 13,		//0=show, 1=mine only, 2=hide
	FilterMyMisses = 14,		//0=hide, 1=show
	FilterOthersMiss = 15,		//0=hide, 1=show
	FilterOthersHit = 16,		//0=hide, 1=show
	FilterMissedMe = 17,		//0=hide, 1=show
	FilterDamageShields = 18,	//0=show, 1=hide
	FilterDOT = 19,				//0=show, 1=hide
	FilterPetHits = 20,			//0=show, 1=hide
	FilterPetMisses = 21,		//0=show, 1=hide
	FilterFocusEffects = 22,	//0=show, 1=hide
	FilterPetSpells = 23,		//0=show, 1=hide
	FilterHealOverTime = 24,	//0=show, 1=hide
	FilterUnknown25 = 25,
	FilterUnknown26 = 26,
	FilterUnknown27 = 27,
	FilterUnknown28 = 28,
	_FilterCount
} eqFilterType;

typedef enum {
	FilterHide,
	FilterShow,
	FilterShowGroupOnly,
	FilterShowSelfOnly
} eqFilterMode;

#define	STAT_STR		0
#define	STAT_STA		1
#define	STAT_AGI		2
#define	STAT_DEX		3
#define	STAT_INT		4
#define	STAT_WIS		5
#define	STAT_CHA		6
#define	STAT_MAGIC		7
#define	STAT_COLD		8
#define	STAT_FIRE		9
#define	STAT_POISON		10
#define	STAT_DISEASE		11
#define	STAT_MANA		12
#define	STAT_HP			13
#define	STAT_AC			14
#define STAT_ENDURANCE		15
#define STAT_ATTACK		16
#define STAT_HP_REGEN		17
#define STAT_MANA_REGEN		18
#define STAT_HASTE		19
#define STAT_DAMAGE_SHIELD	20

/*
**	Recast timer types. Used as an off set to charProfileStruct timers.
**
**	(Another orphaned enumeration...)
*/
enum RecastTimerTypes
{
	RecTimer_0 = 0,
	RecTimer_1,
	RecTimer_WeaponHealClick,		// 2
	RecTimer_MuramiteBaneNukeClick,	// 3
	RecTimer_4,
	RecTimer_DispellClick,			// 5 (also click heal orbs?)
	RecTimer_Epic,					// 6
	RecTimer_OoWBPClick,			// 7
	RecTimer_VishQuestClassItem,	// 8
	RecTimer_HealPotion,			// 9
	RecTimer_10,
	RecTimer_11,
	RecTimer_12,
	RecTimer_13,
	RecTimer_14,
	RecTimer_15,
	RecTimer_16,
	RecTimer_17,
	RecTimer_18,
	RecTimer_ModRod,				// 19
	_RecTimerCount
};

enum GroupUpdateAction
{
	GUA_Joined = 0,
	GUA_Left = 1,
	GUA_LastLeft = 6,
	GUA_FullGroupInfo = 7,
	GUA_MakeLeader = 8,
	GUA_Started = 9
};

static const uint8 DamageTypeSomething	= 0x1C;	//0x1c is something...
static const uint8 DamageTypeFalling	= 0xFC;
static const uint8 DamageTypeSpell		= 0xE7;
static const uint8 DamageTypeUnknown	= 0xFF;

/*
**	Skill damage types
**
**	(indexed by 'Skill' of SkillUseTypes)
*/
static const uint8 SkillDamageTypes[HIGHEST_SKILL + 1] = // change to _SkillServerArraySize once activated
{
/*1HBlunt*/					0,
/*1HSlashing*/				1,
/*2HBlunt*/					0,
/*2HSlashing*/				1,
/*Abjuration*/				DamageTypeSpell,
/*Alteration*/				DamageTypeSpell,
/*ApplyPoison*/				DamageTypeUnknown,
/*Archery*/					7,
/*Backstab*/				8,
/*BindWound*/				DamageTypeUnknown,
/*Bash*/					10,
/*Block*/					DamageTypeUnknown,
/*BrassInstruments*/		DamageTypeSpell,
/*Channeling*/				DamageTypeUnknown,
/*Conjuration*/				DamageTypeSpell,
/*Defense*/					DamageTypeUnknown,
/*Disarm*/					DamageTypeUnknown,
/*DisarmTraps*/				DamageTypeUnknown,
/*Divination*/				DamageTypeSpell,
/*Dodge*/					DamageTypeUnknown,
/*DoubleAttack*/			DamageTypeUnknown,
/*DragonPunch*/				21,
/*DualWield*/				DamageTypeUnknown,
/*EagleStrike*/				23,
/*Evocation*/				DamageTypeSpell,
/*FeignDeath*/				4,
/*FlyingKick*/				30,
/*Forage*/					DamageTypeUnknown,
/*HandtoHand*/				4,
/*Hide*/					DamageTypeUnknown,
/*Kick*/					30,
/*Meditate*/				DamageTypeUnknown,
/*Mend*/					DamageTypeUnknown,
/*Offense*/					DamageTypeUnknown,
/*Parry*/					DamageTypeUnknown,
/*PickLock*/				DamageTypeUnknown,
/*1HPiercing*/				36,
/*Riposte*/					DamageTypeUnknown,
/*RoundKick*/				30,
/*SafeFall*/				DamageTypeUnknown,
/*SsenseHeading*/			DamageTypeUnknown,
/*Singing*/					DamageTypeSpell,
/*Sneak*/					DamageTypeUnknown,
/*SpecializeAbjure*/		DamageTypeUnknown,
/*SpecializeAlteration*/	DamageTypeUnknown,
/*SpecializeConjuration*/	DamageTypeUnknown,
/*SpecializeDivination*/	DamageTypeUnknown,
/*SpecializeEvocation*/		DamageTypeUnknown,
/*PickPockets*/				DamageTypeUnknown,
/*StringedInstruments*/		DamageTypeSpell,
/*Swimming*/				DamageTypeUnknown,
/*Throwing*/				51,
/*TigerClaw*/				23,
/*Tracking*/				DamageTypeUnknown,
/*WindInstruments*/			DamageTypeSpell,
/*Fishing*/					DamageTypeUnknown,
/*MakePoison*/				DamageTypeUnknown,
/*Tinkering*/				DamageTypeUnknown,
/*Research*/				DamageTypeUnknown,
/*Alchemy*/					DamageTypeUnknown,
/*Baking*/					DamageTypeUnknown,
/*Tailoring*/				DamageTypeUnknown,
/*SenseTraps*/				DamageTypeUnknown,
/*Blacksmithing*/			DamageTypeUnknown,
/*Fletching*/				DamageTypeUnknown,
/*Brewing*/					DamageTypeUnknown,
/*AlcoholTolerance*/		DamageTypeUnknown,
/*Begging*/					DamageTypeUnknown,
/*JewelryMaking*/			DamageTypeUnknown,
/*Pottery*/					DamageTypeUnknown,
/*PercussionInstruments*/	DamageTypeSpell,
/*Intimidation*/			DamageTypeUnknown,
/*Berserking*/				DamageTypeUnknown,
/*Taunt*/					DamageTypeUnknown,
/*Frenzy*/					74 //,
// /*RemoveTrap*/				DamageTypeUnknown,	// Needs research (set for SenseTrap value)
// /*TripleAttack*/			DamageTypeUnknown,	// Needs research (set for DoubleAttack value)
// /*2HPiercing*/				36					// Needs research (set for 1HPiercing value - similar to slash/blunt)
};

/*
**	Material use slots
**
*/
enum MaterialUseSlots : uint8
{
	MaterialHead = 0,
	MaterialChest,
	MaterialArms,
	MaterialWrist,
	MaterialHands,
	MaterialLegs,
	MaterialFeet,
	MaterialPrimary,
	MaterialSecondary,
	_MaterialCount,
	_MaterialInvalid = 255
};

/*
// Used for worn NPC inventory tracking. NPCs don't use
// augments, so only the basic slots need to be kept track of.
#define MAX_WORN_INVENTORY	22
*/

/*
**	Inventory Slot Equipment Enum
**	Mostly used for third-party tools to reference inventory slots
**
**	[pre-HoT]
**	NOTE: Numbering for personal inventory goes top to bottom, then left to right
**	It's the opposite for inside bags: left to right, then top to bottom
**	Example:
**	Inventory:	Containers:
**	1	5		1	2
**	2	6		3	4
**	3	7		5	6
**	4	8		7	8
**	-	-		9	10
**
**	[HoT and Higher]
**	Note: Numbering for inventory and bags goes left to right, then top to bottom
**	Example:
**	Inventory:	Containers:
**	1	2		1	2
**	3	4		3	4
**	5	6		5	6
**	7	8		7	8
**	9	10		9	10
**	-	-		11	12	[Note: Additional slots are only available in RoF and higher]
**
*/

enum InventoryMapTypes : int16 {
	MapPossessions = 0,
	MapBank,
	MapSharedBank,
	MapTrade,
	MapWorld,
	MapLimbo,
	MapTribute,
	MapTrophyTribute,
	MapGuildTribute,
	MapMerchant,
	MapDeleted,
	MapCorpse,
	MapBazaar,
	MapInspect,
	MapRealEstate,
	MapViewMODPC,
	MapViewMODBank,
	MapViewMODSharedBank,
	MapViewMODLimbo,
	MapAltStorage,
	MapArchived,
	MapMail,
	MapGuildTrophyTribute,
	MapKrono,
	MapOther,
	_MapCount
};

enum InventoryMainTypes : int16 {
	MainCharm = 0,
	MainEar1,
	MainHead,
	MainFace,
	MainEar2,
	MainNeck,
	MainShoulders,
	MainArms,
	MainBack,
	MainWrist1,
	MainWrist2,
	MainRange,
	MainHands,
	MainPrimary,
	MainSecondary,
	MainFinger1,
	MainFinger2,
	MainChest,
	MainLegs,
	MainFeet,
	MainWaist,
	MainPowerSource = 9999, // temp
	MainAmmo = 21, // temp
	MainGeneral1,
	MainGeneral2,
	MainGeneral3,
	MainGeneral4,
	MainGeneral5,
	MainGeneral6,
	MainGeneral7,
	MainGeneral8,
	//MainGeneral9,
	//MainGeneral10,
	MainCursor,
	_MainCount
};

#define INVALID_INDEX	-1
#define NOT_USED		0
#define NO_ITEM			0

// yes..these are redundant... but, they help to identify and define what is actually being performed
// plus, since they're pre-op's, they don't affect the actual binary size
#define MAP_BEGIN	0
#define MAIN_BEGIN	0
#define SUB_BEGIN	0
#define AUG_BEGIN	0

namespace legacy {
	// this is for perl and other legacy systems

	typedef enum {
		SLOT_CHARM			= 0,
		SLOT_EAR01			= 1,
		SLOT_HEAD			= 2,
		SLOT_FACE			= 3,
		SLOT_EAR02			= 4,
		SLOT_NECK			= 5,
		SLOT_SHOULDER		= 6,
		SLOT_ARMS			= 7,
		SLOT_BACK			= 8,
		SLOT_BRACER01		= 9,
		SLOT_BRACER02		= 10,
		SLOT_RANGE			= 11,
		SLOT_HANDS			= 12,
		SLOT_PRIMARY		= 13,
		SLOT_SECONDARY		= 14,
		SLOT_RING01			= 15,
		SLOT_RING02			= 16,
		SLOT_CHEST			= 17,
		SLOT_LEGS			= 18,
		SLOT_FEET			= 19,
		SLOT_WAIST			= 20,
		SLOT_POWER_SOURCE	= 9999,
		SLOT_AMMO			= 21,
		SLOT_GENERAL_1		= 22,
		SLOT_GENERAL_2		= 23,
		SLOT_GENERAL_3		= 24,
		SLOT_GENERAL_4		= 25,
		SLOT_GENERAL_5		= 26,
		SLOT_GENERAL_6		= 27,
		SLOT_GENERAL_7		= 28,
		SLOT_GENERAL_8		= 29,
		//SLOT_GENERAL_9	= not supported
		//SLOT_GENERAL_10	= not supported
		SLOT_CURSOR			= 30,
		SLOT_CURSOR_END		= (int16)0xFFFE, // I hope no one is using this...
		SLOT_TRADESKILL		= 1000,
		SLOT_AUGMENT		= 1001,
		SLOT_INVALID		= (int16)0xFFFF,

		SLOT_POSSESSIONS_BEGIN	= 0,
		SLOT_POSSESSIONS_END	= 30,

		SLOT_EQUIPMENT_BEGIN	= 0,
		SLOT_EQUIPMENT_END		= 21,

		SLOT_PERSONAL_BEGIN		= 22,
		SLOT_PERSONAL_END		= 29,
		SLOT_PERSONAL_BAGS_BEGIN	= 251,
		SLOT_PERSONAL_BAGS_END		= 330,

		SLOT_CURSOR_BAG_BEGIN		= 331,
		SLOT_CURSOR_BAG_END			= 340,

		SLOT_TRIBUTE_BEGIN	= 400,
		SLOT_TRIBUTE_END	= 404,

		SLOT_BANK_BEGIN			= 2000,
		SLOT_BANK_END			= 2023,
		SLOT_BANK_BAGS_BEGIN	= 2031,
		SLOT_BANK_BAGS_END		= 2270,

		SLOT_SHARED_BANK_BEGIN		= 2500,
		SLOT_SHARED_BANK_END		= 2501,
		SLOT_SHARED_BANK_BAGS_BEGIN	= 2531,
		SLOT_SHARED_BANK_BAGS_END	= 2550,

		SLOT_TRADE_BEGIN		= 3000,
		SLOT_TRADE_END			= 3007,
		SLOT_TRADE_BAGS_BEGIN	= 3031,
		SLOT_TRADE_BAGS_END		= 3110,

		SLOT_WORLD_BEGIN	= 4000,
		SLOT_WORLD_END		= 4009
	} InventorySlot;
}

static const uint32 MAX_SPELL_DB_ID_VAL = 65535;

#endif
