/*	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 02111-1307 USA
*/
#ifndef SPDAT_H
#define SPDAT_H

#include "classes.h"
#include "skills.h"
#include "item_data.h"

#define SPELL_UNKNOWN 0xFFFF
#define POISON_PROC 0xFFFE
#define SPELLBOOK_UNKNOWN 0xFFFFFFFF		//player profile spells are 32 bit

//some spell IDs which will prolly change, but are needed
#define SPELL_COMPLETE_HEAL 13
#define SPELL_LIFEBURN 2755
#define SPELL_LEECH_TOUCH 2766
#define SPELL_LAY_ON_HANDS 87
#define SPELL_HARM_TOUCH 88
#define SPELL_HARM_TOUCH2 2821
#define SPELL_IMP_HARM_TOUCH 2774
#define SPELL_NPC_HARM_TOUCH 929
#define SPELL_AVATAR_ST_PROC 2434
#define SPELL_CAZIC_TOUCH 982
#define SPELL_TOUCH_OF_VINITRAS 2859
#define SPELL_DESPERATE_HOPE 841
#define SPELL_CHARM 300
#define SPELL_METAMORPHOSIS65 2314
#define SPELL_JT_BUFF 3716
#define SPELL_CAN_O_WHOOP_ASS 911
#define SPELL_PHOENIX_CHARM 3014
#define SPELL_AVATAR_KNOCKBACK 905
#define SPELL_SHAPECHANGE65 2079
#define SPELL_SUNSET_HOME1218 1218
#define SPELL_SUNSET_HOME819 819
#define SPELL_SHAPECHANGE75 780
#define SPELL_SHAPECHANGE80 781
#define SPELL_SHAPECHANGE85 782
#define SPELL_SHAPECHANGE90 783
#define SPELL_SHAPECHANGE95 784
#define SPELL_SHAPECHANGE100 785
#define SPELL_SHAPECHANGE25 1200
#define SPELL_SHAPECHANGE30 1201
#define SPELL_SHAPECHANGE35 1202
#define SPELL_SHAPECHANGE40 1203
#define SPELL_SHAPECHANGE45 1204
#define SPELL_SHAPECHANGE50 1205
#define SPELL_NPC_AEGOLISM 1343
#define SPELL_SHAPECHANGE55 1923
#define SPELL_SHAPECHANGE60 1924
#define SPELL_COMMAND_OF_DRUZZIL 3355
#define SPELL_SHAPECHANGE70 6503
#define SPELL_MANA_BURN 2751
#define SPELL_LIFE_BURN 2755
#define SPELL_TOUCH_OF_THE_DIVINE 4789
// these have known hardcoded behavior but we don't do anything yet, move them above this comment when fixed
#define SPELL_THE_DAINS_JUSTICE 1476
#define SPELL_MODULATION 1502
#define SPELL_TORPOR 1576
#define SPELL_SPLURT 1620
#define SPELL_SEBILITE_POX 1814
#define SPELL_SOUL_WELL 1816
#define SPELL_MYSTICAL_TRANSVERGENCE 2716
#define SPELL_ACT_OF_VALOR 2775
#define SPELL_STOICISM 3694
#define SPELL_ALTER_PLANE_HATE 666
#define SPELL_ALTER_PLANE_SKY 674
#define SPELL_DENONS_DESPERATE_DIRGE 742
#define SPELL_BOND_OF_SATHIR 833
#define SPELL_DISEASED_CLOUD 836
#define SPELL_ACTING_RESIST 775
#define SPELL_ACTING_SHIELD 776
#define SPELL_ACTING_GUARD 777
#define SPELL_GUIDE_ACTING 778
#define SPELL_BYE_BYE 779
#define SPELL_ACTING_RESIST_II 1206
#define SPELL_ACTING_SHIELD_II 1207
#define SPELL_ACTING_GUARD_II 1208
#define SPELL_GUIDE_ACTING2 1209
#define SPELL_BYE_BYTE2 1210
#define SPELL_GUIDE_CANCEL_MAGIC 1211
#define SPELL_GUIDE_JOURNEY 1212
#define SPELL_GUIDE_VISION 1213
#define SPELL_GUIDE_HEALTH 1214
#define SPELL_GUIDE_INVULNERABILITY 1215
#define SPELL_GUIDE_BOLT 1216
#define SPELL_GUIDE_MEMORY_BLUE 1217
#define SPELL_GUIDE_ALLIANCE 1219
#define SPELL_SPECIAL_SIGHT 1220
#define SPELL_TERROR_OF_DARKNESS 1221
#define SPELL_TERROR_OF_SHADOWS 1222
#define SPELL_TERROR_OF_DEATH 1223
#define SPELL_TERROR_OF_TERRIS 1224
#define SPELL_VOICE_OF_DARKNESS 1225
#define SPELL_VOICE_OF_SHADOWS 1226
#define SPELL_VOICE_OF_DEATH 1227
#define SPELL_VOICE_OF_TERRIS 1228
#define SPELL_VENGEANCE_V 1229
#define SPELL_VENGEANCE_VII 1230
#define SPELL_VENGEANCE_VIII 1231
#define SPELL_VENGEANCE_IX 1232
#define SPELL_CORRUPTED_LACERATION 1233
#define SPELL_VISIONS_OF_CHAOS 1234
#define SPELL_VISIONS_OF_PAIN 1235
#define SPELL_COMMANDING_PRESENCE 1236
#define SPELL_MALICIOUS_INTENT 1237
#define SPELL_CURSE_OF_FLAMES 1238
#define SPELL_DEVOURING_CONFLAGRATION 1239
#define SPELL_AVATAR_SHIELD 1240
#define SPELL_AVATAR_SIGHT 1241
#define SPELL_AVATAR_GUARD 1242
#define SPELL_AVATAR_RESIST 1243
#define SPELL_MAGI_BOLT 1244
#define SPELL_MAGI_STRIKE 1245
#define SPELL_MAGI_CURSE 1246
#define SPELL_MAGI_CIRCLE 1247
#define SPELL_SPIRITUAL_ECHO 1248
#define SPELL_BRISTLING_ARMAMENT 1249
#define SPELL_WATON_DESTRUCTION 1250
#define SPELL_TRANSLOCATE_GROUP 1334
#define SPELL_TRANSLOCATE 1422
#define SPELL_ACTING_MAGIC_RESIST_I 1900
#define SPELL_ACTING_FIRE_RESIST_I 1901
#define SPELL_ACTING_COLD_RESIST_I 1902
#define SPELL_ACTING_POISON_RESIST_I 1903
#define SPELL_ACTING_DISEASE_RESIST_I 1904
#define SPELL_ACTING_MAGIC_RESIST_II 1905
#define SPELL_ACTING_FIRE_RESIST_II 1906
#define SPELL_ACTING_COLD_RESIST_II 1907
#define SPELL_ACTING_POISON_RESIST_II 1908
#define SPELL_ACTING_DISEASE_RESIST_II 1909
#define SPELL_ACTING_FIRE_SHIELD 1910
#define SPELL_ACTING_POISON_SHIELD 1911
#define SPELL_ACTING_COLD_SHIELD 1912
#define SPELL_ACTING_DISEASE_SHIELD 1913
#define SPELL_ACTING_ARMOR_I 1914
#define SPELL_ACTING_ARMOR_II 1915
#define SPELL_ACTING_ARMOR_III 1916
#define SPELL_ACTING_HEALTH_I 1917
#define SPELL_ACTING_HEALTH_II 1918
#define SPELL_ACTING_HEALTH_III 1919
#define SPELL_ACTING_HEALTH_IV 1920
#define SPELL_ACTING_SPIRIT_I 1921
#define SPELL_ACTING_SPIRIT_II 1922
#define SPELL_RESURRECTION_SICKNESS 756
#define SPELL_RESURRECTION_SICKNESS4 757
#define SPELL_TELEPORT 3243
#define SPELL_RESURRECTION_SICKNESS2 5249
#define SPELL_REVIVAL_SICKNESS 13087
#define SPELL_RESURRECTION_SICKNESS3 37624
#define SPELL_PACT_OF_HATE_RECOURSE 40375
#define SPELL_INCENDIARY_OOZE_BUFF 32513
#define SPELL_EYE_OF_ZOMM 323
#define SPELL_MINOR_ILLUSION 287
#define SPELL_ILLUSION_TREE 601
#define SPELL_ILLUSION_FEMALE 1731
#define SPELL_ILLUSION_MALE 1732
#define SPELL_UNSUMMON_SELF 892
#define SPELL_ANCIENT_LIFEBANE 2115
#define SPELL_GMHP25K 6817
#define SPELL_GMHP50K 6818
#define SPELL_GMHP100K 6819
#define SPELL_GMHP225K 6820
#define SPELL_GMHP475K 6821
#define SPELL_GMHP925K 6822
#define SPELL_GMHP2M 6823
#define SPELL_GMHP3M 6824
#define SPELL_GMHP5M 39851
#define SPELL_GUIDE_ACTING_ONE 778
#define SPELL_GUIDE_ALLIANCE_ONE 810
#define SPELL_GUIDE_CANCEL_MAGIC_ONE 811
#define SPELL_GUIDE_JOURNEY_ONE 813
#define SPELL_GUIDE_VISION_ONE 814
#define SPELL_GUIDE_HEALTH_ONE 815
#define SPELL_GUIDE_INVULNERABILITY_ONE 816
#define SPELL_GUIDE_BOLT_ONE 817
#define SPELL_GUIDE_MEMORY_BLUR_ONE 818
#define SPELL_GUIDE_ACTING_TWO 1209
#define SPELL_GUIDE_CANCEL_MAGIC_TWO 1211
#define SPELL_GUIDE_JOURNEY_TWO 1212
#define SPELL_GUIDE_VISION_TWO 1213
#define SPELL_GUIDE_HEALTH_TWO 1214
#define SPELL_GUIDE_INVULNERABILITY_TWO 1215
#define SPELL_GUIDE_BOLT_TWO 1216
#define SPELL_GUIDE_MEMORY_BLUR_TWO 1217
#define SPELL_GUIDE_ALLIANCE_TWO 1219
#define SPELL_GUIDE_EVACUATION 3921
#define SPELL_GUIDE_LEVITATION 39852
#define SPELL_GUIDE_SPELL_HASTE 39853
#define SPELL_GUIDE_HASTE 39854
#define SPELL_VAMPIRIC_EMBRACE 821
#define SPELL_VAMPIRIC_EMBRACE_OF_SHADOW 822
#define SPELL_BATTLE_CRY 5027
#define SPELL_WAR_CRY 5028
#define SPELL_BATTLE_CRY_OF_DRAVEL 5029
#define SPELL_WAR_CRY_OF_DRAVEL 5030
#define SPELL_BATTLE_CRY_OF_THE_MASTRUQ 5031
#define SPELL_ANCIENT_CRY_OF_CHAOS 5032
#define SPELL_BLOODTHIRST 8476
#define SPELL_AMPLIFICATION 2603
#define SPELL_DIVINE_REZ 2738
#define SPELL_NATURES_RECOVERY 2520
#define SPELL_MINOR_HEALING 200
#define SPELL_ADRENALINE_SWELL 14445
#define SPELL_ADRENALINE_SWELL_RK2 14446
#define SPELL_ADRENALINE_SWELL_RK3 14447

// discipline IDs.
#define DISC_UNHOLY_AURA 4520

//spellgroup ids
#define SPELLGROUP_FRENZIED_BURNOUT 2754
#define SPELLGROUP_ILLUSION_OF_GRANDEUR 38603
#define SPELLGROUP_ROGUES_FURY 16861
#define SPELLGROUP_HARMONIOUS_PRECISION 15634
#define SPELLGROUP_HARMONIOUS_EXPANSE 15633
#define SPELLGROUP_FURIOUS_RAMPAGE 38106
#define SPELLGROUP_SHROUD_OF_PRAYER 41050

#define EFFECT_COUNT 12
#define MAX_SPELL_TRIGGER 12	// One for each slot(only 6 for AA since AA use 2)
#define MAX_RESISTABLE_EFFECTS 12	// Number of effects that are typcially checked agianst resists.
#define MaxLimitInclude 18 //Number(x 0.5) of focus Limiters that have inclusive checks used when calcing focus effects
#define MAX_SKILL_PROCS 4 //Number of spells to check skill procs from. (This is arbitrary) [Single spell can have multiple proc checks]
#define MAX_AA_PROCS 16 //(Actual Proc Amount is MAX_AA_PROCS/4) Number of spells to check AA procs from. (This is arbitrary)
#define MAX_SYMPATHETIC_PROCS 10 // Number of sympathetic procs a client can have (This is arbitrary)
#define MAX_FOCUS_PROC_LIMIT_TIMERS 20 //Number of focus recast timers that can be going at same time (This is arbitrary)
#define MAX_PROC_LIMIT_TIMERS 8 //Number of proc delay timers that can be going at same time, different proc types get their own timer array. (This is arbitrary)
#define MAX_APPEARANCE_EFFECTS 20 //Up to 20 Appearance Effects can be saved to a mobs appearance effect array, these will be sent to other clients when they enter a zone (This is arbitrary)
#define MAX_CAST_ON_SKILL_USE 36 //Actual amount is MAX/3

#define MAX_INVISIBILTY_LEVEL 254

//instrument item id's used as song components
#define INSTRUMENT_HAND_DRUM 13000
#define INSTRUMENT_WOODEN_FLUTE 13001
#define INSTRUMENT_LUTE 13011
#define INSTRUMENT_HORN 13012

//option types for the rule Spells:ResurrectionEffectBlock
#define RES_EFFECTS_CANNOT_STACK -1
#define NO_RES_EFFECTS_BLOCK 0
#define RES_EFFECTS_BLOCK 1
#define RES_EFFECTS_BLOCK_WITH_BUFFS 2
#define MOVE_NEW_SLOT 2

#define PARTIAL_DEATH_SAVE 1
#define FULL_DEATH_SAVE 2

#define MAX_FAST_HEAL_CASTING_TIME 2000
#define MAX_VERY_FAST_HEAL_CASTING_TIME 1000

#define DETRIMENTAL_EFFECT 0
#define BENEFICIAL_EFFECT 1
#define BENEFICIAL_EFFECT_GROUP_ONLY 2

const uint32 MobAISpellRange=100; // max range of buffs

