Skip to content
Merged
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
17 changes: 17 additions & 0 deletions src/Data/Skills/sup_int.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3813,8 +3813,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 @@ -7593,6 +7608,7 @@ skills["SupportUnleashPlayer"] = {
},
baseMods = {
flag("HasSeals"),
flag("DamageSeal"),
},
constantStats = {
{ "support_spell_rapid_fire_repeat_use_damage_+%_final", -50 },
Expand Down Expand Up @@ -8076,6 +8092,7 @@ skills["SupportZarokhsRevoltPlayer"] = {
},
baseMods = {
flag("HasSeals"),
flag("DamageSeal"),
},
constantStats = {
{ "support_spell_rapid_fire_repeat_use_damage_+%_final", -20 },
Expand Down
15 changes: 15 additions & 0 deletions src/Export/Skills/sup_int.txt
Original file line number Diff line number Diff line change
Expand Up @@ -664,6 +664,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 @@ -1444,6 +1457,7 @@ statMap = {
#skill SupportUnleashPlayer
#set SupportUnleashPlayer
#baseMod flag("HasSeals")
#baseMod flag("DamageSeal")
#mods
#skillEnd

Expand Down Expand Up @@ -1526,6 +1540,7 @@ statMap = {
#skill SupportZarokhsRevoltPlayer
#set SupportZarokhsRevoltPlayer
#baseMod flag("HasSeals")
#baseMod flag("DamageSeal")
#mods
#skillEnd

Expand Down
36 changes: 28 additions & 8 deletions src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,13 @@ 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)
local incArea, moreArea = calcLib.mods(skillModList, skillCfg, "AreaOfEffect", "AreaOfEffectPrimary")
output.AreaOfEffectMod = round(round(incArea * moreArea, 10), 2)
Expand Down Expand Up @@ -1114,24 +1121,37 @@ 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
-- Applies DPS multiplier based on seals count
if skillModList:Flag(nil, "HasSeals") and not skillModList:Flag(nil, "NoRepeatBonuses") then
-- Applies seal bonuses based on seal 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
output.SealMax = skillModList:Sum("BASE", skillCfg, "SealCount")
output.AverageBurstHits = output.SealMax
output.TimeMaxSeals = output.SealCooldown * output.SealMax

if not skillData.hitTimeOverride then
if skillModList:Flag(nil, "DamageSeal") then
output.AverageBurstHits = output.SealMax
end
if skillModList:Flag(nil, "DamageSeal") and 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), skillName)
end
end
if skillModList:Flag(nil, "AreaSeal") then
local skillName = getSkillNameFromFlag(skillModList, "AreaSeal") or "Support"
local sealArea = (calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty") - 1) * 100
if skillModList:Flag(nil, "UseMaxUnleash") then
env.player.mainSkill.skillModList:NewMod("AreaOfEffect", "INC", output.SealMax * sealArea, 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("AreaOfEffect", "INC", round(1 / output.SealCooldown / totalCastSpeed * sealArea, 2), skillName)
end
end

Expand Down Expand Up @@ -4119,7 +4139,7 @@ function calcs.offence(env, actor, activeSkill)
end
output.AverageDamage = output.AverageHit * output.HitChance / 100
globalOutput.AverageBurstHits = output.AverageBurstHits or 1
local repeatPenalty = skillModList:Flag(nil, "HasSeals") and activeSkill.skillTypes[SkillType.Unleashable] and not skillModList:Flag(nil, "NoRepeatBonuses") and calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty") or 1
local repeatPenalty = skillModList:Flag(nil, "HasSeals") and skillModList:Flag(nil, "DamageSeal") and not skillModList:Flag(nil, "NoRepeatBonuses") and calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty") or 1
globalOutput.AverageBurstDamage = output.AverageDamage + output.AverageDamage * (globalOutput.AverageBurstHits - 1) * repeatPenalty or 0
globalOutput.ShowBurst = globalOutput.AverageBurstHits > 1
output.TotalDPS = output.AverageDamage * (globalOutput.HitSpeed or globalOutput.Speed) * skillData.dpsMultiplier * quantityMultiplier
Expand Down Expand Up @@ -5693,7 +5713,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
2 changes: 1 addition & 1 deletion src/Modules/CalcTriggers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ local function defaultTriggerHandler(env, config)
actor.mainSkill.skillData.ignoresTickRate = actor.mainSkill.skillData.ignoresTickRate or (actor.mainSkill.skillData.storedUses and actor.mainSkill.skillData.storedUses > 1)

--Account for source unleash
if source and GlobalCache.cachedData[env.mode][uuid] and source.skillModList:Flag(nil, "HasSeals") and source.skillTypes[SkillType.Unleashable] then
if source and GlobalCache.cachedData[env.mode][uuid] and source.skillModList:Flag(nil, "HasSeals") and source.skillModList:Flag(nil, "DamageSeal") then
local unleashDpsMult = GlobalCache.cachedData[env.mode][uuid].ActiveSkill.skillData.dpsMultiplier or 1
trigRate = trigRate * unleashDpsMult
actor.mainSkill.skillFlags.HasSeals = true
Expand Down
2 changes: 1 addition & 1 deletion src/Modules/ConfigOptions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -824,7 +824,7 @@ Huge sets the radius to 11.
{ var = "overrideGhostShrouds", type = "count", label = "# of Ghost Shrouds (if not maximum):", ifOption = "useGhostShrouds", apply = function(val, modList, enemyModList)
modList:NewMod("GhostShrouds", "OVERRIDE", val, "Config", { type = "Condition", var = "Combat" })
end },
{ var = "waitForMaxSeals", type = "check", label = "Do you wait for Max Unleash Seals?", ifFlag = "HasSeals", apply = function(val, modList, enemyModList)
{ var = "waitForMaxSeals", type = "check", label = "Do you wait for Max Seals?", ifFlag = "HasSeals", apply = function(val, modList, enemyModList)
modList:NewMod("UseMaxUnleash", "FLAG", true, "Config", { type = "Condition", var = "Combat" })
end },
{ var = "repeatMode", type = "list", label = "Repeat Mode:", ifCond = "alwaysFinalRepeat", list = {
Expand Down
Loading