Skip to content

Commit f6b00ce

Browse files
authored
Fix buff stages on Scorching Ray, Frost Shield, and Sigil of Power (#4645)
* Added stat in statmap for CircleOfPower * Cleaning up code around frost shield, scorching ray, and sigil of power * Re-export to remove effectName * Fix maximum stages tooltip Co-authored-by: talkmill <talkmill@gmail.com> Co-authored-by: LocalIdentity <localidentity2@gmail.com> Fixes #1598
1 parent 03fa9f2 commit f6b00ce

File tree

5 files changed

+62
-30
lines changed

5 files changed

+62
-30
lines changed

src/Data/Skills/act_int.lua

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4701,7 +4701,7 @@ skills["FrostGlobe"] = {
47014701
castTime = 0.5,
47024702
statMap = {
47034703
["frost_globe_additional_spell_base_critical_strike_chance_per_stage"] = {
4704-
mod("CritChance", "BASE", nil, ModFlag.Spell, 0, { type = "Multiplier", var = "FrostShieldStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
4704+
mod("CritChance", "BASE", nil, ModFlag.Spell, 0, { type = "Multiplier", var = "FrostShieldStage", limitVar = "FrostShieldMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
47054705
div = 100,
47064706
},
47074707
["energy_shield_lost_per_minute"] = {
@@ -4715,7 +4715,10 @@ skills["FrostGlobe"] = {
47154715
mod("FrostGlobeDamageMitigation", "BASE", nil, 0, 0, { type = "ActorCondition", actor = "enemy", var = "EnemyInFrostGlobe", neg = true }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
47164716
},
47174717
["frost_globe_health_per_stage"] = {
4718-
mod("FrostGlobeHealth", "BASE", nil, 0, 0, { type = "Multiplier", var = "FrostShieldStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
4718+
mod("FrostGlobeHealth", "BASE", nil, 0, 0, { type = "Multiplier", var = "FrostShieldStage", limitVar = "FrostShieldMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
4719+
},
4720+
["frost_globe_max_stages"] = {
4721+
mod("Multiplier:FrostShieldMaxStages", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }),
47194722
},
47204723
},
47214724
baseFlags = {
@@ -8314,6 +8317,15 @@ skills["FireBeam"] = {
83148317
skillTypes = { [SkillType.Spell] = true, [SkillType.Totemable] = true, [SkillType.DamageOverTime] = true, [SkillType.Fire] = true, [SkillType.CausesBurning] = true, [SkillType.Duration] = true, [SkillType.Channel] = true, [SkillType.DegenOnlySpellDamage] = true, },
83158318
statDescriptionScope = "debuff_skill_stat_descriptions",
83168319
castTime = 0.25,
8320+
parts = {
8321+
{
8322+
name = "Manual Stages",
8323+
stages = true,
8324+
},
8325+
{
8326+
name = "Maximum Sustainable Stages",
8327+
},
8328+
},
83178329
statMap = {
83188330
["base_fire_damage_resistance_%"] = {
83198331
mod("FireExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "ScorchingRayMaxStages" }),
@@ -8323,7 +8335,7 @@ skills["FireBeam"] = {
83238335
base = 100
83248336
},
83258337
["display_max_fire_beam_stacks"] = {
8326-
mod("Multiplier:ScorchingRayMaxStages", "BASE", nil),
8338+
mod("Multiplier:ScorchingRayMaxStages", "BASE", nil, 0, 0, { type = "SkillPart", skillPart = 1 }),
83278339
},
83288340
},
83298341
baseFlags = {
@@ -8508,19 +8520,27 @@ skills["CircleOfPower"] = {
85088520
mod("ManaCost", "INC", nil, 0, 0, { type = "MultiplierThreshold", var = "SigilOfPowerStage", threshold = 1 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
85098521
},
85108522
["circle_of_power_min_added_lightning_per_stage"] = {
8511-
mod("LightningMin", "BASE", nil, 0, 0, { type = "Multiplier", var = "SigilOfPowerStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
8512-
mod("LightningMin", "BASE", nil, 0, 0, { type = "Multiplier", actor = "parent", var = "SigilOfPowerStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
8523+
mod("LightningMin", "BASE", nil, 0, 0, { type = "Multiplier", var = "SigilOfPowerStage", limitVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
8524+
mod("LightningMin", "BASE", nil, 0, 0, { type = "Multiplier", actor = "parent", var = "SigilOfPowerStage", limitVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
85138525
},
85148526
["circle_of_power_max_added_lightning_per_stage"] = {
8515-
mod("LightningMax", "BASE", nil, 0, 0, { type = "Multiplier", var = "SigilOfPowerStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
8516-
mod("LightningMax", "BASE", nil, 0, 0, { type = "Multiplier", actor = "parent", var = "SigilOfPowerStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
8527+
mod("LightningMax", "BASE", nil, 0, 0, { type = "Multiplier", var = "SigilOfPowerStage", limitVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
8528+
mod("LightningMax", "BASE", nil, 0, 0, { type = "Multiplier", actor = "parent", var = "SigilOfPowerStage", limitVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
85178529
},
8530+
["circle_of_power_enemy_damage_+%_final_at_max_stages"] = {
8531+
mod("Damage", "MORE", nil, 0, 0, { type = "MultiplierThreshold", actor = "enemy", var = "SigilOfPowerStage", thresholdVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Debuff", effectName = "Sigil of Power" }),
8532+
},
85188533
["spell_damage_+%"] = {
85198534
mod("Damage", "INC", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
85208535
},
85218536
["base_chance_to_shock_%_from_skill"] = {
85228537
mod("EnemyShockChance", "BASE", nil, 0, 0, { type = "MultiplierThreshold", var = "SigilOfPowerStage", threshold = 1 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
85238538
},
8539+
["circle_of_power_max_stages"] = {
8540+
mod("Multiplier:SigilOfPowerMaxStages", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }),
8541+
},
8542+
["quality_display_circle_of_power_is_gem"] = {
8543+
},
85248544
},
85258545
baseFlags = {
85268546
spell = true,

src/Export/Skills/act_int.txt

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,7 @@ local skills, mod, flag, skill = ...
10531053
#flags spell area duration
10541054
statMap = {
10551055
["frost_globe_additional_spell_base_critical_strike_chance_per_stage"] = {
1056-
mod("CritChance", "BASE", nil, ModFlag.Spell, 0, { type = "Multiplier", var = "FrostShieldStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
1056+
mod("CritChance", "BASE", nil, ModFlag.Spell, 0, { type = "Multiplier", var = "FrostShieldStage", limitVar = "FrostShieldMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
10571057
div = 100,
10581058
},
10591059
["energy_shield_lost_per_minute"] = {
@@ -1067,7 +1067,10 @@ local skills, mod, flag, skill = ...
10671067
mod("FrostGlobeDamageMitigation", "BASE", nil, 0, 0, { type = "ActorCondition", actor = "enemy", var = "EnemyInFrostGlobe", neg = true }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
10681068
},
10691069
["frost_globe_health_per_stage"] = {
1070-
mod("FrostGlobeHealth", "BASE", nil, 0, 0, { type = "Multiplier", var = "FrostShieldStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
1070+
mod("FrostGlobeHealth", "BASE", nil, 0, 0, { type = "Multiplier", var = "FrostShieldStage", limitVar = "FrostShieldMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Frost Shield" }),
1071+
},
1072+
["frost_globe_max_stages"] = {
1073+
mod("Multiplier:FrostShieldMaxStages", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }),
10711074
},
10721075
},
10731076
#baseMod skill("radius", 22)
@@ -1720,6 +1723,15 @@ local skills, mod, flag, skill = ...
17201723

17211724
#skill FireBeam
17221725
#flags spell duration
1726+
parts = {
1727+
{
1728+
name = "Manual Stages",
1729+
stages = true,
1730+
},
1731+
{
1732+
name = "Maximum Sustainable Stages",
1733+
},
1734+
},
17231735
statMap = {
17241736
["base_fire_damage_resistance_%"] = {
17251737
mod("FireExposure", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Fire Exposure", effectCond = "ScorchingRayMaxStages" }),
@@ -1729,7 +1741,7 @@ local skills, mod, flag, skill = ...
17291741
base = 100
17301742
},
17311743
["display_max_fire_beam_stacks"] = {
1732-
mod("Multiplier:ScorchingRayMaxStages", "BASE", nil),
1744+
mod("Multiplier:ScorchingRayMaxStages", "BASE", nil, 0, 0, { type = "SkillPart", skillPart = 1 }),
17331745
},
17341746
},
17351747
#baseMod mod("Condition:ScorchingRayMaxStages", "FLAG", true, 0, 0, { type = "MultiplierThreshold", var = "ScorchingRayStageAfterFirst", threshold = 7 })
@@ -1763,19 +1775,27 @@ local skills, mod, flag, skill = ...
17631775
mod("ManaCost", "INC", nil, 0, 0, { type = "MultiplierThreshold", var = "SigilOfPowerStage", threshold = 1 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
17641776
},
17651777
["circle_of_power_min_added_lightning_per_stage"] = {
1766-
mod("LightningMin", "BASE", nil, 0, 0, { type = "Multiplier", var = "SigilOfPowerStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
1767-
mod("LightningMin", "BASE", nil, 0, 0, { type = "Multiplier", actor = "parent", var = "SigilOfPowerStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
1778+
mod("LightningMin", "BASE", nil, 0, 0, { type = "Multiplier", var = "SigilOfPowerStage", limitVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
1779+
mod("LightningMin", "BASE", nil, 0, 0, { type = "Multiplier", actor = "parent", var = "SigilOfPowerStage", limitVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
17681780
},
17691781
["circle_of_power_max_added_lightning_per_stage"] = {
1770-
mod("LightningMax", "BASE", nil, 0, 0, { type = "Multiplier", var = "SigilOfPowerStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
1771-
mod("LightningMax", "BASE", nil, 0, 0, { type = "Multiplier", actor = "parent", var = "SigilOfPowerStage", limit = 4 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
1782+
mod("LightningMax", "BASE", nil, 0, 0, { type = "Multiplier", var = "SigilOfPowerStage", limitVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
1783+
mod("LightningMax", "BASE", nil, 0, 0, { type = "Multiplier", actor = "parent", var = "SigilOfPowerStage", limitVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
17721784
},
1785+
["circle_of_power_enemy_damage_+%_final_at_max_stages"] = {
1786+
mod("Damage", "MORE", nil, 0, 0, { type = "MultiplierThreshold", actor = "enemy", var = "SigilOfPowerStage", thresholdVar = "SigilOfPowerMaxStages" }, { type = "GlobalEffect", effectType = "Debuff", effectName = "Sigil of Power" }),
1787+
},
17731788
["spell_damage_+%"] = {
17741789
mod("Damage", "INC", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
17751790
},
17761791
["base_chance_to_shock_%_from_skill"] = {
17771792
mod("EnemyShockChance", "BASE", nil, 0, 0, { type = "MultiplierThreshold", var = "SigilOfPowerStage", threshold = 1 }, { type = "GlobalEffect", effectType = "Buff", effectName = "Sigil of Power" }),
17781793
},
1794+
["circle_of_power_max_stages"] = {
1795+
mod("Multiplier:SigilOfPowerMaxStages", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }),
1796+
},
1797+
["quality_display_circle_of_power_is_gem"] = {
1798+
},
17791799
},
17801800
#baseMod skill("radius", 30)
17811801
#baseMod skill("buffAllies", true)

src/Modules/CalcPerform.lua

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2311,10 +2311,6 @@ function calcs.perform(env, avoidCache)
23112311
local maximum = m_min((m_floor(rate * duration) - 1), 7)
23122312
activeSkill.skillModList:NewMod("Multiplier:ScorchingRayMaxStages", "BASE", maximum, "Base")
23132313
activeSkill.skillModList:NewMod("Multiplier:ScorchingRayStageAfterFirst", "BASE", maximum, "Base")
2314-
if maximum >= 7 then
2315-
activeSkill.skillModList:NewMod("Condition:ScorchingRayMaxStages", "FLAG", true, "Config")
2316-
enemyDB:NewMod("FireResist", "BASE", -25, "Scorching Ray", { type = "GlobalEffect", effectType = "Debuff" } )
2317-
end
23182314
end
23192315
end
23202316

src/Modules/ConfigOptions.lua

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,6 @@ return {
255255
{ var = "flameWallAddedDamage", type = "check", label = "Projectile Travelled through Flame Wall?", ifSkill = "Flame Wall", apply = function(val, modList, enemyModList)
256256
modList:NewMod("Condition:FlameWallAddedDamage", "FLAG", true, "Config")
257257
end },
258-
{ label = "Frostbolt:", ifSkill = "Frostbolt" },
259-
{ var = "frostboltExposure", type = "check", label = "Can you apply Exposure?", ifSkill = "Frostbolt", apply = function(val, modList, enemyModList)
260-
modList:NewMod("ColdExposureChance", "BASE", 20, "Config")
261-
end },
262258
{ label = "Frost Shield:", ifSkill = "Frost Shield" },
263259
{ var = "frostShieldStages", type = "count", label = "Stages:", ifSkill = "Frost Shield", apply = function(val, modList, enemyModList)
264260
modList:NewMod("Multiplier:FrostShieldStage", "BASE", val, "Config")

src/Modules/StatDescriber.lua

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,20 @@ local function applySpecial(val, spec)
6363
val[spec.v].min = val[spec.v].min / 15
6464
val[spec.v].max = val[spec.v].max / 15
6565
elseif spec.k == "divide_by_five" then
66-
val[spec.v].min = round(val[spec.v].min / 5, 1)
67-
val[spec.v].max = round(val[spec.v].max / 5, 1)
66+
val[spec.v].min = val[spec.v].min / 5
67+
val[spec.v].max = val[spec.v].max / 5
6868
val[spec.v].fmt = "g"
6969
elseif spec.k == "divide_by_six" then
70-
val[spec.v].min = round(val[spec.v].min / 6, 1)
71-
val[spec.v].max = round(val[spec.v].max / 6, 1)
70+
val[spec.v].min = val[spec.v].min / 6
71+
val[spec.v].max = val[spec.v].max / 6
7272
val[spec.v].fmt = "g"
7373
elseif spec.k == "divide_by_twelve" then
74-
val[spec.v].min = round(val[spec.v].min / 12, 1)
75-
val[spec.v].max = round(val[spec.v].max / 12, 1)
74+
val[spec.v].min = val[spec.v].min / 12
75+
val[spec.v].max = val[spec.v].max / 12
7676
val[spec.v].fmt = "g"
7777
elseif spec.k == "divide_by_one_hundred" then
78-
val[spec.v].min = round(val[spec.v].min / 100, 1)
79-
val[spec.v].max = round(val[spec.v].max / 100, 1)
78+
val[spec.v].min = val[spec.v].min / 100
79+
val[spec.v].max = val[spec.v].max / 100
8080
val[spec.v].fmt = "g"
8181
elseif spec.k == "divide_by_one_hundred_2dp_if_required" or spec.k == "divide_by_one_hundred_2dp" then
8282
val[spec.v].min = round(val[spec.v].min / 100, 2)

0 commit comments

Comments
 (0)