enum FocusLimitIncludes {
	IncludeExistsSELimitResist        = 0,
	IncludeFoundSELimitResist         = 1,
	IncludeExistsSELimitSpell         = 2,
	IncludeFoundSELimitSpell          = 3,
	IncludeExistsSELimitEffect        = 4,
	IncludeFoundSELimitEffect         = 5,
	IncludeExistsSELimitTarget        = 6,
	IncludeFoundSELimitTarget         = 7,
	IncludeExistsSELimitSpellGroup    = 8,
	IncludeFoundSELimitSpellGroup     = 9,
	IncludeExistsSELimitCastingSkill  = 10,
	IncludeFoundSELimitCastingSkill   = 11,
	IncludeExistsSELimitSpellClass    = 12,
	IncludeFoundSELimitSpellClass     = 13,
	IncludeExistsSELimitSpellSubclass = 14,
	IncludeFoundSELimitSpellSubclass  = 15,
	IncludeExistsSEFFItemClass        = 16,
	IncludeFoundSEFFItemClass         = 17
};
/*
	The id's correspond to 'type' 39 in live(2021) dbstr_us gives the message for target and caster restricted effects. These are not present in the ROF2 dbstr_us.
	If from CasterRestriction spell field. "Your target does not meet the spell requirements. <insert below corresponding string>." Msg in combat window, color red.
	If set as limit in a direct damage or heal spell (SPA 0) do not give message.
*/
enum SpellRestriction
{
	UNKNOWN_3                                                                 = 3,   // | caster restriction | seen in spell 30183 Mind Spiral
	IS_NOT_ON_HORSE                                                           = 5,   // | caster restriction |
	IS_ANIMAL_OR_HUMANOID                                                     = 100, // This spell will only work on animals or humanoid creatures.
	IS_DRAGON                                                                 = 101, // This spell will only work on dragons.
	IS_ANIMAL_OR_INSECT                                                       = 102, // This spell will only work on animals or insects.
	IS_BODY_TYPE_MISC                                                         = 103, // This spell will only work on humanoids, lycanthropes, giants, Kael Drakkel giants, Coldain, animals, insects, constructs, dragons, Skyshrine dragons, Muramites, or creatures constructed from magic.
	IS_BODY_TYPE_MISC2                                                        = 104, // This spell will only work on humanoids, lycanthropes, giants, Kael Drakkel giants, Coldain, animals, or insects.
	IS_PLANT                                                                  = 105, // This spell will only work on plants.
	IS_GIANT                                                                  = 106, // This spell will only work on animals. | Live used to have this on spells restricted to Giants, but those spells were removed... We still have them
	IS_NOT_ANIMAL_OR_HUMANOID                                                 = 108, // This spell will only work on targets that are neither animals or humanoid.
	IS_BIXIE                                                                  = 109, // This spell will only work on bixies.
	IS_HARPY                                                                  = 110, // This spell will only work on harpies.
	IS_GNOLL                                                                  = 111, // This spell will only work on gnolls.
	IS_SPORALI                                                                = 112, // This spell will only work on fungusoids.
	IS_KOBOLD                                                                 = 113, // This spell will only work on kobolds.
	IS_FROSTCRYPT_SHADE                                                       = 114, // This spell will only work on undead creatures or the Shades of Frostcrypt.
	IS_DRAKKIN                                                                = 115, // This spell will only work on Drakkin.
	IS_UNDEAD_OR_VALDEHOLM_GIANT                                              = 116, // This spell will only work on undead creatures or the inhabitants of Valdeholm.
	IS_ANIMAL_OR_PLANT                                                        = 117, // This spell will only work on plants or animals.
	IS_SUMMONED                                                               = 118, // This spell will only work on constructs, elementals, or summoned elemental minions.
	IS_WIZARD_USED_ON_MAGE_FIRE_PET                                           = 119, // This spell will only work on wizards. | Live uses this on high level mage fire pets, which are wizard class
	IS_UNDEAD                                                                 = 120, //
	IS_NOT_UNDEAD_OR_SUMMONED_OR_VAMPIRE                                      = 121, // This spell will only work on creatures that are not undead, constructs, elementals, or vampires.
	IS_FAE_OR_PIXIE                                                           = 122, // This spell will only work on Fae or pixies.
	IS_HUMANOID                                                               = 123, //
	IS_UNDEAD_AND_HP_LESS_THAN_10_PCT                                         = 124, // The Essence Extractor whirrs but does not light up.
	IS_CLOCKWORK_AND_HP_LESS_THAN_45_PCT                                      = 125, // This spell will only work on clockwork gnomes.
	IS_WISP_AND_HP_LESS_THAN_10_PCT                                           = 126, // This spell will only work on wisps at or below 10% of their maximum HP.
	IS_CLASS_MELEE_THAT_CAN_BASH_OR_KICK_EXCEPT_BARD                          = 127, // This spell will only work on non-bard targets that can bash or kick.
	IS_CLASS_PURE_MELEE                                                       = 128, // This spell will only affect melee classes (warriors, monks, rogues, and berserkers).
	IS_CLASS_PURE_CASTER                                                      = 129, // This spell will only affect pure caster classes (necromancers, wizards, magicians, and enchanters).
	IS_CLASS_HYBRID_CLASS                                                     = 130, // This spell will only affect hybrid classes (paladins, rangers, shadow knights, bards, and beastlords).
	IS_CLASS_WARRIOR                                                          = 131, // This spell will only affect Warriors.
	IS_CLASS_CLERIC                                                           = 132, // This spell will only affect Clerics.
	IS_CLASS_PALADIN                                                          = 133, // This spell will only affect Paladins.
	IS_CLASS_RANGER                                                           = 134, // This spell will only affect Rangers.
	IS_CLASS_SHADOWKNIGHT                                                     = 135, // This spell will only affect Shadow Knights.
	IS_CLASS_DRUID                                                            = 136, // This spell will only affect Druids.
	IS_CLASS_MONK                                                             = 137, // This spell will only affect Monks.
	IS_CLASS_BARD                                                             = 138, // This spell will only affect Bards.
	IS_CLASS_ROGUE                                                            = 139, // This spell will only affect Rogues.
	IS_CLASS_SHAMAN                                                           = 140, // This spell will only affect Shamans.
	IS_CLASS_NECRO                                                            = 141, // This spell will only affect Necromancers.
	IS_CLASS_WIZARD                                                           = 142, // This spell will only affect Wizards.
	IS_CLASS_MAGE                                                             = 143, // This spell will only affect Magicians.
	IS_CLASS_ENCHANTER                                                        = 144, // This spell will only affect Enchanters.
	IS_CLASS_BEASTLORD                                                        = 145, // This spell will only affect Beastlords.
	IS_CLASS_BERSERKER                                                        = 146, // This spell will only affect Berserkers.
	IS_CLASS_CLR_SHM_DRU                                                      = 147, // This spell will only affect priest classes (clerics, druids, and shaman).
	IS_CLASS_NOT_WAR_PAL_SK                                                   = 148, // This spell will not affect Warriors, Paladins, or Shadow Knights.
	IS_LEVEL_UNDER_100                                                        = 150, // This spell will not affect any target over level 100.
	IS_NOT_RAID_BOSS                                                          = 190, // This spell will not affect raid bosses.
	IS_RAID_BOSS                                                              = 191, // This spell will only affect raid bosses.
	FRENZIED_BURNOUT_ACTIVE                                                   = 192, // This spell will only cast if you have Frenzied Burnout active.
	FRENZIED_BURNOUT_NOT_ACTIVE                                               = 193, // This spell will only cast if you do not have Frenzied Burnout active.
	UNKNOWN_199                                                               = 199, //
	IS_HP_ABOVE_75_PCT                                                        = 201, //
	IS_HP_LESS_THAN_20_PCT                                                    = 203, // Your target's HP must be at 20% of its maximum or below. | caster restriction |
	IS_HP_LESS_THAN_50_PCT                                                    = 204, //	Your target's HP must be at 50% of its maximum or below. | caster restriction |
	IS_HP_LESS_THAN_75_PCT                                                    = 205, // Your target's HP must be at 75% of its maximum or below.
	IS_NOT_IN_COMBAT                                                          = 216, // This spell will only affect creatures that are not in combat.
	HAS_AT_LEAST_1_PET_ON_HATELIST                                            = 221, //
	HAS_AT_LEAST_2_PETS_ON_HATELIST                                           = 222, //
	HAS_AT_LEAST_3_PETS_ON_HATELIST                                           = 223, //
	HAS_AT_LEAST_4_PETS_ON_HATELIST                                           = 224, //
	HAS_AT_LEAST_5_PETS_ON_HATELIST                                           = 225, //
	HAS_AT_LEAST_6_PETS_ON_HATELIST                                           = 226, //
	HAS_AT_LEAST_7_PETS_ON_HATELIST                                           = 227, //
	HAS_AT_LEAST_8_PETS_ON_HATELIST                                           = 228, //
	HAS_AT_LEAST_9_PETS_ON_HATELIST                                           = 229, //
	HAS_AT_LEAST_10_PETS_ON_HATELIST                                          = 230, //
	HAS_AT_LEAST_11_PETS_ON_HATELIST                                          = 231, //
	HAS_AT_LEAST_12_PETS_ON_HATELIST                                          = 232, //
	HAS_AT_LEAST_13_PETS_ON_HATELIST                                          = 233, //
	HAS_AT_LEAST_14_PETS_ON_HATELIST                                          = 234, //
	HAS_AT_LEAST_15_PETS_ON_HATELIST                                          = 235, //
	HAS_AT_LEAST_16_PETS_ON_HATELIST                                          = 236, //
	HAS_AT_LEAST_17_PETS_ON_HATELIST                                          = 237, //
	HAS_AT_LEAST_18_PETS_ON_HATELIST                                          = 238, //
	HAS_AT_LEAST_19_PETS_ON_HATELIST                                          = 239, //
	HAS_AT_LEAST_20_PETS_ON_HATELIST                                          = 240, //
	IS_HP_LESS_THAN_35_PCT                                                    = 250, //	Your target's HP must be at 35% of its maximum or below.
	HAS_BETWEEN_1_TO_2_PETS_ON_HATELIST                                       = 260, // between 1 and 2 pets
	HAS_BETWEEN_3_TO_5_PETS_ON_HATELIST                                       = 261, // between 3 and 5 pets
	HAS_BETWEEN_6_TO_9_PETS_ON_HATELIST                                       = 262, // between 6 and 9 pets
	HAS_BETWEEN_10_TO_14_PETS_ON_HATELIST                                     = 263, // between 10 and 14 pets
	HAS_MORE_THAN_14_PETS_ON_HATELIST                                         = 264, // 15 or more pets
	IS_CLASS_CHAIN_OR_PLATE                                                   = 304, // This spell will only affect plate or chain wearing classes.
	IS_HP_BETWEEN_5_AND_9_PCT                                                 = 350, // Your target's HP must be between 5% and 9% of its maximum.
	IS_HP_BETWEEN_10_AND_14_PCT                                               = 351, //	Your target's HP must be between 10% and 14% of its maximum.
	IS_HP_BETWEEN_15_AND_19_PCT                                               = 352, // Your target's HP must be between 15% and 19% of its maximum.
	IS_HP_BETWEEN_20_AND_24_PCT                                               = 353, //	Your target's HP must be between 20% and 24% of its maximum.
	IS_HP_BETWEEN_25_AND_29_PCT                                               = 354, // Your target's HP must be between 25% and 29% of its maximum.
	IS_HP_BETWEEN_30_AND_34_PCT                                               = 355, //	Your target's HP must be between 30% and 34% of its maximum.
	IS_HP_BETWEEN_35_AND_39_PCT                                               = 356, // Your target's HP must be between 35% and 39% of its maximum.
	IS_HP_BETWEEN_40_AND_44_PCT                                               = 357, //	Your target's HP must be between 40% and 44% of its maximum.
	IS_HP_BETWEEN_45_AND_49_PCT                                               = 358, // Your target's HP must be between 45% and 49% of its maximum.
	IS_HP_BETWEEN_50_AND_54_PCT                                               = 359, //	Your target's HP must be between 50% and 54% of its maximum.
	IS_HP_BETWEEN_55_AND_59_PCT                                               = 360, // Your target's HP must be between 55% and 59% of its maximum.
	IS_HP_BETWEEN_5_AND_15_PCT                                                = 398, //	Your target's HP must be between 5% and 15% of its maximum.
	IS_HP_BETWEEN_15_AND_25_PCT                                               = 399, // Your target's HP must be between 15% and 25% of its maximum.
	IS_HP_BETWEEN_1_AND_25_PCT                                                = 400, //	Your target's HP must be at 25% of its maximum or below.
	IS_HP_BETWEEN_25_AND_35_PCT                                               = 401, // Your target's HP must be between 25% and 35% of its maximum.
	IS_HP_BETWEEN_35_AND_45_PCT                                               = 402, //	Your target's HP must be between 35% and 45% of its maximum.
	IS_HP_BETWEEN_45_AND_55_PCT                                               = 403, // Your target's HP must be between 45% and 55% of its maximum.
	IS_HP_BETWEEN_55_AND_65_PCT                                               = 404, //	Your target's HP must be between 55% and 65% of its maximum.
	IS_HP_BETWEEN_65_AND_75_PCT                                               = 405, // Your target's HP must be between 65% and 75% of its maximum.
	IS_HP_BETWEEN_75_AND_85_PCT                                               = 406, //	Your target's HP must be between 75% and 85% of its maximum.
	IS_HP_BETWEEN_85_AND_95_PCT                                               = 407, // Your target's HP must be between 85% and 95% of its maximum.
	IS_HP_ABOVE_45_PCT                                                        = 408, //	Your target's HP must be at least 45% of its maximum.
	IS_HP_ABOVE_55_PCT                                                        = 409, // Your target's HP must be at least 55% of its maximum.
	UNKNOWN_TOO_MUCH_HP_410                                                   = 410, //	Your target has too much HP to be affected by this spell.
	UNKNOWN_TOO_MUCH_HP_411                                                   = 411, //	Your target has too much HP to be affected by this spell.
	IS_HP_ABOVE_99_PCT                                                        = 412, //
	IS_MANA_ABOVE_10_PCT                                                      = 429, //	You must have at least 10% of your maximum mana available to cast this spell. | caster restriction |
	IS_HP_BELOW_5_PCT                                                         = 501, //
	IS_HP_BELOW_10_PCT                                                        = 502, //
	IS_HP_BELOW_15_PCT                                                        = 503, //
	IS_HP_BELOW_20_PCT                                                        = 504, //	Your target's HP must be at 20% of its maximum or below.
	IS_HP_BELOW_25_PCT                                                        = 505, //
	IS_HP_BELOW_30_PCT                                                        = 506, //
	IS_HP_BELOW_35_PCT                                                        = 507, //
	IS_HP_BELOW_40_PCT                                                        = 508, //
	IS_HP_BELOW_45_PCT                                                        = 509, // Your target's HP must be at 45% of its maximum or below.
	IS_HP_BELOW_50_PCT                                                        = 510, //
	IS_HP_BELOW_55_PCT                                                        = 511, //
	IS_HP_BELOW_60_PCT                                                        = 512, //
	IS_HP_BELOW_65_PCT                                                        = 513, //
	IS_HP_BELOW_70_PCT                                                        = 514, //
	IS_HP_BELOW_75_PCT                                                        = 515, //
	IS_HP_BELOW_80_PCT                                                        = 516, //
	IS_HP_BELOW_85_PCT                                                        = 517, //
	IS_HP_BELOW_90_PCT                                                        = 518, //	This ability requires you to be at or below 90% of your maximum HP.	| caster restriction |
	IS_HP_BELOW_95_PCT                                                        = 519, //
	IS_MANA_BELOW_UNKNOWN_PCT                                                 = 521, //
	IS_ENDURANCE_BELOW_40_PCT                                                 = 522, //
	IS_MANA_BELOW_40_PCT                                                      = 523, //
	IS_HP_ABOVE_20_PCT                                                        = 524, //	Your target's HP must be at least 21% of its maximum.
	IS_BODY_TYPE_UNDEFINED                                                    = 600, // This spell will only work on creatures with an undefined body type.
	IS_BODY_TYPE_HUMANOID                                                     = 601, // This spell will only work on humanoid creatures.
	IS_BODY_TYPE_WEREWOLF													  = 602, // This spell will only work on lycanthrope creatures.
	IS_BODY_TYPE_UNDEAD                                                       = 603, // This spell will only work on undead creatures.
	IS_BODY_TYPE_GIANTS                                                       = 604, // This spell will only work on giants.
	IS_BODY_TYPE_CONSTRUCTS                                                   = 605, // This spell will only work on constructs.
	IS_BODY_TYPE_EXTRAPLANAR                                                  = 606, // This spell will only work on extraplanar creatures.
	IS_BODY_TYPE_MAGICAL_CREATURE                                             = 607, // This spell will only work on creatures constructed from magic.
	IS_BODY_TYPE_UNDEADPET                                                    = 608, // This spell will only work on animated undead servants.
	IS_BODY_TYPE_KAELGIANT                                                    = 609, // This spell will only work on the Giants of Kael Drakkal.
	IS_BODY_TYPE_COLDAIN                                                      = 610, // This spell will only work on Coldain Dwarves.
	IS_BODY_TYPE_VAMPIRE                                                      = 612, // This spell will only work on vampires.
	IS_BODY_TYPE_ATEN_HA_RA                                                   = 613, // This spell will only work on Aten Ha Ra.
	IS_BODY_TYPE_GREATER_AHKEVANS                                             = 614, // This spell will only work on Greater Ahkevans.
	IS_BODY_TYPE_KHATI_SHA                                                    = 615, // This spell will only work on Khati Sha.
	IS_BODY_TYPE_LORD_INQUISITOR_SERU                                         = 616, // This spell will only work on Lord Inquisitor Seru.
	IS_BODY_TYPE_GRIEG_VENEFICUS                                              = 617, // This spell will only work on Grieg Veneficus.
	IS_BODY_TYPE_FROM_PLANE_OF_WAR                                            = 619, // This spell will only work on creatures from the Plane of War.
	IS_BODY_TYPE_LUGGALD                                                      = 620, // This spell will only work on Luggalds.
	IS_BODY_TYPE_ANIMAL                                                       = 621, // This spell will only work on animals.
	IS_BODY_TYPE_INSECT                                                       = 622, // This spell will only work on insects.
	IS_BODY_TYPE_MONSTER                                                      = 623, // This spell will only work on monsters.
	IS_BODY_TYPE_ELEMENTAL                                                    = 624, // This spell will only work on elemental creatures.
	IS_BODY_TYPE_PLANT                                                        = 625, // This spell will only work on plants.
	IS_BODY_TYPE_DRAGON2                                                      = 626, // This spell will only work on dragons.
	IS_BODY_TYPE_SUMMONED_ELEMENTAL                                           = 627, // This spell will only work on summoned elementals.
	IS_BODY_TYPE_WARDER                                                       = 628, //
	IS_BODY_TYPE_DRAGON_OF_TOV                                                = 630, // This spell will only work on Dragons of Veeshan's Temple.
	IS_BODY_TYPE_FAMILIAR                                                     = 631, //	This spell will only work on familiars.
	IS_BODY_TYPE_MURAMITE                                                     = 634, //	This spell will only work on Muramites.
	IS_NOT_UNDEAD_OR_SUMMONED                                                 = 635, //
	IS_NOT_PLANT                                                              = 636, //	This spell will not affect plants.
	IS_NOT_CLIENT                                                             = 700, //	This spell will not work on adventurers.
	IS_CLIENT                                                                 = 701, //	This spell will only work on adventurers.
	IS_LEVEL_ABOVE_42_AND_IS_CLIENT                                           = 800, //	This spell will only work on level 43 or higher adventurers.
	UNKNOWN_812                                                               = 812, //	| seen in spell 22616 Thaumatize Pet Mana Regen Base |
	UNKNOWN_814                                                               = 814, //	| seen in spell 22704 Vegetentacles I |
	IS_TREANT                                                                 = 815, //	This spell will only work on treants.
	IS_BIXIE2                                                                 = 816, //	This spell will only work on bixies.
	IS_SCARECROW                                                              = 817, //	This spell will only work on scarecrows.
	IS_VAMPIRE_OR_UNDEAD_OR_UNDEADPET                                         =	818, //	This spell will only work on vampires, undead, or animated undead creatures.
	IS_NOT_VAMPIRE_OR_UNDEAD                                                  = 819, //	This spell will not work on vampires or undead creatures.
	IS_CLASS_KNIGHT_HYBRID_MELEE                                              = 820, //	This spell will only work on knights, hybrids, or melee classes.
	IS_CLASS_WARRIOR_CASTER_PRIEST                                            = 821, //	This spell will only work on warriors, casters, or priests.
	UNKNOWN_822                                                               = 822, // | seen in spell 22870 Morell's Distraction 822 |
	IS_END_BELOW_21_PCT                                                       = 825, //	This ability requires you to be at or below 21% of your maximum endurance.
	IS_END_BELOW_25_PCT                                                       = 826, //	This ability requires you to be at or below 25% of your maximum endurance.
	IS_END_BELOW_29_PCT                                                       = 827, //	This ability requires you to be at or below 29% of your maximum endurance.
	IS_REGULAR_SERVER                                                         = 836, //
	IS_PROGRESSION_SERVER                                                     = 837, //
	IS_GOD_EXPANSION_UNLOCKED                                                 = 839, //
	UNKNOWN_840                                                               = 840, // | caster restriction | seen in spell 6883 Expedient Recovery
	UNKNOWN_841                                                               = 841, // | caster restriction | seen in spell 32192 Merciless Blow
	IS_HUMANOID_LEVEL_84_MAX                                                  = 842, //
	IS_HUMANOID_LEVEL_86_MAX                                                  = 843, //
	IS_HUMANOID_LEVEL_88_MAX                                                  = 844, //
	HAS_CRYSTALLIZED_FLAME_BUFF                                               = 845, //	This spell will only work on targets afflicted by Crystallized Flame. | On live spell does not appear to be a buff
	HAS_INCENDIARY_OOZE_BUFF                                                  = 847, //	This spell will only work on targets afflicted by Incendiary Ooze.
	IS_LEVEL_90_MAX                                                           = 860, //
	IS_LEVEL_92_MAX                                                           = 861, //
	IS_LEVEL_94_MAX                                                           = 862, //
	IS_LEVEL_95_MAX                                                           = 863, //
	IS_LEVEL_97_MAX                                                           = 864, //
	IS_LEVEL_99_MAX                                                           = 865, //
	HAS_WEAPONSTANCE_DEFENSIVE_PROFICIENCY                                    = 866, // | caster restriction |
	HAS_WEAPONSTANCE_TWO_HAND_PROFICIENCY                                     = 867, // | caster restriction |
	HAS_WEAPONSTANCE_DUAL_WEILD_PROFICIENCY                                   = 868, // | caster restriction |
	IS_LEVEL_100_MAX                                                          = 869, //
	IS_LEVEL_102_MAX                                                          = 870, //
	IS_LEVEL_104_MAX                                                          = 871, //
	IS_LEVEL_105_MAX                                                          = 872, //
	IS_LEVEL_107_MAX                                                          = 873, //
	IS_LEVEL_109_MAX                                                          = 874, //
	IS_LEVEL_110_MAX                                                          = 875, //
	IS_LEVEL_112_MAX                                                          = 876, //
	IS_LEVEL_114_MAX                                                          = 877, //
	HAS_TBL_ESIANTI_ACCESS                                                    = 997, //	This spell will only transport adventurers who have gained access to Esianti: Palace of the Winds.	| not implemented
	HAS_ITEM_CLOCKWORK_SCRAPS                                                 = 999, //
	IS_BETWEEN_LEVEL_1_AND_75                                                 = 1000, //
	IS_BETWEEN_LEVEL_76_AND_85                                                = 1001, //
	IS_BETWEEN_LEVEL_86_AND_95                                                = 1002, //
	IS_BETWEEN_LEVEL_96_AND_105                                               = 1003, //
	IS_HP_LESS_THAN_80_PCT                                                    = 1004, //
	IS_LEVEL_ABOVE_34                                                         = 1474, // Your target must be level 35 or higher.
	IN_TWO_HANDED_STANCE                                                      = 2000, // You must be in your two-handed stance to use this ability.
	IN_DUAL_WIELD_HANDED_STANCE                                               = 2001, // You must be in your dual-wielding stance to use this ability.
	IN_SHIELD_STANCE                                                          = 2002, // You must be in your shield stance to use this ability.
	NOT_IN_TWO_HANDED_STANCE                                                  = 2010, // You may not use this ability if you are in your two-handed stance.
	NOT_IN_DUAL_WIELD_HANDED_STANCE                                           = 2011, // You may not use this ability if you are in your dual-wielding stance.
	NOT_IN_SHIELD_STANCE                                                      = 2012, // You may not use this ability if you are in your shield stance.
	LEVEL_46_MAX                                                              = 2761, //
	DISABLED_UNTIL_EXPANSION_ROK                                              = 7000, // This ability is disabled until Ruins of Kunark.
	DISABLED_UNTIL_EXPANSION_SOV                                              = 7001, // This ability is disabled until Scars of Velious.
	DISABLED_UNTIL_EXPANSION_SOL                                              = 7002, // This ability is disabled until Shadows of Luclin.
	DISABLED_UNTIL_EXPANSION_POP                                              = 7003, // This ability is disabled until Planes of Power.
	DISABLED_UNTIL_EXPANSION_LOY                                              = 7004, // This ability is disabled until Legacy of Ykesha.
	DISABLED_UNTIL_EXPANSION_LDON                                             = 7005, // This ability is disabled until Lost Dungeons of Norrath.
	DISABLED_UNTIL_EXPANSION_GOD                                              = 7006, // This ability is disabled until Gates of Discord.
	DISABLED_UNTIL_EXPANSION_OOW                                              = 7007, // This ability is disabled until Omens of War.
	DISABLED_UNTIL_EXPANSION_DON                                              = 7008, // This ability is disabled until Dragons of Norrath.
	DISABLED_UNTIL_EXPANSION_DOD                                              = 7009, // This ability is disabled until Depths of Darkhollow.
	DISABLED_UNTIL_EXPANSION_POR                                              = 7010, // This ability is disabled until Prophecy of Ro.
	DISABLED_UNTIL_EXPANSION_TSS                                              = 7011, // This ability is disabled until Serpent's Spine.
	DISABLED_UNTIL_EXPANSION_TBS                                              = 7012, // This ability is disabled until Buried Sea.
	DISABLED_UNTIL_EXPANSION_SOF                                              = 7013, // This ability is disabled until Secrets of Faydwer.
	DISABLED_UNTIL_EXPANSION_SOD                                              = 7014, // This ability is disabled until Seeds of Destruction.
	DISABLED_UNTIL_EXPANSION_UF                                               = 7015, // This ability is disabled until Underfoot.
	DISABLED_UNTIL_EXPANSION_HOT                                              = 7016, // This ability is disabled until House of Thule.
	DISABLED_UNTIL_EXPANSION_VOA                                              = 7017, // This ability is disabled until Veil of Alaris.
	DISABLED_UNTIL_EXPANSION_ROF                                              = 7018, // This ability is disabled until Rain of Fear.
	DISABLED_UNTIL_EXPANSION_COF                                              = 7019, // This ability is disabled until Call of the Forsaken.
	DISABLED_UNTIL_EXPANSION_TDS                                              = 7020, // This ability is disabled until Darkened Sea.
	DISABLED_UNTIL_EXPANSION_TBM                                              = 7021, // This ability is disabled until Broken Mirror.
	DISABLED_UNTIL_EXPANSION_EOK                                              = 7022, // This ability is disabled until Empires of Kunark.
	DISABLED_UNTIL_EXPANSION_ROS                                              = 7023, // This ability is disabled until Ring of Scale.
	DISABLED_UNTIL_EXPANSION_TBL                                              = 7024, // This ability is disabled until The Burning Lands.
	DISABLED_UNTIL_EXPANSION_TOV                                              = 7025, // This ability is disabled until Torment of Velious.
	DISABLED_UNTIL_EXPANSION_COV                                              = 7026, // This ability is disabled until Claws of Veeshan.
	HAS_NO_MANA_BURN_BUFF                                                     = 8450,  // This spell will not take hold until the effects of the previous Mana Burn have expired.
	IS_RACE_FIRST_CUSTOM                                                      = 10000, // | custom range to restrict targets or casters by race *not on live* |
	IS_RACE_LAST_CUSTOM                                                       = 11000, // | custom range to restrict targets or casters by race *not on live* |
	IS_CLIENT_AND_MALE_PLATE_USER                                             = 11044, // Your target wouldn't look right as that Jann.
	IS_CLEINT_AND_MALE_DRUID_ENCHANTER_MAGICIAN_NECROANCER_SHAMAN_OR_WIZARD   = 11090, // Your target wouldn't look right as that Jann.
	IS_CLIENT_AND_MALE_BEASTLORD_BERSERKER_MONK_RANGER_OR_ROGUE               = 11209, // Your target wouldn't look right as that Jann.
	IS_CLIENT_AND_FEMALE_PLATE_USER                                           = 11210, // Your target wouldn't look right as that Jann.
	IS_CLIENT_AND_FEMALE_DRUID_ENCHANTER_MAGICIAN_NECROANCER_SHAMAN_OR_WIZARD = 11211, // Your target wouldn't look right as that Jann.
	IS_CLIENT_AND_FEMALE_BEASTLORD_BERSERKER_MONK_RANGER_OR_ROGUE             = 11248, // Your target wouldn't look right as that Jann.
	HAS_TRAVELED_TO_STRATOS                                                   = 11260, // You must travel to Stratos at least once before wishing to go there.
	HAS_TRAVELED_TO_AALISHAI                                                  = 11261, // You must travel to Aalishai at least once before wishing to go there.
	HAS_TRAVELED_TO_MEARATS                                                   = 11268, // You must travel to Mearatas at least once before wishing to go there.
	HAS_NO_ILLUSIONS_OF_GRANDEUR_BUFF                                         = 12519, //
	IS_HP_ABOVE_50_PCT                                                        = 16010, //
	IS_HP_UNDER_50_PCT                                                        = 16031, //
	IS_OFF_HAND_EQUIPPED                                                       = 27672, // You must be wielding a weapon or shield in your offhand to use this ability.
	HAS_NO_PACT_OF_FATE_RECOURSE_BUFF                                         = 29556, // This spell will not work while Pact of Fate Recourse is active. | caster restriction |
	HAS_NO_SHROUD_OF_PRAYER_BUFF                                              = 32339, // Your target cannot receive another Quiet Prayer this soon.
	IS_MANA_BELOW_20_PCT                                                      = 38311, // This ability requires you to be at or below 20% of your maximum mana.
	IS_MANA_ABOVE_50_PCT                                                      = 38312, // This ability requires you to be at or above 50% of your maximum mana.
	COMPLETED_ACHIEVEMENT_LEGENDARY_ANSWERER                                  = 39281, // You have completed Legendary Answerer.
	HAS_NO_ROGUES_FURY_BUFF                                                   = 40297, // This spell will not affect anyone that currently has Rogue's Fury active.	| caster restriction |
	NOT_COMPLETED_ACHIEVEMENT_LEGENDARY_ANSWERER                              = 42280, // You must complete Legendary Answerer.
	IS_SUMMONED_OR_UNDEAD                                                     = 49326, //
	IS_CLASS_CASTER_PRIEST                                                    = 49529, //
	IS_END_OR_MANA_ABOVE_20_PCT                                               = 49543, // You must have at least 20% of your maximum mana and endurance to use this ability.	//pure melee class check end, other check mana
	IS_END_OR_MANA_BELOW_10_PCT                                               = 49545, // 																			//pure melee class check end, other check mana, hybrid check both
	IS_END_OR_MANA_BELOW_30_PCT                                               = 49573, // Your target already has 30% or more of their maximum mana or endurance.	//pure melee class check the, other check more
	IS_CLASS_BARD2                                                            = 49574, //
	IS_NOT_CLASS_BARD                                                         = 49575, //
	HAS_NO_FURIOUS_RAMPAGE_BUFF                                               = 49612, // This ability cannot be activated while Furious Rampage is active.
	IS_END_OR_MANA_BELOW_30_PCT2                                              = 49809, // You can only perform this solo if you have less than 30% mana or endurance.
	HAS_NO_HARMONIOUS_PRECISION_BUFF                                          = 50003, // This spell will not work if you have the Harmonious Precision line active.
	HAS_NO_HARMONIOUS_EXPANSE_BUFF                                            = 50009, // This spell will not work if you have the Harmonious Expanse line active.
	UNKNOWN_99999                                                             = 99999, // | caster restriction | works will spell 27672 Strike of Ire
};

