diff --git a/zone/attack.cpp b/zone/attack.cpp index 633383d17..30b61f4a2 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -5286,28 +5286,31 @@ bool Mob::TryRootFadeByDamage(int buffslot, Mob* attacker) { - Root break chance values obtained from live parses. */ - if (!attacker || !spellbonuses.Root[SBIndex::ROOT_EXISTS] || spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] < 0) + if (!attacker || !spellbonuses.Root[SBIndex::ROOT_EXISTS] || spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] < 0) { return false; + } + + if (IsDetrimentalSpell(buffs[spellbonuses.Root[SBIndex::ROOT_BUFFSLOT]].spellid) && spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] != buffslot) { - if (IsDetrimentalSpell(spellbonuses.Root[SBIndex::ROOT_BUFFSLOT]) && spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] != buffslot) { int BreakChance = RuleI(Spells, RootBreakFromSpells); - BreakChance -= BreakChance * buffs[spellbonuses.Root[SBIndex::ROOT_BUFFSLOT]].RootBreakChance / 100; int level_diff = attacker->GetLevel() - GetLevel(); //Use baseline if level difference <= 1 (ie. If target is (1) level less than you, or equal or greater level) - if (level_diff == 2) + if (level_diff == 2) { BreakChance = (BreakChance * 80) / 100; //Decrease by 20%; - - else if (level_diff >= 3 && level_diff <= 20) + } + else if (level_diff >= 3 && level_diff <= 20) { BreakChance = (BreakChance * 60) / 100; //Decrease by 40%; - - else if (level_diff > 21) + } + else if (level_diff > 21) { BreakChance = (BreakChance * 20) / 100; //Decrease by 80%; + } - if (BreakChance < 1) + if (BreakChance < 1) { BreakChance = 1; + } if (zone->random.Roll(BreakChance)) {