void PlayerbotPriestAI::DoNextCombatManeuver(Unit *pTarget) { Unit* pVictim = pTarget->getVictim(); PlayerbotAI* ai = GetAI(); if (!ai) return; switch (ai->GetScenarioType()) { case PlayerbotAI::SCENARIO_PVP_DUEL: (ai->HasAura(SCREAM, *pTarget) && ai->GetHealthPercent() < 60 && ai->CastSpell(HEAL)) || ai->CastSpell(SHADOW_WORD_PAIN) || (ai->GetHealthPercent() < 80 && ai->CastSpell(RENEW)) || (ai->GetPlayerBot()->GetDistance(pTarget) <= 5 && ai->CastSpell(SCREAM)) || ai->CastSpell(MIND_BLAST) || (ai->GetHealthPercent() < 50 && ai->CastSpell(GREATER_HEAL)) || ai->CastSpell(SMITE); return; default: break; } // ------- Non Duel combat ---------- Player *m_bot = GetPlayerBot(); Group *m_group = m_bot->GetGroup(); bool meleeReach = m_bot->CanReachWithMeleeAttack(pTarget); if (ai->GetCombatStyle() != PlayerbotAI::COMBAT_RANGED && !meleeReach) ai->SetCombatStyle(PlayerbotAI::COMBAT_RANGED); // if in melee range OR can't shoot OR have no ranged (wand) equipped else if (ai->GetCombatStyle() != PlayerbotAI::COMBAT_MELEE && (meleeReach || SHOOT == 0 || !m_bot->GetWeaponForAttack(RANGED_ATTACK, true, true)) && !ai->IsHealer()) ai->SetCombatStyle(PlayerbotAI::COMBAT_MELEE); if (SHOOT > 0 && ai->GetCombatStyle() == PlayerbotAI::COMBAT_RANGED && !m_bot->FindCurrentSpellBySpellId(SHOOT)) ai->CastSpell(SHOOT, *pTarget); //ai->TellMaster( "started auto shot." ); else if (SHOOT > 0 && m_bot->FindCurrentSpellBySpellId(SHOOT)) m_bot->InterruptNonMeleeSpells(true, SHOOT); // Heal myself if (ai->GetHealthPercent() < 15 && FADE > 0 && !m_bot->HasAura(FADE, EFFECT_INDEX_0)) { ai->TellMaster("I'm casting fade."); ai->CastSpell(FADE, *m_bot); } else if (ai->GetHealthPercent() < 25 && POWER_WORD_SHIELD > 0 && !m_bot->HasAura(POWER_WORD_SHIELD, EFFECT_INDEX_0)) { ai->TellMaster("I'm casting pws on myself."); ai->CastSpell(POWER_WORD_SHIELD); } else if (ai->GetHealthPercent() < 35 && DESPERATE_PRAYER > 0) { ai->TellMaster("I'm casting desperate prayer."); ai->CastSpell(DESPERATE_PRAYER, *m_bot); } else if (ai->GetHealthPercent() < 80) HealTarget (m_bot); // Heal master uint32 masterHP = GetMaster()->GetHealth() * 100 / GetMaster()->GetMaxHealth(); if (GetMaster()->isAlive()) { if (masterHP < 25 && POWER_WORD_SHIELD > 0 && !GetMaster()->HasAura(POWER_WORD_SHIELD, EFFECT_INDEX_0)) ai->CastSpell(POWER_WORD_SHIELD, *(GetMaster())); else if (masterHP < 80) HealTarget (GetMaster()); } // Heal group if (m_group) { Group::MemberSlotList const& groupSlot = m_group->GetMemberSlots(); for (Group::member_citerator itr = groupSlot.begin(); itr != groupSlot.end(); itr++) { Player *m_groupMember = sObjectMgr.GetPlayer(itr->guid); if (!m_groupMember || !m_groupMember->isAlive()) continue; uint32 memberHP = m_groupMember->GetHealth() * 100 / m_groupMember->GetMaxHealth(); if (memberHP < 25) HealTarget(m_groupMember); } } // Damage Spells switch (SpellSequence) { case SPELL_HOLY: if (SMITE > 0 && ai->In_Reach(pTarget,SMITE) && LastSpellHoly < 1 && !pTarget->HasAura(SMITE, EFFECT_INDEX_0) && ai->GetManaPercent() >= 17) { ai->CastSpell(SMITE, *pTarget); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly + 1; break; } else if (MANA_BURN > 0 && ai->In_Reach(pTarget,MANA_BURN) && LastSpellHoly < 2 && pTarget->GetPower(POWER_MANA) > 0 && ai->GetManaPercent() < 70 && ai->GetManaPercent() >= 14) { //ai->TellMaster("I'm casting mana burn."); ai->CastSpell(MANA_BURN, *pTarget); ai->SetIgnoreUpdateTime(3); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly + 1; break; } else if (HOLY_NOVA > 0 && ai->In_Reach(pTarget,HOLY_NOVA) && LastSpellHoly < 3 && meleeReach && ai->GetManaPercent() >= 22) { //ai->TellMaster("I'm casting holy nova."); ai->CastSpell(HOLY_NOVA); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly + 1; break; } else if (HOLY_FIRE > 0 && ai->In_Reach(pTarget,HOLY_FIRE) && LastSpellHoly < 4 && !pTarget->HasAura(HOLY_FIRE, EFFECT_INDEX_0) && ai->GetManaPercent() >= 13) { //ai->TellMaster("I'm casting holy fire."); ai->CastSpell(HOLY_FIRE, *pTarget); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly + 1; break; } else if (PRAYER_OF_MENDING > 0 && ai->In_Reach(pTarget,PRAYER_OF_MENDING) && LastSpellHoly < 5 && pVictim == GetMaster() && GetMaster()->GetHealth() <= GetMaster()->GetMaxHealth() * 0.7 && !GetMaster()->HasAura(PRAYER_OF_MENDING, EFFECT_INDEX_0) && ai->GetManaPercent() >= 15) { //ai->TellMaster("I'm casting prayer of mending on master."); ai->CastSpell(PRAYER_OF_MENDING, *GetMaster()); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly + 1; break; } else if (LastSpellHoly > 6) { LastSpellHoly = 0; SpellSequence = SPELL_SHADOWMAGIC; break; } LastSpellHoly = LastSpellHoly + 1; //SpellSequence = SPELL_SHADOWMAGIC; //break; case SPELL_SHADOWMAGIC: if (SHADOW_WORD_PAIN > 0 && ai->In_Reach(pTarget,SHADOW_WORD_PAIN) && LastSpellShadowMagic < 1 && !pTarget->HasAura(SHADOW_WORD_PAIN, EFFECT_INDEX_0) && ai->GetManaPercent() >= 25) { //ai->TellMaster("I'm casting pain."); ai->CastSpell(SHADOW_WORD_PAIN, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic + 1; break; } else if (MIND_BLAST > 0 && ai->In_Reach(pTarget,MIND_BLAST) && LastSpellShadowMagic < 2 && ai->GetManaPercent() >= 19) { //ai->TellMaster("I'm casting mind blast."); ai->CastSpell(MIND_BLAST, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic + 1; break; } else if (SCREAM > 0 && ai->In_Reach(pTarget,SCREAM) && LastSpellShadowMagic < 3 && ai->GetAttackerCount() >= 3 && ai->GetManaPercent() >= 15) { ai->TellMaster("I'm casting scream."); ai->CastSpell(SCREAM); SpellSequence = SPELL_DISCIPLINE; (LastSpellShadowMagic = LastSpellShadowMagic + 1); break; } else if (MIND_FLAY > 0 && LastSpellShadowMagic < 4 && !pTarget->HasAura(MIND_FLAY, EFFECT_INDEX_0) && ai->GetManaPercent() >= 10) { //ai->TellMaster("I'm casting mind flay."); ai->CastSpell(MIND_FLAY, *pTarget); ai->SetIgnoreUpdateTime(3); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic + 1; break; } else if (DEVOURING_PLAGUE > 0 && ai->In_Reach(pTarget,DEVOURING_PLAGUE) && LastSpellShadowMagic < 5 && !pTarget->HasAura(DEVOURING_PLAGUE, EFFECT_INDEX_0) && ai->GetManaPercent() >= 28) { ai->CastSpell(DEVOURING_PLAGUE, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic + 1; break; } else if (SHADOW_PROTECTION > 0 && ai->In_Reach(pTarget,SHADOW_PROTECTION) && LastSpellShadowMagic < 6 && ai->GetManaPercent() >= 60) { ai->CastSpell(SHADOW_PROTECTION, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic + 1; break; } else if (VAMPIRIC_TOUCH > 0 && LastSpellShadowMagic < 7 && !pTarget->HasAura(VAMPIRIC_TOUCH, EFFECT_INDEX_0) && ai->GetManaPercent() >= 18) { ai->CastSpell(VAMPIRIC_TOUCH, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic + 1; break; } else if (SHADOWFIEND > 0 && ai->In_Reach(pTarget,SHADOWFIEND) && LastSpellShadowMagic < 8) { ai->CastSpell(SHADOWFIEND); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic + 1; break; } else if (MIND_SEAR > 0 && ai->In_Reach(pTarget,MIND_SEAR) && LastSpellShadowMagic < 9 && ai->GetAttackerCount() >= 3 && ai->GetManaPercent() >= 28) { ai->CastSpell(MIND_SEAR, *pTarget); ai->SetIgnoreUpdateTime(5); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic + 1; break; } else if (LastSpellShadowMagic > 10) { LastSpellShadowMagic = 0; SpellSequence = SPELL_DISCIPLINE; break; } LastSpellShadowMagic = LastSpellShadowMagic + 1; //SpellSequence = SPELL_DISCIPLINE; //break; case SPELL_DISCIPLINE: if (FEAR_WARD > 0 && ai->In_Reach(pTarget,FEAR_WARD) && LastSpellDiscipline < 1 && ai->GetManaPercent() >= 3) { //ai->TellMaster("I'm casting fear ward"); ai->CastSpell(FEAR_WARD, *(GetMaster())); SpellSequence = SPELL_HOLY; LastSpellDiscipline = LastSpellDiscipline + 1; break; } else if (POWER_INFUSION > 0 && LastSpellDiscipline < 2 && ai->GetManaPercent() >= 16) { //ai->TellMaster("I'm casting power infusion"); ai->CastSpell(POWER_INFUSION, *(GetMaster())); SpellSequence = SPELL_HOLY; LastSpellDiscipline = LastSpellDiscipline + 1; break; } else if (MASS_DISPEL > 0 && ai->In_Reach(pTarget,MASS_DISPEL) && LastSpellDiscipline < 3 && ai->GetManaPercent() >= 33) { //ai->TellMaster("I'm casting mass dispel"); ai->CastSpell(MASS_DISPEL); SpellSequence = SPELL_HOLY; LastSpellDiscipline = LastSpellDiscipline + 1; break; } else if (INNER_FOCUS > 0 && !m_bot->HasAura(INNER_FOCUS, EFFECT_INDEX_0) && LastSpellDiscipline < 4) { //ai->TellMaster("I'm casting inner focus"); ai->CastSpell(INNER_FOCUS, *m_bot); SpellSequence = SPELL_HOLY; LastSpellDiscipline = LastSpellDiscipline + 1; break; } else if (PENANCE > 0 && LastSpellDiscipline < 5 && ai->GetManaPercent() >= 16) { //ai->TellMaster("I'm casting PENANCE"); ai->CastSpell(PENANCE); SpellSequence = SPELL_HOLY; LastSpellDiscipline = LastSpellDiscipline + 1; break; } else if (LastSpellDiscipline > 6) { LastSpellDiscipline = 0; SpellSequence = SPELL_HOLY; break; } else { LastSpellDiscipline = LastSpellDiscipline + 1; SpellSequence = SPELL_HOLY; } } } // end DoNextCombatManeuver
void PlayerbotMageAI::DoNextCombatManeuver(Unit *pTarget) { PlayerbotAI* ai = GetAI(); if (!ai) return; switch (ai->GetScenarioType()) { case PlayerbotAI::SCENARIO_PVP_DUEL: if (FIREBALL > 0) ai->CastSpell(FIREBALL); return; } // ------- Non Duel combat ---------- //ai->SetMovementOrder( PlayerbotAI::MOVEMENT_FOLLOW, GetMaster() ); // dont want to melee mob // Damage Spells (primitive example) Player *m_bot = GetPlayerBot(); Unit* pVictim = pTarget->getVictim(); bool meleeReach = m_bot->CanReachWithMeleeAttack(pTarget); if (!meleeReach && ai->GetCombatStyle() != PlayerbotAI::COMBAT_RANGED) { // switch to ranged combat ai->SetCombatStyle(PlayerbotAI::COMBAT_RANGED); } if (SHOOT > 0 && ai->GetCombatStyle() == PlayerbotAI::COMBAT_RANGED && !m_bot->FindCurrentSpellBySpellId(SHOOT)) ai->CastSpell(SHOOT, *pTarget); //ai->TellMaster( "started auto shot." ); else if (SHOOT > 0 && m_bot->FindCurrentSpellBySpellId(SHOOT)) m_bot->InterruptNonMeleeSpells(true, SHOOT); switch (SpellSequence) { case SPELL_FROST: if (ICY_VEINS > 0 && !m_bot->HasAura(ICY_VEINS, EFFECT_INDEX_0) && LastSpellFrost < 1 && ai->GetManaPercent() >= 3) { ai->CastSpell(ICY_VEINS, *m_bot); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (FROSTBOLT > 0 && LastSpellFrost < 2 && !pTarget->HasAura(FROSTBOLT, EFFECT_INDEX_0) && ai->GetManaPercent() >= 16) { ai->CastSpell(FROSTBOLT, *pTarget); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (FROST_WARD > 0 && LastSpellFrost < 3 && !m_bot->HasAura(FROST_WARD, EFFECT_INDEX_0) && ai->GetManaPercent() >= 19) { ai->CastSpell(FROST_WARD, *m_bot); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (FROST_NOVA > 0 && LastSpellFrost < 4 && meleeReach && !pTarget->HasAura(FROST_NOVA, EFFECT_INDEX_0) && ai->GetManaPercent() >= 10) { ai->CastSpell(FROST_NOVA, *pTarget); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (ICE_LANCE > 0 && LastSpellFrost < 5 && ai->GetManaPercent() >= 7) { ai->CastSpell(ICE_LANCE, *pTarget); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (BLIZZARD > 0 && LastSpellFrost < 6 && ai->GetAttackerCount() >= 5 && ai->GetManaPercent() >= 89) { ai->CastSpell(BLIZZARD, *pTarget); ai->SetIgnoreUpdateTime(8); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (CONE_OF_COLD > 0 && LastSpellFrost < 7 && meleeReach && !pTarget->HasAura(CONE_OF_COLD, EFFECT_INDEX_0) && ai->GetManaPercent() >= 35) { ai->CastSpell(CONE_OF_COLD, *pTarget); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (DEEP_FREEZE > 0 && LastSpellFrost < 8 && pTarget->HasAura(AURA_STATE_FROZEN, EFFECT_INDEX_0) && !pTarget->HasAura(DEEP_FREEZE, EFFECT_INDEX_0) && ai->GetManaPercent() >= 9) { ai->CastSpell(DEEP_FREEZE, *pTarget); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (ICE_BARRIER > 0 && LastSpellFrost < 9 && pVictim == m_bot && !m_bot->HasAura(ICE_BARRIER, EFFECT_INDEX_0) && ai->GetHealthPercent() < 50 && ai->GetManaPercent() >= 30) { ai->CastSpell(ICE_BARRIER, *m_bot); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (SUMMON_WATER_ELEMENTAL > 0 && LastSpellFrost < 10 && ai->GetManaPercent() >= 16) { ai->CastSpell(SUMMON_WATER_ELEMENTAL); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (ICE_BLOCK > 0 && LastSpellFrost < 11 && pVictim == m_bot && !m_bot->HasAura(ICE_BLOCK, EFFECT_INDEX_0) && ai->GetHealthPercent() < 30) { ai->CastSpell(ICE_BLOCK, *m_bot); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } else if (COLD_SNAP > 0 && LastSpellFrost < 12) { ai->CastSpell(COLD_SNAP, *m_bot); SpellSequence = SPELL_FIRE; LastSpellFrost = LastSpellFrost + 1; break; } LastSpellFrost = 0; //SpellSequence = SPELL_FIRE; //break; case SPELL_FIRE: if (FIRE_WARD > 0 && !m_bot->HasAura(FIRE_WARD, EFFECT_INDEX_0) && LastSpellFire < 1 && ai->GetManaPercent() >= 3) { ai->CastSpell(FIRE_WARD, *m_bot); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (COMBUSTION > 0 && !m_bot->HasAura(COMBUSTION, EFFECT_INDEX_0) && LastSpellFire < 2) { ai->CastSpell(COMBUSTION, *m_bot); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (FIREBALL > 0 && LastSpellFire < 3 && ai->GetManaPercent() >= 23) { ai->CastSpell(FIREBALL, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (FIRE_BLAST > 0 && LastSpellFire < 4 && ai->GetManaPercent() >= 25) { ai->CastSpell(FIRE_BLAST, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (FLAMESTRIKE > 0 && LastSpellFire < 5 && ai->GetManaPercent() >= 35) { ai->CastSpell(FLAMESTRIKE, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (SCORCH > 0 && LastSpellFire < 6 && ai->GetManaPercent() >= 10) { ai->CastSpell(SCORCH, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (PYROBLAST > 0 && LastSpellFire < 7 && !pTarget->HasAura(PYROBLAST, EFFECT_INDEX_0) && ai->GetManaPercent() >= 27) { ai->CastSpell(PYROBLAST, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (BLAST_WAVE > 0 && LastSpellFire < 8 && ai->GetAttackerCount() >= 3 && meleeReach && ai->GetManaPercent() >= 34) { ai->CastSpell(BLAST_WAVE, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (DRAGONS_BREATH > 0 && LastSpellFire < 9 && meleeReach && ai->GetManaPercent() >= 37) { ai->CastSpell(DRAGONS_BREATH, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (LIVING_BOMB > 0 && LastSpellFire < 10 && !pTarget->HasAura(LIVING_BOMB, EFFECT_INDEX_0) && ai->GetManaPercent() >= 27) { ai->CastSpell(LIVING_BOMB, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } else if (FROSTFIRE_BOLT > 0 && LastSpellFire < 11 && !pTarget->HasAura(FROSTFIRE_BOLT, EFFECT_INDEX_0) && ai->GetManaPercent() >= 14) { ai->CastSpell(FROSTFIRE_BOLT, *pTarget); SpellSequence = SPELL_ARCANE; LastSpellFire = LastSpellFire + 1; break; } LastSpellFire = 0; //SpellSequence = SPELL_ARCANE; //break; case SPELL_ARCANE: if (ARCANE_POWER > 0 && LastSpellArcane < 1 && ai->GetManaPercent() >= 37) { ai->CastSpell(ARCANE_POWER, *pTarget); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else if (ARCANE_MISSILES > 0 && LastSpellArcane < 2 && ai->GetManaPercent() >= 37) { ai->CastSpell(ARCANE_MISSILES, *pTarget); ai->SetIgnoreUpdateTime(3); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else if (ARCANE_EXPLOSION > 0 && LastSpellArcane < 3 && ai->GetAttackerCount() >= 3 && meleeReach && ai->GetManaPercent() >= 27) { ai->CastSpell(ARCANE_EXPLOSION, *pTarget); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else if (COUNTERSPELL > 0 && pTarget->IsNonMeleeSpellCasted(true) && LastSpellArcane < 4 && ai->GetManaPercent() >= 9) { ai->CastSpell(COUNTERSPELL, *pTarget); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else if (SLOW > 0 && LastSpellArcane < 5 && !pTarget->HasAura(SLOW, EFFECT_INDEX_0) && ai->GetManaPercent() >= 12) { ai->CastSpell(SLOW, *pTarget); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else if (ARCANE_BARRAGE > 0 && LastSpellArcane < 6 && ai->GetManaPercent() >= 27) { ai->CastSpell(ARCANE_BARRAGE, *pTarget); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else if (ARCANE_BLAST > 0 && LastSpellArcane < 7 && ai->GetManaPercent() >= 8) { ai->CastSpell(ARCANE_BLAST, *pTarget); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else if (MIRROR_IMAGE > 0 && LastSpellArcane < 8 && ai->GetManaPercent() >= 10) { ai->CastSpell(MIRROR_IMAGE); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else if (MANA_SHIELD > 0 && LastSpellArcane < 9 && ai->GetHealthPercent() < 70 && pVictim == m_bot && !m_bot->HasAura(MANA_SHIELD, EFFECT_INDEX_0) && ai->GetManaPercent() >= 8) { ai->CastSpell(MANA_SHIELD, *m_bot); SpellSequence = SPELL_FROST; LastSpellArcane = LastSpellArcane + 1; break; } else { LastSpellArcane = 0; SpellSequence = SPELL_FROST; } } } // end DoNextCombatManeuver