enum NegateSpellEffectType
{
	NEGATE_SPA_ALL_BONUSES                = 0,
	NEGATE_SPA_SPELLBONUS                 = 1,
	NEGATE_SPA_ITEMBONUS                  = 2,
	NEGATE_SPA_SPELLBONUS_AND_ITEMBONUS   = 3,
	NEGATE_SPA_AABONUS                    = 4,
	NEGATE_SPA_SPELLBONUS_AND_AABONUS     = 5,
	NEGATE_SPA_ITEMBONUS_AND_AABONUS      = 6,
};
//Used for rule RuleI(Spells, ReflectType))
enum ReflectSpellType
{
	REFLECT_DISABLED                  = 0,
	REFLECT_SINGLE_TARGET_SPELLS_ONLY = 1,
	REFLECT_ALL_PLAYER_SPELLS         = 2,
	RELFECT_ALL_SINGLE_TARGET_SPELLS  = 3,
	REFLECT_ALL_SPELLS                = 4,
};

enum InvisType {
	T_INVISIBLE						= 0,
	T_INVISIBLE_VERSE_UNDEAD		= 1,
	T_INVISIBLE_VERSE_ANIMAL		= 2,
};

//For better organizing in proc effects, not used in spells.
enum ProcType
{
	MELEE_PROC             = 1,
	RANGED_PROC            = 2,
	DEFENSIVE_PROC         = 3,
	SKILL_PROC             = 4,
	SKILL_PROC_SUCCESS     = 5,
};

enum SpellTypes : uint32
{
	SpellType_Nuke                   = (1 << 0),
	SpellType_Heal                   = (1 << 1),
	SpellType_Root                   = (1 << 2),
	SpellType_Buff                   = (1 << 3),
	SpellType_Escape                 = (1 << 4),
	SpellType_Pet                    = (1 << 5),
	SpellType_Lifetap                = (1 << 6),
	SpellType_Snare                  = (1 << 7),
	SpellType_DOT                    = (1 << 8),
	SpellType_Dispel                 = (1 << 9),
	SpellType_InCombatBuff           = (1 << 10),
	SpellType_Mez                    = (1 << 11),
	SpellType_Charm                  = (1 << 12),
	SpellType_Slow                   = (1 << 13),
	SpellType_Debuff                 = (1 << 14),
	SpellType_Cure                   = (1 << 15),
	SpellType_Resurrect              = (1 << 16),
	SpellType_HateRedux              = (1 << 17),
	SpellType_InCombatBuffSong       = (1 << 18), // bard in-combat group/ae buffs
	SpellType_OutOfCombatBuffSong    = (1 << 19), // bard out-of-combat group/ae buffs
	SpellType_PreCombatBuff          = (1 << 20),
	SpellType_PreCombatBuffSong      = (1 << 21)
};

namespace BotSpellTypes
{
	constexpr uint16	Nuke                       = 0;
	constexpr uint16	RegularHeal                = 1;
	constexpr uint16	Root                       = 2;
	constexpr uint16	Buff                       = 3;
	constexpr uint16	Escape                     = 4;
	constexpr uint16	Pet                        = 5;
	constexpr uint16	Lifetap                    = 6;
	constexpr uint16	Snare                      = 7;
	constexpr uint16	DOT                        = 8;
	constexpr uint16	Dispel                     = 9;
	constexpr uint16	InCombatBuff               = 10;
	constexpr uint16	Mez                        = 11;
	constexpr uint16	Charm                      = 12;
	constexpr uint16	Slow                       = 13;
	constexpr uint16	Debuff                     = 14;
	constexpr uint16	Cure                       = 15;
	constexpr uint16	Resurrect                  = 16;
	constexpr uint16	HateRedux                  = 17;
	constexpr uint16	InCombatBuffSong           = 18;
	constexpr uint16	OutOfCombatBuffSong        = 19;
	constexpr uint16	PreCombatBuff              = 20;
	constexpr uint16	PreCombatBuffSong          = 21;
	constexpr uint16	Fear                       = 22;
	constexpr uint16	Stun                       = 23;
	constexpr uint16	HateLine                   = 24;
	constexpr uint16	GroupCures                 = 25;
	constexpr uint16	CompleteHeal               = 26;
	constexpr uint16	FastHeals                  = 27;
	constexpr uint16	VeryFastHeals              = 28;
	constexpr uint16	GroupHeals                 = 29;
	constexpr uint16	GroupCompleteHeals         = 30;
	constexpr uint16	GroupHoTHeals              = 31;
	constexpr uint16	HoTHeals                   = 32;
	constexpr uint16	AENukes                    = 33;
	constexpr uint16	AERains                    = 34;
	constexpr uint16	AEMez                      = 35;
	constexpr uint16	AEStun                     = 36;
	constexpr uint16	AEDebuff                   = 37;
	constexpr uint16	AESlow                     = 38;
	constexpr uint16	AESnare                    = 39;
	constexpr uint16	AEFear                     = 40;
	constexpr uint16	AEDispel                   = 41;
	constexpr uint16	AERoot                     = 42;
	constexpr uint16	AEDoT                      = 43;
	constexpr uint16	AELifetap                  = 44;
	constexpr uint16	AEHateLine                 = 45;
	constexpr uint16	PBAENuke                   = 46;
	constexpr uint16	PetBuffs                   = 47;
	constexpr uint16	PetRegularHeals            = 48;
	constexpr uint16	PetCompleteHeals           = 49;
	constexpr uint16	PetFastHeals               = 50;
	constexpr uint16	PetVeryFastHeals           = 51;
	constexpr uint16	PetHoTHeals                = 52;
	constexpr uint16	PetCures                   = 53;
	constexpr uint16	DamageShields              = 54;
	constexpr uint16	ResistBuffs                = 55;
	constexpr uint16	PetDamageShields           = 56;
	constexpr uint16	PetResistBuffs             = 57;

	// Command Spell Types
	constexpr uint16	Teleport                   = 100; // this is handled by ^depart so uses other logic
	constexpr uint16	Lull                       = 101;
	constexpr uint16	Succor                     = 102;
	constexpr uint16	BindAffinity               = 103;
	constexpr uint16	Identify                   = 104;
	constexpr uint16	Levitate                   = 105;
	constexpr uint16	Rune                       = 106;
	constexpr uint16	WaterBreathing             = 107;
	constexpr uint16	Size                       = 108;
	constexpr uint16	Invisibility               = 109;
	constexpr uint16	MovementSpeed              = 110;
	constexpr uint16	SendHome                   = 111;
	constexpr uint16	SummonCorpse               = 112;
	constexpr uint16	AELull                     = 113;

	// Discipline Types
	constexpr uint16	Discipline                 = 200;
	constexpr uint16	DiscAggressive             = 201;
	constexpr uint16	DiscDefensive              = 202;
	constexpr uint16	DiscUtility                = 203;

	constexpr uint16	START                      = BotSpellTypes::Nuke;              // Do not remove or change this
	constexpr uint16	END                        = BotSpellTypes::PetResistBuffs;    // Do not remove this, increment as needed
	constexpr uint16	COMMANDED_START            = BotSpellTypes::Lull;              // Do not remove or change this
	constexpr uint16	COMMANDED_END              = BotSpellTypes::AELull;            // Do not remove this, increment as needed
	constexpr uint16	DISCIPLINE_START           = BotSpellTypes::Discipline;        // Do not remove or change this
	constexpr uint16	DISCIPLINE_END             = BotSpellTypes::DiscUtility;       // Do not remove this, increment as needed
	constexpr uint16 	PARENT_TYPE_END            = BotSpellTypes::PreCombatBuffSong; // This is the last ID of the original bot spell types, the rest are considered sub types.
}

static std::map<uint16, std::string> spell_type_names = {
	{ BotSpellTypes::Nuke,                     "Nuke" },
	{ BotSpellTypes::RegularHeal,              "Regular Heal" },
	{ BotSpellTypes::Root,                     "Root" },
	{ BotSpellTypes::Buff,                     "Buff" },
	{ BotSpellTypes::Escape,                   "Escape" },
	{ BotSpellTypes::Pet,                      "Pet" },
	{ BotSpellTypes::Lifetap,                  "Lifetap" },
	{ BotSpellTypes::Snare,                    "Snare" },
	{ BotSpellTypes::DOT,                      "DoT" },
	{ BotSpellTypes::Dispel,                   "Dispel" },
	{ BotSpellTypes::InCombatBuff,             "In-Combat Buff" },
	{ BotSpellTypes::Mez,                      "Mez" },
	{ BotSpellTypes::Charm,                    "Charm" },
	{ BotSpellTypes::Slow,                     "Slow" },
	{ BotSpellTypes::Debuff,                   "Debuff" },
	{ BotSpellTypes::Cure,                     "Cure" },
	{ BotSpellTypes::GroupCures,               "Group Cure" },
	{ BotSpellTypes::PetCures,                 "Pet Cure" },
	{ BotSpellTypes::Resurrect,                "Resurrect" },
	{ BotSpellTypes::HateRedux,                "Hate Reduction" },
	{ BotSpellTypes::InCombatBuffSong,         "In-Combat Buff Song" },
	{ BotSpellTypes::OutOfCombatBuffSong,      "Out-of-Combat Buff Song" },
	{ BotSpellTypes::PreCombatBuff,            "Pre-Combat Buff" },
	{ BotSpellTypes::PreCombatBuffSong,        "Pre-Combat Buff Song" },
	{ BotSpellTypes::Fear,                     "Fear" },
	{ BotSpellTypes::Stun,                     "Stun" },
	{ BotSpellTypes::CompleteHeal,             "Complete Heal" },
	{ BotSpellTypes::FastHeals,                "Fast Heal" },
	{ BotSpellTypes::VeryFastHeals,            "Very Fast Heal" },
	{ BotSpellTypes::GroupHeals,               "Group Heal" },
	{ BotSpellTypes::GroupCompleteHeals,       "Group Complete Heal" },
	{ BotSpellTypes::GroupHoTHeals,            "Group HoT Heal" },
	{ BotSpellTypes::HoTHeals,                 "HoT Heal" },
	{ BotSpellTypes::AENukes,                  "AE Nuke" },
	{ BotSpellTypes::AERains,                  "AE Rain" },
	{ BotSpellTypes::AEMez,                    "AE Mez" },
	{ BotSpellTypes::AEStun,                   "AE Stun" },
	{ BotSpellTypes::AEDebuff,                 "AE Debuff" },
	{ BotSpellTypes::AESlow,                   "AE Slow" },
	{ BotSpellTypes::AESnare,                  "AE Snare" },
	{ BotSpellTypes::AEFear,                   "AE Fear" },
	{ BotSpellTypes::AEDispel,                 "AE Dispel" },
	{ BotSpellTypes::AERoot,                   "AE Root" },
	{ BotSpellTypes::AEDoT,                    "AE DoT" },
	{ BotSpellTypes::AELifetap,                "AE Lifetap" },
	{ BotSpellTypes::PBAENuke,                 "PBAE Nuke" },
	{ BotSpellTypes::PetBuffs,                 "Pet Buff" },
	{ BotSpellTypes::PetRegularHeals,          "Pet Regular Heal" },
	{ BotSpellTypes::PetCompleteHeals,         "Pet Complete Heal" },
	{ BotSpellTypes::PetFastHeals,             "Pet Fast Heal" },
	{ BotSpellTypes::PetVeryFastHeals,         "Pet Very Fast Heal" },
	{ BotSpellTypes::PetHoTHeals,              "Pet HoT Heal" },
	{ BotSpellTypes::DamageShields,            "Damage Shield" },
	{ BotSpellTypes::ResistBuffs,              "Resist Buff" },
	{ BotSpellTypes::PetDamageShields,         "Pet Damage Shield" },
	{ BotSpellTypes::PetResistBuffs,           "Pet Resist Buff" },
	{ BotSpellTypes::HateLine,                 "Hate Line" },
	{ BotSpellTypes::AEHateLine,               "AE Hate Line" },
	{ BotSpellTypes::Lull,                     "Lull" },
	{ BotSpellTypes::Teleport,                 "Teleport" },
	{ BotSpellTypes::Succor,                   "Succor" },
	{ BotSpellTypes::BindAffinity,             "Bind Affinity" },
	{ BotSpellTypes::Identify,                 "Identify" },
	{ BotSpellTypes::Levitate,                 "Levitate" },
	{ BotSpellTypes::Rune,                     "Rune" },
	{ BotSpellTypes::WaterBreathing,           "Water Breathing" },
	{ BotSpellTypes::Size,                     "Size" },
	{ BotSpellTypes::Invisibility,             "Invisibility" },
	{ BotSpellTypes::MovementSpeed,            "Movement Speed" },
	{ BotSpellTypes::SendHome,                 "Send Home" },
	{ BotSpellTypes::SummonCorpse,             "Summon Corpse" },
	{ BotSpellTypes::AELull,                   "AE Lull" }
};

