Skip to content

Commit e9cbe60

Browse files
author
LocalIdentity
committed
Add support for Bonestorm, Flameblast, Incinerate, Supercharged Slam
Adds support for DPS on a number of channeling skills Adds support for showing Channel time for each of them with a breakdown Had to separate it from hit time multiplier as id did not work for some skills Also fixes a issue where tooltips for gems not appearing properly
1 parent ff2fadc commit e9cbe60

15 files changed

Lines changed: 265 additions & 22 deletions

src/Classes/GemSelectControl.lua

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ function GemSelectClass:AddGemTooltip(gemInstance)
548548
-- Will need rework if a gem can have 2+ additional supports
549549
self:AddGrantedEffectInfo(gemInstance, grantedEffect, true)
550550
for _, statSet in ipairs(grantedEffect.statSets) do
551-
self:AddStatSetInfo(gemInstance, grantedEffect, statSet)
551+
self:AddStatSetInfo(gemInstance, grantedEffect, statSet, nil , _)
552552
end
553553

554554
for _, additional in ipairs(additionalEffects or {}) do
@@ -560,11 +560,11 @@ function GemSelectClass:AddGemTooltip(gemInstance)
560560
self.tooltip:AddSeparator(10)
561561
self:AddGrantedEffectInfo(gemInstance, additional)
562562
for _, statSet in ipairs(additional.statSets) do
563-
self:AddStatSetInfo(gemInstance, additional, statSet)
563+
self:AddStatSetInfo(gemInstance, additional, statSet, nil, _)
564564
end
565565
else
566566
for _, statSet in ipairs(additional.statSets) do
567-
self:AddStatSetInfo(gemInstance, additional, statSet, true)
567+
self:AddStatSetInfo(gemInstance, additional, statSet, true, _)
568568
end
569569
end
570570
end
@@ -692,10 +692,10 @@ function GemSelectClass:AddGrantedEffectInfo(gemInstance, grantedEffect, addReq)
692692
end
693693
end
694694
end
695-
function GemSelectClass:AddStatSetInfo(gemInstance, grantedEffect, statSet, noLabel)
695+
function GemSelectClass:AddStatSetInfo(gemInstance, grantedEffect, statSet, noLabel, index)
696696
local displayInstance = gemInstance.displayEffect or gemInstance
697697
local statSetLevel = statSet.levels[displayInstance.level] or { }
698-
if statSet.label ~= grantedEffect.name and statSet.label ~= "" and not noLabel then
698+
if not (index == 1 and statSet.label == grantedEffect.name) and statSet.label ~= "" and not noLabel then
699699
self.tooltip:AddSeparator(10)
700700
self.tooltip:AddLine(20, colorCodes.GEM .. statSet.label)
701701
self.tooltip:AddSeparator(10)

