Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix multiple instances of 'x stat is increased by overcapped y resistance' stacking #6299

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions src/Modules/CalcDefence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,34 @@ function calcs.defence(env, actor)
end
end

if modDB:Flag(nil, "ArmourIncreasedByUncappedFireRes") then
for i, value in ipairs(modDB:Tabulate("FLAG", nil, "ArmourIncreasedByUncappedFireRes")) do
local mod = value.mod
modDB:NewMod("Armour", "INC", output.FireResistTotal, mod.source)
break
end
end
if modDB:Flag(nil, "ArmourIncreasedByOvercappedFireRes") then
for i, value in ipairs(modDB:Tabulate("FLAG", nil, "ArmourIncreasedByOvercappedFireRes")) do
local mod = value.mod
modDB:NewMod("Armour", "INC", output.FireResistOverCap, mod.source)
break
end
end
if modDB:Flag(nil, "EvasionRatingIncreasedByUncappedColdRes") then
for i, value in ipairs(modDB:Tabulate("FLAG", nil, "EvasionRatingIncreasedByUncappedColdRes")) do
local mod = value.mod
modDB:NewMod("Evasion", "INC", output.ColdResistTotal, mod.source)
break
end
end
if modDB:Flag(nil, "EvasionRatingIncreasedByOvercappedColdRes") then
for i, value in ipairs(modDB:Tabulate("FLAG", nil, "EvasionRatingIncreasedByOvercappedColdRes")) do
local mod = value.mod
modDB:NewMod("Evasion", "INC", output.ColdResistOverCap, mod.source)
break
end
end
-- Primary defences: Energy shield, evasion and armour
do
local ironReflexes = modDB:Flag(nil, "IronReflexes")
Expand Down
29 changes: 29 additions & 0 deletions src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,35 @@ function calcs.offence(env, actor, activeSkill)
end
end
end
if skillModList:Flag(nil, "CritChanceIncreasedByUncappedLightningRes") then
for i, value in ipairs(modDB:Tabulate("FLAG", nil, "CritChanceIncreasedByUncappedLightningRes")) do
local mod = value.mod
skillModList:NewMod("CritChance", "INC", output.LightningResistTotal, mod.source)
break
end
end
if skillModList:Flag(nil, "CritChanceIncreasedByLightningRes") then
for i, value in ipairs(modDB:Tabulate("FLAG", nil, "CritChanceIncreasedByLightningRes")) do
local mod = value.mod
skillModList:NewMod("CritChance", "INC", output.LightningResist, mod.source)
break
end
end
if skillModList:Flag(nil, "CritChanceIncreasedByOvercappedLightningRes") then
for i, value in ipairs(modDB:Tabulate("FLAG", nil, "CritChanceIncreasedByOvercappedLightningRes")) do
local mod = value.mod
skillModList:NewMod("CritChance", "INC", output.LightningResistOverCap, mod.source)
break
end
end
if skillModList:Flag(nil, "CritChanceIncreasedBySpellSuppressChance") then
for i, value in ipairs(modDB:Tabulate("FLAG", nil, "CritChanceIncreasedBySpellSuppressChance")) do
local mod = value.mod
skillModList:NewMod("CritChance", "INC", output.SpellSuppressionChance, mod.source)
break
end