static std::map<uint16, std::string> spell_type_short_names = {
	{ BotSpellTypes::Nuke,                     "nukes" },
	{ BotSpellTypes::RegularHeal,              "regularheals" },
	{ BotSpellTypes::Root,                     "roots" },
	{ BotSpellTypes::Buff,                     "buffs" },
	{ BotSpellTypes::Escape,                   "escapes" },
	{ BotSpellTypes::Pet,                      "pets" },
	{ BotSpellTypes::Lifetap,                  "lifetaps" },
	{ BotSpellTypes::Snare,                    "snares" },
	{ BotSpellTypes::DOT,                      "dots" },
	{ BotSpellTypes::Dispel,                   "dispels" },
	{ BotSpellTypes::InCombatBuff,             "incombatbuffs" },
	{ BotSpellTypes::Mez,                      "mez" },
	{ BotSpellTypes::Charm,                    "charms" },
	{ BotSpellTypes::Slow,                     "slows" },
	{ BotSpellTypes::Debuff,                   "debuffs" },
	{ BotSpellTypes::Cure,                     "cures" },
	{ BotSpellTypes::GroupCures,               "groupcures" },
	{ BotSpellTypes::PetCures,                 "petcures" },
	{ BotSpellTypes::Resurrect,                "resurrects" },
	{ BotSpellTypes::HateRedux,                "hateredux" },
	{ BotSpellTypes::InCombatBuffSong,         "incombatbuffsongs" },
	{ BotSpellTypes::OutOfCombatBuffSong,      "outofcombatbuffsongs" },
	{ BotSpellTypes::PreCombatBuff,            "precombatbuffs" },
	{ BotSpellTypes::PreCombatBuffSong,        "precombatbuffsongs" },
	{ BotSpellTypes::Fear,                     "fears" },
	{ BotSpellTypes::Stun,                     "stuns" },
	{ BotSpellTypes::CompleteHeal,             "completeheals" },
	{ BotSpellTypes::FastHeals,                "fastheals" },
	{ BotSpellTypes::VeryFastHeals,            "veryfastheals" },
	{ BotSpellTypes::GroupHeals,               "groupheals" },
	{ BotSpellTypes::GroupCompleteHeals,       "groupcompleteheals" },
	{ BotSpellTypes::GroupHoTHeals,            "grouphotheals" },
	{ BotSpellTypes::HoTHeals,                 "hotheals" },
	{ BotSpellTypes::AENukes,                  "aenukes" },
	{ BotSpellTypes::AERains,                  "aerains" },
	{ BotSpellTypes::AEMez,                    "aemez" },
	{ BotSpellTypes::AEStun,                   "aestuns" },
	{ BotSpellTypes::AEDebuff,                 "aedebuffs" },
	{ BotSpellTypes::AESlow,                   "aeslows" },
	{ BotSpellTypes::AESnare,                  "aesnares" },
	{ BotSpellTypes::AEFear,                   "aefears" },
	{ BotSpellTypes::AEDispel,                 "aedispels" },
	{ BotSpellTypes::AERoot,                   "aeroots" },
	{ BotSpellTypes::AEDoT,                    "aedots" },
	{ BotSpellTypes::AELifetap,                "aelifetaps" },
	{ BotSpellTypes::PBAENuke,                 "pbaenukes" },
	{ BotSpellTypes::PetBuffs,                 "petbuffs" },
	{ BotSpellTypes::PetRegularHeals,          "petregularheals" },
	{ BotSpellTypes::PetCompleteHeals,         "petcompleteheals" },
	{ BotSpellTypes::PetFastHeals,             "petfastheals" },
	{ BotSpellTypes::PetVeryFastHeals,         "petveryfastheals" },
	{ BotSpellTypes::PetHoTHeals,              "pethotheals" },
	{ BotSpellTypes::DamageShields,            "damageshields" },
	{ BotSpellTypes::ResistBuffs,              "resistbuffs" },
	{ BotSpellTypes::PetDamageShields,         "petdamageshields" },
	{ BotSpellTypes::PetResistBuffs,           "petresistbuffs" },
	{ BotSpellTypes::HateLine,                 "hatelines" },
	{ BotSpellTypes::AEHateLine,               "aehatelines" },
	{ BotSpellTypes::Lull,                     "lull" },
	{ BotSpellTypes::Teleport,                 "teleport" },
	{ BotSpellTypes::Succor,                   "succor" },
	{ BotSpellTypes::BindAffinity,             "bindaffinity" },
	{ BotSpellTypes::Identify,                 "identify" },
	{ BotSpellTypes::Levitate,                 "levitate" },
	{ BotSpellTypes::Rune,                     "rune" },
	{ BotSpellTypes::WaterBreathing,           "waterbreathing" },
	{ BotSpellTypes::Size,                     "size" },
	{ BotSpellTypes::Invisibility,             "invisibility" },
	{ BotSpellTypes::MovementSpeed,            "movementspeed" },
	{ BotSpellTypes::SendHome,                 "sendhome" },
	{ BotSpellTypes::SummonCorpse,             "summoncorpse" },
	{ BotSpellTypes::AELull,                   "aelull" }
};

const uint32 SPELL_TYPES_DETRIMENTAL = (SpellType_Nuke | SpellType_Root | SpellType_Lifetap | SpellType_Snare | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Charm | SpellType_Debuff | SpellType_Slow);
const uint32 SPELL_TYPES_BENEFICIAL = (SpellType_Heal | SpellType_Buff | SpellType_Escape | SpellType_Pet | SpellType_InCombatBuff | SpellType_Cure | SpellType_HateRedux | SpellType_InCombatBuffSong | SpellType_OutOfCombatBuffSong | SpellType_PreCombatBuff | SpellType_PreCombatBuffSong);
const uint32 SPELL_TYPES_INNATE = (SpellType_Nuke | SpellType_Lifetap | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Slow | SpellType_Debuff | SpellType_Charm | SpellType_Root);

// Bot related functions
bool IsBotSpellTypeDetrimental(uint16 spell_type);
bool IsBotSpellTypeBeneficial(uint16 spell_type);
bool BotSpellTypeUsesTargetSettings(uint16 spell_type);
bool IsBotSpellTypeInnate (uint16 spell_type);
bool IsAEBotSpellType(uint16 spell_type);
bool IsGroupBotSpellType(uint16 spell_type);
bool IsGroupTargetOnlyBotSpellType(uint16 spell_type);
bool IsPetBotSpellType(uint16 spell_type);
bool IsClientBotSpellType(uint16 spell_type);
bool IsHealBotSpellType(uint16 spell_type);
bool BotSpellTypeRequiresLoS(uint16 spell_type);
bool BotSpellTypeRequiresTarget(uint16 spell_type);
bool BotSpellTypeRequiresAEChecks(uint16 spell_type);
bool IsCommandedBotSpellType(uint16 spell_type);
bool IsPullingBotSpellType(uint16 spell_type);
uint16 GetCorrectBotSpellType(uint16 spell_type, uint16 spell_id);
uint16 GetPetBotSpellType(uint16 spell_type);
bool IsBotBuffSpellType(uint16 spell_type);
bool BotRequiresLoSToCast(uint16 spell_type, uint16 spell_id);

// These should not be used to determine spell category..
// They are a graphical affects (effects?) index only
// TODO: import sai list
enum spell_affect_index {
	SAI_Summon_Mount_Unclass	= -1,
	SAI_Direct_Damage			= 0,
	SAI_Heal_Cure				= 1,
	SAI_AC_Buff					= 2,
	SAI_AE_Damage				= 3,
	SAI_Summon					= 4,	// Summoned Pets and Items
	SAI_Sight					= 5,
	SAI_Mana_Regen_Resist_Song	= 6,
	SAI_Stat_Buff				= 7,
	SAI_Vanish					= 9,	// Invisibility and Gate/Port
	SAI_Appearance				= 10,	// Illusion and Size
	SAI_Enchanter_Pet			= 11,
	SAI_Calm					= 12,	// Lull and Alliance Spells
	SAI_Fear					= 13,
	SAI_Dispell_Sight			= 14,	// Dispells and Spells like Bind Sight
	SAI_Stun					= 15,
	SAI_Haste_Runspeed			= 16,	// Haste and SoW
	SAI_Combat_Slow				= 17,
	SAI_Damage_Shield			= 18,
	SAI_Cannibalize_Weapon_Proc	= 19,
	SAI_Weaken					= 20,
	SAI_Banish					= 21,
	SAI_Blind_Poison			= 22,
	SAI_Cold_DD					= 23,
	SAI_Poison_Disease_DD		= 24,
	SAI_Fire_DD					= 25,
	SAI_Memory_Blur				= 27,
	SAI_Gravity_Fling			= 28,
	SAI_Suffocate				= 29,
	SAI_Lifetap_Over_Time		= 30,
	SAI_Fire_AE					= 31,
	SAI_Cold_AE					= 33,
	SAI_Poison_Disease_AE		= 34,
	SAI_Teleport				= 40,
	SAI_Direct_Damage_Song		= 41,
	SAI_Combat_Buff_Song		= 42,
	SAI_Calm_Song				= 43,	// Lull and Alliance Songs
	SAI_Firework				= 45,
	SAI_Firework_AE				= 46,
	SAI_Weather_Rocket			= 47,
	SAI_Convert_Vitals			= 50,
	SAI_NPC_Special_60			= 60,
	SAI_NPC_Special_61			= 61,
	SAI_NPC_Special_62			= 62,
	SAI_NPC_Special_63			= 63,
	SAI_NPC_Special_70			= 70,
	SAI_NPC_Special_71			= 71,
	SAI_NPC_Special_80			= 80,
	SAI_Trap_Lock				= 88
};

enum class GlobalGroup {
	Lich = 46,
};

enum RESISTTYPE
{
	RESIST_NONE = 0,
	RESIST_MAGIC = 1,
	RESIST_FIRE = 2,
	RESIST_COLD = 3,
	RESIST_POISON = 4,
	RESIST_DISEASE = 5,
	RESIST_CHROMATIC = 6,
	RESIST_PRISMATIC = 7,
	RESIST_PHYSICAL = 8,	// see Muscle Shock, Back Swing
	RESIST_CORRUPTION = 9
};

//Target Type IDs
typedef enum {
/* 01 */	ST_TargetOptional = 0x01, //only used for targeted projectile spells
/* 02 */	ST_AEClientV1 = 0x02,
/* 03 */	ST_GroupTeleport = 0x03,
/* 04 */	ST_AECaster = 0x04,
/* 05 */	ST_Target = 0x05,
/* 06 */	ST_Self = 0x06,
/* 07 */	// NOT USED
/* 08 */	ST_AETarget = 0x08,
/* 09 */	ST_Animal = 0x09,
/* 10 */	ST_Undead = 0x0a,
/* 11 */	ST_Summoned = 0x0b,
/* 12 */	// NOT USED error is 218 (This spell only works on things that are flying.)
/* 13 */	ST_Tap = 0x0d,
/* 14 */	ST_Pet = 0x0e,
/* 15 */	ST_Corpse = 0x0f,
/* 16 */	ST_Plant = 0x10,
/* 17 */	ST_Giant = 0x11, //special giant
/* 18 */	ST_Dragon = 0x12, //special dragon
/* 19 */	// NOT USED error is 227 (This spell only works on specific coldain.)
/* 20 */	ST_TargetAETap = 0x14,
/* 21 */	// NOT USED same switch case as ST_Undead
/* 22 */	// NOT USED same switch case as ST_Summoned
/* 23 */	// NOT USED same switch case as ST_Animal
/* 24 */	ST_UndeadAE = 0x18,
/* 25 */	ST_SummonedAE = 0x19,
/* 26 */	// NOT USED
/* 27 */	// NOT USED error is 223 (This spell only works on insects.)
/* 28 */	// NOT USED error is 223 (This spell only works on insects.)
/* 29 */	// NOT USED
/* 30 */	// NOT USED
/* 31 */	// NOT USED
/* 32 */	ST_AETargetHateList = 0x20,
/* 33 */	ST_HateList = 0x21,
/* 34 */	ST_LDoNChest_Cursed = 0x22,
/* 35 */	ST_Muramite = 0x23, //only works on special muramites
/* 36 */	ST_AreaClientOnly = 0x24,
/* 37 */	ST_AreaNPCOnly = 0x25,
/* 38 */	ST_SummonedPet = 0x26,
/* 39 */	ST_GroupNoPets = 0x27,
/* 40 */	ST_AEBard = 0x28,
/* 41 */	ST_Group = 0x29,
/* 42 */	ST_Directional = 0x2a, //ae around this target between two angles
/* 43 */	ST_GroupClientAndPet = 0x2b,
/* 44 */	ST_Beam = 0x2c,
/* 45 */	ST_Ring = 0x2d,
/* 46 */	ST_TargetsTarget = 0x2e, // uses the target of your target
/* 47 */	ST_PetMaster = 0x2f, // uses the master as target
/* 48 */	// UNKNOWN
/* 49 */	// NOT USED
/* 50 */	ST_TargetAENoPlayersPets = 0x32,
} SpellTargetType;

typedef enum {
	DS_DECAY = 244,
	DS_CHILLED = 245,
	DS_FREEZING = 246,
	DS_TORMENT = 247,
	DS_BURN = 248,
	DS_THORNS = 249
} DmgShieldType;

//Spell Effect IDs
// https://web.archive.org/web/20250816011656/https://forums.everquest.com/index.php?threads/enumerated-spa-list.206288/
// mirror: http://pastebin.com/MYeQqGwe