src/Data/SkillStatMap.lua

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ return {
136136
["spell_cast_time_cannot_be_modified"] = {
137137
skill("fixedCastTime", true),
138138
},
139+
["base_minimum_channel_time_ms"] = {
140+
skill("minChannelTime", true),
141+
div = 1000,
142+
},
139143
["global_always_hit"] = {
140144
skill("cannotBeEvaded", true),
141145
},
@@ -519,6 +523,10 @@ return {
519523
["attack_and_cast_speed_+%"] = {
520524
mod("Speed", "INC", nil),
521525
},
526+
["skill_speed_+%"] = {
527+
mod("Speed", "INC", nil),
528+
mod("WarcrySpeed", "INC", nil),
529+
},
522530
["cast_speed_+%_granted_from_skill"] = {
523531
mod("Speed", "INC", nil, ModFlag.Cast),
524532
},
@@ -2761,6 +2769,9 @@ return {
27612769
["quality_display_sandstorm_swipe_is_gem"] = {
27622770
-- Display Only
27632771
},
2772+
["cast_speed_modifiers_apply_to_over_time_cost"] = {
2773+
-- Display Only
2774+
},
27642775
["quality_display_base_totem_duration_is_gem"] = {
27652776
-- Display Only
27662777
},
@@ -2770,4 +2781,7 @@ return {
27702781
["skill_specific_stat_description_mode"] = {
27712782
-- Display Only
27722783
},
2784+
["quality_display_supercharged_slam_is_gem"] = {
2785+
-- Display Only
2786+
},
27732787
}

src/Data/Skills/act_dex.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,6 +1134,7 @@ skills["DetonatingArrowPlayer"] = {
11341134
},
11351135
preDamageFunc = function(activeSkill, output)
11361136
activeSkill.skillData.hitTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:DetonatingArrowStage")
1137+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:DetonatingArrowStage")
11371138
end,
11381139
statSets = {
11391140
[1] = {
@@ -7296,6 +7297,7 @@ skills["SnipePlayer"] = {
72967297
},
72977298
preDamageFunc = function(activeSkill, output)
72987299
activeSkill.skillData.hitTimeMultiplier = activeSkill.skillData.channelPercentOfAttackTime
7300+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillData.channelPercentOfAttackTime
72997301
end,
73007302
statSets = {
73017303
[1] = {

src/Data/Skills/act_int.lua

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,16 +1798,27 @@ skills["BonestormPlayer"] = {
17981798
[39] = { critChance = 15, levelRequirement = 90, cost = { ManaPerMinute = 20158, }, },
17991799
[40] = { critChance = 15, levelRequirement = 90, cost = { ManaPerMinute = 21924, }, },
18001800
},
1801+
preDamageFunc = function(activeSkill, output)
1802+
activeSkill.skillData.hitTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:BonestormStage")
1803+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:BonestormStage")
1804+
activeSkill.skillData.dpsMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:BonestormStage")
1805+
end,
18011806
statSets = {
18021807
[1] = {
18031808
label = "Projectile",
18041809
baseEffectiveness = 1.4199999570847,
18051810
incrementalEffectiveness = 0.12999999523163,
18061811
damageIncrementalEffectiveness = 0.0068999999202788,
18071812
statDescriptionScope = "bone_spike_statset_0",
1813+
statMap = {
1814+
["base_number_of_allowed_bone_storm_projectiles"] = {
1815+
mod("Multiplier:BonestormMaxStages", "BASE", nil),
1816+
},
1817+
},
18081818
baseFlags = {
18091819
spell = true,
18101820
projectile = true,
1821+
channelRelease = true,
18111822
},
18121823
constantStats = {
18131824
{ "base_number_of_projectiles", 1 },
@@ -1886,10 +1897,22 @@ skills["BonestormPlayer"] = {
18861897
incrementalEffectiveness = 0.12999999523163,
18871898
damageIncrementalEffectiveness = 0.0068999999202788,
18881899
statDescriptionScope = "bone_spike_statset_1",
1900+
statMap = {
1901+
["bone_spear_power_charged_aoe_+%_final_per_additional_power_charge"] = {
1902+
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "Multiplier", var = "RemovablePowerCharge" }),
1903+
},
1904+
["bone_spear_power_charged_aoe_+"] = {
1905+
skill("radiusExtra", nil, { type = "MultiplierThreshold", var = "RemovablePowerCharge", threshold = 1 }),
1906+
},
1907+
["base_number_of_allowed_bone_storm_projectiles"] = {
1908+
mod("Multiplier:BonestormMaxStages", "BASE", nil),
1909+
},
1910+
},
18891911
baseFlags = {
18901912
spell = true,
18911913
area = true,
18921914
projectile = true,
1915+
channelRelease = true,
18931916
},
18941917
constantStats = {
18951918
{ "movement_speed_+%_final_while_performing_action", -70 },
@@ -8080,16 +8103,31 @@ skills["FlameblastPlayer"] = {
80808103
[39] = { critChance = 8, storedUses = 1, levelRequirement = 90, cooldown = 15, cost = { ManaPerMinute = 19137, }, },
80818104
[40] = { critChance = 8, storedUses = 1, levelRequirement = 90, cooldown = 15, cost = { ManaPerMinute = 20814, }, },
80828105
},
8106+
preDamageFunc = function(activeSkill, output)
8107+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:FlameblastStage")
8108+
end,
80838109
statSets = {
80848110
[1] = {
80858111
label = "Flameblast",
80868112
baseEffectiveness = 2.2999999523163,
80878113
incrementalEffectiveness = 0.12999999523163,
80888114
damageIncrementalEffectiveness = 0.0096000004559755,
80898115
statDescriptionScope = "skill_stat_descriptions",
8116+
statMap = {
8117+
["charged_blast_spell_damage_+%_final_per_stack"] = {
8118+
mod("Damage", "MORE", nil, ModFlag.Spell, 0, { type = "Multiplier", var = "FlameblastStage" }),
8119+
},
8120+
["vaal_flameblast_radius_+_per_stage"] = {
8121+
skill("radiusExtra", nil, { type = "Multiplier", var = "FlameblastStage" }),
8122+
},
8123+
["flameblast_maximum_stages"] = {
8124+
mod("Multiplier:FlameblastMaxStages", "BASE", nil),
8125+
},
8126+
},
80908127
baseFlags = {
80918128
spell = true,
80928129
area = true,
8130+
channelRelease = true,
80938131
},
80948132
constantStats = {
80958133
{ "charged_blast_spell_damage_+%_final_per_stack", 75 },
@@ -10292,6 +10330,7 @@ skills["GatheringStormPlayer"] = {
1029210330
},
1029310331
preDamageFunc = function(activeSkill, output)
1029410332
activeSkill.skillData.hitTimeMultiplier = activeSkill.skillData.channelPercentOfAttackTime
10333+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillData.channelPercentOfAttackTime
1029510334
end,
1029610335
statSets = {
1029710336
[1] = {
@@ -13371,17 +13410,33 @@ skills["IncineratePlayer"] = {
1337113410
[39] = { critChance = 6, levelRequirement = 90, },
1337213411
[40] = { critChance = 6, levelRequirement = 90, },
1337313412
},
13413+
preDamageFunc = function(activeSkill, output)
13414+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:IncinerateStage")
13415+
end,
1337413416
statSets = {
1337513417
[1] = {
1337613418
label = "Incinerate",
1337713419
baseEffectiveness = 3.9000000953674,
1337813420
incrementalEffectiveness = 0.12999999523163,
1337913421
damageIncrementalEffectiveness = 0.0096000004559755,
1338013422
statDescriptionScope = "incinerate_player_statset_0",
13423+
statMap = {
13424+
["incinerate_damage_+%_final_per_stage"] = {
13425+
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "IncinerateStage" }),
13426+
},
13427+
["incinerate_maximum_stages"] = {
13428+
mod("Multiplier:IncinerateMaxStages", "BASE", nil),
13429+
},
13430+
["incinerate_gain_stage_every_x_ms"] = {
13431+
skill("channelTimeOverride", nil),
13432+
div = 1000,
13433+
},
13434+
},
1338113435
baseFlags = {
1338213436
spell = true,
1338313437
area = true,
1338413438
duration = true,
13439+
channelRelease = true,
1338513440
},
1338613441
constantStats = {
1338713442
{ "incinerate_cone_angle", 20 },

src/Data/Skills/act_str.lua

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9233,6 +9233,9 @@ skills["PlasmaBlastPlayer"] = {
92339233
[39] = { baseMultiplier = 139.44, levelRequirement = 0, },
92349234
[40] = { baseMultiplier = 150.22, levelRequirement = 0, },
92359235
},
9236+
preDamageFunc = function(activeSkill, output)
9237+
activeSkill.skillData.channelTimeMultiplier = 1
9238+
end,
92369239
statSets = {
92379240
[1] = {
92389241
label = "Projectile",
@@ -11639,6 +11642,7 @@ skills["PerfectStrikePlayer"] = {
1163911642
},
1164011643
preDamageFunc = function(activeSkill, output)
1164111644
activeSkill.skillData.hitTimeMultiplier = activeSkill.skillData.channelPercentOfAttackTime
11645+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillData.channelPercentOfAttackTime
1164211646
end,
1164311647
statSets = {
1164411648
[1] = {
@@ -14079,15 +14083,33 @@ skills["SuperchargedSlamPlayer"] = {
1407914083
[39] = { attackTime = 1000, baseMultiplier = 8.63, levelRequirement = 90, cost = { ManaPerMinute = 11734, }, },
1408014084
[40] = { attackTime = 1000, baseMultiplier = 9.21, levelRequirement = 90, cost = { ManaPerMinute = 12487, }, },
1408114085
},
14086+
preDamageFunc = function(activeSkill, output)
14087+
activeSkill.skillData.hitTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:SuperchargedSlamStage")
14088+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:SuperchargedSlamStage")
14089+
end,
1408214090
statSets = {
1408314091
[1] = {
1408414092
label = "Impact",
1408514093
incrementalEffectiveness = 0.092720001935959,
1408614094
statDescriptionScope = "channelled_slam_statset_0",
14095+
statMap = {
14096+
["channelled_slam_damage_+%_final_per_stage"] = {
14097+
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "SuperchargedSlamStage" }),
14098+
},
14099+
["channelled_slam_max_stages"] = {
14100+
mod("Multiplier:SuperchargedSlamMaxStages", "BASE", nil),
14101+
},
14102+
["base_skill_show_average_damage_instead_of_dps"] = {
14103+
},
14104+
},
1408714105
baseFlags = {
1408814106
attack = true,
1408914107
area = true,
1409014108
melee = true,
14109+
channelRelease = true,
14110+
},
14111+
baseMods = {
14112+
mod("DPS", "MORE", 100, 0, 0, { type = "Multiplier", var = "SuperchargedSlamStage" }),
1409114113
},
1409214114
constantStats = {
1409314115
{ "active_skill_base_area_of_effect_radius", 16 },
@@ -14150,10 +14172,27 @@ skills["SuperchargedSlamPlayer"] = {
1415014172
label = "Aftershock",
1415114173
incrementalEffectiveness = 0.092720001935959,
1415214174
statDescriptionScope = "channelled_slam_statset_1",
14175+
statMap = {
14176+
["channelled_slam_damage_+%_final_per_stage"] = {
14177+
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "SuperchargedSlamStage" }),
14178+
},
14179+
["channelled_slam_max_stages"] = {
14180+
mod("Multiplier:SuperchargedSlamMaxStages", "BASE", nil),
14181+
},
14182+
["aftershock_radius_+_per_previous_aftershock"] = {
14183+
skill("radiusExtra", nil, { type = "Multiplier", var = "SuperchargedSlamStage", limit = 30, limitTotal = true }),
14184+
},
14185+
["base_skill_show_average_damage_instead_of_dps"] = {
14186+
},
14187+
},
1415314188
baseFlags = {
1415414189
attack = true,
1415514190
area = true,
1415614191
melee = true,
14192+
channelRelease = true,
14193+
},
14194+
baseMods = {
14195+
mod("DPS", "MORE", 100, 0, 0, { type = "Multiplier", var = "SuperchargedSlamStage" }),
1415714196
},
1415814197
constantStats = {
1415914198
{ "active_skill_base_area_of_effect_radius", 16 },

src/Data/Skills/other.lua

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5824,12 +5824,22 @@ skills["TemperWeaponPlayer"] = {
58245824
[39] = { storedUses = 1, levelRequirement = 90, cooldown = 5, cost = { ManaPerMinute = 4319, }, },
58255825
[40] = { storedUses = 1, levelRequirement = 90, cooldown = 5, cost = { ManaPerMinute = 4596, }, },
58265826
},
5827+
preDamageFunc = function(activeSkill, output)
5828+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:TemperWeaponStage")
5829+
end,
58275830
statSets = {
58285831
[1] = {
58295832
label = "Temper Weapon",
58305833
incrementalEffectiveness = 0.054999999701977,
58315834
statDescriptionScope = "skill_stat_descriptions",
5835+
statMap = {
5836+
["imbue_weapon_max_exerts"] = {
5837+
mod("Multiplier:TemperWeaponMaxStages", "BASE", nil),
5838+
div = 3,
5839+
},
5840+
},
58325841
baseFlags = {
5842+
channelRelease = true,
58335843
},
58345844
constantStats = {
58355845
{ "imbue_weapon_max_exerts", 12 },

src/Export/Skills/act_dex.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ statMap = {
104104
#skill DetonatingArrowPlayer
105105
preDamageFunc = function(activeSkill, output)
106106
activeSkill.skillData.hitTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:DetonatingArrowStage")
107+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:DetonatingArrowStage")
107108
end,
108109
#set DetonatingArrowPlayer
109110
#flags attack projectile channelRelease
@@ -452,6 +453,7 @@ statMap = {
452453
#skill SnipePlayer
453454
preDamageFunc = function(activeSkill, output)
454455
activeSkill.skillData.hitTimeMultiplier = activeSkill.skillData.channelPercentOfAttackTime
456+
activeSkill.skillData.channelTimeMultiplier = activeSkill.skillData.channelPercentOfAttackTime
455457
end,
456458
#set SnipePlayer
457459
#flags attack projectile channelRelease

0 commit comments

Comments
 (0)