diff --git a/zone/spells.cpp b/zone/spells.cpp index 07a39678d..8117a8018 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -4552,13 +4552,23 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use int target_resist = GetResist(resist_type); + // JULY 24, 2002 changes + int level = GetLevel(); + if (IsPetOwnerClient() && caster->IsNPC() && !caster->IsPetOwnerClient()) { + auto owner = GetOwner(); + if (owner != nullptr) { + target_resist = std::max(target_resist, owner->GetResist(resist_type)); + level = owner->GetLevel(); + } + } + //Setup our base resist chance. int resist_chance = 0; int level_mod = 0; //Adjust our resist chance based on level modifiers uint8 caster_level = level_override > 0 ? level_override : caster->GetLevel(); - int temp_level_diff = GetLevel() - caster_level; + int temp_level_diff = level - caster_level; //Physical Resists are calclated using their own formula derived from extensive parsing. if (resist_type == RESIST_PHYSICAL) { @@ -4567,7 +4577,7 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use else { - if(IsNPC() && GetLevel() >= RuleI(Casting,ResistFalloff)) + if(IsNPC() && level >= RuleI(Casting,ResistFalloff)) { int a = (RuleI(Casting,ResistFalloff)-1) - caster_level; if(a > 0) @@ -4580,7 +4590,7 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use } } - if(IsClient() && GetLevel() >= 21 && temp_level_diff > 15) + if(IsClient() && level >= 21 && temp_level_diff > 15) { temp_level_diff = 15; } @@ -4596,16 +4606,16 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use level_mod = -level_mod; } - if(IsNPC() && (caster_level - GetLevel()) < -20) + if(IsNPC() && (caster_level - level) < -20) { level_mod = 1000; } //Even more level stuff this time dealing with damage spells - if(IsNPC() && IsDamageSpell(spell_id) && GetLevel() >= 17) + if(IsNPC() && IsDamageSpell(spell_id) && level >= 17) { int level_diff; - if(GetLevel() >= RuleI(Casting,ResistFalloff)) + if(level >= RuleI(Casting,ResistFalloff)) { level_diff = (RuleI(Casting,ResistFalloff)-1) - caster_level; if(level_diff < 0) @@ -4615,7 +4625,7 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use } else { - level_diff = GetLevel() - caster_level; + level_diff = level - caster_level; } level_mod += (2 * level_diff); } @@ -4726,17 +4736,17 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use if(IsNPC()) { - if(GetLevel() > caster_level && GetLevel() >= 17 && caster_level <= 50) + if(level > caster_level && level >= 17 && caster_level <= 50) { partial_modifier += 5; } - if(GetLevel() >= 30 && caster_level < 50) + if(level >= 30 && caster_level < 50) { partial_modifier += (caster_level - 25); } - if(GetLevel() < 15) + if(level < 15) { partial_modifier -= 5; } @@ -4744,9 +4754,9 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use if(caster->IsNPC()) { - if((GetLevel() - caster_level) >= 20) + if((level - caster_level) >= 20) { - partial_modifier += (GetLevel() - caster_level) * 1.5; + partial_modifier += (level - caster_level) * 1.5; } }