mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 13:41:31 +00:00
Give weaponless NPCs best offense based on skills
This commit is contained in:
parent
a8427ca610
commit
aaac2c5a84
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user