end
if skillModList:Flag(nil, "LightRadiusAppliesToAccuracy") then
-- Light Radius conversion from Corona Solaris
for i, value in ipairs(skillModList:Tabulate("INC", { }, "LightRadius")) do
Expand Down
16 changes: 8 additions & 8 deletions src/Modules/ModParser.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2808,9 +2808,9 @@ local specialModList = {
["lightning damage with non%-critical strikes is lucky"] = { flag("LightningNoCritLucky") },
["your damage with critical strikes is lucky"] = { flag("CritLucky") },
["critical strikes deal no damage"] = { mod("Damage", "MORE", -100, { type = "Condition", var = "CriticalStrike" }) },
["critical strike chance is increased by uncapped lightning resistance"] = { mod("CritChance", "INC", 1, { type = "PerStat", stat = "LightningResistTotal", div = 1 }) },
["critical strike chance is increased by lightning resistance"] = { mod("CritChance", "INC", 1, { type = "PerStat", stat = "LightningResist", div = 1 }) },
["critical strike chance is increased by overcapped lightning resistance"] = { mod("CritChance", "INC", 1, { type = "PerStat", stat = "LightningResistOverCap", div = 1 }) },
["critical strike chance is increased by uncapped lightning resistance"] = { flag("CritChanceIncreasedByUncappedLightningRes") },
["critical strike chance is increased by lightning resistance"] = { flag("CritChanceIncreasedByLightningRes") },
["critical strike chance is increased by overcapped lightning resistance"] = { flag("CritChanceIncreasedByOvercappedLightningRes") },
["barrage and frenzy have (%d+)%% increased critical strike chance per endurance charge"] = function(num) return { mod("CritChance", "INC", num, { type = "Multiplier", var = "EnduranceCharge" }, { type = "SkillName", skillNameList = { "Barrage", "Frenzy" } }) } end,
["non%-critical strikes deal (%d+)%% damage"] = function(num) return { mod("Damage", "MORE", -100 + num, nil, ModFlag.Hit, { type = "Condition", var = "CriticalStrike", neg = true }) } end,
["non%-critical strikes deal no damage"] = { mod("Damage", "MORE", -100, nil, ModFlag.Hit, { type = "Condition", var = "CriticalStrike", neg = true }) },
Expand Down Expand Up @@ -3153,7 +3153,7 @@ local specialModList = {
mod("EnemyModifier", "LIST", { mod = mod("ColdExposure", "BASE", -10) }, { type = "Condition", var = "Effective" }, { type = "Condition", var = "SuppressedRecently" }),
mod("EnemyModifier", "LIST", { mod = mod("LightningExposure", "BASE", -10) }, { type = "Condition", var = "Effective" }, { type = "Condition", var = "SuppressedRecently" })
},
["critical strike chance is increased by chance to suppress spell damage"] = { mod("CritChance", "INC", 1, { type = "PerStat", stat = "SpellSuppressionChance", div = 1 }) },
["critical strike chance is increased by chance to suppress spell damage"] = { flag("CritChanceIncreasedBySpellSuppressChance") },
["you take (%d+)%% reduced extra damage from suppressed critical strikes"] = function(num) return { mod("ReduceSuppressedCritExtraDamage", "BASE", num) } end,
["+(%d+)%% chance to suppress spell damage if your e?q?u?i?p?p?e?d? ?boots, helmet and gloves have evasion"] = function(num) return {
mod("SpellSuppressionChance", "BASE", tonumber(num),
Expand Down Expand Up @@ -3842,11 +3842,11 @@ local specialModList = {
mod("EnemyModifier", "LIST", { mod = mod("ColdResist", "INC", num) }),
} end,
["nearby enemies are blinded while physical aegis is not depleted"] = { mod("EnemyModifier", "LIST", { mod = flag("Condition:Blinded") }, { type = "Condition", var = "PhysicalAegisDepleted", neg = true }) },
["armour is increased by uncapped fire resistance"] = { mod("Armour", "INC", 1, { type = "PerStat", stat = "FireResistTotal", div = 1 }) },
["armour is increased by overcapped fire resistance"] = { mod("Armour", "INC", 1, { type = "PerStat", stat = "FireResistOverCap", div = 1 }) },
["armour is increased by uncapped fire resistance"] = { flag( "ArmourIncreasedByUncappedFireRes") },
["armour is increased by overcapped fire resistance"] = { flag( "ArmourIncreasedByOvercappedFireRes") },
["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 }) }) },
["evasion rating is increased by uncapped cold resistance"] = { mod("Evasion", "INC", 1, { type = "PerStat", stat = "ColdResistTotal", div = 1 }) },
["evasion rating is increased by overcapped cold resistance"] = { mod("Evasion", "INC", 1, { type = "PerStat", stat = "ColdResistOverCap", div = 1 }) },
["evasion rating is increased by uncapped cold resistance"] = { flag( "EvasionRatingIncreasedByUncappedColdRes") },
["evasion rating is increased by overcapped cold resistance"] = { flag( "EvasionRatingIncreasedByOvercappedColdRes") },
["reflects (%d+) physical damage to melee attackers"] = { },
["ignore all movement penalties from armour"] = { flag("Condition:IgnoreMovementPenalties") },
["gain armour equal to your reserved mana"] = { mod("Armour", "BASE", 1, { type = "PerStat", stat = "ManaReserved", div = 1 }) },
Expand Down