void PlayerbotPaladinAI::DoNonCombatActions() { if (!m_ai) return; if (!m_bot) return; if (!m_bot->isAlive() || m_bot->IsInDuel()) return; CheckAuras(); //Put up RF if tank if (m_ai->IsTank()) m_ai->SelfBuff(RIGHTEOUS_FURY); //Disable RF if not tank else if (m_bot->HasAura(RIGHTEOUS_FURY)) m_bot->RemoveAurasDueToSpell(RIGHTEOUS_FURY); // Dispel magic/disease/poison if (m_ai->HasDispelOrder() && DispelPlayer() & RETURN_CONTINUE) return; // Revive if (ResurrectPlayer(GetResurrectionTarget()) & RETURN_CONTINUE) return; // Heal if (m_ai->IsHealer()) { if (HealPlayer(GetHealTarget()) & RETURN_CONTINUE) return;// RETURN_CONTINUE; } else { // Is this desirable? Debatable. // TODO: In a group/raid with a healer you'd want this bot to focus on DPS (it's not specced/geared for healing either) if (HealPlayer(m_bot) & RETURN_CONTINUE) return;// RETURN_CONTINUE; } // buff group if (Buff(&PlayerbotPaladinAI::BuffHelper, 1) & RETURN_CONTINUE) // Paladin's BuffHelper takes care of choosing the specific Blessing so just pass along a non-zero value return; // hp/mana check if (EatDrinkBandage()) return; // Search and apply stones to weapons // Mainhand ... Item* stone, * weapon; weapon = m_bot->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); if (weapon && weapon->GetEnchantmentId(TEMP_ENCHANTMENT_SLOT) == 0) { stone = m_ai->FindStoneFor(weapon); if (stone) { m_ai->UseItem(stone, EQUIPMENT_SLOT_MAINHAND); m_ai->SetIgnoreUpdateTime(5); } } }
void UpdateAI(uint32 diff) { ReduceCD(diff); if (IAmDead()) return; if (!me->GetVictim()) Evade(); if (clearcast && !me->IsNonMeleeSpellCast(false)) { if (Aura* potency = me->GetAura(ARCANE_POTENCY_BUFF)) { if (potency->GetCharges() == 1) clearcast = false; potency->DropCharge(AURA_REMOVE_BY_EXPIRE); if (me->HasAura(CLEARCASTBUFF)) { me->ModifyPower(POWER_MANA, cost); me->RemoveAurasDueToSpell(CLEARCASTBUFF, me->GetGUID(), 0, AURA_REMOVE_BY_EXPIRE); } } } CheckAuras(); if (wait == 0) wait = GetWait(); else return; BreakCC(diff); if (CCed(me) && (!ICEBLOCK || !me->HasAura(ICEBLOCK))) return;//TODO CheckBlink(diff); CheckPoly(diff); CheckPots(diff); //CureTarget(master, REMOVE_CURSE, diff); //CureTarget(me, REMOVE_CURSE, diff); CureGroup(master, REMOVE_CURSE, diff); FocusMagic(diff); BuffAndHealGroup(master, diff); if (!me->IsInCombat()) DoNonCombatActions(diff); if (!CheckAttackTarget(CLASS_MAGE)) return; CheckPoly2();//this should go AFTER getting opponent Counter(); CheckSpellSteal(diff); DoNormalAttack(diff); }
void PlayerbotPaladinAI::DoNonCombatActions() { if (!m_ai) return; if (!m_bot) return; if (!m_bot->isAlive() || m_bot->IsInDuel()) return; CheckAuras(); //Put up RF if tank if (m_ai->GetCombatOrder() & PlayerbotAI::ORDERS_TANK) m_ai->SelfBuff(RIGHTEOUS_FURY); //Disable RF if not tank else if (m_bot->HasAura(RIGHTEOUS_FURY)) m_bot->RemoveAurasDueToSpell(RIGHTEOUS_FURY); // Revive if (HealPlayer(GetResurrectionTarget()) & RETURN_CONTINUE) return; // Heal if (m_ai->IsHealer()) { if (HealPlayer(GetHealTarget()) & RETURN_CONTINUE) return;// RETURN_CONTINUE; } else { // Is this desirable? Debatable. // TODO: In a group/raid with a healer you'd want this bot to focus on DPS (it's not specced/geared for healing either) if (HealPlayer(m_bot) & RETURN_CONTINUE) return;// RETURN_CONTINUE; } // buff group if (Buff(&PlayerbotPaladinAI::BuffHelper, 1) & RETURN_CONTINUE) // Paladin's BuffHelper takes care of choosing the specific Blessing so just pass along a non-zero value return; //creat water if (m_ai->FindDrink() == nullptr && m_bot->getLevel() == 60) { if (Item* pItem = m_bot->StoreNewItemInInventorySlot(CRYSTAL_WATER, 20)) m_bot->SendNewItem(pItem, 20, true, false); return; } // hp/mana check if (EatDrinkBandage()) return; // m_ai->TellMaster("DoNonCombatActions() - 10. past EatDrinkBandage()"); // debug }
void PlayerbotPaladinAI::DoNonCombatActions() { if (!m_ai) return; if (!m_bot) return; if (!m_bot->isAlive() || m_bot->IsInDuel()) return; CheckAuras(); CheckSeals(); //Put up RF if tank if (m_ai->GetCombatOrder() & PlayerbotAI::ORDERS_TANK) m_ai->SelfBuff(RIGHTEOUS_FURY); //Disable RF if not tank else if (m_bot->HasAura(RIGHTEOUS_FURY)) m_bot->RemoveAurasDueToSpell(RIGHTEOUS_FURY); // Revive if (HealPlayer(GetResurrectionTarget()) & RETURN_CONTINUE) return; // Heal if (m_ai->IsHealer()) { if (HealPlayer(GetHealTarget()) & RETURN_CONTINUE) return;// RETURN_CONTINUE; } else { // Is this desirable? Debatable. // TODO: In a group/raid with a healer you'd want this bot to focus on DPS (it's not specced/geared for healing either) if (HealPlayer(m_bot) & RETURN_CONTINUE) return;// RETURN_CONTINUE; } // buff group if (Buff(&PlayerbotPaladinAI::BuffHelper, 1) & RETURN_CONTINUE) // Paladin's BuffHelper takes care of choosing the specific Blessing so just pass along a non-zero value return; // hp/mana check if (m_bot->getStandState() != UNIT_STAND_STATE_STAND) m_bot->SetStandState(UNIT_STAND_STATE_STAND); if (EatDrinkBandage()) return; // m_ai->TellMaster("DoNonCombatActions() - 10. past EatDrinkBandage()"); // debug }
void UpdateAI(uint32 diff) { ReduceCD(diff); if (!GlobalUpdate(diff)) return; CheckAttackState(); CheckAuras(); if (wait == 0) wait = GetWait(); else return; BreakCC(diff); if (CCed(me)) return; ////if pet is dead or unreachable //Creature* m_botsPet = me->GetBotsPet(); //if (!m_botsPet || m_botsPet->FindMap() != master->GetMap() || (me->GetDistance2d(m_botsPet) > sWorld->GetMaxVisibleDistanceOnContinents() - 20.f)) // if (master->getLevel() >= 10 && !me->IsInCombat() && !IsCasting() && !me->IsMounted()) // SummonBotsPet(PET_VOIDWALKER); //TODO: implement healthstone if (Potion_cd <= diff && GetHealthPCT(me) < 67) { temptimer = GC_Timer; if (doCast(me, HEALINGPOTION)) { Potion_cd = POTION_CD; GC_Timer = temptimer; } } if (Potion_cd <= diff && GetManaPCT(me) < 50) { temptimer = GC_Timer; if (doCast(me, MANAPOTION)) { Potion_cd = POTION_CD; GC_Timer = temptimer; } } if (!me->IsInCombat()) DoNonCombatActions(); if (!CheckAttackTarget(BOT_CLASS_WARLOCK)) return; DoNormalAttack(diff); }
void UpdateAI(uint32 diff) { ReduceCD(diff); if (IAmDead()) return; CheckAttackState(); CheckAuras(); if (wait == 0) wait = GetWait(); else return; if (CCed(me)) return; //TODO: add checks to help owner if (!me->IsInCombat()) DoNonCombatActions(); if (!CheckAttackTarget(PET_TYPE_VOIDWALKER)) return; DoNormalAttack(diff); }