Give weaponless NPCs best offense based on skills

This commit is contained in:
Paul Coene 2017-11-22 09:38:03 -05:00
parent a8427ca610
commit aaac2c5a84
2 changed files with 46 additions and 5 deletions

View File

@ -852,16 +852,56 @@ int Mob::ACSum()
return ac; return ac;
} }
int Mob::GetBestMeleeSkill()
{
int bestSkill=0;
EQEmu::skills::SkillType meleeSkills[]=
{ EQEmu::skills::Skill1HBlunt,
EQEmu::skills::Skill1HSlashing,
EQEmu::skills::Skill2HBlunt,
EQEmu::skills::Skill2HSlashing,
EQEmu::skills::SkillHandtoHand,
EQEmu::skills::Skill1HPiercing,
EQEmu::skills::Skill2HPiercing,
EQEmu::skills::SkillCount
};
int i;
for (i=0; meleeSkills[i] != EQEmu::skills::SkillCount; ++i) {
int value;
value = GetSkill(meleeSkills[i]);
bestSkill = std::max(value, bestSkill);
}
return bestSkill;
}
int Mob::offense(EQEmu::skills::SkillType skill) int Mob::offense(EQEmu::skills::SkillType skill)
{ {
int offense = GetSkill(skill); int offense = GetSkill(skill);
int stat_bonus = 0; int stat_bonus = GetSTR();
if (skill == EQEmu::skills::SkillArchery || skill == EQEmu::skills::SkillThrowing)
stat_bonus = GetDEX(); switch (skill) {
else case EQEmu::skills::SkillArchery:
stat_bonus = GetSTR(); case EQEmu::skills::SkillThrowing:
stat_bonus = GetDEX();
break;
// Mobs with no weapons default to H2H.
// Since H2H is capped at 100 for many many classes,
// lets not handicap mobs based on not spawning with a
// weapon.
//
// Maybe we tweak this if Disarm is actually implemented.
case EQEmu::skills::SkillHandtoHand:
offense = GetBestMeleeSkill();
break;
}
if (stat_bonus >= 75) if (stat_bonus >= 75)
offense += (2 * stat_bonus - 150) / 3; offense += (2 * stat_bonus - 150) / 3;
offense += GetATK(); offense += GetATK();
return offense; return offense;
} }

View File

@ -199,6 +199,7 @@ public:
void ApplyMeleeDamageMods(uint16 skill, int &damage, Mob * defender = nullptr, ExtraAttackOptions *opts = nullptr); void ApplyMeleeDamageMods(uint16 skill, int &damage, Mob * defender = nullptr, ExtraAttackOptions *opts = nullptr);
int ACSum(); int ACSum();
int offense(EQEmu::skills::SkillType skill); int offense(EQEmu::skills::SkillType skill);
int GetBestMeleeSkill();
void CalcAC() { mitigation_ac = ACSum(); } void CalcAC() { mitigation_ac = ACSum(); }
int GetACSoftcap(); int GetACSoftcap();
double GetSoftcapReturns(); double GetSoftcapReturns();