namespace SpellEffect {
	constexpr int CurrentHP                       = 0; // implemented - Heals and nukes, repeates every tic if in a buff
	constexpr int ArmorClass                      = 1; // implemented
	constexpr int ATK                             = 2; // implemented
	constexpr int MovementSpeed                   = 3; // implemented - SoW, SoC, etc
	constexpr int STR                             = 4; // implemented
	constexpr int DEX                             = 5; // implemented
	constexpr int AGI                             = 6; // implemented
	constexpr int STA                             = 7; // implemented
	constexpr int INT                             = 8; // implemented
	constexpr int WIS                             = 9; // implemented
	constexpr int CHA                             = 10; // implemented - used as a spacer
	constexpr int AttackSpeed                     = 11; // implemented
	constexpr int Invisibility                    = 12; // implemented - TO DO: Implemented Invisiblity Levels
	constexpr int SeeInvis                        = 13; // implemented - TO DO: Implemented See Invisiblity Levels
	constexpr int WaterBreathing                  = 14; // implemented
	constexpr int CurrentMana                     = 15; // implemented
	constexpr int NPCFrenzy                       = 16; // not used
	constexpr int NPCAwareness                    = 17; // not used
	constexpr int Lull                            = 18; // implemented - Reaction Radius
	constexpr int AddFaction                      = 19; // implemented - Alliance line
	constexpr int Blind                           = 20; // implemented
	constexpr int Stun                            = 21; // implemented
	constexpr int Charm                           = 22; // implemented
	constexpr int Fear                            = 23; // implemented
	constexpr int Stamina                         = 24; // implemented - Invigor and such
	constexpr int BindAffinity                    = 25; // implemented - TO DO: Implement 2nd and 3rd Recall (value 2,3 ect). Sets additional bind points.
	constexpr int Gate                            = 26; // implemented - Gate to bind point
	constexpr int CancelMagic                     = 27; // implemented
	constexpr int InvisVsUndead                   = 28; // implemented
	constexpr int InvisVsAnimals                  = 29; // implemented
	constexpr int ChangeFrenzyRad                 = 30; // implemented - Pacify
	constexpr int Mez                             = 31; // implemented
	constexpr int SummonItem                      = 32; // implemented
	constexpr int SummonPet                       = 33; // implemented
	constexpr int Confuse                         = 34; // not used (Nimbus of Temporal Rifting) ?
	constexpr int DiseaseCounter                  = 35; // implemented
	constexpr int PoisonCounter                   = 36; // implemented
	constexpr int DetectHostile                   = 37; // not used
	constexpr int DetectMagic                     = 38; // not used
	constexpr int TwinCastBlocker                 = 39; // implemented - If present in spell, then the spell can not be twincast.
	constexpr int DivineAura                      = 40; // implemented
	constexpr int Destroy                         = 41; // implemented - Disintegrate, Banishment of Shadows
	constexpr int ShadowStep                      = 42; // implemented
	constexpr int Berserk                         = 43; // implemented (*not used in any known live spell) Makes client 'Berserk' giving crip blow chance.
	constexpr int Lycanthropy                     = 44; // implemented
	constexpr int Vampirism                       = 45; // implemented (*not used in any known live spell) Stackable lifetap from melee.
	constexpr int ResistFire                      = 46; // implemented
	constexpr int ResistCold                      = 47; // implemented
	constexpr int ResistPoison                    = 48; // implemented
	constexpr int ResistDisease                   = 49; // implemented
	constexpr int ResistMagic                     = 50; // implemented
	constexpr int DetectTraps                     = 51; // not used
	constexpr int SenseDead                       = 52; // implemented
	constexpr int SenseSummoned                   = 53; // implemented
	constexpr int SenseAnimals                    = 54; // implemented
	constexpr int Rune                            = 55; // implemented
	constexpr int TrueNorth                       = 56; // implemented
	constexpr int Levitate                        = 57; // implemented
	constexpr int Illusion                        = 58; // implemented
	constexpr int DamageShield                    = 59; // implemented
	constexpr int TransferItem                    = 60; // not used
	constexpr int Identify                        = 61; // implemented
	constexpr int ItemID                          = 62; // not used
	constexpr int WipeHateList                    = 63; // implemented, @Memblur, chance to wipe hate list of target, base: pct chance, limit: none, max: ? (not implemented), Note: caster level and CHA add to pct chance
	constexpr int SpinTarget                      = 64; // implemented - TO DO: Not sure stun portion is working correctly
	constexpr int InfraVision                     = 65; // implemented
	constexpr int UltraVision                     = 66; // implemented
	constexpr int EyeOfZomm                       = 67; // implemented
	constexpr int ReclaimPet                      = 68; // implemented
	constexpr int TotalHP                         = 69; // implemented
	constexpr int CorpseBomb                      = 70; // not used
	constexpr int NecPet                          = 71; // implemented
	constexpr int PreserveCorpse                  = 72; // not used
	constexpr int BindSight                       = 73; // implemented, @Vision, see through the eyes of your target, click off buff to end effect, base: 1, limit: none, max: none
	constexpr int FeignDeath                      = 74; // implemented
	constexpr int VoiceGraft                      = 75; // implemented
	constexpr int Sentinel                        = 76; // *not implemented?(just seems to send a message)
	constexpr int LocateCorpse                    = 77; // implemented
	constexpr int AbsorbMagicAtt                  = 78; // implemented - Rune for spells
	constexpr int CurrentHPOnce                   = 79; // implemented - Heals and nukes, non-repeating if in a buff
	constexpr int EnchantLight                    = 80; // not used
	constexpr int Revive                          = 81; // implemented - Resurrect
	constexpr int SummonPC                        = 82; // implemented
	constexpr int Teleport                        = 83; // implemented
	constexpr int TossUp                          = 84; // implemented - Gravity Flux
	constexpr int WeaponProc                      = 85; // implemented - i.e. Call of Fire
	constexpr int Harmony                         = 86; // implemented
	constexpr int MagnifyVision                   = 87; // implemented - Telescope
	constexpr int Succor                          = 88; // implemented - Evacuate/Succor lines
	constexpr int ModelSize                       = 89; // implemented - Shrink, Growth
	constexpr int Cloak                           = 90; // *not implemented - Used in only 2 spells
	constexpr int SummonCorpse                    = 91; // implemented
	constexpr int InstantHate                     = 92; // implemented - add hate
	constexpr int StopRain                        = 93; // implemented - Wake of Karana
	constexpr int NegateIfCombat                  = 94; // implemented
	constexpr int Sacrifice                       = 95; // implemented
	constexpr int Silence                         = 96; // implemented
	constexpr int ManaPool                        = 97; // implemented
	constexpr int AttackSpeed2                    = 98; // implemented - Melody of Ervaj
	constexpr int Root                            = 99; // implemented
	constexpr int HealOverTime                    = 100; // implemented
	constexpr int CompleteHeal                    = 101; // implemented
	constexpr int Fearless                        = 102; // implemented - Valiant Companion
	constexpr int CallPet                         = 103; // implemented - Summon Companion
	constexpr int Translocate                     = 104; // implemented
	constexpr int AntiGate                        = 105; // implemented - Translocational Anchor
	constexpr int SummonBSTPet                    = 106; // implemented
	constexpr int AlterNPCLevel                   = 107; // implemented - not used on live
	constexpr int Familiar                        = 108; // implemented
	constexpr int SummonItemIntoBag               = 109; // implemented - summons stuff into container
	constexpr int IncreaseArchery                 = 110; // implemented
	constexpr int ResistAll                       = 111; // implemented - Note: Physical Resists are not modified by this effect.
	constexpr int CastingLevel                    = 112; // implemented
	constexpr int SummonHorse                     = 113; // implemented
	constexpr int ChangeAggro                     = 114; // implemented - Hate modifing buffs(ie horrifying visage)
	constexpr int Hunger                          = 115; // implemented - Song of Sustenance
	constexpr int CurseCounter                    = 116; // implemented
	constexpr int MagicWeapon                     = 117; // implemented - makes weapon magical
	constexpr int Amplification                   = 118; // implemented, @Song, stackable singing mod, base: mod%, limit: none, max: none, Note: Can focus itself.
	constexpr int AttackSpeed3                    = 119; // implemented
	constexpr int HealRate                        = 120; // implemented - reduces healing by a %
	constexpr int ReverseDS                       = 121; // implemented
	constexpr int ReduceSkill                     = 122; // implemented - base: skill id, limit: none, max: none, formula: % skill is reduced (positive)
	constexpr int Screech                         = 123; // implemented Spell Blocker(If have buff with value +1 will block any effect with -1)
	constexpr int ImprovedDamage                  = 124; // implemented
	constexpr int ImprovedHeal                    = 125; // implemented
	constexpr int SpellResistReduction            = 126; // implemented
	constexpr int IncreaseSpellHaste              = 127; // implemented, @Fc, On Caster, cast time mod pct, base: pct
	constexpr int IncreaseSpellDuration           = 128; // implemented, @Fc, On Caster, spell duration mod pct, base: pct
	constexpr int IncreaseRange                   = 129; // implemented, @Fc, On Caster, spell range mod pct, base: pct
	constexpr int SpellHateMod                    = 130; // implemented, @Fc, On Caster, spell hate mod pct, base: min pct, limit: max pct
	constexpr int ReduceReagentCost               = 131; // implemented, @Fc, On Caster, do not consume reagent pct chance, base: min pct, limit: max pct
	constexpr int ReduceManaCost                  = 132; // implemented, @Fc, On Caster, reduce mana cost by pct, base: min pct, limt: max pct
	constexpr int FcStunTimeMod                   = 133; // implemented, @Fc, On Caster, spell range mod pct, base: pct
	constexpr int LimitMaxLevel                   = 134; // implemented, @Ff, Max level of spell that can be focused, if base2 then decrease effectiviness by base2 % per level over max, base: lv, base2: effectiveness pct
	constexpr int LimitResist                     = 135; // implemented, @Ff, Resist Type(s) that a spell focus can require or exclude, base1: resist type, Include: Positive Exclude: Negative
	constexpr int LimitTarget                     = 136; // implemented, @Ff, Target Type(s) that a spell focus can require or exclude, base1: target type, Include: Positive Exclude: Negative
	constexpr int LimitEffect                     = 137; // implemented, @Ff, Spell effect(s) that a spell focus can require or exclude, base1: SPA id, Include: Positive Exclude: Negative
	constexpr int LimitSpellType                  = 138; // implemented, @Ff, Only allow focus spells that are Beneficial or Detrimental, base1: 0=det 1=bene
	constexpr int LimitSpell                      = 139; // implemented, @Ff, Specific spell id(s) that a spell focus can require or exclude, base1: SPA id, Include: Positive Exclude: Negative
	constexpr int LimitMinDur                     = 140; // implemented, @Ff, Mininum duration of spell that can be focused, base1: tics
	constexpr int LimitInstant                    = 141; // implemented, @Ff, Include or exclude if an isntant cast spell can be focused, base1: 0=Exclude if Instant 1=Allow only if Instant
	constexpr int LimitMinLevel                   = 142; // implemented, @Ff, Mininum level of spell that can be focused, base1: lv
	constexpr int LimitCastTimeMin                = 143; // implemented, @Ff, Mininum cast time of spell that can be focused, base1: milliseconds
	constexpr int LimitCastTimeMax                = 144; // implemented, @Ff, Max cast time of spell that can be focused, base1: milliseconds
	constexpr int Teleport2                       = 145; // implemented - Banishment of the Pantheon
	constexpr int ElectricityResist               = 146; // *not implemented TODO: Now used on live, xyz for teleport spells? also in temp pets?
	constexpr int PercentalHeal                   = 147; // implemented
	constexpr int StackingCommand_Block           = 148; // implemented?
	constexpr int StackingCommand_Overwrite       = 149; // implemented?
	constexpr int DeathSave                       = 150; // implemented
	constexpr int SuspendPet                      = 151; // implemented, @Pet, allow caster to have an extra suspended pet, base: 0=no buffs/items 1=buffs+items, limit: none, max: none
	constexpr int TemporaryPets                   = 152; // implemented
	constexpr int BalanceHP                       = 153; // implemented
	constexpr int DispelDetrimental               = 154; // implemented, @Dispel, removes only detrimental effects on a target, base: pct chance (950=95%), limit: none, max: none
	constexpr int SpellCritDmgIncrease            = 155; // implemented - no known live spells use this currently
	constexpr int IllusionCopy                    = 156; // implemented - Deception
	constexpr int SpellDamageShield               = 157; // implemented, @DS, causes non-melee damage on caster of a spell, base: Amt DS (negative), limit: none, max: unknown (same as base but +)
	constexpr int Reflect                         = 158; // implemented, @SpellMisc, reflect casted detrimental spell back at caster, base: chance pct, limit: resist modifier (positive value reduces resists), max: pct of base dmg mod (50=50pct of base)
	constexpr int AllStats                        = 159; // implemented
	constexpr int MakeDrunk                       = 160; // *not implemented - Effect works entirely client side (Should check against tolerance)
	constexpr int MitigateSpellDamage             = 161; // implemented, @Runes, mitigate incoming spell damage by percentage until rune fades, base: percent mitigation, limit: max dmg absorbed per hit, max: rune amt, Note: If placed on item or AA, will provide stackable percent mitigation.
	constexpr int MitigateMeleeDamage             = 162; // implemented - rune with max value
	constexpr int NegateAttacks                   = 163; // implemented
	constexpr int AppraiseLDonChest               = 164; // implemented
	constexpr int DisarmLDoNTrap                  = 165; // implemented
	constexpr int UnlockLDoNChest                 = 166; // implemented
	constexpr int PetPowerIncrease                = 167; // implemented, @Fc, On Caster, pet power mod, base: value
	constexpr int MeleeMitigation                 = 168; // implemented
	constexpr int CriticalHitChance               = 169; // implemented
	constexpr int SpellCritChance                 = 170; // implemented
	constexpr int CrippBlowChance                 = 171; // implemented
	constexpr int AvoidMeleeChance                = 172; // implemented
	constexpr int RiposteChance                   = 173; // implemented
	constexpr int DodgeChance                     = 174; // implemented
	constexpr int ParryChance                     = 175; // implemented
	constexpr int DualWieldChance                 = 176; // implemented
	constexpr int DoubleAttackChance              = 177; // implemented
	constexpr int MeleeLifetap                    = 178; // implemented
	constexpr int AllInstrumentMod                = 179; // implemented, @Song, set mod for ALL instrument/singing skills that will be used if higher then item mods, base: mod%, limit: none, max: none
	constexpr int ResistSpellChance               = 180; // implemented
	constexpr int ResistFearChance                = 181; // implemented
	constexpr int HundredHands                    = 182; // implemented
	constexpr int MeleeSkillCheck                 = 183; // implemented
	constexpr int HitChance                       = 184; // implemented
	constexpr int DamageModifier                  = 185; // implemented
	constexpr int MinDamageModifier               = 186; // implemented
	constexpr int BalanceMana                     = 187; // implemented - Balances party mana
	constexpr int IncreaseBlockChance             = 188; // implemented
	constexpr int CurrentEndurance                = 189; // implemented
	constexpr int EndurancePool                   = 190; // implemented
	constexpr int Amnesia                         = 191; // implemented - Silence vs Melee Effect
	constexpr int Hate                            = 192; // implemented - Instant and hate over time.
	constexpr int SkillAttack                     = 193; // implemented,
	constexpr int FadingMemories                  = 194; // implemented, @Aggro, Remove from hate lists and make invisible. Can set max level of NPCs that can be affected. base: success chance, limit: max level (ROF2), max: max level (modern client), Note: Support for max level requires Rule (Spells, UseFadingMemoriesMaxLevel) to be true. If used from limit field, then it set as the level, ie. max level of 75 would use limit value of 75. If set from max field, max level 75 would use max value of 1075, if you want to set it so it checks a level range above the spell target then for it to only work on mobs 5 levels or below you set max value to 5.
	constexpr int StunResist                      = 195; // implemented
	constexpr int StrikeThrough                   = 196; // implemented
	constexpr int SkillDamageTaken                = 197; // implemented
	constexpr int CurrentEnduranceOnce            = 198; // implemented
	constexpr int Taunt                           = 199; // implemented - % chance to taunt the target
	constexpr int ProcChance                      = 200; // implemented
	constexpr int RangedProc                      = 201; // implemented
	constexpr int IllusionOther                   = 202; // implemented - Project Illusion
	constexpr int MassGroupBuff                   = 203; // implemented
	constexpr int GroupFearImmunity               = 204; // implemented - (Does not use bonus)
	constexpr int Rampage                         = 205; // implemented, @Combat Instant, Perform a primary slot combat rounds on all creatures within a 40 foot radius, base: number of attack rounds, limit: max entities hit per round, max: none, Note: AE range is 40 by default. Custom: Set field 'aoe_range' to override default. Adding additional attacks and hit count limit.
	constexpr int AETaunt                         = 206; // implemented
	constexpr int FleshToBone                     = 207; // implemented
	constexpr int PurgePoison                     = 208; // not used
	constexpr int DispelBeneficial                = 209; // implemented, @Dispel, removes only beneficial effects on a target, base: pct chance (950=95%), limit: none, max: none
	constexpr int PetShield                       = 210; // implmented, @ShieldAbility, allows pet to 'shield' owner for 50 pct of damage taken for a duration, base: Time multiplier 1=12 seconds, 2=24 ect, limit: mitigation on pet owner override (not on live), max: mitigation on pet overide (not on live)
	constexpr int AEMelee                         = 211; // implemented TO DO: Implement to allow NPC use (client only atm).
	constexpr int FrenziedDevastation             = 212; // implemented - increase spell criticals + all DD spells cast 2x mana.
	constexpr int PetMaxHP                        = 213; // implemented[AA] - increases the maximum hit points of your pet
	constexpr int MaxHPChange                     = 214; // implemented
	constexpr int PetAvoidance                    = 215; // implemented[AA] - increases pet ability to avoid melee damage
	constexpr int Accuracy                        = 216; // implemented
	constexpr int HeadShot                        = 217; // implemented - ability to head shot (base2 = damage)
	constexpr int PetCriticalHit                  = 218; // implemented[AA] - gives pets a baseline critical hit chance
	constexpr int SlayUndead                      = 219; // implemented - Allow extra damage against undead (base1 = rate, base2 = damage mod).
	constexpr int SkillDamageAmount               = 220; // implemented
	constexpr int Packrat                         = 221; // implemented as bonus
	constexpr int BlockBehind                     = 222; // implemented - Chance to block from behind (with our without Shield)
	constexpr int DoubleRiposte                   = 223; // implemented - Chance to double riposte [not used on live]
	constexpr int GiveDoubleRiposte               = 224; // implemented[AA]
	constexpr int GiveDoubleAttack                = 225; // implemented[AA] - Allow any class to double attack with set chance.
	constexpr int TwoHandBash                     = 226; // *not implemented as bonus
	constexpr int ReduceSkillTimer                = 227; // implemented
	constexpr int ReduceFallDamage                = 228; // implented - reduce the damage that you take from falling
	constexpr int PersistantCasting               = 229; // implemented
	constexpr int ExtendedShielding               = 230; // implemented, @ShieldAbility, extends the range of your /shield ability by an amount of distance, base: distance units, limit: none, max: none
	constexpr int StunBashChance                  = 231; // implemented - increase chance to stun from bash.
	constexpr int DivineSave                      = 232; // implemented (base1 == % chance on death to insta-res) (base2 == spell cast on save)
	constexpr int Metabolism                      = 233; // implemented - Modifies food/drink consumption rates.
	constexpr int ReduceApplyPoisonTime           = 234; // not implemented as bonus - reduces the time to apply poison
	constexpr int ChannelChanceSpells             = 235; // implemented[AA] - chance to channel from SPELLS *No longer used on live.
	constexpr int FreePet                         = 236; // not used
	constexpr int GivePetGroupTarget              = 237; // implemented[AA] - (Pet Affinity)
	constexpr int IllusionPersistence             = 238; // implemented - lends persistence to your illusionary disguises, causing them to last until you die or the illusion is forcibly removed.
	constexpr int FeignedCastOnChance             = 239; // implemented - ability gives you an increasing chance for your feigned deaths to not be revealed by spells cast upon you.
	constexpr int StringUnbreakable               = 240; // not used [Likely related to above - you become immune to feign breaking on a resisted spell and have a good chance of feigning through a spell that successfully lands upon you.]
	constexpr int ImprovedReclaimEnergy           = 241; // implemented - increase the amount of mana returned to you when reclaiming your pet.
	constexpr int IncreaseChanceMemwipe           = 242; // implemented - @Memblur, increases the chance to wipe hate with memory blurr, base: chance pct, limit: none, max: none, Note: Mods final blur chance after other bonuses added.
	constexpr int CharmBreakChance                = 243; // implemented - Total Domination
	constexpr int RootBreakChance                 = 244; // implemented[AA] reduce the chance that your root will break.
	constexpr int TrapCircumvention               = 245; // implemented, @Traps, decreases the chance that you will set off a trap when opening a chest or other similar container by percentage, base: chance modifer, limit: none, max: none
	constexpr int SetBreathLevel                  = 246; // *not implemented as bonus
	constexpr int RaiseSkillCap                   = 247; // implemented[AA] - adds skill over the skill cap.
	constexpr int SecondaryForte                  = 248; // not implemented as bonus(gives you a 2nd specialize skill that can go past 50 to 100)
	constexpr int SecondaryDmgInc                 = 249; // implemented[AA] Allows off hand weapon to recieve a damage bonus (Sinister Strikes)
	constexpr int SpellProcChance                 = 250; // implemented - Increase chance to proc from melee proc spells (ie Spirit of Panther)
	constexpr int ConsumeProjectile               = 251; // implemented[AA] - chance to not consume an arrow (ConsumeProjectile = 100)
	constexpr int FrontalBackstabChance           = 252; // implemented[AA] - chance to perform a full damage backstab from front.
	constexpr int FrontalBackstabMinDmg           = 253; // implemented[AA] - allow a frontal backstab for mininum damage.
	constexpr int Blank                           = 254; // implemented
	constexpr int ShieldDuration                  = 255; // implemented, , @ShieldAbility, extends the duration of your /shield ability, base: seconds, limit: none, max: none
	constexpr int ShroudofStealth                 = 256; // implemented
	constexpr int PetDiscipline                   = 257; // not implemented as bonus - /pet hold - official name is GivePetHold
	constexpr int TripleBackstab                  = 258; // implemented[AA] - chance to perform a triple backstab
	constexpr int CombatStability                 = 259; // implemented[AA] - damage mitigation
	constexpr int AddSingingMod                   = 260; // implemented, @Song, set mod for specific instrument/singing skills that will be used if higher then item mods, base: mod%, limit: ItemType ID, max: none
	constexpr int SongModCap                      = 261; // implemented, @Song, raise max song modifier cap, base: amt, limit: none, max: none, Note: No longer used on live
	constexpr int RaiseStatCap                    = 262; // implemented
	constexpr int TradeSkillMastery               = 263; // implemented - lets you raise more than one tradeskill above master.
	constexpr int HastenedAASkill                 = 264; // implemented
	constexpr int MasteryofPast                   = 265; // implemented[AA] - Spells less than effect values level can not be fizzled
	constexpr int ExtraAttackChance               = 266; // implemented, @OffBonus, gives your double attacks a percent chance to perform an extra attack with 2-handed primary weapon, base: chance, limit: amt attacks, max: none
	constexpr int AddPetCommand                   = 267; // implemented - sets command base2 to base1
	constexpr int ReduceTradeskillFail            = 268; // implemented - reduces chance to fail with given tradeskill by a percent chance
	constexpr int MaxBindWound                    = 269; // implemented[AA] - Increase max HP you can bind wound.
	constexpr int BardSongRange                   = 270; // implemented, @Song, increase range of beneficial bard songs, base: mod%, limit: none, max: none , Note: example Sionachie's Crescendo
	constexpr int BaseMovementSpeed               = 271; // implemented[AA] - mods basemove speed, doesn't stack with other move mods
	constexpr int CastingLevel2                   = 272; // implemented
	constexpr int CriticalDoTChance               = 273; // implemented
	constexpr int CriticalHealChance              = 274; // implemented
	constexpr int CriticalMend                    = 275; // implemented[AA] - chance to critical monk mend
	constexpr int Ambidexterity                   = 276; // implemented[AA] - increase chance to duel weild by adding bonus 'skill'
	constexpr int UnfailingDivinity               = 277; // implemented[AA] - ability grants your Death Pact-type spells a second chance to successfully heal their target, also can cause said spells to do a portion of their healing value even on a complete failure.
	constexpr int FinishingBlow                   = 278; // implemented[AA] - chance to do massive damage under 10% HP (base1 = chance, base2 = damage)
	constexpr int Flurry                          = 279; // implemented
	constexpr int PetFlurry                       = 280; // implemented[AA]
	constexpr int FeignedMinion                   = 281; // implemented, ability allows you to instruct your pet to feign death via the '/pet feign' command, base: succeed chance, limit: none, max: none, Note: Only implemented as an AA.
	constexpr int ImprovedBindWound               = 282; // implemented[AA] - increase bind wound amount by percent.
	constexpr int DoubleSpecialAttack             = 283; // implemented[AA] - Chance to perform second special attack as monk
	constexpr int LoHSetHeal                      = 284; // not used
	constexpr int NimbleEvasion                   = 285; // *not implemented - base1 = 100 for max
	constexpr int FcDamageAmt                     = 286; // implemented, @Fc, On Caster, spell damage mod flat amt, base: amt
	constexpr int SpellDurationIncByTic           = 287; // implemented, @Fc, SPA: 287, SpellEffect::SpellDurationIncByTic, = On Caster, spell buff duration mod, base: tics
	constexpr int SkillAttackProc                 = 288; // implemented, @Procs, chance to cast a spell when using a skill, base: chance, limit: skill, max: spellid, note: if used in AA the spell id is set in aa_ranks spell field, chance is calculated as 100% = value 1000.
	constexpr int CastOnFadeEffect                = 289; // implemented - Triggers only if fades after natural duration.
	constexpr int IncreaseRunSpeedCap             = 290; // implemented[AA] - increases run speed over the hard cap
	constexpr int Purify                          = 291; // implemented, @Dispel, remove up specified amount of detiremental spells, base: amt removed, limit: none, max: none, Note: excluding charm, fear, resurrection, and revival sickness
	constexpr int StrikeThrough2                  = 292; // implemented[AA] - increasing chance of bypassing an opponent's special defenses, such as dodge, block, parry, and riposte.
	constexpr int FrontalStunResist               = 293; // implemented[AA] - Reduce chance to be stunned from front. -- live descriptions sounds like this isn't limited to frontal anymore
	constexpr int CriticalSpellChance             = 294; // implemented - increase chance to critical hit and critical damage modifier.
	constexpr int ReduceTimerSpecial              = 295; // not used
	constexpr int FcSpellVulnerability            = 296; // implemented, @Fc, On Target, spell damage taken mod pct, base: min pct, limit: max pct
	constexpr int FcDamageAmtIncoming             = 297; // implemetned, @Fc, On Target, damage taken flat amt, base: amt
	constexpr int ChangeHeight                    = 298; // implemented
	constexpr int WakeTheDead                     = 299; // implemented, @Pets, summon one temporary pet from nearby corpses that last a set duration, base: none, limit: none, max: duration (seconds). Note: max range of corpse is 250.
	constexpr int Doppelganger                    = 300; // implemented
	constexpr int ArcheryDamageModifier           = 301; // implemented[AA] - increase archery damage by percent
	constexpr int FcDamagePctCrit                 = 302; // implemented, @Fc, On Caster, spell damage mod pct, base: min pct, limit: max pct, Note: applied after critical hits has been calculated.
	constexpr int FcDamageAmtCrit                 = 303; // implemented, @Fc, On Caster, spell damage mod flat amt, base: amt
	constexpr int OffhandRiposteFail              = 304; // implemented as bonus - enemy cannot riposte offhand attacks
	constexpr int MitigateDamageShield            = 305; // implemented - off hand attacks only (Shielding Resistance)
	constexpr int ArmyOfTheDead                   = 306; // implemented, @Pets, summon multiple temporary pets from nearby corpses that last a set duration, base: amount of corpses that a pet can summon from, limit: none, max: duration (seconds). Note: max range of corpse is 250.
	constexpr int Appraisal                       = 307; // *not implemented Rogue AA - This ability allows you to estimate the selling price of an item you are holding on your cursor.
	constexpr int ZoneSuspendMinion               = 308; // implemented, @Pet, allow suspended pets to be resummoned upon zoning, base: 1, limit: none, max: none, Calc: Bool
	constexpr int GateCastersBindpoint            = 309; // implemented - Gate to casters bind point
	constexpr int ReduceReuseTimer                = 310; // implemented, @Fc, On Caster, spell and disc reuse time mod by amount, base: milliseconds
	constexpr int LimitCombatSkills               = 311; // implemented, @Ff, Include or exclude combat skills or procs from being focused, base1: 0=Exclude if proc 1=Allow only if proc.
	constexpr int Sanctuary                       = 312; // implemented - Places caster at bottom hate list, effect fades if cast cast spell on targets other than self.
	constexpr int ForageAdditionalItems           = 313; // implemented[AA] - chance to forage additional items
	constexpr int Invisibility2                   = 314; // implemented - fixed duration invisible
	constexpr int InvisVsUndead2                  = 315; // implemented - fixed duration ITU
	constexpr int ImprovedInvisAnimals            = 316; // implemented
	constexpr int ItemHPRegenCapIncrease          = 317; // implemented[AA] - increases amount of health regen gained via items
	constexpr int ItemManaRegenCapIncrease        = 318; // implemented - increases amount of mana regen you can gain via items
	constexpr int CriticalHealOverTime            = 319; // implemented
	constexpr int ShieldBlock                     = 320; // implemented - Block attacks with shield
	constexpr int ReduceHate                      = 321; // implemented
	constexpr int GateToHomeCity                  = 322; // implemented
	constexpr int DefensiveProc                   = 323; // implemented
	constexpr int HPToMana                        = 324; // implemented
	constexpr int NoBreakAESneak                  = 325; // implemented[AA] - [AA Nerves of Steel] increasing chance to remain hidden when they are an indirect target of an AoE spell.
	constexpr int SpellSlotIncrease               = 326; // *not implemented as bonus - increases your spell slot availability
	constexpr int MysticalAttune                  = 327; // implemented - increases amount of buffs that a player can have
	constexpr int DelayDeath                      = 328; // implemented - increases how far you can fall below 0 hp before you die
	constexpr int ManaAbsorbPercentDamage         = 329; // implemented
	constexpr int CriticalDamageMob               = 330; // implemented
	constexpr int Salvage                         = 331; // implemented - chance to recover items that would be destroyed in failed tradeskill combine
	constexpr int SummonToCorpse                  = 332; // *not implemented AA - Call of the Wild (Druid/Shaman Res spell with no exp) TOOD: implement this.
	constexpr int CastOnRuneFadeEffect            = 333; // implemented
	constexpr int BardAEDot                       = 334; // implemented
	constexpr int BlockNextSpellFocus             = 335; // implemented, @Fc, On Caster, chance to block next spell, base: chance
	constexpr int IllusionaryTarget               = 336; // not used
	constexpr int PercentXPIncrease               = 337; // implemented
	constexpr int SummonAndResAllCorpses          = 338; // implemented
	constexpr int TriggerOnCast                   = 339; // implemented, @Fc, On Caster, cast on spell use, base: chance pct limit: spellid
	constexpr int SpellTrigger                    = 340; // implemented - chance to trigger spell [Share rolls with 469] All base2 spells share roll chance, only 1 cast.
	constexpr int ItemAttackCapIncrease           = 341; // implemented[AA] - increases the maximum amount of attack you can gain from items.
	constexpr int ImmuneFleeing                   = 342; // implemented - stop mob from fleeing
	constexpr int InterruptCasting                = 343; // implemented - % chance to interrupt spells being cast every tic. Cacophony (8272)
	constexpr int ChannelChanceItems              = 344; // implemented[AA] - chance to not have ITEM effects interrupted when you take damage.
	constexpr int AssassinateLevel                = 345; // implemented as bonus - AA Assisination max level to kill
	constexpr int HeadShotLevel                   = 346; // implemented[AA] - HeadShot max level to kill
	constexpr int DoubleRangedAttack              = 347; // implemented - chance at an additional archery attack (consumes arrow)
	constexpr int LimitManaMin                    = 348; // implemented, @Ff, Mininum mana of spell that can be focused, base1: mana amt
	constexpr int ShieldEquipDmgMod               = 349; // implemented[AA] Increase melee base damage (indirectly increasing hate) when wearing a shield.
	constexpr int ManaBurn                        = 350; // implemented - Drains mana for damage/heal at a defined ratio up to a defined maximum amount of mana.
	constexpr int PersistentEffect                = 351; // *not implemented. creates a trap/totem that casts a spell (spell id + base1?) when anything comes near it. can probably make a beacon for this
	constexpr int IncreaseTrapCount               = 352; // *not implemented - looks to be some type of invulnerability? Test ITC (8755)
	constexpr int AdditionalAura                  = 353; // *not implemented - allows use of more than 1 aura, aa effect
	constexpr int DeactivateAllTraps              = 354; // *not implemented - looks to be some type of invulnerability? Test DAT (8757)
	constexpr int LearnTrap                       = 355; // *not implemented - looks to be some type of invulnerability? Test LT (8758)
	constexpr int ChangeTriggerType               = 356; // not used
	constexpr int FcMute                          = 357; // implemented, @Fc, On Caster, prevents spell casting, base: chance pct
	constexpr int CurrentManaOnce                 = 358; // implemented
	constexpr int PassiveSenseTrap                = 359; // *not implemented - Invulnerability (Brell's Blessing)
	constexpr int ProcOnKillShot                  = 360; // implemented - a buff that has a base1 % to cast spell base2 when you kill a "challenging foe" base3 min level
	constexpr int SpellOnDeath                    = 361; // implemented - casts spell on death of buffed
	constexpr int PotionBeltSlots                 = 362; // *not implemented[AA] 'Quick Draw' expands the potion belt by one additional available item slot per rank.
	constexpr int BandolierSlots                  = 363; // *not implemented[AA] 'Battle Ready' expands the bandolier by one additional save slot per rank.
	constexpr int TripleAttackChance              = 364; // implemented
	constexpr int ProcOnSpellKillShot             = 365; // implemented - chance to trigger a spell on kill when the kill is caused by a specific spell with this effect in it (10470 Venin)
	constexpr int GroupShielding                  = 366; // *not implemented[AA] This gives you /shieldgroup
	constexpr int SetBodyType                     = 367; // implemented - set body type of base1 so it can be affected by spells that are limited to that type (Plant, Animal, Undead, etc)
	constexpr int FactionMod                      = 368; // *not implemented - increases faction with base1 (faction id, live won't match up w/ ours) by base2
	constexpr int CorruptionCounter               = 369; // implemented
	constexpr int ResistCorruption                = 370; // implemented
	constexpr int AttackSpeed4                    = 371; // implemented - stackable slow effect 'Inhibit Melee'
	constexpr int ForageSkill                     = 372; // implemented[AA] Will increase the skill cap for those that have the Forage skill and grant the skill and raise the cap to those that do not.
	constexpr int CastOnFadeEffectAlways          = 373; // implemented - Triggers if fades after natural duration OR from rune/numhits fades.
	constexpr int ApplyEffect                     = 374; // implemented
	constexpr int DotCritDmgIncrease              = 375; // implemented - Increase damage of DoT critical amount
	constexpr int Fling                           = 376; // *not implemented - used in 2 test spells (12945 | Movement Test Spell 1)
	constexpr int CastOnFadeEffectNPC             = 377; // implemented - Triggers only if fades after natural duration (On live these are usually players spells that effect an NPC).
	constexpr int SpellEffectResistChance         = 378; // implemented - Increase chance to resist specific spell effect (base1=value, base2=spell effect id)
	constexpr int ShadowStepDirectional           = 379; // implemented - handled by client
	constexpr int Knockdown                       = 380; // implemented - small knock back(handled by client)
	constexpr int KnockTowardCaster               = 381; // *not implemented (Call of Hither) knocks you back to caster (value) distance units infront
	constexpr int NegateSpellEffect               = 382; // implemented, @Debuff, negates specific spell effect benefits for the duration of the debuff and prevent non-duration spell effect from working, base: see NegateSpellEffecttype Enum, limit: SPA id, max: none
	constexpr int SympatheticProc                 = 383; // implemented, @Fc, On Caster, cast on spell use, base: variable proc chance on cast time, limit: spellid
	constexpr int Leap                            = 384; // implemented - Leap effect, ie stomping leap
	constexpr int LimitSpellGroup                 = 385; // implemented, @Ff, Spell group(s) that a spell focus can require or exclude, base1: spellgroup id, Include: Positive Exclude: Negative
	constexpr int CastOnCurer                     = 386; // implemented - Casts a spell on the person curing
	constexpr int CastOnCure                      = 387; // implemented - Casts a spell on the cured person
	constexpr int SummonCorpseZone                = 388; // implemented - summons a corpse from any zone(nec AA)
	constexpr int FcTimerRefresh                  = 389; // implemented, @Fc, On Caster, reset all recast timers, base: 1, Note: Applied from casted spells only
	constexpr int FcTimerLockout                  = 390; // implemented, @Fc, On Caster, set a spell to be on recast timer, base: recast duration milliseconds, Note: Applied from casted spells only
	constexpr int LimitManaMax                    = 391; // implemented, @Ff, Mininum mana of spell that can be focused, base1: mana amt
	constexpr int FcHealAmt                       = 392; // implemented, @Fc, On Caster, spell healing mod flat amt, base: amt
	constexpr int FcHealPctIncoming               = 393; // implemented, @Fc, On Target, heal received mod pct, base: pct, limit: random max pct
	constexpr int FcHealAmtIncoming               = 394; // implemented, @Fc, On Target, heal received mod flat amt, base: amt
	constexpr int FcHealPctCritIncoming           = 395; // implemented, @Fc, On Target, heal received mod pct, base: pct, limit: random max pct
	constexpr int FcHealAmtCrit                   = 396; // implemented, @Fc, On Caster, spell healing mod flat amt, base: amt
	constexpr int PetMeleeMitigation              = 397; // implemented[AA] - additional mitigation to your pets. Adds AC
	constexpr int SwarmPetDuration                = 398; // implemented - Affects the duration of swarm pets
	constexpr int FcTwincast                      = 399; // implemented - cast 2 spells for every 1
	constexpr int HealGroupFromMana               = 400; // implemented - Drains mana and heals for each point of mana drained
	constexpr int ManaDrainWithDmg                = 401; // implemented - Deals damage based on the amount of mana drained
	constexpr int EndDrainWithDmg                 = 402; // implemented - Deals damage for the amount of endurance drained
	constexpr int LimitSpellClass                 = 403; // implemented, @Ff, 'Spell Category' using table field 'spell_class' that a spell focus can require or exclude, base1: category type, Include: Positive Exclude: Negative
	constexpr int LimitSpellSubclass              = 404; // implemented, @Ff, 'Spell Category Subclass' using table field 'spell_subclass' that a spell focus can require or exclude, base1: category type, Include: Positive Exclude: Negative
	constexpr int TwoHandBluntBlock               = 405; // implemented - chance to block attacks when using two hand blunt weapons (similiar to shield block)
	constexpr int CastonNumHitFade                = 406; // implemented - casts a spell when a buff fades due to its numhits being depleted
	constexpr int CastonFocusEffect               = 407; // implemented - casts a spell if focus limits are met (ie triggers when a focus effects is applied)
	constexpr int LimitHPPercent                  = 408; // implemented - limited to a certain percent of your hp(ie heals up to 50%)
	constexpr int LimitManaPercent                = 409; // implemented - limited to a certain percent of your mana
	constexpr int LimitEndPercent                 = 410; // implemented - limited to a certain percent of your end
	constexpr int LimitClass                      = 411; // implemented, @Ff, Class(es) that can use the spell focus, base1: class(es), Note: The class value in dbase is +1 in relation to item class value, set as you would item for multiple classes
	constexpr int LimitRace                       = 412; // implemented, @Ff, Race that can use the spell focus, base1: race, Note: not used in any known live spells. Use only single race at a time.
	constexpr int FcBaseEffects                   = 413; // implemented, @Fc, On Caster, base spell effectiveness mod pct, base: pct
	constexpr int LimitCastingSkill               = 414; // implemented, @Ff, Spell and singing skills(s) that a spell focus can require or exclude, base1: skill id, Include: Positive Exclude: Negative
	constexpr int FFItemClass                     = 415; // implemented, @Ff, Limits focuses to be applied only from item click. base1: item ItemType (-1 to include for all ItemTypes,-1000 to exclude clicks from getting the focus, or exclude specific SubTypes or Slots if set), limit: item SubType (-1 for all SubTypes), max: item Slots (bitmask of valid slots, -1 ALL slots), Note: not used on live. See comments in Mob::CalcFocusEffect for more details.
	constexpr int ACv2                            = 416; // implemented - New AC spell effect
	constexpr int ManaRegen_v2                    = 417; // implemented - New mana regen effect
	constexpr int SkillDamageAmount2              = 418; // implemented - adds skill damage directly to certain attacks
	constexpr int AddMeleeProc                    = 419; // implemented - Adds a proc
	constexpr int FcLimitUse                      = 420; // implemented, @Fc, On Caster, numhits mod pct, base: pct, Note: not used in any known live spells
	constexpr int FcIncreaseNumHits               = 421; // implemented, @Fc, On Caster, numhits mod flat amt, base: amt
	constexpr int LimitUseMin                     = 422; // implemented, @Ff Minium amount of numhits for a spell to be focused, base: numhit amt
	constexpr int LimitUseType                    = 423; // implemented, = @Ff Focus will only affect if has this numhits type, base: numhit type
	constexpr int GravityEffect                   = 424; // implemented - Pulls/pushes you toward/away the mob at a set pace
	constexpr int Display                         = 425; // *not implemented - Illusion: Flying Dragon(21626)
	constexpr int IncreaseExtTargetWindow         = 426; // *not implmented[AA] - increases the capacity of your extended target window
	constexpr int SkillProcAttempt                = 427; // implemented - chance to proc when using a skill(ie taunt)
	constexpr int LimitToSkill                    = 428; // implemented, @Procs, limits what combat skills will effect a skill proc, base: skill value, limit: none, max: none
	constexpr int SkillProcSuccess                = 429; // implemented - chance to proc when tje skill in use successfully fires.
	constexpr int PostEffect                      = 430; // *not implemented - Fear of the Dark(27641) - Alters vision
	constexpr int PostEffectData                  = 431; // *not implemented - Fear of the Dark(27641) - Alters vision
	constexpr int ExpandMaxActiveTrophyBen        = 432; // not used
	constexpr int CriticalDotDecay                = 433; // implemented - increase critical dot chance, effect decays based on level of spell it effects. (12266)
	constexpr int CriticalHealDecay               = 434; // implemented - increase critical heal chance, effect decays based on level of spell it effects.
	constexpr int CriticalRegenDecay              = 435; // implemented - increase critical heal over time chance, effect decays based on level of spell it effects.
	constexpr int BeneficialCountDownHold         = 436; // not used ( 23491 | ABTest Buff Hold)
	constexpr int TeleporttoAnchor                = 437; // *not implemented - Teleport Guild Hall Anchor(33099)
	constexpr int TranslocatetoAnchor             = 438; // *not implemented - Translocate Primary Anchor (27750)
	constexpr int Assassinate                     = 439; // implemented[AA] - Assassinate damage
	constexpr int FinishingBlowLvl                = 440; // implemented[AA] - Sets the level Finishing blow can be triggered on an NPC
	constexpr int DistanceRemoval                 = 441; // implemented - Buff is removed from target when target moves X amount of distance away from where initially hit.
	constexpr int TriggerOnReqTarget              = 442; // implemented, @SpellTrigger, triggers a spell when Target Requirement conditions are met (see enum SpellRestriction for IDs), base: spellid, limit: SpellRestriction ID, max: none, Note: Usually cast on a target
	constexpr int TriggerOnReqCaster              = 443; // implemented, @SpellTrigger, triggers a spell when Caster Requirement conditions are met (see enum SpellRestriction for IDs), base: spellid, limit: SpellRestriction ID, max: none, Note: Usually self only
	constexpr int ImprovedTaunt                   = 444; // implemented - Locks Aggro On Caster and Decrease other Players Aggro by X% on NPC targets below level Y
	constexpr int AddMercSlot                     = 445; // *not implemented[AA] - [Hero's Barracks] Allows you to conscript additional mercs.
	constexpr int AStacker                        = 446; // implementet - bufff stacking blocker (26219 | Qirik's Watch)
	constexpr int BStacker                        = 447; // implemented
	constexpr int CStacker                        = 448; // implemented
	constexpr int DStacker                        = 449; // implemented
	constexpr int MitigateDotDamage               = 450; // implemented, @Runes, mitigate incoming dot damage by percentage until rune fades, base: percent mitigation, limit: max dmg absorbed per hit, max: rune amt, Note: If placed on item or AA, will provide stackable percent mitigation.
	constexpr int MeleeThresholdGuard             = 451; // implemented Partial Melee Rune that only is lowered if melee hits are over X amount of damage
	constexpr int SpellThresholdGuard             = 452; // implemented Partial Spell Rune that only is lowered if spell hits are over X amount of damage
	constexpr int TriggerMeleeThreshold           = 453; // implemented Trigger effect on X amount of melee damage taken in a single hit
	constexpr int TriggerSpellThreshold           = 454; // implemented Trigger effect on X amount of spell damage taken in a single hit
	constexpr int AddHatePct                      = 455; // implemented Modify total hate by %
	constexpr int AddHateOverTimePct              = 456; // implemented Modify total hate by % over time.
	constexpr int ResourceTap                     = 457; // implemented Coverts a percent of dmg from dmg spells(DD/DoT) to hp/mana/end.
	constexpr int FactionModPct                   = 458; // implemented Modifies faction gains and losses by percent.
	constexpr int DamageModifier2                 = 459; // implemented - Modifies melee damage by skill type
	constexpr int Ff_Override_NotFocusable        = 460; // implemented, @Fc, Allow spell to be focused event if flagged with 'not_focusable' in spell table, base: 1
	constexpr int ImprovedDamage2                 = 461; // implemented, @Fc, On Caster, spell damage mod pct, base: min pct, limit: max pct
	constexpr int FcDamageAmt2                    = 462; // implemented, @Fc, On Caster, spell damage mod flat amt, base: amt
	constexpr int Shield_Target                   = 463; // implemented, Base1 % damage shielded on target
	constexpr int PC_Pet_Rampage                  = 464; // implemented - Base1 % chance to do rampage for base2 % of damage each melee round
	constexpr int PC_Pet_AE_Rampage               = 465; // implemented - Base1 % chance to do AE rampage for base2 % of damage each melee round
	constexpr int PC_Pet_Flurry_Chance            = 466; // implemented - Base1 % chance to do flurry from double attack hit.
	constexpr int DS_Mitigation_Amount            = 467; // implemented - Modify incoming damage shield damage by a flat amount
	constexpr int DS_Mitigation_Percentage        = 468; // implemented - Modify incoming damage shield damage by percentage
	constexpr int Chance_Best_in_Spell_Grp        = 469; // implemented - Chance to cast highest scribed spell within a spell group. All base2 spells share roll chance, only 1 cast.
	constexpr int Trigger_Best_in_Spell_Grp       = 470; // implemented - Chance to cast highest scribed spell within a spell group. Each spell has own chance.
	constexpr int Double_Melee_Round              = 471; // implemented, @OffBonus, percent chance to repeat primary weapon round with a percent damage modifier, base: pct chance repeat, limit: pct dmg mod, max: none
	constexpr int Buy_AA_Rank                     = 472; // implemented, @Special, Used in AA abilities that have Enable/Disable toggle. Spell on Disabled Rank has this effect in it, base: 1, limit: none, max: none, Note: This will not just buy an AA
	constexpr int Double_Backstab_Front           = 473; // implemented - Chance to double backstab from front
	constexpr int Pet_Crit_Melee_Damage_Pct_Owner = 474; // implemenetd - Critical damage mod applied to pets from owner
	constexpr int Trigger_Spell_Non_Item          = 475; // implemented - Trigger spell on cast only if not from item click.
	constexpr int Weapon_Stance                   = 476; // implemented, @Misc, Apply a specific spell buffs automatically depending 2Hander, Shield or Dual Wield is equipped, base: spellid, base: 0=2H 1=Shield 2=DW, max: none
	constexpr int Hatelist_To_Top_Index           = 477; // Implemented - Chance to be set to top of rampage list
	constexpr int Hatelist_To_Tail_Index          = 478; // Implemented - Chance to be set to bottom of rampage list
	constexpr int Ff_Value_Min                    = 479; // implemented, @Ff, Minimum base value of a spell that can be focused, base: spells to be focused base1 value
	constexpr int Ff_Value_Max                    = 480; // implemented, @Ff, Max base value of a spell that can be focused, base: spells to be focused base1 value
	constexpr int Fc_Cast_Spell_On_Land           = 481; // implemented, @Fc, On Target, cast spell if hit by spell, base: chance pct, limit: spellid
	constexpr int Skill_Base_Damage_Mod           = 482; // implemented, @OffBonus, modify base melee damage by percent, base: pct, limit: skill(-1=ALL), max: none
	constexpr int Fc_Spell_Damage_Pct_IncomingPC  = 483; // implemented, @Fc, On Target, spell damage taken mod pct, base: min pct, limit: max pct
	constexpr int Fc_Spell_Damage_Amt_IncomingPC  = 484; // implemented, @Fc, On Target, damage taken flat amt, base: amt
	constexpr int Ff_CasterClass                  = 485; // implemented, @Ff, Caster of spell on target with a focus effect that is checked by incoming spells must be specified class(es). base1: class(es), Note: Set multiple classes same as would for items
	constexpr int Ff_Same_Caster                  = 486; // implemented, @Ff, Caster of spell on target with a focus effect that is checked by incoming spells, base1: 0=Must be different caster 1=Must be same caster
	constexpr int Extend_Tradeskill_Cap           = 487; //
	constexpr int Defender_Melee_Force_Pct_PC     = 488; //
	constexpr int Worn_Endurance_Regen_Cap        = 489; // implemented, modify worn regen cap, base: amt, limit: none, max: none
	constexpr int Ff_ReuseTimeMin                 = 490; // implemented, @Ff, Minimum recast time of a spell that can be focused, base: recast time
	constexpr int Ff_ReuseTimeMax                 = 491; // implemented, @Ff, Max recast time of a spell that can be focused, base: recast time
	constexpr int Ff_Endurance_Min                = 492; // implemented, @Ff, Minimum endurance cost of a spell that can be focused, base: endurance cost
	constexpr int Ff_Endurance_Max                = 493; // implemented, @Ff, Max endurance cost of a spell that can be focused, base: endurance cost
	constexpr int Pet_Add_Atk                     = 494; // implemented - Bonus on pet owner which gives their pet increased attack stat
	constexpr int Ff_DurationMax                  = 495; // implemented, @Ff, Max duration of spell that can be focused, base: tics
	constexpr int Critical_Melee_Damage_Mod_Max   = 496; // implemented - increase or decrease by percent critical damage (not stackable)
	constexpr int Ff_FocusCastProcNoBypass        = 497; //
	constexpr int AddExtraAttackPct_1h_Primary    = 498; // implemented, @OffBonus, gives your double attacks a percent chance to perform an extra attack with 1-handed primary weapon, base: chance, limit: amt attacks, max: none
	constexpr int AddExtraAttackPct_1h_Secondary  = 499; //implemented, @OffBonus, gives your double attacks a percent chance to perform an extra attack with 1-handed secondary weapon, base: chance, limit: amt attacks, max: none
	constexpr int Fc_CastTimeMod2                 = 500; // implemented, @Fc, On Caster, cast time mod pct, base: pct, Note: Can reduce to instant cast
	constexpr int Fc_CastTimeAmt                  = 501; // implemented, @Fc, On Caster, cast time mod flat amt, base: milliseconds, Note: Can reduce to instant cast
	constexpr int Fearstun                        = 502; // implemented - Stun with a max level limit. Normal stun restrictions don't apply.
	constexpr int Melee_Damage_Position_Mod       = 503; // implemented, @OffBonus, modify melee damage by percent if done from Front or Behind opponent, base: pct, limit: 0=back 1=front, max: none
	constexpr int Melee_Damage_Position_Amt       = 504; // implemented, @OffBonus, modify melee damage by flat amount if done from Front or Behind opponent, base: amt, limit: 0=back 1=front, max: none
	constexpr int Damage_Taken_Position_Mod       = 505; // implemented, @DefBonus, modify melee damage by percent if dmg taken from Front or Behind, base: pct, limit: 0=back 1=front, max: none
	constexpr int Damage_Taken_Position_Amt       = 506; // implemented -@DefBonus, modify melee damage by flat amount if dmg taken from your Front or Behind, base: amt, limit: 0=back 1=front, max: none
	constexpr int Fc_Amplify_Mod                  = 507; // implemented, @Fc, On Caster, damage-heal-dot mod pct, base: pct
	constexpr int Fc_Amplify_Amt                  = 508; // implemented, @Fc, On Caster, damage-heal-dot mod flat amt, base: amt
	constexpr int Health_Transfer                 = 509; // implemented - exchange health for damage or healing on a target. ie Lifeburn/Act of Valor
	constexpr int Fc_ResistIncoming               = 510; // implemented, @Fc, On Target, resist modifier, base: amt
	constexpr int Ff_FocusTimerMin                = 511; // implemented, @Ff, sets a recast time until focus can be used again, base: 1, limit: time ms, Note: ie. limit to 1 trigger every 1.5 seconds
	constexpr int Proc_Timer_Modifier             = 512; // implemented - limits procs per amount of a time based on timer value, base: 1, limit: time ms, Note:, ie limit to 1 proc every 55 seconds)
	constexpr int Mana_Max_Percent                = 513; //
	constexpr int Endurance_Max_Percent           = 514; //
	constexpr int AC_Avoidance_Max_Percent        = 515; // implemented - stackable avoidance modifier
	constexpr int AC_Mitigation_Max_Percent       = 516; // implemented - stackable defense modifier
	constexpr int Attack_Offense_Max_Percent      = 517; //
	constexpr int Attack_Accuracy_Max_Percent     = 518; // implemented - stackable accurary modifer
	constexpr int Luck_Amount                     = 519; //
	constexpr int Luck_Percent                    = 520; //
	constexpr int Endurance_Absorb_Pct_Damage     = 521; // implemented - Reduces % of Damage using Endurance, drains endurance at a ratio (ie. 0.05 Endurance per Hit Point)
	constexpr int Instant_Mana_Pct                = 522; // implemented - Increase/Decrease mana by percent of max mana
	constexpr int Instant_Endurance_Pct           = 523; // implemented - Increase/Decrease mana by percent of max endurance
	constexpr int Duration_HP_Pct                 = 524; // implemented - Decrease Current Hit Points by % of Total Hit Points per Tick, up to a MAX per tick
	constexpr int Duration_Mana_Pct               = 525; // implemented - Decrease Current Mana by % of Total Mana per Tick, up to a MAX per tick
	constexpr int Duration_Endurance_Pct          = 526; // implemented - Decrease Current Endurance by % of Total Hit Points per Tick, up to a MAX per tick
}

