Fix Immune Melee Nonmagical logic (#1606)

This commit is contained in:
KayenEQ 2021-10-15 20:46:57 -04:00 committed by GitHub
parent 203ba2d340
commit 5235dcee95
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 18 deletions

View File

@ -990,32 +990,31 @@ int Mob::GetWeaponDamage(Mob *against, const EQ::ItemData *weapon_item) {
//check to see if our weapons or fists are magical.
if (against->GetSpecialAbility(IMMUNE_MELEE_NONMAGICAL)) {
if (weapon_item) {
if (GetSpecialAbility(SPECATK_MAGICAL)) {
dmg = 1;
}
//On live this occurs for pets and charmed pet >= level 10
else if (GetOwner() && GetLevel() >= RuleI(Combat, PetAttackMagicLevel)) {
//pets wouldn't actually use this but...
//it gives us an idea if we can hit due to the dual nature of this function
dmg = 1;
}
else if (weapon_item) {
if (weapon_item->Magic) {
dmg = weapon_item->Damage;
//this is more for non weapon items, ex: boots for kick
//they don't have a dmg but we should be able to hit magical
dmg = dmg <= 0 ? 1 : dmg;
}
else
else {
return 0;
}
}
else if ((GetClass() == MONK || GetClass() == BEASTLORD) && GetLevel() >= 30) {
dmg = GetHandToHandDamage();
}
else {
if ((GetClass() == MONK || GetClass() == BEASTLORD) && GetLevel() >= 30) {
dmg = GetHandToHandDamage();
}
else if (GetOwner() && GetLevel() >= RuleI(Combat, PetAttackMagicLevel)) {
//pets wouldn't actually use this but...
//it gives us an idea if we can hit due to the dual nature of this function
dmg = 1;
}
else if (GetSpecialAbility(SPECATK_MAGICAL))
{
dmg = 1;
}
else
return 0;
return 0;
}
}
else {

View File

@ -156,6 +156,9 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 bas
if (my_hit.base_damage == 0)
my_hit.base_damage = GetBaseSkillDamage(my_hit.skill);
if (base_damage = DMG_INVULNERABLE)
my_hit.damage_done = DMG_INVULNERABLE;
if (who->GetInvul() || who->GetSpecialAbility(IMMUNE_MELEE))
my_hit.damage_done = DMG_INVULNERABLE;
@ -1649,8 +1652,9 @@ void NPC::DoClassAttacks(Mob *target) {
DoAnim(animKick, 0, false);
int32 dmg = GetBaseSkillDamage(EQ::skills::SkillKick);
if (GetWeaponDamage(target, (const EQ::ItemData*)nullptr) <= 0)
if (GetWeaponDamage(target, (const EQ::ItemData*)nullptr) <= 0) {
dmg = DMG_INVULNERABLE;
}
reuse = (KickReuseTime + 3) * 1000;
DoSpecialAttackDamage(target, EQ::skills::SkillKick, dmg, GetMinDamage(), -1, reuse);