Skip to content

Commit 44b70c9

Browse files
authored
Add support for Unnatural Resilience notable (#377)
* parse unnatural resilience and process ResistanceTotals in CalcDefence.lua before calcing ResistMax * fix parser stat
1 parent cea24cc commit 44b70c9

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

src/Data/ModCache.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1062,7 +1062,7 @@ c["2% increased Lightning Damage per 10 Intelligence"]={{[1]={[1]={div=10,stat="
10621062
c["2% increased Maximum Life per socketed Grand Spectrum"]={{[1]={[1]={type="Multiplier",var="GrandSpectrum"},flags=0,keywordFlags=0,name="Life",type="INC",value=2}},nil}
10631063
c["2% increased Movement Speed"]={{[1]={flags=0,keywordFlags=0,name="MovementSpeed",type="INC",value=2}},nil}
10641064
c["2% increased Spirit per socketed Grand Spectrum"]={{[1]={[1]={type="Multiplier",var="GrandSpectrum"},flags=0,keywordFlags=0,name="Spirit",type="INC",value=2}},nil}
1065-
c["2% to Maximum Fire Resistance for each 40% Uncapped Fire Resistance"]={{[1]={flags=0,keywordFlags=0,name="FireResistMax",type="BASE",value=2}},"% to for each 40% Uncapped Fire Resistance "}
1065+
c["2% to Maximum Fire Resistance for each 40% Uncapped Fire Resistance"]={{[1]={[1]={div=40,stat="FireResistTotal",type="PerStat"},flags=0,keywordFlags=0,name="FireResistMax",type="BASE",value=2}},nil}
10661066
c["20 Life Regeneration per second"]={{[1]={flags=0,keywordFlags=0,name="LifeRegen",type="BASE",value=20}},nil}
10671067
c["20 Passive Skill Points become Weapon Set Skill Points"]={{[1]={flags=0,keywordFlags=0,name="PassivePointsToWeaponSetPoints",type="BASE",value=20}},nil}
10681068
c["20 to 30 Physical Thorns damage"]={{[1]={flags=0,keywordFlags=0,name="Damage",type="BASE",value=20}}," to 30 Physical Thorns "}

src/Modules/CalcDefence.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,6 @@ function calcs.defence(env, actor)
651651
for _, elem in ipairs(resistTypeList) do
652652
local min, max, total, dotTotal, totemTotal, totemMax
653653
min = data.misc.ResistFloor
654-
max = modDB:Override(nil, elem.."ResistMax") or m_min(data.misc.MaxResistCap, modDB:Sum("BASE", nil, elem.."ResistMax", isElemental[elem] and "ElementalResistMax"))
655654
total = modDB:Override(nil, elem.."Resist")
656655
totemMax = modDB:Override(nil, "Totem"..elem.."ResistMax") or m_min(data.misc.MaxResistCap, modDB:Sum("BASE", nil, "Totem"..elem.."ResistMax", isElemental[elem] and "TotemElementalResistMax"))
657656
totemTotal = modDB:Override(nil, "Totem"..elem.."Resist")
@@ -669,6 +668,10 @@ function calcs.defence(env, actor)
669668

670669
-- Fractional resistances are truncated
671670
total = m_modf(total)
671+
-- Unnatural Resilience needs FireResistTotal before we calc FireResistMax
672+
output[elem.."ResistTotal"] = total
673+
max = modDB:Override(nil, elem.."ResistMax") or m_min(data.misc.MaxResistCap, modDB:Sum("BASE", nil, elem.."ResistMax", isElemental[elem] and "ElementalResistMax"))
674+
672675
dotTotal = dotTotal and m_modf(dotTotal) or total
673676
totemTotal = m_modf(totemTotal)
674677
min = m_modf(min)
@@ -680,7 +683,6 @@ function calcs.defence(env, actor)
680683
local totemFinal = m_max(m_min(totemTotal, totemMax), min)
681684

682685
output[elem.."Resist"] = final
683-
output[elem.."ResistTotal"] = total
684686
output[elem.."ResistOverCap"] = m_max(0, total - max)
685687
output[elem.."ResistOver75"] = m_max(0, final - 75)
686688
output["Missing"..elem.."Resist"] = m_max(0, max - final)

src/Modules/ModParser.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4276,6 +4276,7 @@ local specialModList = {
42764276
["armour is increased by uncapped fire resistance"] = { flag( "ArmourIncreasedByUncappedFireRes") },
42774277
["armour is increased by overcapped fire resistance"] = { flag( "ArmourIncreasedByOvercappedFireRes") },
42784278
["minion life is increased by t?h?e?i?r? ?overcapped fire resistance"] = { mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1, { type = "PerStat", stat = "FireResistOverCap", div = 1 }) }) },
4279+
["(%d+)%% to maximum fire resistance for each (%d+)%% uncapped fire resistance"] = function(num, _, percent) return { mod("FireResistMax", "BASE", num, { type = "PerStat", stat = "FireResistTotal", div = tonumber(percent) }) } end,
42794280
["evasion rating is increased by uncapped cold resistance"] = { flag( "EvasionRatingIncreasedByUncappedColdRes") },
42804281
["evasion rating is increased by overcapped cold resistance"] = { flag( "EvasionRatingIncreasedByOvercappedColdRes") },
42814282
["reflects (%d+) physical damage to melee attackers"] = { },

0 commit comments

Comments
 (0)