#define DF_Permanent				50
#define DF_Aura						51
#define PERMANENT_BUFF_DURATION 	-1000 //this is arbitrary used when overriding spells regular buff duration to set it as permenant

// note this struct is historical, we don't actually need it to be
// aligned to anything, but for maintaining it it is kept in the order that
// the fields in the text file are. the numbering is not offset, but field
// number. note that the id field is counted as 0, this way the numbers
// here match the numbers given to sep in the loading function net.cpp
//
#define SPELL_LOAD_FIELD_COUNT 236

struct SPDat_Spell_Struct
{
/* 000 */	int id;	// not used -- SPELLINDEX
/* 001 */	char name[64]; // Name of the spell -- SPELLNAME
/* 002 */	char player_1[32]; // "PLAYER_1" -- ACTORTAG
/* 003 */	char teleport_zone[64];	// Teleport zone, pet name summoned, or item summoned -- NPC_FILENAME
/* 004 */	char you_cast[64]; // Message when you cast -- CASTERMETXT
/* 005 */	char other_casts[64]; // Message when other casts -- CASTEROTHERTXT
/* 006 */	char cast_on_you[64]; // Message when spell is cast on you -- CASTEDMETXT
/* 007 */	char cast_on_other[64]; // Message when spell is cast on someone else -- CASTEDOTHERTXT
/* 008 */	char spell_fades[64]; // Spell fades -- SPELLGONE
/* 009 */	float range; // -- RANGE
/* 010 */	float aoe_range; // -- IMPACTRANGE
/* 011 */	float push_back; // -- OUTFORCE
/* 012 */	float push_up; // -- UPFORCE
/* 013 */	uint32 cast_time; // Cast time -- CASTINGTIME
/* 014 */	uint32 recovery_time; // Recovery time -- RECOVERYDELAY
/* 015 */	uint32 recast_time; // Recast same spell time -- SPELLDELAY
/* 016 */	uint32 buff_duration_formula; // -- DURATIONBASE
/* 017 */	uint32 buff_duration; // -- DURATIONCAP
/* 018 */	uint32 aoe_duration;	// sentinel, rain of something -- IMPACTDURATION
/* 019 */	int32 mana; // Mana Used -- MANACOST
/* 020 */	int base_value[EFFECT_COUNT];	//various purposes -- BASEAFFECT1 .. BASEAFFECT12
/* 032 */	int limit_value[EFFECT_COUNT]; //various purposes -- BASE_EFFECT2_1 ... BASE_EFFECT2_12
/* 044 */	int32 max_value[EFFECT_COUNT]; // -- AFFECT1CAP ... AFFECT12CAP
/* 056 */	//uint16 icon; // Spell icon -- IMAGENUMBER
/* 057 */	//uint16 memicon; // Icon on membarthing -- MEMIMAGENUMBER
/* 058 */	int32 component[4]; // reagents -- EXPENDREAGENT1 ... EXPENDREAGENT4
/* 062 */	int component_count[4]; // amount of regents used -- EXPENDQTY1 ... EXPENDQTY4
/* 066 */	int no_expend_reagent[4];	// focus items (Need but not used; Flame Lick has a Fire Beetle Eye focus.)
											// If it is a number between 1-4 it means components[number] is a focus and not to expend it
											// If it is a valid itemid it means this item is a focus as well
											// -- NOEXPENDREAGENT1 ... NOEXPENDREAGENT4
/* 070 */	uint32 formula[EFFECT_COUNT]; // Spell's value formula -- LEVELAFFECT1MOD ... LEVELAFFECT12MOD
/* 082 */	//int LightType; // probaly another effecttype flag -- LIGHTTYPE
/* 083 */	int8 good_effect; //0=detrimental, 1=Beneficial, 2=Beneficial, Group Only -- BENEFICIAL
/* 084 */	int activated; // probably another effecttype flag -- ACTIVATED
/* 085 */	int resist_type; // -- RESISTTYPE
/* 086 */	int effect_id[EFFECT_COUNT];	// Spell's effects -- SPELLAFFECT1 ... SPELLAFFECT12
/* 098 */	SpellTargetType target_type;	// Spell's Target -- TYPENUMBER
/* 099 */	int base_difficulty; // base difficulty fizzle adjustment -- BASEDIFFICULTY
/* 100 */	EQ::skills::SkillType skill; // -- CASTINGSKILL
/* 101 */	int8 zone_type; // 01=Outdoors, 02=dungeons, ff=Any -- ZONETYPE
/* 102 */	int8 environment_type; // -- ENVIRONMENTTYPE
/* 103 */	int8 time_of_day; // -- TIMEOFDAY
/* 104 */	uint8 classes[Class::PLAYER_CLASS_COUNT]; // Classes, and their min levels -- WARRIORMIN ... BERSERKERMIN
/* 120 */	uint8 casting_animation; // -- CASTINGANIM
/* 121 */	//uint8 TargetAnim; // -- TARGETANIM
/* 122 */	//uint32 TravelType; // -- TRAVELTYPE
/* 123 */	uint16 spell_affect_index; // -- SPELLAFFECTINDEX
/* 124 */	int8 disallow_sit; // 124: high-end Yaulp spells (V, VI, VII, VIII [Rk 1, 2, & 3], & Gallenite's Bark of Fury -- CANCELONSIT
/* 125 */	int8 deity_agnostic;// 125: Words of the Skeptic -- DEITY_AGNOSTIC
/* 126 */	int8 deities[16];	// Deity check. 201 - 216 per http://www.eqemulator.net/wiki/wikka.php?wakka=DeityList
										// -1: Restrict to Deity; 1: Restrict to Deity, but only used on non-Live (Test Server "Blessing of ...") spells; 0: Don't restrict
										// the client actually stores deities in a single int32_t
										// -- DEITY_BERTOXXULOUS ... DEITY_VEESHAN
/* 142 */	//int8 npc_no_cast;			// 142: between 0 & 100 -- NPC_NO_CAST
/* 143 */	//int ai_pt_bonus;			// 143: always set to 0, client doesn't save this -- AI_PT_BONUS
/* 144 */	int16 new_icon;	// Spell icon used by the client in uifiles/default/spells??.tga, both for spell gems & buff window. Looks to depreciate icon & memicon -- NEW_ICON
/* 145 */	//int16 spellanim; // Doesn't look like it's the same as #doanim, so not sure what this is, particles I think -- SPELL_EFFECT_INDEX
/* 146 */	bool uninterruptable;	// Looks like anything != 0 is uninterruptable. Values are mostly -1, 0, & 1 (Fetid Breath = 90?) -- NO_INTERRUPT
/* 147 */	int16 resist_difficulty; // -- RESIST_MOD
/* 148 */	bool unstackable_dot; // -- NOT_STACKABLE_DOT
/* 149 */	//int deletable; // -- DELETE_OK
/* 150 */	uint16 recourse_link; // -- REFLECT_SPELLINDEX
/* 151 */	bool no_partial_resist;	// 151: -1, 0, or 1 -- NO_PARTIAL_SAVE
/* 152 */	//bool small_targets_only; // -- SMALL_TARGETS_ONLY
/* 153 */	//bool uses_persistent_particles; // -- USES_PERSISTENT_PARTICLES
/* 154 */	int8 short_buff_box;	// != 0, goes to short buff box. -- BARD_BUFF_BOX
/* 155 */	int description_id; // eqstr of description of spell -- DESCRIPTION_INDEX
/* 156 */	int type_description_id; // eqstr of type description -- PRIMARY_CATEGORY
/* 157 */	int effect_description_id; // eqstr of effect description -- SECONDARY_CATEGORY_1
/* 158 */	//int secondary_category_2;   //Category Desc ID 3 -- SECONDARY_CATEGORY_2
/* 159 */	bool npc_no_los; // -- NO_NPC_LOS
/* 160 */	bool feedbackable; // -- FEEDBACKABLE
/* 161 */	bool reflectable; // -- REFLECTABLE
/* 162 */	int bonus_hate; // -- HATE_MOD
/* 163 */	//int resist_per_level; // -- RESIST_PER_LEVEL
/* 164 */	//int resist_cap; // for most spells this appears to mimic ResistDiff -- RESIST_CAP
/* 165 */	bool ldon_trap; //Flag found on all LDON trap / chest related spells. -- AFFECT_INANIMATE
/* 166 */	int endurance_cost; // -- STAMINA_COST
/* 167 */	int8 timer_id; // bad name, used for all spells -- TIMER_INDEX
/* 168 */	bool is_discipline; //Will goto the combat window when cast -- IS_SKILL
/* 169 - 172*/ //These are zero for ALL spells, also removed from live -- ATTACK_OPENING, DEFENSE_OPENING, SKILL_OPENING, NPC_ERROR_OPENING
/* 173 */	int hate_added; // -- SPELL_HATE_GIVEN
/* 174 */	int endurance_upkeep; // -- ENDUR_UPKEEP
/* 175 */	int hit_number_type; // defines which type of behavior will tick down the numhit counter. -- LIMITED_USE_TYPE
/* 176 */	int hit_number; // -- LIMITED_USE_COUNT
/* 177 */	int pvp_resist_base; // -- PVP_RESIST_MOD
/* 178 */	int pvp_resist_per_level; // -- PVP_RESIST_PER_LEVEL
/* 179 */	int pvp_resist_cap; // -- PVP_RESIST_CAP
/* 180 */	int spell_category; // -- GLOBAL_GROUP
/* 181 */	int pvp_duration; // buffdurationformula for PvP -- PVP_DURATION
/* 182 */	int pvp_duration_cap; // buffduration for PvP -- PVP_DURATION_CAP
/* 183 */	int pcnpc_only_flag; // valid values are 0, 1 = PCs (and mercs), and 2 = NPCs (and not mercs) -- PCNPC_ONLY_FLAG
/* 184 */	bool cast_not_standing; // this is checked in the client's EQ_Spell::IsCastWhileInvisSpell, this also blocks SpellEffect::InterruptCasting from affecting this spell -- CAST_NOT_STANDING (Allows casting if DA, stun, mezed, charm? fear?, damage to invul targets)
/* 185 */	bool can_mgb; // 0=no, -1 or 1 = yes -- CAN_MGB
/* 186 */	int dispel_flag; // -- NO_DISPELL
/* 187 */	//int npc_category; // -- NPC_MEM_CATEGORY
/* 188 */	//int npc_usefulness; // -- NPC_USEFULNESS
/* 189 */	int min_resist; // -- MIN_RESIST
/* 190 */	int max_resist; // -- MAX_RESIST
/* 191 */	uint8 viral_targets; // -- MIN_SPREAD_TIME
/* 192 */	uint8 viral_timer; // -- MAX_SPREAD_TIME
/* 193 */	int nimbus_effect; // -- DURATION_PARTICLE_EFFECT
/* 194 */	float directional_start; //Cone Start Angle: -- CONE_START_ANGLE
/* 195 */	float directional_end; // Cone End Angle: -- CONE_END_ANGLE
/* 196 */   bool sneak; // effect can only be used if sneaking (rogue 'Daggerfall' ect) -- SNEAK_ATTACK
/* 197 */	bool not_focusable; //prevents focus effects from being applied to spell -- NOT_FOCUSABLE
/* 198 */   bool no_detrimental_spell_aggro; // -- NO_DETRIMENTAL_SPELL_AGGRO
/* 199 */	//bool show_wear_off_message; // -- SHOW_WEAR_OFF_MESSAGE
/* 200 */	bool suspendable; // buff is suspended in suspended buff zones -- IS_COUNTDOWN_HELD
/* 201 */	int viral_range; // -- SPREAD_RADIUS
/* 202 */	int song_cap; // individual song cap -- BASE_EFFECTS_FOCUS_CAP
/* 203 */	//bool stacks_with_self; // -- STACKS_WITH_SELF
/* 204 */	//int not_shown_to_player; // client skips this -- NOT_SHOWN_TO_PLAYER
/* 205 */	bool no_block; // -- NO_BUFF_BLOCK
/* 206 */	//int8 anim_variation; // -- ANIM_VARIATION
/* 207 */	int spell_group; // -- SPELL_GROUP
/* 208 */	int rank; //increments AA effects with same name -- SPELL_GROUP_RANK
/* 209 */	int no_resist; //makes spells unresistable, which makes charms unbreakable as well. -- NO_RESIST
/* 210 */	// bool allow_spellscribe; // -- ALLOW_SPELLSCRIBE
/* 211 */	int cast_restriction; //Various restriction categories for spells most seem targetable race related but have also seen others for instance only castable if target hp 20% or lower or only if target out of combat -- SPELL_REQ_ASSOCIATION_ID
/* 212 */	bool allow_rest; // -- BYPASS_REGEN_CHECK
/* 213 */	bool can_cast_in_combat; //Allow spell if target is in combat -- CAN_CAST_IN_COMBAT
/* 214 */   bool can_cast_out_of_combat; //Allow spell if target is out of combat -- CAN_CAST_OUT_OF_COMBAT
/* 215 */	//bool show_dot_message; // -- SHOW_DOT_MESSAGE
/* 216 */	//bool invalid; // -- INVALID
/* 217 */   int override_crit_chance; //Places a cap on the max chance to critical -- OVERRIDE_CRIT_CHANCE
/* 218 */	int aoe_max_targets;  //Is used for various AE effects -- MAX_TARGETS
/* 219 */	int no_heal_damage_item_mod; // -- NO_HEAL_DAMAGE_ITEM_MOD
/* 220 */	int caster_requirement_id; // -- CASTER_REQUIREMENT_ID
/* 221 */	int spell_class; // -- SPELL_CLASS
/* 222 */	int spell_subclass; // -- SPELL_SUBCLASS
/* 223 */	//int ai_valid_targets; // -- AI_VALID_TARGETS
/* 224 */	bool persist_death; // buff doesn't get stripped on death -- NO_STRIP_ON_DEATH
/* 225 */	//float base_effects_focus_slope; // -- BASE_EFFECTS_FOCUS_SLOPE
/* 226 */	//float base_effects_focus_offset; // -- BASE_EFFECTS_FOCUS_OFFSET
/* 227 */	float min_distance; //spell power modified by distance from caster (Min Distance) -- DISTANCE_MOD_CLOSE_DIST
/* 228 */	float min_distance_mod;  //spell power modified by distance from caster (Modifier at Min Distance) -- DISTANCE_MOD_CLOSE_MULT
/* 229 */	float max_distance; //spell power modified by distance from caster (Max Distance) -- DISTANCE_MOD_FAR_DIST
/* 230 */   float max_distance_mod; //spell power modified by distance from caster (Modifier at Max Distance) -- DISTANCE_MOD_FAR_MULT
/* The client also does this
 *  v26 = *(float *)&v4->DistanceModFarDist - *(float *)&v4->DistanceModCloseDist;
 *  if ( v26 > -0.00000011920929 && v26 < 0.00000011920929 )
 *    v26 = 1.0;
 *  v27 = (st7_0 - *(float *)&v4->DistanceModCloseMult) / v26;
 *  *(float *)&v4->DistanceMod = v27;
 */
/* 231 */   float min_range; //Min casting range -- MIN_RANGE
/* 232 */   bool no_remove; //prevents buff from being removed by click -- NO_REMOVE
/* 233 */	//int spell_recourse_type; // -- SPELL_RECOURSE_TYPE
/* 234 */	//bool only_during_fast_regen; // -- ONLY_DURING_FAST_REGEN
/* 235 */	//bool is_beta_only; // -- IS_BETA_ONLY
/* 236 */	//int spell_subgroup; // -- SPELL_SUBGROUP
			uint8 damage_shield_type; // This field does not exist in spells_us.txt
};

