Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/Data/Skills/sup_int.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3778,8 +3778,23 @@ skills["SupportExpandPlayer"] = {
label = "Expand",
incrementalEffectiveness = 0.054999999701977,
statDescriptionScope = "gem_stat_descriptions",
statMap = {
["support_expand_max_seals"] = {
mod("SealCount", "BASE", nil),
},
["skill_area_of_effect_+%_per_expand_seal"] = {
mod("SealRepeatPenalty", "MORE", nil),
},
["expand_support_seal_gain_frequency_as_%_of_total_cast_time"] = {
mod("SealGainFrequency", "BASE", nil),
},
},
baseFlags = {
},
baseMods = {
flag("HasSeals"),
flag("AreaSeal"),
},
constantStats = {
{ "support_expand_max_seals", 3 },
{ "support_expand_charge_gain_interval_ms", 0 },
Expand Down Expand Up @@ -7556,6 +7571,7 @@ skills["SupportUnleashPlayer"] = {
},
baseMods = {
flag("HasSeals"),
flag("DamageSeal"),
},
constantStats = {
{ "support_spell_rapid_fire_repeat_use_damage_+%_final", -50 },
Expand Down
14 changes: 14 additions & 0 deletions src/Export/Skills/sup_int.txt
Original file line number Diff line number Diff line change
Expand Up @@ -654,6 +654,19 @@ statMap = {

#skill SupportExpandPlayer
#set SupportExpandPlayer
statMap = {
["support_expand_max_seals"] = {
mod("SealCount", "BASE", nil),
},
["skill_area_of_effect_+%_per_expand_seal"] = {
mod("SealRepeatPenalty", "MORE", nil),
},
["expand_support_seal_gain_frequency_as_%_of_total_cast_time"] = {
mod("SealGainFrequency", "BASE", nil),
},
},
#baseMod flag("HasSeals")
#baseMod flag("AreaSeal")
#mods
#skillEnd

Expand Down Expand Up @@ -1432,6 +1445,7 @@ statMap = {
},
},
#baseMod flag("HasSeals")
#baseMod flag("DamageSeal")
#mods
#skillEnd

Expand Down
25 changes: 21 additions & 4 deletions src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,23 @@ function calcs.offence(env, actor, activeSkill)
-- Calculate armour break
output.ArmourBreakPerHit = calcLib.val(skillModList, "ArmourBreakPerHit", skillCfg)

local function getSkillNameFromFlag(skillModList, flag)
local sourceMod = skillModList:Tabulate("FLAG", nil, flag)
local sourceName = sourceMod[1] and sourceMod[1].mod and sourceMod[1].mod.source -- e.g. Skill:SupportExpandPlayer
local dataSkill = env.data.skills[(sourceName:gsub("Skill:", ""))]
return dataSkill and dataSkill.name
end

local function calcAreaOfEffect(skillModList, skillCfg, skillData, skillFlags, output, breakdown)
-- Applies increased AoE based on seals count
if skillModList:Flag(nil, "HasSeals") and skillModList:Flag(nil, "AreaSeal") and not skillModList:Flag(nil, "NoRepeatBonuses") then
output.SealCooldown = activeSkill.activeEffect.grantedEffect.castTime * skillModList:Sum("BASE", skillCfg, "SealGainFrequency") / calcLib.mod(skillModList, skillCfg, "SealGainFrequency") / 100
output.SealMax = skillModList:Sum("BASE", skillCfg, "SealCount")
output.TimeMaxSeals = output.SealCooldown * output.SealMax
local skillName = getSkillNameFromFlag(skillModList, "AreaSeal") or "Support"
env.player.mainSkill.skillModList:NewMod("AreaOfEffect", "INC", (output.SealMax * (calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty") - 1) * 100), skillName)
end

local incArea, moreArea = calcLib.mods(skillModList, skillCfg, "AreaOfEffect", "AreaOfEffectPrimary")
output.AreaOfEffectMod = round(round(incArea * moreArea, 10), 2)
if skillData.radiusIsWeaponRange then
Expand Down Expand Up @@ -1076,7 +1092,7 @@ function calcs.offence(env, actor, activeSkill)
modDB:NewMod("DPS", "MORE", detonateTwice, "Grenade Activate Twice")
end

if skillModList:Flag(nil, "HasSeals") and activeSkill.skillTypes[SkillType.Unleashable] and not skillModList:Flag(nil, "NoRepeatBonuses") then
if skillModList:Flag(nil, "HasSeals") and skillModList:Flag(nil, "DamageSeal") and not skillModList:Flag(nil, "NoRepeatBonuses") then
-- Applies DPS multiplier based on seals count
local totalCastSpeed = 1 / activeSkill.activeEffect.grantedEffect.castTime * calcLib.mod(skillModList, skillCfg, "Speed")
output.SealCooldown = activeSkill.activeEffect.grantedEffect.castTime * skillModList:Sum("BASE", skillCfg, "SealGainFrequency") / calcLib.mod(skillModList, skillCfg, "SealGainFrequency") / 100
Expand All @@ -1085,15 +1101,16 @@ function calcs.offence(env, actor, activeSkill)
output.TimeMaxSeals = output.SealCooldown * output.SealMax

if not skillData.hitTimeOverride then
local skillName = getSkillNameFromFlag(skillModList, "DamageSeal") or "Support"
if skillModList:Flag(nil, "UseMaxUnleash") then
for i, value in ipairs(skillModList:Tabulate("INC", { }, "MaxSealCrit")) do
local mod = value.mod
skillModList:NewMod("CritChance", "INC", mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod))
end
env.player.mainSkill.skillModList:NewMod("DPS", "MORE", (output.SealMax * calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty")) * 100, "Unleash")
env.player.mainSkill.skillModList:NewMod("DPS", "MORE", (output.SealMax * calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty")) * 100, skillName)
env.player.mainSkill.skillData.hitTimeOverride = m_max(output.TimeMaxSeals, totalCastSpeed * 1.1)
else
env.player.mainSkill.skillModList:NewMod("DPS", "MORE", round(1 / output.SealCooldown / (totalCastSpeed * 1.1) * calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty") * 100, 2), "Unleash")
env.player.mainSkill.skillModList:NewMod("DPS", "MORE", round(1 / output.SealCooldown / (totalCastSpeed * 1.1) * calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty") * 100, 2), skillName)
end
end

Expand Down Expand Up @@ -5648,7 +5665,7 @@ function calcs.offence(env, actor, activeSkill)
elseif skillFlags.totem then
useSpeed = (output.Cooldown and output.Cooldown > 0 and (output.TotemPlacementSpeed > 0 and output.TotemPlacementSpeed or 1 / output.Cooldown) or output.TotemPlacementSpeed) / repeats
timeType = "totem placement"
elseif skillModList:Flag(nil, "HasSeals") and skillModList:Flag(nil, "UseMaxUnleash") then
elseif skillModList:Flag(nil, "HasSeals") and skillModList:Flag(nil, "DamageSeal") and skillModList:Flag(nil, "UseMaxUnleash") then
useSpeed = env.player.mainSkill.skillData.hitTimeOverride / repeats
timeType = "full unleash"
elseif output.EffectiveReloadTime then -- Crossbows: Account for mana cost only happening on reload (once all bolts are fired)
Expand Down
Loading