Add full support for exposures

This commit is contained in:
PJacek
2020-08-06 15:58:14 +02:00
parent a20fa0470f
commit eeda40f4ca
7 changed files with 85 additions and 10 deletions

View File

@@ -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 = {

View File

@@ -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 = {
},

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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 },

View File

@@ -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,