Add full support for exposures
This commit is contained in:
@@ -3936,7 +3936,7 @@ skills["FrostBomb"] = {
|
||||
castTime = 0.5,
|
||||
statMap = {
|
||||
["base_cold_damage_resistance_%"] = {
|
||||
mod("ColdResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }),
|
||||
mod("ColdExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }),
|
||||
},
|
||||
["energy_shield_recharge_rate_+%"] = {
|
||||
mod("EnergyShieldRecharge", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }),
|
||||
@@ -7342,7 +7342,7 @@ skills["FireBeam"] = {
|
||||
},
|
||||
statMap = {
|
||||
["base_fire_damage_resistance_%"] = {
|
||||
mod("FireResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "ScorchingRayMaxStages" }),
|
||||
mod("FireExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "ScorchingRayMaxStages" }),
|
||||
},
|
||||
},
|
||||
baseFlags = {
|
||||
@@ -9989,9 +9989,9 @@ skills["Purge"] = {
|
||||
castTime = 0.7,
|
||||
statMap = {
|
||||
["purge_expose_resist_%_matching_highest_element_damage"] = {
|
||||
mod("FireResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "WaveOfConvictionFireExposureActive" }),
|
||||
mod("ColdResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Cold Exposure", effectCond = "WaveOfConvictionColdExposureActive" }),
|
||||
mod("LightningResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Lightning Exposure", effectCond = "WaveOfConvictionLightningExposureActive" }),
|
||||
mod("FireExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "WaveOfConvictionFireExposureActive" }),
|
||||
mod("ColdExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Cold Exposure", effectCond = "WaveOfConvictionColdExposureActive" }),
|
||||
mod("LightningExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Lightning Exposure", effectCond = "WaveOfConvictionLightningExposureActive" }),
|
||||
},
|
||||
},
|
||||
baseFlags = {
|
||||
|
||||
@@ -3709,6 +3709,12 @@ skills["SupportSummonElementalResistances"] = {
|
||||
["support_minion_totem_resistance_elemental_damage_+%_final"] = {
|
||||
mod("MinionModifier", "LIST", { mod = mod("ElementalDamage", "MORE", nil) }),
|
||||
},
|
||||
["minions_inflict_exposure_on_hit_%_chance"] = {
|
||||
flag("Condition:ApplyFireExposure"),
|
||||
flag("Condition:ApplyColdExposure"),
|
||||
flag("Condition:ApplyLightningExposure"),
|
||||
mod("Dummy", "DUMMY", 1, 0, 0, { type = "Condition", var = "ApplyFireExposure" }, { type = "Condition", var = "ApplyColdExposure" }, { type = "Condition", var = "ApplyLightningExposure" }),
|
||||
},
|
||||
},
|
||||
baseMods = {
|
||||
},
|
||||
|
||||
@@ -680,7 +680,7 @@ local skills, mod, flag, skill = ...
|
||||
#flags spell area duration
|
||||
statMap = {
|
||||
["base_cold_damage_resistance_%"] = {
|
||||
mod("ColdResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }),
|
||||
mod("ColdExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }),
|
||||
},
|
||||
["energy_shield_recharge_rate_+%"] = {
|
||||
mod("EnergyShieldRecharge", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }),
|
||||
@@ -1258,7 +1258,7 @@ local skills, mod, flag, skill = ...
|
||||
},
|
||||
statMap = {
|
||||
["base_fire_damage_resistance_%"] = {
|
||||
mod("FireResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "ScorchingRayMaxStages" }),
|
||||
mod("FireExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "ScorchingRayMaxStages" }),
|
||||
},
|
||||
},
|
||||
#baseMod flag("Condition:ScorchingRayMaxStages", { type = "SkillPart", skillPart = 3 })
|
||||
@@ -1628,9 +1628,9 @@ local skills, mod, flag, skill = ...
|
||||
#flags spell area duration
|
||||
statMap = {
|
||||
["purge_expose_resist_%_matching_highest_element_damage"] = {
|
||||
mod("FireResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "WaveOfConvictionFireExposureActive" }),
|
||||
mod("ColdResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Cold Exposure", effectCond = "WaveOfConvictionColdExposureActive" }),
|
||||
mod("LightningResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Lightning Exposure", effectCond = "WaveOfConvictionLightningExposureActive" }),
|
||||
mod("FireExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "WaveOfConvictionFireExposureActive" }),
|
||||
mod("ColdExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Cold Exposure", effectCond = "WaveOfConvictionColdExposureActive" }),
|
||||
mod("LightningExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Lightning Exposure", effectCond = "WaveOfConvictionLightningExposureActive" }),
|
||||
},
|
||||
},
|
||||
#mods
|
||||
|
||||
@@ -432,6 +432,12 @@ local skills, mod, flag, skill = ...
|
||||
["support_minion_totem_resistance_elemental_damage_+%_final"] = {
|
||||
mod("MinionModifier", "LIST", { mod = mod("ElementalDamage", "MORE", nil) }),
|
||||
},
|
||||
["minions_inflict_exposure_on_hit_%_chance"] = {
|
||||
flag("Condition:ApplyFireExposure"),
|
||||
flag("Condition:ApplyColdExposure"),
|
||||
flag("Condition:ApplyLightningExposure"),
|
||||
mod("Dummy", "DUMMY", 1, 0, 0, { type = "Condition", var = "ApplyFireExposure" }, { type = "Condition", var = "ApplyColdExposure" }, { type = "Condition", var = "ApplyLightningExposure" }),
|
||||
},
|
||||
},
|
||||
#mods
|
||||
|
||||
|
||||
@@ -1509,6 +1509,19 @@ function calcs.perform(env)
|
||||
end
|
||||
doActorMisc(env, env.enemy)
|
||||
|
||||
-- Apply exposures
|
||||
for _, element in pairs({"Fire", "Cold", "Lightning"}) do
|
||||
if(enemyDB:HasMod("BASE", nil, element.."Exposure")) then
|
||||
local min = math.huge
|
||||
for _, mod in ipairs(enemyDB:Tabulate("BASE", nil, element.."Exposure")) do
|
||||
if mod.value < min then
|
||||
min = mod.value
|
||||
end
|
||||
end
|
||||
enemyDB:NewMod(element.."Resist", "BASE", min, element.." Exposure")
|
||||
end
|
||||
end
|
||||
|
||||
-- Defence/offence calculations
|
||||
calcs.defence(env, env.player)
|
||||
calcs.offence(env, env.player, env.player.mainSkill)
|
||||
|
||||
@@ -1050,6 +1050,15 @@ return {
|
||||
{ var = "multiplierFreezeShockIgniteOnEnemy", type = "count", label = "# of Freeze/Shock/Ignite on enemy:", ifMult = "FreezeShockIgniteOnEnemy", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("Multiplier:FreezeShockIgniteOnEnemy", "BASE", val, "Config", { type = "Condition", var = "Effective" })
|
||||
end },
|
||||
{ var = "conditionEnemyFireExposure", type = "check", label = "Is the enemy Exposed to Fire?", ifCond = "ApplyFireExposure", tooltip = "This applies -10% Fire Resistance to the enemy.", apply = function(val, modList, enemyModList)
|
||||
enemyModList:NewMod("FireExposure", "BASE", -10, "Config", { type = "Condition", var = "Effective" })
|
||||
end },
|
||||
{ var = "conditionEnemyColdExposure", type = "check", label = "Is the enemy Exposed to Cold?", ifCond = "ApplyColdExposure", tooltip = "This applies -10% Cold Resistance to the enemy.", apply = function(val, modList, enemyModList)
|
||||
enemyModList:NewMod("ColdExposure", "BASE", -10, "Config", { type = "Condition", var = "Effective" })
|
||||
end },
|
||||
{ var = "conditionEnemyLightningExposure", type = "check", label = "Is the enemy Exposed to Lightning?", ifCond = "ApplyLightningExposure", tooltip = "This applies -10% Lightning Resistance to the enemy.", apply = function(val, modList, enemyModList)
|
||||
enemyModList:NewMod("LightningExposure", "BASE", -10, "Config", { type = "Condition", var = "Effective" })
|
||||
end },
|
||||
{ var = "conditionEnemyIntimidated", type = "check", ifVer = "2_6", label = "Is the enemy Intimidated?", tooltip = "This adds the following modifiers:\n10% increased Damage Taken by enemy", apply = function(val, modList, enemyModList)
|
||||
enemyModList:NewMod("DamageTaken", "INC", 10, "Intimidate")
|
||||
end },
|
||||
|
||||
@@ -1544,6 +1544,11 @@ local specialModList = {
|
||||
mod("AvoidIgnite", "BASE", 100, { type = "Condition", var = "Phasing" }),
|
||||
mod("AvoidShock", "BASE", 100, { type = "Condition", var = "Phasing" }),
|
||||
},
|
||||
["nearby enemies have fire, cold and lightning exposure while you have phasing, applying %-(%d+)%% to those resistances"] = function(num) return {
|
||||
mod("EnemyModifier", "LIST", { mod = mod("FireExposure", "BASE", -num) }, { type = "Condition", var = "Phasing" } ),
|
||||
mod("EnemyModifier", "LIST", { mod = mod("ColdExposure", "BASE", -num) }, { type = "Condition", var = "Phasing" } ),
|
||||
mod("EnemyModifier", "LIST", { mod = mod("LightningExposure", "BASE", -num) }, { type = "Condition", var = "Phasing" } ),
|
||||
} end,
|
||||
-- Saboteur
|
||||
["immune to ignite and shock"] = {
|
||||
mod("AvoidIgnite", "BASE", 100),
|
||||
@@ -1919,6 +1924,42 @@ local specialModList = {
|
||||
["you take (%d+) chaos damage per second for 3 seconds on kill"] = function(num) return { mod("ChaosDegen", "BASE", num, { type = "Condition", var = "KilledLast3Seconds" }) } end,
|
||||
["regenerate (%d+) life over 1 second for each spell you cast"] = function(num) return { mod("LifeRegen", "BASE", num, { type = "Condition", var = "CastLast1Seconds" }) } end,
|
||||
["and nearby allies regenerate (%d+) life per second"] = function(num) return { mod("LifeRegen", "BASE", num, { type = "Condition", var = "KilledPosionedLast2Seconds" }) } end,
|
||||
["fire skills have a %d+%% chance to apply fire exposure on hit"] = {
|
||||
flag("Condition:ApplyFireExposure"),
|
||||
mod("Dummy", "DUMMY", 1, { type = "Condition", var = "ApplyFireExposure" }), -- Make the Configuration option appear
|
||||
},
|
||||
["cold skills have a %d+%% chance to apply cold exposure on hit"] = {
|
||||
flag("Condition:ApplyColdExposure"),
|
||||
mod("Dummy", "DUMMY", 1, { type = "Condition", var = "ApplyColdExposure" }), -- Make the Configuration option appear
|
||||
},
|
||||
["lightning skills have a %d+%% chance to apply lightning exposure on hit"] = {
|
||||
flag("Condition:ApplyLightningExposure"),
|
||||
mod("Dummy", "DUMMY", 1, { type = "Condition", var = "ApplyLightningExposure" }), -- Make the Configuration option appear
|
||||
},
|
||||
["%d+%% chance to inflict fire exposure on hit"] = {
|
||||
flag("Condition:ApplyFireExposure"),
|
||||
mod("Dummy", "DUMMY", 1, { type = "Condition", var = "ApplyFireExposure" }), -- Make the Configuration option appear
|
||||
},
|
||||
["%d+%% chance to inflict cold exposure on hit"] = {
|
||||
flag("Condition:ApplyColdExposure"),
|
||||
mod("Dummy", "DUMMY", 1, { type = "Condition", var = "ApplyColdExposure" }), -- Make the Configuration option appear
|
||||
},
|
||||
["%d+%% chance to inflict lightning exposure on hit"] = {
|
||||
flag("Condition:ApplyLightningExposure"),
|
||||
mod("Dummy", "DUMMY", 1, { type = "Condition", var = "ApplyLightningExposure" }), -- Make the Configuration option appear
|
||||
},
|
||||
["nearby enemies have fire exposure"] = {
|
||||
mod("EnemyModifier", "LIST", { mod = mod("FireExposure", "BASE", -10) }, { type = "Condition", var = "Effective" }),
|
||||
},
|
||||
["nearby enemies have fire exposure while you are affected by herald of ash"] = {
|
||||
mod("EnemyModifier", "LIST", { mod = mod("FireExposure", "BASE", -10) }, { type = "Condition", var = "Effective" }, { type = "Condition", var = "AffectedByHeraldofAsh" }),
|
||||
},
|
||||
["nearby enemies have cold exposure while you are affected by herald of ice"] = {
|
||||
mod("EnemyModifier", "LIST", { mod = mod("ColdExposure", "BASE", -10) }, { type = "Condition", var = "Effective" }, { type = "Condition", var = "AffectedByHeraldofIce" }),
|
||||
},
|
||||
["nearby enemies have lightning exposure while you are affected by herald of thunder"] = {
|
||||
mod("EnemyModifier", "LIST", { mod = mod("LightningExposure", "BASE", -10) }, { type = "Condition", var = "Effective" }, { type = "Condition", var = "AffectedByHeraldofThunder" }),
|
||||
},
|
||||
-- Traps, Mines and Totems
|
||||
["traps and mines deal (%d+)%-(%d+) additional physical damage"] = function(_, min, max) return { mod("PhysicalMin", "BASE", tonumber(min), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)), mod("PhysicalMax", "BASE", tonumber(max), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)) } end,
|
||||
["traps and mines deal (%d+) to (%d+) additional physical damage"] = function(_, min, max) return { mod("PhysicalMin", "BASE", tonumber(min), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)), mod("PhysicalMax", "BASE", tonumber(max), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)) } end,
|
||||
|
||||
Reference in New Issue
Block a user