extern const SPDat_Spell_Struct* spells;
extern int32 SPDAT_RECORDS;

bool IsTargetableAESpell(uint16 spell_id);
bool IsSacrificeSpell(uint16 spell_id);
bool IsLifetapSpell(uint16 spell_id);
bool IsMesmerizeSpell(uint16 spell_id);
bool SpellBreaksMez(uint16 spell_id);
bool IsStunSpell(uint16 spell_id);
bool IsSlowSpell(uint16 spell_id);
bool IsHasteSpell(uint16 spell_id);
bool IsHarmonySpell(uint16 spell_id);
bool IsPercentalHealSpell(uint16 spell_id);
bool IsGroupOnlySpell(uint16 spell_id);
bool IsBeneficialSpell(uint16 spell_id);
bool IsDetrimentalSpell(uint16 spell_id);
bool IsInvisibleSpell(uint16 spell_id);
bool IsInvulnerabilitySpell(uint16 spell_id);
bool IsCompleteHealDurationSpell(uint16 spell_id);
bool IsPoisonCounterSpell(uint16 spell_id);
bool IsDiseaseCounterSpell(uint16 spell_id);
bool IsSummonItemSpell(uint16 spell_id);
bool IsSummonSkeletonSpell(uint16 spell_id);
bool IsSummonPetSpell(uint16 spell_id);
bool IsSummonPCSpell(uint16 spell_id);
bool IsPetSpell(uint16 spell_id);
bool IsCharmSpell(uint16 spell_id);
bool IsResurrectionSicknessSpell(uint16 spell_id);
bool IsBlindSpell(uint16 spell_id);
bool IsHealthSpell(uint16 spell_id);
bool IsCastTimeReductionSpell(uint16 spell_id);
bool IsIncreaseDurationSpell(uint16 spell_id);
bool IsManaCostReductionSpell(uint16 spell_id);
bool IsIncreaseRangeSpell(uint16 spell_id);
bool IsImprovedHealingSpell(uint16 spell_id);
bool IsImprovedDamageSpell(uint16 spell_id);
bool IsAEDurationSpell(uint16 spell_id);
bool IsPureNukeSpell(uint16 spell_id);
bool IsAENukeSpell(uint16 spell_id);
bool IsPBAENukeSpell(uint16 spell_id);
bool IsAERainNukeSpell(uint16 spell_id);
bool IsAnyNukeOrStunSpell(uint16 spell_id);
bool IsAnyAESpell(uint16 spell_id);
bool IsAESpell(uint16 spell_id);
bool IsPBAESpell(uint16 spell_id);
bool IsAERainSpell(uint16 spell_id);
bool IsPartialResistableSpell(uint16 spell_id);
bool IsResistableSpell(uint16 spell_id);
bool IsGroupSpell(uint16 spell_id);
bool IsTGBCompatibleSpell(uint16 spell_id);
bool IsBardSong(uint16 spell_id);
bool IsEffectInSpell(uint16 spell_id, int effect_id);
uint16 GetSpellTriggerSpellID(uint16 spell_id, int effect_id);
bool IsBlankSpellEffect(uint16 spell_id, int effect_index);
bool IsValidSpell(uint32 spell_id);
bool IsSummonSpell(uint16 spell_id);
bool IsDamageSpell(uint16 spell_id);
bool IsAnyDamageSpell(uint16 spell_id);
bool IsDamageOverTimeSpell(uint16 spell_i);
bool IsFearSpell(uint16 spell_id);
bool IsCureSpell(uint16 spell_id);
bool IsHarmTouchSpell(uint16 spell_id);
int GetSpellEffectIndex(uint16 spell_id, int effect_id);
uint8 GetSpellMinimumLevel(uint16 spell_id);
uint8 GetSpellLevel(uint16 spell_id, uint8 class_id);
int CalcBuffDuration_formula(int level, int formula, int duration);
int32 CalculatePoisonCounters(uint16 spell_id);
int32 CalculateDiseaseCounters(uint16 spell_id);
int32 CalculateCurseCounters(uint16 spell_id);
int32 CalculateCorruptionCounters(uint16 spell_id);
int32 CalculateCounters(uint16 spell_id);
bool IsDisciplineBuff(uint16 spell_id);
bool IsDiscipline(uint16 spell_id);
bool IsCombatSkill(uint16 spell_id);
bool IsResurrectionEffects(uint16 spell_id);
int8 GetSpellResurrectionSicknessCheck(uint16 spell_id_one, uint16 spell_id_two);
bool IsRuneSpell(uint16 spell_id);
bool IsMagicRuneSpell(uint16 spell_id);
bool IsManaTapSpell(uint16 spell_id);
bool IsAllianceSpell(uint16 spell_id);
bool IsDeathSaveSpell(uint16 spell_id);
bool IsFullDeathSaveSpell(uint16 spell_id);
bool IsPartialDeathSaveSpell(uint16 spell_id);
bool IsShadowStepSpell(uint16 spell_id);
bool IsSuccorSpell(uint16 spell_id);
bool IsTeleportSpell(uint16 spell_id);
bool IsTranslocateSpell(uint16 spell_id);
bool IsGateSpell(uint16 spell_id);
bool IsIllusionSpell(uint16 spell_id);
bool IsLDoNObjectSpell(uint16 spell_id);
int GetSpellResistType(uint16 spell_id);
int GetSpellTargetType(uint16 spell_id);
bool IsHealOverTimeSpell(uint16 spell_id);
bool IsCompleteHealSpell(uint16 spell_id);
bool IsFastHealSpell(uint16 spell_id);
bool IsVeryFastHealSpell(uint16 spell_id);
bool IsRegularSingleTargetHealSpell(uint16 spell_id);
bool IsRegularPetHealSpell(uint16 spell_id);
bool IsRegularGroupHealSpell(uint16 spell_id);
bool IsGroupCompleteHealSpell(uint16 spell_id);
bool IsGroupHealOverTimeSpell(uint16 spell_id);
bool IsAnyHealSpell(uint16 spell_id);
bool IsAnyBuffSpell(uint16 spell_id);
bool IsDispelSpell(uint16 spell_id);
bool IsEscapeSpell(uint16 spell_id);
bool IsDebuffSpell(uint16 spell_id);
bool IsHateReduxSpell(uint16 spell_id);
bool IsResistDebuffSpell(uint16 spell_id);
bool IsSelfConversionSpell(uint16 spell_id);
bool IsBuffSpell(uint16 spell_id);
bool IsPersistDeathSpell(uint16 spell_id);
bool IsSuspendableSpell(uint16 spell_id);
bool IsCastOnFadeDurationSpell(uint16 spell_id);
bool IsDistanceModifierSpell(uint16 spell_id);
int GetSpellPartialMeleeRuneReduction(uint16 spell_id);
int GetSpellPartialMagicRuneReduction(uint16 spell_id);
int GetSpellPartialMeleeRuneAmount(uint16 spell_id);
int GetSpellPartialMagicRuneAmount(uint16 spell_id);
bool IsNoDetrimentalSpellAggroSpell(uint16 spell_id);
bool IsStackableDOT(uint16 spell_id);
bool IsBardOnlyStackEffect(int effect_id);
bool IsCastWhileInvisibleSpell(uint16 spell_id);
bool IsEffectIgnoredInStacking(int effect_id);
bool IsFocusLimit(int effect_id);
bool IsTargetRequiredForSpell(uint16 spell_id);
bool IsVirusSpell(uint16 spell_id);
int GetSpellViralMinimumSpreadTime(uint16 spell_id);
int GetSpellViralMaximumSpreadTime(uint16 spell_id);
int GetSpellViralSpreadRange(uint16 spell_id);
bool IsInstrumentModifierAppliedToSpellEffect(uint16 spell_id, int effect_id);
bool IsPulsingBardSong(uint16 spell_id);
int GetSpellProcLimitTimer(uint16 spell_id, int proc_type);
bool IsCastNotStandingSpell(uint16 spell_id);
int GetSpellEffectDescriptionNumber(uint16 spell_id);
DmgShieldType GetDamageShieldType(uint16 spell_id, int damage_shield_type = 0);
bool IsRestAllowedSpell(uint16 spell_id);
int GetSpellNimbusEffect(uint16 spell_id);
int GetSpellFuriousBash(uint16 spell_id);
bool IsShortDurationBuff(uint16 spell_id);
bool IsSpellUsableInThisZoneType(uint16 spell_id, uint8 zone_type);
const char *GetSpellName(uint16 spell_id);
int GetSpellStatValue(uint16 spell_id, const char* stat_identifier, uint8 slot = 0);
bool IsCastRestrictedSpell(uint16 spell_id);
bool IsAegolismSpell(uint16 spell_id);
bool AegolismStackingIsSymbolSpell(uint16 spell_id);
bool AegolismStackingIsArmorClassSpell(uint16 spell_id);
int8 SpellEffectsCount(uint16 spell_id);
bool IsLichSpell(uint16 spell_id);
bool IsInstantHealSpell(uint32 spell_id);
bool IsResurrectSpell(uint16 spell_id);
bool RequiresStackCheck(uint16 spell_type);
bool IsResistanceBuffSpell(uint16 spell_id);
bool IsResistanceOnlySpell(uint16 spell_id);
bool IsDamageShieldOnlySpell(uint16 spell_id);
bool IsDamageShieldAndResistSpell(uint16 spell_id);
bool IsHateSpell(uint16 spell_id);
bool IsDisciplineTome(const EQ::ItemData* item);

#endif
