void PlayerbotDruidAI::LoadSpells() {
    PlayerbotAI *ai = GetAI();
    if (!ai) return;
#pragma region SpellId Fill
    // Balance Spells
    MOONFIRE = ai->getSpellIdExact("Moonfire"); //attacks
    WRATH = ai->getSpellIdExact("Wrath");
    STARFIRE = ai->getSpellIdExact("Starfire");
    STARFALL = ai->getSpellIdExact("Starfall");
    FORCE_OF_NATURE = ai->getSpellIdExact("Force of Nature");
    TYPHOON = ai->getSpellIdExact("Typhoon");
    HURRICANE = ai->getSpellIdExact("Hurricane");
    INSECT_SWARM = ai->getSpellIdExact("Insect Swarm");

    CYCLONE = ai->getSpellIdExact("Cyclone");
    ROOTS = ai->getSpellIdExact("Entangling Roots");
    NATURES_GRASP = ai->getSpellIdExact("Nature's Grasp");

    HIBERNATE = ai->getSpellIdExact("Hibernate");
    FAERIE_FIRE = ai->getSpellIdExact("Faerie Fire");


    // Bear Form Spells
    MAUL = ai->getSpellIdExact("Maul");
    BASH = ai->getSpellIdExact("Bash");
    LACERATE = ai->getSpellIdExact("Lacerate");
    MANGLE_BEAR = ai->getSpellIdExact("Mangle (Bear)");
    SWIPE_BEAR = ai->getSpellIdExact("Swipe (Bear)");

    DEMORALIZING_ROAR = ai->getSpellIdExact("Demoralizing Roar");
    GROWL = ai->getSpellIdExact("Growl");
    CHALLENGING_ROAR = ai->getSpellIdExact("Challenging Roar");

    ENRAGE = ai->getSpellIdExact("Enrage");
    FERAL_CHARGE_BEAR = ai->getSpellIdExact("Feral Charge - Bear");
    FRENZIED_REGENERATION = ai->getSpellIdExact("Frenzied Regeneration");


    //Cat Attack type's
    RAKE = ai->getSpellIdExact("Rake"); //40 energy
    CLAW = ai->getSpellIdExact("Claw"); //45
    MANGLE_CAT = ai->getSpellIdExact("Mangle (Cat)"); //45
    SHRED = ai->getSpellIdExact("Shred");

    RIP = ai->getSpellIdExact("Rip"); //30
    FEROCIOUS_BITE = ai->getSpellIdExact("Ferocious Bite"); //35
    SAVAGE_ROAR = ai->getSpellIdExact("Savage Roar");
    MAIM = ai->getSpellIdExact("Maim"); //35

    FERAL_CHARGE_CAT = ai->getSpellIdExact("Feral Charge - Cat");
    COWER = ai->getSpellIdExact("Cower"); //20
    TIGERS_FURY = ai->getSpellIdExact("Tiger's Fury");

    // Feral General
    BERSERK = ai->getSpellIdExact("Berserk");
    FAERIE_FIRE_FERAL = ai->getSpellIdExact("Faerie Fire (Feral)"); //debuffs

    //buffs
    MARK_OF_THE_WILD = ai->getSpellIdExact("Mark of the Wild"); //buffs
    GIFT_OF_THE_WILD = ai->getSpellIdExact("Gift of the Wild");
    THORNS = ai->getSpellIdExact("Thorns");
    SURVIVAL_INSTINCTS = ai->getSpellIdExact("Survival Instincts");

    // Restoration Spells
    LIFEBLOOM = ai->getSpellIdExact("Lifebloom");
    REJUVENATION = ai->getSpellIdExact("Rejuvenation"); //heals
    REGROWTH = ai->getSpellIdExact("Regrowth");
    NOURISH = ai->getSpellIdExact("Nourish");
    SWIFTMEND = ai->getSpellIdExact("Swiftmend");
    HEALING_TOUCH = ai->getSpellIdExact("Healing Touch");
    INNERVATE = ai->getSpellIdExact("Innervate");
    WILD_GROWTH = ai->getSpellIdExact("Wild Growth");
    TRANQUILITY = ai->getSpellIdExact("Tranquility");
    NATURES_SWIFTNESS = ai->getSpellIdExact("Nature's Swiftness");

    CURE_POISON = ai->getSpellIdExact("Abolish Poison");
    if (!CURE_POISON) CURE_POISON = ai->getSpellIdExact("Cure Poison");

    REBIRTH    = ai->getSpellIdExact("Rebirth");
    REVIVE = ai->getSpellIdExact("Revive");

    BARKSKIN = ai->getSpellIdExact("Barkskin");

    //Druid Forms
    BEAR_FORM = ai->getSpellIdExact("Dire Bear Form");
    if (!BEAR_FORM) BEAR_FORM = ai->getSpellIdExact("Bear Form");
    CAT_FORM = ai->getSpellIdExact("Cat Form");
    MOONKIN_FORM = ai->getSpellIdExact("Moonkin Form");
    TREE_OF_LIFE_FORM = ai->getSpellIdExact("Tree of Life"); //33891;//learning spell has higher id..
    AQUATIC_FORM = ai->getSpellIdExact("Aquatic Form");
    TRAVEL_FORM = ai->getSpellIdExact("Travel Form");
    FLIGHT_FORM = ai->getSpellIdExact("Swift Flight Form");
    if (!FLIGHT_FORM) FLIGHT_FORM = ai->getSpellIdExact("Flight Form");


    TALENT_BALANCE    = MOONKIN_FORM;
    TALENT_RESTO    = SWIFTMEND;
    TALENT_FERAL    = MANGLE_CAT;

    uint8 talentCounter = 0;
    if (TALENT_BALANCE) talentCounter++;
    if (TALENT_FERAL) talentCounter++;
    if (TALENT_RESTO) talentCounter++;
    if (talentCounter > 1) { TALENT_BALANCE = 0; TALENT_RESTO = 0; TALENT_FERAL = 0; } //Unreliable Talent detection.
#pragma endregion
}
void PlayerbotShamanAI::LoadSpells() {
    PlayerbotAI *ai = GetAI();
    if (!ai) return;
    #pragma region SpellId Fill
    //totems
    HEALING_STREAM_TOTEM = ai->getSpellIdExact("Healing Stream Totem");
    MANA_SPRING_TOTEM = ai->getSpellIdExact("Mana Spring Totem");
    MANA_TIDE_TOTEM = ai->getSpellIdExact("Mana Tide Totem");
    CLEANSING_TOTEM = ai->getSpellIdExact("Cleansing Totem");
    FIRE_RESISTANCE_TOTEM = ai->getSpellIdExact("Fire Resistance Totem");

    WINDFURY_TOTEM = ai->getSpellIdExact("Windfury Totem");
    WRATH_OF_AIR_TOTEM = ai->getSpellIdExact("Wrath of Air Totem");
    GROUNDING_TOTEM = ai->getSpellIdExact("Grounding Totem");
    NATURE_RESISTANCE_TOTEM = ai->getSpellIdExact("Nature Resistance Totem");

    STRENGTH_OF_EARTH_TOTEM = ai->getSpellIdExact("Strength of Earth Totem");
    EARTHBIND_TOTEM = ai->getSpellIdExact("Earthbind Totem");
    STONESKIN_TOTEM = ai->getSpellIdExact("Stoneskin Totem");
    STONECLAW_TOTEM = ai->getSpellIdExact("Stoneclaw Totem");
    TREMOR_TOTEM = ai->getSpellIdExact("Tremor Totem");
    EARTH_ELEMENTAL_TOTEM = ai->getSpellIdExact("Earth Elemental Totem");

    FLAMETONGUE_TOTEM = ai->getSpellIdExact("Flametongue Totem");
    TOTEM_OF_WRATH = ai->getSpellIdExact("Totem of Wrath");
    SEARING_TOTEM = ai->getSpellIdExact("Searing Totem");
    MAGMA_TOTEM = ai->getSpellIdExact("Magma Totem");
    FIRE_ELEMENTAL_TOTEM = ai->getSpellIdExact("Fire Elemental Totem");
    FROST_RESISTANCE_TOTEM = ai->getSpellIdExact("Frost Resistance Totem");

    TOTEMIC_RECALL = ai->getSpellIdExact("Totemic Recall");
    CALL_OF_THE_ELEMENTS = ai->getSpellIdExact("Call of the Elements");
    CALL_OF_THE_ANCESTORS = ai->getSpellIdExact("Call of the Ancestors");
    CALL_OF_THE_SPIRITS = ai->getSpellIdExact("Call of the Spirits");

    //restoration
    HEAL = ai->getSpellIdExact("Healing Wave");
    LESSER_HEAL = ai->getSpellIdExact("Lesser Healing Wave");
    CHAIN_HEAL = ai->getSpellIdExact("Chain Heal");
    RIPTIDE = ai->getSpellIdExact("Riptide");
    ANCESTRAL_SPIRIT = ai->getSpellIdExact("Ancestral Spirit");
    CLEANSE_SPIRIT = ai->getSpellIdExact("Cleanse Spirit");
    if (CLEANSE_SPIRIT) CLEANSE_SPIRIT = ai->getSpellIdExact("Cure Toxins");

    //offensive spells
    LIGHTNING_BOLT = ai->getSpellIdExact("Lightning Bolt");
    CHAIN_LIGHTNING = ai->getSpellIdExact("Chain Lightning");
    FIRE_NOVA = ai->getSpellIdExact("Fire Nova");
    THUNDERSTORM = ai->getSpellIdExact("Thunderstorm");
    LAVA_BURST = ai->getSpellIdExact("Lava Burst");
    EARTH_SHOCK = ai->getSpellIdExact("Earth Shock");
    WIND_SHEAR = ai->getSpellIdExact("Wind Shear");
    FLAME_SHOCK = ai->getSpellIdExact("Flame Shock");
    FROST_SHOCK = ai->getSpellIdExact("Frost Shock");
    PURGE = ai->getSpellIdExact("Purge");
    HEX  = ai->getSpellIdExact("Hex");

    //buffs
    LIGHTNING_SHIELD = ai->getSpellIdExact("Lightning Shield");
    WATER_SHIELD = ai->getSpellIdExact("Water Shield");
    EARTH_SHIELD = ai->getSpellIdExact("Earth Shield");
    HEROISM = ai->getSpellIdExact("Heroism");
    if (HEROISM) HEROISM = ai->getSpellIdExact("Bloodlust");
    ELEMENTAL_MASTERY = ai->getSpellIdExact("Elemental Mastery");
    NATURES_SWIFTNESS = ai->getSpellIdExact("Nature's Swiftness");

    WINDFURY_WEAPON = ai->getSpellIdExact("Windfury Weapon");
    FLAMETONGUE_WEAPON = ai->getSpellIdExact("Flametongue Weapon");
    FROSTBRAND_WEAPON = ai->getSpellIdExact("Frostbrand Weapon");
    ROCKBITER_WEAPON = ai->getSpellIdExact("Rockbiter Weapon");
    EARTHLIVING_WEAPON = ai->getSpellIdExact("Earthliving Weapon");

    WATER_BREATHING = ai->getSpellIdExact("Water Breathing");
    WATER_WALKING = ai->getSpellIdExact("Water Walking");

    //melee
    LAVA_LASH = ai->getSpellIdExact("Lava Lash");
    STORMSTRIKE = ai->getSpellIdExact("Stormstrike");
    SHAMANISTIC_RAGE = ai->getSpellIdExact("Shamanistic Rage");
    FERAL_SPIRIT = ai->getSpellIdExact("Feral Spirit");

    GHOST_WOLF = ai->getSpellIdExact("Ghost Wolf");

    EXHAUSTION = 57723; // heroism debuff
    SATED = 57724; // bloodlust debuff
    //MAELSTROM_WEAPON = 0; // We want the triggered aura, not the talent spell
    uint32 mwtrigger = ai->getSpellIdExact("Maelstrom Weapon",true);
    if (mwtrigger)
    {
        SpellEntry const *mwtSpell = GetSpellStore()->LookupEntry(mwtrigger);
        if (mwtSpell && mwtSpell->EffectTriggerSpell[0] > 0) MAELSTROM_WEAPON = mwtSpell->EffectTriggerSpell[0];
    }

    TALENT_ELEMENTAL = ELEMENTAL_MASTERY;
    TALENT_ENHANCEMENT = STORMSTRIKE;
    TALENT_RESTO = EARTH_SHIELD;

    uint8 talentCounter = 0;
    if (TALENT_ELEMENTAL) talentCounter++;
    if (TALENT_ENHANCEMENT) talentCounter++;
    if (TALENT_RESTO) talentCounter++;
    //if (talentCounter > 1) { TALENT_ELEMENTAL = 0; TALENT_ENHANCEMENT = 0; TALENT_RESTO = 0; } //Unreliable Talent detection.
    #pragma endregion
}
示例#3
0
void PlayerbotRogueAI::LoadSpells() {
    PlayerbotAI *ai = GetAI();
    if (!ai) return;
    #pragma region SpellId Fill
    //Damage spells
    BACKSTAB = ai->getSpellIdExact("Backstab");
    SINISTER_STRIKE = ai->getSpellIdExact("Sinister Strike");
    MUTILATE = ai->getSpellIdExact("Mutilate");
    HEMORRHAGE = ai->getSpellIdExact("Hemorrhage");
    GHOSTLY_STRIKE = ai->getSpellIdExact("Ghostly Strike");
    RIPOSTE = ai->getSpellIdExact("Riposte");
    SHIV = ai->getSpellIdExact("Shiv");
    FAN_OF_KNIVES = ai->getSpellIdExact("Fan of Knives");
    
    //Finishing Moves
    EVISCERATE = ai->getSpellIdExact("Eviscerate");
    RUPTURE = ai->getSpellIdExact("Rupture");
    KIDNEY_SHOT = ai->getSpellIdExact("Kidney Shot");
    ENVENOM = ai->getSpellIdExact("Envenom");
    SLICE_AND_DICE = ai->getSpellIdExact("Slice and Dice");
    EXPOSE_ARMOR = ai->getSpellIdExact("Expose Armor");
    DEADLY_THROW = ai->getSpellIdExact("Deadly Throw");
    
    //Buffs
    STEALTH = ai->getSpellIdExact("Stealth");
    VANISH = ai->getSpellIdExact("Vanish");
    EVASION = ai->getSpellIdExact("Evasion");
    CLOAK_OF_SHADOWS = ai->getSpellIdExact("Cloak of Shadows");
    SPRINT = ai->getSpellIdExact("Sprint");
    COLD_BLOOD = ai->getSpellIdExact("Cold Blood");
    HUNGER_FOR_BLOOD = ai->getSpellIdExact("Hunger for Blood");
    BLADE_FLURRY = ai->getSpellIdExact("Blade Flurry");
    ADRENALINE_RUSH = ai->getSpellIdExact("Adrenaline Rush");
    KILLING_SPREE = ai->getSpellIdExact("Killing Spree");
    SHADOW_DANCE = ai->getSpellIdExact("Shadow Dance");
    
    //Openers
    CHEAP_SHOT = ai->getSpellIdExact("Cheap Shot");
    GARROTE = ai->getSpellIdExact("Garrote");
    AMBUSH = ai->getSpellIdExact("Ambush");
    
    //Others
    GOUGE = ai->getSpellIdExact("Gouge");
    BLIND = ai->getSpellIdExact("Blind");
    DISMANTLE = ai->getSpellIdExact("Dismantle");
    SAP = ai->getSpellIdExact("Sap");
    KICK = ai->getSpellIdExact("Kick");
    PREPARATION = ai->getSpellIdExact("Preparation");
    PREMEDITATION = ai->getSpellIdExact("Premeditation");
    SHADOWSTEP = ai->getSpellIdExact("Shadowstep");
    FEINT = ai->getSpellIdExact("Feint");
    TRICKS_OF_THE_TRADE = ai->getSpellIdExact("Tricks of the Trade");

    SHOOT = ai->getSpellIdExact("Shoot");
    THROW = ai->getSpellIdExact("Throw");

    TALENT_ASSASSINATION = MUTILATE;
    TALENT_COMBAT = ADRENALINE_RUSH;
    TALENT_SUBTELTY = PREMEDITATION;

    //uint8 talentCounter = 0;
    //if (TALENT_ASSASSINATION) talentCounter++;
    //if (TALENT_COMBAT) talentCounter++;
    //if (TALENT_SUBTELTY) talentCounter++;
    //if (talentCounter > 1) { TALENT_ASSASSINATION = 0; TALENT_COMBAT = 0; TALENT_SUBTELTY = 0; } //Unreliable Talent detection.
#pragma endregion
}
void PlayerbotMageAI::LoadSpells() {
    PlayerbotAI *ai = GetAI();
    if (!ai) return;
    #pragma region SpellId Fill
    //arcane
    ARCANE_MISSILES = ai->getSpellIdExact("Arcane Missiles");
    ARCANE_EXPLOSION = ai->getSpellIdExact("Arcane Explosion");
    ARCANE_BLAST = ai->getSpellIdExact("Arcane Blast");
    ARCANE_BARRAGE = ai->getSpellIdExact("Arcane Barrage");


    //fire
    FIREBALL = ai->getSpellIdExact("Fireball");
    FROSTFIRE_BOLT = ai->getSpellIdExact("Frostfire Bolt");
    FIRE_BLAST = ai->getSpellIdExact("Fire Blast");
    FLAMESTRIKE = ai->getSpellIdExact("Flamestrike");
    BLAST_WAVE = ai->getSpellIdExact("Blastwave");
    SCORCH = ai->getSpellIdExact("Scorch");
    PYROBLAST = ai->getSpellIdExact("Pyroblast");
    LIVING_BOMB = ai->getSpellIdExact("Living Bomb");


    //cold
    FROSTBOLT = ai->getSpellIdExact("Frostbolt");
    FROST_NOVA = ai->getSpellIdExact("Frost Nova");
    ICE_LANCE = ai->getSpellIdExact("Ice Lance");
    BLIZZARD = ai->getSpellIdExact("Blizzard");
    CONE_OF_COLD = ai->getSpellIdExact("Cone of Cold");

    WATER_ELEMENTAL = ai->getSpellIdExact("Summon Water Elemental");


    // buffs
    FROST_ARMOR = ai->getSpellIdExact("Ice Armor");
    if (!FROST_ARMOR) FROST_ARMOR = ai->getSpellIdExact("Frost Armor");
    MAGE_ARMOR = ai->getSpellIdExact("Mage Armor");
    MOLTEN_ARMOR = ai->getSpellIdExact("Molten Armor");
    FIRE_WARD = ai->getSpellIdExact("Fire Ward");
    FROST_WARD = ai->getSpellIdExact("Frost Ward");
    MANA_SHIELD = ai->getSpellIdExact("Mana Shield");
    ICE_BARRIER = ai->getSpellIdExact("Ice Barrier");
    POM = ai->getSpellIdExact("Presence of Mind");
    FOCUS_MAGIC = ai->getSpellIdExact("Focus Magic");
    ARCANE_POWER = ai->getSpellIdExact("Arance Power");
    COMBUSTION = ai->getSpellIdExact("Combustion");
    ICY_VEINS = ai->getSpellIdExact("Icy Veins");

    ARCANE_INTELLECT = ai->getSpellIdExact("Arcane Intellect");
    ARCANE_BRILLIANCE = ai->getSpellIdExact("Arcane Brilliance");
    DALARAN_INTELLECT = ai->getSpellIdExact("Dalaran Intellect");
    DALARAN_BRILLIANCE = ai->getSpellIdExact("Dalaran Brilliance");
    DAMPEN_MAGIC = ai->getSpellIdExact("Dampen Magic");
    AMPLIFY_MAGIC = ai->getSpellIdExact("Amplify Magic");


    //CC
    POLYMORPH = ai->getSpellIdExact("Polymorph");
    DRAGONS_BREATH = ai->getSpellIdExact("Dragon's Breath");
    DEEP_FREEZE = ai->getSpellIdExact("Deep Freeze");


    //other
    CONJURE_REFRESHMENT = ai->getSpellIdExact("Conjure Refreshment");
    CONJURE_WATER = ai->getSpellIdExact("Conjure Water");
    CONJURE_FOOD = ai->getSpellIdExact("Conjure Food");
    CONJURE_MANA_GEM = ai->getSpellIdExact("Conjure Mana Gem");
    MIRROR_IMAGE = ai->getSpellIdExact("Mirror Image");
    BLINK = ai->getSpellIdExact("Blink");
    ICE_BLOCK = ai->getSpellIdExact("Ice Block");
    INVISIBILITY = ai->getSpellIdExact("Invisibility");
    EVOCATION = ai->getSpellIdExact("Evocation");
    REMOVE_CURSE = ai->getSpellIdExact("Remove Curse");
    COUNTER_SPELL = ai->getSpellIdExact("Counterspell");
    SLOW = ai->getSpellIdExact("Slow");

    //Special
    P_BRAIN_FREEZE = 57761; //Brain Freeze proc
    P_FIRESTARTER = 54741; //Firestarter proc
    P_HOT_STREAK = 48108; //Hot Sreak proc
    P_ARCANE_BLAST = 36032; //Arcane blast proc
	P_MISSILE_BARRAGE = 54490; //Missle Barrage proc
	P_FINGERS_OF_FROST = 44545; //Fingers of Frost proc
	IMP_SCORCH = 12873; //IMP SCORCH

    SHOOT = ai->getSpellIdExact("Shoot");

    TALENT_ARCANE = ARCANE_BARRAGE;
    TALENT_FIRE = COMBUSTION;
    TALENT_FROST = ICE_BARRIER;

    uint8 talentCounter = 0;
    if (TALENT_ARCANE) talentCounter++;
    if (TALENT_FIRE) talentCounter++;
    if (TALENT_FROST) talentCounter++;
    //if (talentCounter > 1) { TALENT_ARCANE = 0; TALENT_FIRE = 0; TALENT_FROST = 0; } //Unreliable Talent detection.
    #pragma endregion
}
void PlayerbotPaladinAI::LoadSpells() {
    PlayerbotAI *ai = GetAI();
    if (!ai) return;
    #pragma region SpellId Fill
    //heals
    FLASH_OF_LIGHT = ai->getSpellIdExact("Flash of Light");
    HOLY_LIGHT = ai->getSpellIdExact("Holy Light");
    HOLY_SHOCK = ai->getSpellIdExact("Holy Shock");
    CLEANSE = ai->getSpellIdExact("Cleanse");
    if (!CLEANSE) CLEANSE = ai->getSpellIdExact("Purify");
    LOH = ai->getSpellIdExact("Lay on Hands");
    SACRED_SHIELD = ai->getSpellIdExact("Sacred Shield");
    BEACON_OF_LIGHT = ai->getSpellIdExact("Beacon of Light");
    DIVINE_FAVOR = ai->getSpellIdExact("Divine Favor");
    REDEMPTION = ai->getSpellIdExact("Redemption");

    //Damages
    JOL = ai->getSpellIdExact("Judgement of Light");
    JOW = ai->getSpellIdExact("Judgement of Wisdom");
	JOJ = ai->getSpellIdExact("Judgement of Justice");
    HAMMER_OF_WRATH = ai->getSpellIdExact("Hammer of Wrath");
    EXORCISM = ai->getSpellIdExact("Exorcism");
    HOLY_WRATH = ai->getSpellIdExact("Holy Wrath");
    CONSECRATION = ai->getSpellIdExact("Consecration");
    AVENGERS_SHIELD = ai->getSpellIdExact("Avenger's Shield");
    SHIELD_OF_RIGHTEOUSNESS = ai->getSpellIdExact("Shield of Righteousness");
    HOTR = ai->getSpellIdExact("Hammer of the Righteous");
    CRUSADER_STRIKE = ai->getSpellIdExact("Crusader Strike");
    DIVINE_STORM = ai->getSpellIdExact("Divine Storm");

    //CC
    HAMMER_OF_JUSTICE = ai->getSpellIdExact("Hammer of Justice");
    REPENTANCE = ai->getSpellIdExact("Repentance");

    //Self buffs
    SOL = ai->getSpellIdExact("Seal of Light");
    SOW = ai->getSpellIdExact("Seal of Wisdom");
    SOR = ai->getSpellIdExact("Seal of Righteousness");
    SOC = ai->getSpellIdExact("Seal of Command");
	SOV = ai->getSpellIdExact("Seal of Vengeance");
	if (!SOV) SOV = ai->getSpellIdExact("Seal of Corruption");
    DIVINE_PLEA = ai->getSpellIdExact("Divine Plea");
    HOLY_SHIELD = ai->getSpellIdExact("Holy Shield");
    RIGHTEOUS_FURY = ai->getSpellIdExact("Righteous Fury");
    DIVINE_SHIELD = ai->getSpellIdExact("Divine Shield");
    if (!DIVINE_SHIELD) DIVINE_SHIELD = ai->getSpellIdExact("Divine Protection");
    AVENGING_WRATH = ai->getSpellIdExact("Avenging Wrath");

    //AURAS
    DEVOTION_AURA = ai->getSpellIdExact("Devotion Aura");
    RETRIBUTION_AURA = ai->getSpellIdExact("Retribution Aura");
    CONCENTRATION_AURA = ai->getSpellIdExact("Concentration Aura");
    FIRE_AURA = ai->getSpellIdExact("Fire Resistance Aura");
    FROST_AURA = ai->getSpellIdExact("Frost Resistance Aura");
    SHADOW_AURA = ai->getSpellIdExact("Shadow Resistance Aura");
    CRUSADER_AURA = ai->getSpellIdExact("Crusader Aura");

    //Blessings
    BOW = ai->getSpellIdExact("Blessing of Wisdom");
    BOM = ai->getSpellIdExact("Blessing of Might");
    BOS = ai->getSpellIdExact("Blessing of Sanctuary");
    BOK = ai->getSpellIdExact("Blessing of Kings");
    GBOW = ai->getSpellIdExact("Greater Blessing of Wisdom");
    GBOM = ai->getSpellIdExact("Greater Blessing of Might");
    GBOS = ai->getSpellIdExact("Greater Blessing of Sanctuary");
    GBOK = ai->getSpellIdExact("Greater Blessing of Kings");

    //Hands
    HOF = ai->getSpellIdExact("Hand of Freedom");
    HOR = ai->getSpellIdExact("Hand of Reckoning");
    HOS = ai->getSpellIdExact("Hand of Salvation");
    HOP = ai->getSpellIdExact("Hand of Protection");
    DIVINE_SACRIFICE = ai->getSpellIdExact("Divine Sacrifice");

    //Taunt
    RIGHTEOUS_DEFENSE = ai->getSpellIdExact("Righteous Defense");

    FORBEARANCE = 25771;
	AOW = 53488;

    TALENT_RETRI = CRUSADER_STRIKE;
    TALENT_PROT = HOLY_SHIELD;
    TALENT_HOLY = HOLY_SHOCK;

    uint8 talentCounter = 0;
    if (TALENT_RETRI) talentCounter++;
    if (TALENT_PROT) talentCounter++;
    if (TALENT_HOLY) talentCounter++;
    //if (talentCounter > 1) { TALENT_RETRI = 0; TALENT_PROT = 0; TALENT_HOLY = 0; } //Unreliable Talent detection.

    #pragma endregion
}
void PlayerbotHunterAI::LoadSpells() {
    PlayerbotAI *ai = GetAI();
    if (!ai) return;
    #pragma region SpellId Fill
    // PET CONTROL
    PET_SUMMON = ai->getSpellIdExact("Call Pet");
    PET_DISMISS = ai->getSpellIdExact("Dismiss Pet");
    PET_REVIVE = ai->getSpellIdExact("Revive Pet");
    PET_MEND = ai->getSpellIdExact("Mend Pet");
    PET_FEED = 1539; //ai->getSpellIdExact("Feed Pet");
    KILL_COMMAND = ai->getSpellIdExact("Kill Command");
    INTIMIDATION = ai->getSpellIdExact("Intimidation");
    BESTIAL_WRATH = ai->getSpellIdExact("Bestial Wrath");

    // PET SPELL (master does not have these spells anymore)
    GROWL = ai->getSpellIdExact("Growl");
    COWER = ai->getSpellIdExact("Cower");
    BAD_ATTITUDE = ai->getSpellIdExact("Bad Attitude");
    SONIC_BLAST = ai->getSpellIdExact("Sonic Blast");
    NETHER_SHOCK = ai->getSpellIdExact("Nether Shock");
    DEMORALIZING_SCREECH = ai->getSpellIdExact("Demoralizing Screech");

    // RANGED ATTACK
    AUTO_SHOT = ai->getSpellIdExact("Auto Shot");
    ARCANE_SHOT = ai->getSpellIdExact("Arcane Shot");
    EXPLOSIVE_SHOT = ai->getSpellIdExact("Explosive Shot");
    STEADY_SHOT = ai->getSpellIdExact("Steady Shot");
    AIMED_SHOT = ai->getSpellIdExact("Aimed Shot");
    SCATTER_SHOT = ai->getSpellIdExact("Scatter Shot");
    KILL_SHOT = ai->getSpellIdExact("Kill Shot");
    CHIMERA_SHOT = ai->getSpellIdExact("Chimera Shot");
    CONCUSSIVE_SHOT = ai->getSpellIdExact("Concussive Shot");
    DISTRACTING_SHOT = ai->getSpellIdExact("Distracting Shot");
    SILENCING_SHOT = ai->getSpellIdExact("Silencing Shot");

    // STINGS
    SERPENT_STING = ai->getSpellIdExact("Serpent Sting");
    SCORPID_STING = ai->getSpellIdExact("Scorpid Sting");
    WYVERN_STING = ai->getSpellIdExact("Wyvern Sting");
    VIPER_STING = ai->getSpellIdExact("Viper Sting");

    // DEBUFF
    HUNTERS_MARK = ai->getSpellIdExact("Hunter's Mark");
    SCARE_BEAST = ai->getSpellIdExact("Scare Beast");

    //AOE
    VOLLEY = ai->getSpellIdExact("Volley");
    MULTI_SHOT = ai->getSpellIdExact("Multi Shot");

    //MELEE
    RAPTOR_STRIKE = ai->getSpellIdExact("Raptor Strike");
    WING_CLIP = ai->getSpellIdExact("Wing Clip");
    MONGOOSE_BITE = ai->getSpellIdExact("Mongoose Bite");
    COUNTERATTACK = ai->getSpellIdExact("Counterattack");

    //TRAP
    FREEZING_TRAP = ai->getSpellIdExact("Freezing Trap");
    IMMOLATION_TRAP = ai->getSpellIdExact("Immolation Trap");
    FROST_TRAP = ai->getSpellIdExact("Frost Trap");
    EXPLOSIVE_TRAP = ai->getSpellIdExact("Explosive Trap");
    SNAKE_TRAP = ai->getSpellIdExact("Snake Trap");
    ARCANE_TRAP = ai->getSpellIdExact("Arcane Trap");
    FREEZING_ARROW = ai->getSpellIdExact("Freezing Arrow");
    BLACK_ARROW = ai->getSpellIdExact("Black Arrow");

    //BUFF
    TRUESHOT_AURA = ai->getSpellIdExact("Trueshot Aura");
    DETERRENCE = ai->getSpellIdExact("Deterrence");
    FEIGN_DEATH = ai->getSpellIdExact("Feign Death");
    DISENGAGE = ai->getSpellIdExact("Disengage");
    RAPID_FIRE = ai->getSpellIdExact("Rapid Fire");
    READINESS = ai->getSpellIdExact("Readiness");
    MISDIRECTION = ai->getSpellIdExact("Misdirection");

    //ASPECT
    ASPECT_OF_THE_HAWK = ai->getSpellIdExact("Aspect of the Dragonhawk");
    ASPECT_OF_THE_MONKEY = ASPECT_OF_THE_HAWK;
    if (!ASPECT_OF_THE_HAWK) ASPECT_OF_THE_HAWK = ai->getSpellIdExact("Aspect of the Hawk");
    if (!ASPECT_OF_THE_MONKEY) ASPECT_OF_THE_MONKEY = ai->getSpellIdExact("Aspect of the Monkey");
    ASPECT_OF_THE_VIPER = ai->getSpellIdExact("Aspect of the Viper");

    TALENT_MM = TRUESHOT_AURA;
    TALENT_BM = BESTIAL_WRATH;
    TALENT_SURVIVAL = WYVERN_STING;

    uint8 talentCounter = 0;
    if (TALENT_MM) talentCounter++;
    if (TALENT_BM) talentCounter++;
    if (TALENT_SURVIVAL) talentCounter++;
    if (talentCounter > 1) { TALENT_MM = 0; TALENT_BM = 0; TALENT_SURVIVAL = 0; } //Unreliable Talent detection.

    #pragma endregion
}
void PlayerbotDeathKnightAI::LoadSpells(){
    PlayerbotAI *ai = GetAI();
    if (!ai) return;
    #pragma region SpellId Fill
    // Unholy
    PLAGUE_STRIKE = ai->getSpellIdExact("Plague Strike");
    DEATH_STRIKE = ai->getSpellIdExact("Death Strike");
    SCOURGE_STRIKE  = ai->getSpellIdExact("Scourge Strike");

    // Frost
    ICY_TOUCH = ai->getSpellIdExact("Icy Touch");
    OBLITERATE = ai->getSpellIdExact("Obliterate");

    // Blood
    BLOOD_STRIKE = ai->getSpellIdExact("Blood Strike");
    HEART_STRIKE  = ai->getSpellIdExact("Heart Strike");
    RUNE_TAP = ai->getSpellIdExact("Rune Tap");
    DARK_COMMAND = ai->getSpellIdExact("Dark Command");

    // AOE
    HOWLING_BLAST = ai->getSpellIdExact("Howling Blast");
    BLOOD_BOIL = ai->getSpellIdExact("Blood Boil");
    PESTILENCE = ai->getSpellIdExact("Pestilence");
    CORPSE_EXPLOSION = ai->getSpellIdExact("Corpse Explosion");
    DEATH_AND_DECAY = ai->getSpellIdExact("Death and Decay");

    // Rune attacks
    FROST_STRIKE = ai->getSpellIdExact("Frost Strike");
    DEATH_COIL = ai->getSpellIdExact("Death Coil");
    RUNE_STRIKE = ai->getSpellIdExact("Rune Strike");

    // CC Interrupt
    DEATH_GRIP = ai->getSpellIdExact("Death Grip");
    CHAINS_OF_ICE = ai->getSpellIdExact("Chains of Ice");
    MIND_FREEZE = ai->getSpellIdExact("Mind Freeze");
    HUNGERING_COLD = ai->getSpellIdExact("Hungering Cold");
    STRANGULATE = ai->getSpellIdExact("Strangulate");

    // Debuffs
    FROST_FEVER = 55095; //ai->getSpellIdExact("Frost Fever",true);
    BLOOD_PLAGUE = 55078; //ai->getSpellIdExact("Blood Plague",true);
    CRYPT_FEVER = ai->getSpellIdExact("Crypt Fever",true);
    EBON_PLAGUE = ai->getSpellIdExact("Ebon Plague",true);
    MARK_OF_BLOOD = ai->getSpellIdExact("Mark of Blood");

    // Buffs
    HORN_OF_WINTER = ai->getSpellIdExact("Horn of Winter");
    BONE_SHIELD = ai->getSpellIdExact("Bone Shield");
    VAMPIRIC_BLOOD = ai->getSpellIdExact("Vampiric Blood");
    HYSTERIA = ai->getSpellIdExact("Hysteria");
    UNBREAKABLE_ARMOR = ai->getSpellIdExact("Unbreakable Armor");
    ANTI_MAGIC_SHELL = ai->getSpellIdExact("Anti Magic Shell");
    ANTI_MAGIC_ZONE = ai->getSpellIdExact("Anti Magic Zone");
    ICEBOUND_FORTITUDE = ai->getSpellIdExact("Icebound Fortitude");
    EMPOWER_WEAPON = ai->getSpellIdExact("Empower Rune Weapon");
    LICHBORNE = ai->getSpellIdExact("Lichborne");

    // Summons
    RAISE_DEAD = ai->getSpellIdExact("Raise Dead");
    ARMY_OF_THE_DEAD = ai->getSpellIdExact("Army of the Dead");
    SUMMON_GARGOYLE = ai->getSpellIdExact("Summon Gargoyle");
    GHOUL_FRENZY = ai->getSpellIdExact("Ghoul Frenzy");
    DEATH_PACT = ai->getSpellIdExact("Death Pact");
    DANCING_WEAPON = ai->getSpellIdExact("Dancing Rune Weapon");

    // Presences
    BLOOD_PRESENCE = ai->getSpellIdExact("Blood Presence");
    FROST_PRESENCE = ai->getSpellIdExact("Frost Presence");
    UNHOLY_PRESENCE  = ai->getSpellIdExact("Unholy Presence");

    // Talent
    TALENT_BLOOD = HEART_STRIKE;
    TALENT_FROST = FROST_STRIKE;
    TALENT_UNHOLY = SCOURGE_STRIKE;

    uint8 talentCounter = 0;
    if (TALENT_BLOOD) talentCounter++;
    if (TALENT_FROST) talentCounter++;
    if (TALENT_UNHOLY) talentCounter++;
    if (talentCounter > 1) { TALENT_BLOOD = 0; TALENT_FROST = 0; TALENT_UNHOLY = 0; } //Unreliable Talent detection.
    #pragma endregion
}