mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 13:16:39 +00:00
Add HasSkill checks to bot special abilities (kick/bash/etc)
This commit is contained in:
+48
-26
@@ -5172,7 +5172,6 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
|
|||||||
// Bots without this skill shouldn't be 'checking' on this timer..let's just disable it and avoid the extra IsAttackAllowed() checks
|
// Bots without this skill shouldn't be 'checking' on this timer..let's just disable it and avoid the extra IsAttackAllowed() checks
|
||||||
// Note: this is done here instead of NPC::ctor() because taunt skill can be acquired during level ups (the timer is re-enabled in CalcBotStats())
|
// Note: this is done here instead of NPC::ctor() because taunt skill can be acquired during level ups (the timer is re-enabled in CalcBotStats())
|
||||||
if (!GetSkill(EQ::skills::SkillTaunt)) {
|
if (!GetSkill(EQ::skills::SkillTaunt)) {
|
||||||
|
|
||||||
taunt_timer.Disable();
|
taunt_timer.Disable();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -5266,53 +5265,76 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
|
|||||||
int bot_level = GetLevel();
|
int bot_level = GetLevel();
|
||||||
int reuse = (TauntReuseTime * 1000); // Same as Bash and Kick
|
int reuse = (TauntReuseTime * 1000); // Same as Bash and Kick
|
||||||
bool did_attack = false;
|
bool did_attack = false;
|
||||||
|
|
||||||
switch (GetClass()) {
|
switch (GetClass()) {
|
||||||
case Class::Warrior:
|
case Class::Warrior:
|
||||||
if (bot_level >= RuleI(Combat, NPCBashKickLevel)) {
|
|
||||||
bool canBash = false;
|
|
||||||
if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQ::invslot::slotSecondary) && m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield) || (m_inv.GetItem(EQ::invslot::slotPrimary) && m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1))
|
|
||||||
canBash = true;
|
|
||||||
|
|
||||||
if (!canBash || zone->random.Int(0, 100) > 25)
|
|
||||||
skill_to_use = EQ::skills::SkillKick;
|
|
||||||
else
|
|
||||||
skill_to_use = EQ::skills::SkillBash;
|
|
||||||
}
|
|
||||||
case Class::Ranger:
|
|
||||||
case Class::Beastlord:
|
|
||||||
skill_to_use = EQ::skills::SkillKick;
|
|
||||||
break;
|
|
||||||
case Class::Berserker:
|
|
||||||
skill_to_use = EQ::skills::SkillFrenzy;
|
|
||||||
break;
|
|
||||||
case Class::Cleric:
|
case Class::Cleric:
|
||||||
case Class::ShadowKnight:
|
case Class::ShadowKnight:
|
||||||
case Class::Paladin:
|
case Class::Paladin:
|
||||||
if (bot_level >= RuleI(Combat, NPCBashKickLevel)) {
|
if (
|
||||||
if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQ::invslot::slotSecondary) && m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield) || (m_inv.GetItem(EQ::invslot::slotPrimary) && m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1))
|
(GetBaseRace() == OGRE || GetBaseRace() == TROLL || GetBaseRace() == BARBARIAN) ||
|
||||||
|
(
|
||||||
|
GetSkill(EQ::skills::SkillBash) &&
|
||||||
|
(
|
||||||
|
(
|
||||||
|
m_inv.GetItem(EQ::invslot::slotSecondary) &&
|
||||||
|
m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield
|
||||||
|
)
|
||||||
|
||
|
||||||
|
(
|
||||||
|
m_inv.GetItem(EQ::invslot::slotPrimary) &&
|
||||||
|
m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() &&
|
||||||
|
GetAA(aa2HandBash) >= 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) {
|
||||||
skill_to_use = EQ::skills::SkillBash;
|
skill_to_use = EQ::skills::SkillBash;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetSkill(EQ::skills::SkillKick)) {
|
||||||
|
skill_to_use = EQ::skills::SkillKick;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case Class::Ranger:
|
||||||
|
case Class::Beastlord:
|
||||||
|
if (GetSkill(EQ::skills::SkillKick)) {
|
||||||
|
skill_to_use = EQ::skills::SkillKick;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case Class::Berserker:
|
||||||
|
if (GetSkill(EQ::skills::SkillFrenzy)) {
|
||||||
|
skill_to_use = EQ::skills::SkillFrenzy;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case Class::Monk:
|
case Class::Monk:
|
||||||
if (GetLevel() >= 30) {
|
if (GetSkill(EQ::skills::SkillFlyingKick)) {
|
||||||
skill_to_use = EQ::skills::SkillFlyingKick;
|
skill_to_use = EQ::skills::SkillFlyingKick;
|
||||||
}
|
}
|
||||||
else if (GetLevel() >= 25) {
|
else if (GetSkill(EQ::skills::SkillDragonPunch)) {
|
||||||
skill_to_use = EQ::skills::SkillDragonPunch;
|
skill_to_use = EQ::skills::SkillDragonPunch;
|
||||||
}
|
}
|
||||||
else if (GetLevel() >= 20) {
|
else if (GetSkill(EQ::skills::SkillEagleStrike)) {
|
||||||
skill_to_use = EQ::skills::SkillEagleStrike;
|
skill_to_use = EQ::skills::SkillEagleStrike;
|
||||||
}
|
}
|
||||||
else if (GetLevel() >= 5) {
|
else if (GetSkill(EQ::skills::SkillRoundKick)) {
|
||||||
skill_to_use = EQ::skills::SkillRoundKick;
|
skill_to_use = EQ::skills::SkillRoundKick;
|
||||||
}
|
}
|
||||||
else {
|
else if (GetSkill(EQ::skills::SkillKick)) {
|
||||||
skill_to_use = EQ::skills::SkillKick;
|
skill_to_use = EQ::skills::SkillKick;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case Class::Rogue:
|
case Class::Rogue:
|
||||||
skill_to_use = EQ::skills::SkillBackstab;
|
if (GetSkill(EQ::skills::SkillBackstab)) {
|
||||||
|
skill_to_use = EQ::skills::SkillBackstab;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user