void PlayerbotPriestAI::DoNextCombatManeuver(Unit *pTarget) { Unit* pVictim = pTarget->getVictim(); PlayerbotAI* ai = GetAI(); if (!ai) return; switch (ai->GetScenarioType()) { case PlayerbotAI::SCENARIO_DUEL: (ai->HasAura(SCREAM,*pTarget) && ai->GetHealthPercent() < 60 && ai->CastSpell(HEAL)) || ai->CastSpell(PAIN) || (ai->GetHealthPercent() < 80 && ai->CastSpell(RENEW)) || (ai->GetPlayerBot()->GetDistance(pTarget) <= 5 && ai->CastSpell(SCREAM)) || ai->CastSpell(MIND_BLAST) || (ai->GetHealthPercent() < 20 && ai->CastSpell(GREAT_HEAL)) || ai->CastSpell(SMITE); return; } // ------- Non Duel combat ---------- ai->SetMovementOrder( PlayerbotAI::MOVEMENT_FOLLOW, GetMaster() ); // dont want to melee mob Player *m_bot = GetPlayerBot(); Group *m_group = m_bot->GetGroup(); // 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 && PWS > 0 && !m_bot->HasAura(PWS, EFFECT_INDEX_0)) { ai->TellMaster("I'm casting pws on myself."); ai->CastSpell(PWS); } 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, ai->GetHealthPercent()); // Heal master uint32 masterHP = GetMaster()->GetHealth()*100 / GetMaster()->GetMaxHealth(); if (GetMaster()->isAlive()) { if (masterHP < 25 && PWS > 0 && !GetMaster()->HasAura(PWS, EFFECT_INDEX_0)) ai->CastSpell(PWS, *(GetMaster())); else if (masterHP < 80) HealTarget (*GetMaster(), masterHP); } // 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, memberHP ); } } // Damage Spells ai->SetInFront( pTarget ); float dist = m_bot->GetDistance( pTarget ); switch (SpellSequence) { case SPELL_HOLY: if (SMITE > 0 && 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 && 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 && LastSpellHoly <3 && dist <= ATTACK_DISTANCE && 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 && 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 && 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 (PAIN > 0 && LastSpellShadowMagic <1 && !pTarget->HasAura(PAIN, EFFECT_INDEX_0) && ai->GetManaPercent() >= 25) { //ai->TellMaster("I'm casting pain."); ai->CastSpell(PAIN, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (MIND_BLAST > 0 && 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 && 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 && 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 && 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 && LastSpellShadowMagic <8) { ai->CastSpell(SHADOWFIEND); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (MIND_SEAR > 0 && 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 && 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 && 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 PlayerbotPriestAI::DoNextCombatManeuver(Unit *pTarget) { PlayerbotAI* ai = GetAI(); if (!ai) return; switch (ai->GetScenarioType()) { case PlayerbotAI::SCENARIO_DUEL: (ai->HasAura(SCREAM,*pTarget) && ai->GetHealthPercent() < 60 && ai->CastSpell(HEAL)) || ai->CastSpell(PAIN) || (ai->GetHealthPercent() < 80 && ai->CastSpell(RENEW)) || (ai->GetPlayerBot()->GetDistance(pTarget) <= 5 && ai->CastSpell(SCREAM)) || ai->CastSpell(MIND_BLAST) || (ai->GetHealthPercent() < 20 && ai->CastSpell(FLASH_HEAL)) || ai->CastSpell(SMITE); return; } // ------- Non Duel combat ---------- ai->Follow(*GetMaster()); // dont want to melee mob Player *m_bot = GetPlayerBot(); Group *m_group = m_bot->GetGroup(); // Heal myself if (ai->GetHealthPercent() < 15 && FADE > 0 && !m_bot->HasAura(FADE, 0)) { GetAI()->TellMaster("I'm casting fade"); ai->CastSpell(FADE); } else if (ai->GetHealthPercent() < 25 && PWS > 0 && !m_bot->HasAura(PWS, 0)) { GetAI()->TellMaster("I'm casting pws on myself."); ai->CastSpell(PWS); } else if (ai->GetHealthPercent() < 80) HealTarget (*m_bot, ai->GetHealthPercent()); // Heal master uint32 masterHP = GetMaster()->GetHealth()*100 / GetMaster()->GetMaxHealth(); if (GetMaster()->isAlive()) { if (masterHP < 25 && PWS > 0 && !GetMaster()->HasAura(PWS, 0)) ai->CastSpell(PWS, *(GetMaster())); else if (masterHP < 80) HealTarget (*GetMaster(), masterHP); } // 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 = objmgr.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, memberHP ); } } // Damage Spells ai->SetInFront( pTarget ); switch (SpellSequence) { case SPELL_HOLY: if (SMITE > 0 && LastSpellHoly <= 1 && ai->GetManaPercent() >= 60) { ai->CastSpell(SMITE); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly +1; break; } else if (CLEARCASTING > 0 && LastSpellHoly <2 && ai->GetManaPercent() >= 60) { GetAI()->TellMaster("I'm casting clearcasting"); ai->CastSpell(CLEARCASTING, *pTarget); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly +1; break; } else if (HOLY_NOVA > 0 && LastSpellHoly <3 && ai->GetManaPercent() >= 60) { GetAI()->TellMaster("I'm casting holy nova"); ai->CastSpell(HOLY_NOVA); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly +1; break; } else if (HOLY_FIRE > 0 && LastSpellHoly <4 && ai->GetManaPercent() >= 60) { GetAI()->TellMaster("I'm casting holy fire"); ai->CastSpell(HOLY_FIRE, *pTarget); SpellSequence = SPELL_SHADOWMAGIC; LastSpellHoly = LastSpellHoly +1; break; } else if (LastSpellHoly > 5) { LastSpellHoly = 0; SpellSequence = SPELL_SHADOWMAGIC; break; } LastSpellHoly = LastSpellHoly + 1; //SpellSequence = SPELL_SHADOWMAGIC; //break; case SPELL_SHADOWMAGIC: if (PAIN > 0 && LastSpellShadowMagic <1 && ai->GetManaPercent() >= 60) { GetAI()->TellMaster("I'm casting pain"); ai->CastSpell(PAIN, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (MIND_BLAST > 0 && LastSpellShadowMagic <2 && ai->GetManaPercent() >= 60) { GetAI()->TellMaster("I'm casting mind blast"); ai->CastSpell(MIND_BLAST, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } /* else if (SCREAM > 0 && LastSpellShadowMagic <3 && ai->GetManaPercent() >= 60) { GetAI()->TellMaster("I'm casting scream."); ai->CastSpell(SCREAM); SpellSequence = SPELL_DISCIPLINE; (LastSpellShadowMagic = LastSpellShadowMagic +1); break; } */ else if (MIND_FLAY > 0 && LastSpellShadowMagic <4 && ai->GetManaPercent() >= 60) { GetAI()->TellMaster("I'm casting mind flay."); ai->CastSpell(MIND_FLAY, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (DEVOURING_PLAGUE > 0 && LastSpellShadowMagic <5 && ai->GetManaPercent() >= 60) { ai->CastSpell(DEVOURING_PLAGUE, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (SHADOW_PROTECTION > 0 && LastSpellShadowMagic <6 && ai->GetManaPercent() >= 60) { ai->CastSpell(SHADOW_PROTECTION, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (VAMPIRIC_TOUCH > 0 && LastSpellShadowMagic <7 && ai->GetManaPercent() >= 60) { ai->CastSpell(VAMPIRIC_TOUCH, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (PRAYER_OF_SHADOW_PROTECTION > 0 && LastSpellShadowMagic <8 && ai->GetManaPercent() >= 60) { ai->CastSpell(PRAYER_OF_SHADOW_PROTECTION, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (SHADOWFIEND > 0 && LastSpellShadowMagic <9 && ai->GetManaPercent() >= 60) { ai->CastSpell(SHADOWFIEND, *pTarget); SpellSequence = SPELL_DISCIPLINE; LastSpellShadowMagic = LastSpellShadowMagic +1; break; } else if (MIND_SEAR > 0 && LastSpellShadowMagic <10 && ai->GetManaPercent() >= 60) { ai->CastSpell(MIND_SEAR, *pTarget); 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 && LastSpellDiscipline <1 && ai->GetManaPercent() >= 60) { GetAI()->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() >= 60) { GetAI()->TellMaster("I'm casting power infusion"); ai->CastSpell(POWER_INFUSION, *(GetMaster())); SpellSequence = SPELL_HOLY; LastSpellDiscipline = LastSpellDiscipline + 1; break; } else if (MASS_DISPEL > 0 && LastSpellDiscipline <3 && ai->GetManaPercent() >= 60) { GetAI()->TellMaster("I'm casting mass dispel"); ai->CastSpell(MASS_DISPEL); SpellSequence = SPELL_HOLY; LastSpellDiscipline = LastSpellDiscipline + 1; break; } else if (LastSpellDiscipline > 4) { LastSpellDiscipline = 0; SpellSequence = SPELL_HOLY; break; } else { LastSpellDiscipline = LastSpellDiscipline + 1; SpellSequence = SPELL_HOLY; } } } // end DoNextCombatManeuver
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