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);
// 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;
}
}