Skip to content

Commit ec32f4a

Browse files
author
LocalIdentity
committed
Recoup Energy Shield instead of life
1 parent 3e20161 commit ec32f4a

File tree

3 files changed

+67
-44
lines changed

3 files changed

+67
-44
lines changed

src/Modules/CalcDefence.lua

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,53 +1354,55 @@ function calcs.defence(env, actor)
13541354
local recoupTypeList = {"Life", "Mana", "EnergyShield"}
13551355
for _, recoupType in ipairs(recoupTypeList) do
13561356
local baseRecoup = modDB:Sum("BASE", nil, recoupType.."Recoup")
1357-
output[recoupType.."Recoup"] = baseRecoup * output[recoupType.."RecoveryRateMod"]
1358-
output["anyRecoup"] = output["anyRecoup"] + output[recoupType.."Recoup"]
1359-
if breakdown then
1360-
if output[recoupType.."RecoveryRateMod"] ~= 1 then
1361-
breakdown[recoupType.."Recoup"] = {
1362-
s_format("%d%% ^8(base)", baseRecoup),
1363-
s_format("* %.2f ^8(recovery rate modifier)", output[recoupType.."RecoveryRateMod"]),
1364-
s_format("= %.1f%% over %d seconds", output[recoupType.."Recoup"], (modDB:Flag(nil, "3Second"..recoupType.."Recoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4)
1365-
}
1366-
else
1367-
breakdown[recoupType.."Recoup"] = { s_format("%d%% over %d seconds", output[recoupType.."Recoup"], (modDB:Flag(nil, "3Second"..recoupType.."Recoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4) }
1357+
if recoupType == "Life" and modDB:Flag(nil, "EnergyShieldRecoupInsteadOfLife") then
1358+
output.LifeRecoup = 0
1359+
local lifeRecoup = modDB:Sum("BASE", nil, "LifeRecoup")
1360+
modDB:NewMod("EnergyShieldRecoup", "BASE", lifeRecoup, "Life Recoup Conversion")
1361+
else
1362+
output[recoupType.."Recoup"] = baseRecoup * output[recoupType.."RecoveryRateMod"]
1363+
output["anyRecoup"] = output["anyRecoup"] + output[recoupType.."Recoup"]
1364+
if breakdown then
1365+
if output[recoupType.."RecoveryRateMod"] ~= 1 then
1366+
breakdown[recoupType.."Recoup"] = {
1367+
s_format("%d%% ^8(base)", baseRecoup),
1368+
s_format("* %.2f ^8(recovery rate modifier)", output[recoupType.."RecoveryRateMod"]),
1369+
s_format("= %.1f%% over %d seconds", output[recoupType.."Recoup"], (modDB:Flag(nil, "3Second"..recoupType.."Recoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4)
1370+
}
1371+
else
1372+
breakdown[recoupType.."Recoup"] = { s_format("%d%% over %d seconds", output[recoupType.."Recoup"], (modDB:Flag(nil, "3Second"..recoupType.."Recoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4) }
1373+
end
13681374
end
13691375
end
13701376
end
13711377

13721378
if modDB:Flag(nil, "UsePowerCharges") and modDB:Flag(nil, "PowerChargesConvertToAbsorptionCharges") then
13731379
local ElementalEnergyShieldRecoupPerAbsorptionCharges = modDB:Sum("BASE", nil, "PerAbsorptionElementalEnergyShieldRecoup")
1374-
modDB:NewMod("ElementalEnergyShieldRecoup", "BASE", ElementalEnergyShieldRecoupPerAbsorptionCharges, "Absorption Charges", { type = "Multiplier", var = "AbsorptionCharge" } )
1375-
end
1376-
local ElementalEnergyShieldRecoup = modDB:Sum("BASE", nil, "ElementalEnergyShieldRecoup")
1377-
output.ElementalEnergyShieldRecoup = ElementalEnergyShieldRecoup * output.EnergyShieldRecoveryRateMod
1378-
output["anyRecoup"] = output["anyRecoup"] + output.ElementalEnergyShieldRecoup
1379-
if breakdown then
1380-
if output.EnergyShieldRecoveryRateMod ~= 1 then
1381-
breakdown.ElementalEnergyShieldRecoup = {
1382-
s_format("%d%% ^8(base)", ElementalEnergyShieldRecoup),
1383-
s_format("* %.2f ^8(recovery rate modifier)", output.EnergyShieldRecoveryRateMod),
1384-
s_format("= %.1f%% over %d seconds", output.ElementalEnergyShieldRecoup, (modDB:Flag(nil, "3SecondEnergyShieldRecoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4)
1385-
}
1386-
else
1387-
breakdown.ElementalEnergyShieldRecoup = { s_format("%d%% over %d seconds", output.ElementalEnergyShieldRecoup, (modDB:Flag(nil, "3SecondEnergyShieldRecoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4) }
1388-
end
1380+
modDB:NewMod("ColdEnergyShieldRecoup", "BASE", ElementalEnergyShieldRecoupPerAbsorptionCharges, "Absorption Charges", { type = "Multiplier", var = "AbsorptionCharge" } )
1381+
modDB:NewMod("FireEnergyShieldRecoup", "BASE", ElementalEnergyShieldRecoupPerAbsorptionCharges, "Absorption Charges", { type = "Multiplier", var = "AbsorptionCharge" } )
1382+
modDB:NewMod("LightningEnergyShieldRecoup", "BASE", ElementalEnergyShieldRecoupPerAbsorptionCharges, "Absorption Charges", { type = "Multiplier", var = "AbsorptionCharge" } )
13891383
end
1390-
1391-
for _, damageType in ipairs(dmgTypeList) do
1392-
local LifeRecoup = modDB:Sum("BASE", nil, damageType.."LifeRecoup")
1393-
output[damageType.."LifeRecoup"] = LifeRecoup * output.LifeRecoveryRateMod
1394-
output["anyRecoup"] = output["anyRecoup"] + output[damageType.."LifeRecoup"]
1395-
if breakdown then
1396-
if output.LifeRecoveryRateMod ~= 1 then
1397-
breakdown[damageType.."LifeRecoup"] = {
1398-
s_format("%d%% ^8(base)", LifeRecoup),
1399-
s_format("* %.2f ^8(recovery rate modifier)", output.LifeRecoveryRateMod),
1400-
s_format("= %.1f%% over %d seconds", output[damageType.."LifeRecoup"], (modDB:Flag(nil, "3SecondLifeRecoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4)
1401-
}
1384+
1385+
for _, recoupType in ipairs(recoupTypeList) do
1386+
for _, damageType in ipairs(dmgTypeList) do
1387+
if recoupType == "Life" and modDB:Flag(nil, "EnergyShieldRecoupInsteadOfLife") then
1388+
output[damageType.."LifeRecoup"] = 0
1389+
local lifeRecoup = modDB:Sum("BASE", nil, damageType.."LifeRecoup")
1390+
modDB:NewMod(damageType.."EnergyShieldRecoup", "BASE", lifeRecoup, "Life Recoup Conversion")
14021391
else
1403-
breakdown[damageType.."LifeRecoup"] = { s_format("%d%% over %d seconds", output[damageType.."LifeRecoup"], (modDB:Flag(nil, "3SecondLifeRecoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4) }
1392+
local recoup = modDB:Sum("BASE", nil, damageType..recoupType.."Recoup")
1393+
output[damageType..recoupType.."Recoup"] = recoup * output[recoupType.."RecoveryRateMod"]
1394+
output["anyRecoup"] = output["anyRecoup"] + output[damageType..recoupType.."Recoup"]
1395+
if breakdown then
1396+
if output[recoupType.."RecoveryRateMod"] ~= 1 then
1397+
breakdown[damageType..recoupType.."Recoup"] = {
1398+
s_format("%d%% ^8(base)", recoup),
1399+
s_format("* %.2f ^8(recovery rate modifier)", output[recoupType.."RecoveryRateMod"]),
1400+
s_format("= %.1f%% over %d seconds", output[damageType..recoupType.."Recoup"], (modDB:Flag(nil, "3Second"..recoupType.."Recoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4)
1401+
}
1402+
else
1403+
breakdown[damageType..recoupType.."Recoup"] = { s_format("%d%% over %d seconds", output[damageType..recoupType.."Recoup"], (modDB:Flag(nil, "3Second"..recoupType.."Recoup") or modDB:Flag(nil, "3SecondRecoup")) and 3 or 4) }
1404+
end
1405+
end
14041406
end
14051407
end
14061408
end

src/Modules/CalcSections.lua

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,10 +1494,30 @@ return {
14941494
{ label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" },
14951495
{ label = "FasterRecoup", modName = "3SecondRecoup" },
14961496
}, },
1497-
{ label = "Ele Recoup", haveOutput = "ElementalEnergyShieldRecoup", { format = "{1:output:ElementalEnergyShieldRecoup}%", { breakdown = "ElementalEnergyShieldRecoup" },
1498-
{ label = "Sources", modName = "ElementalEnergyShieldRecoup" },
1497+
{ label = "Phys Recoup", haveOutput = "PhysicalEnergyShieldRecoup", { format = "{1:output:PhysicalEnergyShieldRecoup}%", { breakdown = "PhysicalEnergyShieldRecoup" },
1498+
{ label = "Sources", modName = "PhysicalEnergyShieldRecoup" },
14991499
{ label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" },
1500-
{ label = "FasterRecoup", modName = "3SecondRecoup" },
1500+
{ label = "FasterRecoup", modName = { "3SecondRecoup", "3SecondEnergyShieldRecoup" } },
1501+
}, },
1502+
{ label = "Light Recoup", haveOutput = "LightningEnergyShieldRecoup", { format = "{1:output:LightningEnergyShieldRecoup}%", { breakdown = "LightningEnergyShieldRecoup" },
1503+
{ label = "Sources", modName = "LightningEnergyShieldRecoup" },
1504+
{ label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" },
1505+
{ label = "FasterRecoup", modName = { "3SecondRecoup", "3SecondEnergyShieldRecoup" } },
1506+
}, },
1507+
{ label = "Cold Recoup", haveOutput = "ColdEnergyShieldRecoup", { format = "{1:output:ColdEnergyShieldRecoup}%", { breakdown = "ColdEnergyShieldRecoup" },
1508+
{ label = "Sources", modName = "ColdEnergyShieldRecoup" },
1509+
{ label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" },
1510+
{ label = "FasterRecoup", modName = { "3SecondRecoup", "3SecondEnergyShieldRecoup" } },
1511+
}, },
1512+
{ label = "Fire Recoup", haveOutput = "FireEnergyShieldRecoup", { format = "{1:output:FireEnergyShieldRecoup}%", { breakdown = "FireEnergyShieldRecoup" },
1513+
{ label = "Sources", modName = "FireEnergyShieldRecoup" },
1514+
{ label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" },
1515+
{ label = "FasterRecoup", modName = { "3SecondRecoup", "3SecondEnergyShieldRecoup" } },
1516+
}, },
1517+
{ label = "Chaos Recoup", haveOutput = "ChaosEnergyShieldRecoup", { format = "{1:output:ChaosEnergyShieldRecoup}%", { breakdown = "ChaosEnergyShieldRecoup" },
1518+
{ label = "Sources", modName = "ChaosEnergyShieldRecoup" },
1519+
{ label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" },
1520+
{ label = "FasterRecoup", modName = { "3SecondRecoup", "3SecondEnergyShieldRecoup" } },
15011521
}, },
15021522
{ label = "Dmg. Mit. Regen", haveOutput = "PhysicalDamageMitigatedEnergyShieldPseudoRecoup", { format = "{1:output:PhysicalDamageMitigatedEnergyShieldPseudoRecoup}%", { breakdown = "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" },
15031523
{ label = "Sources", modName = "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" },
@@ -2231,7 +2251,7 @@ return {
22312251
},
22322252
{ format = "{0:output:EnergyShieldRecoupRecoveryMax}",
22332253
{ breakdown = "EnergyShieldRecoupRecoveryMax" },
2234-
{ label = "Sources", modName = { "EnergyShieldRecoup", "ElementalEnergyShieldRecoup", "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" } },
2254+
{ label = "Sources", modName = { "EnergyShieldRecoup", "PhysicalEnergyShieldRecoup", "LightningEnergyShieldRecoup", "ColdEnergyShieldRecoup", "FireEnergyShieldRecoup", "ChaosEnergyShieldRecoup", "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" } },
22352255
{ label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" },
22362256
{ label = "Faster Recoup", modName = "3SecondRecoup" },
22372257
},
@@ -2251,7 +2271,7 @@ return {
22512271
},
22522272
{ format = "{0:output:EnergyShieldRecoupRecoveryAvg}",
22532273
{ breakdown = "EnergyShieldRecoupRecoveryAvg" },
2254-
{ label = "Sources", modName = { "EnergyShieldRecoup", "ElementalEnergyShieldRecoup", "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" } },
2274+
{ label = "Sources", modName = { "EnergyShieldRecoup", "PhysicalEnergyShieldRecoup", "LightningEnergyShieldRecoup", "ColdEnergyShieldRecoup", "FireEnergyShieldRecoup", "ChaosEnergyShieldRecoup", "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" } },
22552275
{ label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" },
22562276
{ label = "Faster Recoup", modName = "3SecondRecoup" },
22572277
},

src/Modules/ModParser.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4451,6 +4451,7 @@ local specialModList = {
44514451
["(%d+)%% of damage taken while frozen recouped as life"] = function(num) return { mod("LifeRecoup", "BASE", num, { type = "Condition", var = "Frozen" }) } end,
44524452
["recoup effects instead occur over 3 seconds"] = { flag("3SecondRecoup") },
44534453
["life recoup effects instead occur over 3 seconds"] = { flag("3SecondLifeRecoup") },
4454+
["recoup energy shield instead of life"] = { flag("EnergyShieldRecoupInsteadOfLife") },
44544455
["([%d%.]+)%% of physical damage prevented from hits in the past (%d+) seconds is regenerated as life per second"] = function(num, _, duration) return {
44554456
mod("PhysicalDamageMitigatedLifePseudoRecoup", "BASE", num * duration),
44564457
mod("PhysicalDamageMitigatedLifePseudoRecoupDuration", "BASE", duration),

0 commit comments

Comments
 (0)