Implement July 24, 2002 pet resist changes

This commit is contained in:
Michael Cook (mackal) 2017-12-23 22:48:21 -05:00
parent 0356c0a891
commit 6686346473

View File

@ -4552,13 +4552,23 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use
int target_resist = GetResist(resist_type); 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. //Setup our base resist chance.
int resist_chance = 0; int resist_chance = 0;
int level_mod = 0; int level_mod = 0;
//Adjust our resist chance based on level modifiers //Adjust our resist chance based on level modifiers
uint8 caster_level = level_override > 0 ? level_override : caster->GetLevel(); 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. //Physical Resists are calclated using their own formula derived from extensive parsing.
if (resist_type == RESIST_PHYSICAL) { if (resist_type == RESIST_PHYSICAL) {
@ -4567,7 +4577,7 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use
else { else {
if(IsNPC() && GetLevel() >= RuleI(Casting,ResistFalloff)) if(IsNPC() && level >= RuleI(Casting,ResistFalloff))
{ {
int a = (RuleI(Casting,ResistFalloff)-1) - caster_level; int a = (RuleI(Casting,ResistFalloff)-1) - caster_level;
if(a > 0) 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; 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; level_mod = -level_mod;
} }
if(IsNPC() && (caster_level - GetLevel()) < -20) if(IsNPC() && (caster_level - level) < -20)
{ {
level_mod = 1000; level_mod = 1000;
} }
//Even more level stuff this time dealing with damage spells //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; int level_diff;
if(GetLevel() >= RuleI(Casting,ResistFalloff)) if(level >= RuleI(Casting,ResistFalloff))
{ {
level_diff = (RuleI(Casting,ResistFalloff)-1) - caster_level; level_diff = (RuleI(Casting,ResistFalloff)-1) - caster_level;
if(level_diff < 0) if(level_diff < 0)
@ -4615,7 +4625,7 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use
} }
else else
{ {
level_diff = GetLevel() - caster_level; level_diff = level - caster_level;
} }
level_mod += (2 * level_diff); 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(IsNPC())
{ {
if(GetLevel() > caster_level && GetLevel() >= 17 && caster_level <= 50) if(level > caster_level && level >= 17 && caster_level <= 50)
{ {
partial_modifier += 5; partial_modifier += 5;
} }
if(GetLevel() >= 30 && caster_level < 50) if(level >= 30 && caster_level < 50)
{ {
partial_modifier += (caster_level - 25); partial_modifier += (caster_level - 25);
} }
if(GetLevel() < 15) if(level < 15)
{ {
partial_modifier -= 5; partial_modifier -= 5;
} }
@ -4744,9 +4754,9 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use
if(caster->IsNPC()) 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;
} }
} }