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
40 changes: 35 additions & 5 deletions src/Data/Skills/act_int.lua
Original file line number Diff line number Diff line change
Expand Up @@ -12073,6 +12073,9 @@ skills["LightningTendrils"] = {
statDescriptionScope = "skill_stat_descriptions",
castTime = 0.23,
parts = {
{
name = "Average DPS",
},
{
name = "Normal pulse",
},
Expand All @@ -12082,17 +12085,24 @@ skills["LightningTendrils"] = {
},
statMap = {
["lightning_tendrils_channelled_larger_pulse_damage_+%_final"] = {
mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 2 }),
mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 3 }),
},
["lightning_tendrils_channelled_larger_pulse_always_crit"] = {
mod("CritChance", "OVERRIDE", nil, 0, 0, { type = "SkillPart", skillPart = 2 }),
mod("CritChance", "OVERRIDE", nil, 0, 0, { type = "SkillPart", skillPart = 3 }),
base = 100
},
["lightning_tendrils_channelled_larger_pulse_interval"] = {
flag("Every3UseCrit", { type = "SkillPart", skillPart = 1 }),
},
},
baseFlags = {
spell = true,
area = true,
},
baseMods = {
mod("DPS", "MORE", -2/3 * 100, 0, 0, { type = "SkillPart", skillPart = 2 }),
mod("DPS", "MORE", -1/3 * 100, 0, 0, { type = "SkillPart", skillPart = 3 }),
},
qualityStats = {
Default = {
{ "base_critical_strike_multiplier_+", 2 },
Expand Down Expand Up @@ -12167,7 +12177,20 @@ skills["LightningTendrilsAltX"] = {
skillTypes = { [SkillType.Spell] = true, [SkillType.Damage] = true, [SkillType.Area] = true, [SkillType.Totemable] = true, [SkillType.Lightning] = true, [SkillType.Channel] = true, [SkillType.AreaSpell] = true, },
statDescriptionScope = "skill_stat_descriptions",
castTime = 0.23,
postCritFunc = function(activeSkill, output, breakdown)
-- Formula to find a effective damage multiplier to take into account the 500% more damage on every 5th hit
if activeSkill.skillPart == 1 then
local critChance = output.PreEffectiveCritChance / 100
local effectiveCritChance = output.CritChance / 100
local critMulti = output.CritMultiplier
local averageMore = 100 * ((4 * (1 + critChance * (critMulti - 1)) + 6 * critMulti) / (5 * ((1 - effectiveCritChance) + critMulti * effectiveCritChance)) - 1)
activeSkill.skillModList:NewMod("Damage", "MORE", averageMore, "Average Pulse Damage", nil, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 1 })
end
end,
parts = {
{
name = "Average DPS",
},
{
name = "Normal pulse",
},
Expand All @@ -12177,21 +12200,28 @@ skills["LightningTendrilsAltX"] = {
},
statMap = {
["lightning_tendrils_channelled_larger_pulse_damage_+%_final"] = {
mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 2 }),
mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 3 }),
},
["lightning_tendrils_channelled_larger_pulse_area_of_effect_+%_final"] = {
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "SkillPart", skillPart = 2 }),
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "SkillPart", skillPart = 3 }),
},
["lightning_tendrils_channelled_larger_pulse_always_crit"] = {
mod("CritChance", "OVERRIDE", nil, 0, 0, { type = "SkillPart", skillPart = 2 }),
mod("CritChance", "OVERRIDE", nil, 0, 0, { type = "SkillPart", skillPart = 3 }),
base = 100
},
["lightning_tendrils_channelled_larger_pulse_interval"] = {
flag("Every5UseCrit", { type = "SkillPart", skillPart = 1 }),
},
},
baseFlags = {
spell = true,
area = true,
channelling = true,
},
baseMods = {
mod("DPS", "MORE", -1/5 * 100, 0, 0, { type = "SkillPart", skillPart = 2 }),
mod("DPS", "MORE", -4/5 * 100, 0, 0, { type = "SkillPart", skillPart = 3 }),
},
qualityStats = {
Default = {
{ "base_critical_strike_multiplier_+", 2 },
Expand Down
36 changes: 31 additions & 5 deletions src/Export/Skills/act_int.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2768,6 +2768,9 @@ local skills, mod, flag, skill = ...
#skill LightningTendrils
#flags spell area
parts = {
{
name = "Average DPS",
},
{
name = "Normal pulse",
},
Expand All @@ -2777,18 +2780,36 @@ local skills, mod, flag, skill = ...
},
statMap = {
["lightning_tendrils_channelled_larger_pulse_damage_+%_final"] = {
mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 2 }),
mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 3 }),
},
["lightning_tendrils_channelled_larger_pulse_always_crit"] = {
mod("CritChance", "OVERRIDE", nil, 0, 0, { type = "SkillPart", skillPart = 2 }),
mod("CritChance", "OVERRIDE", nil, 0, 0, { type = "SkillPart", skillPart = 3 }),
base = 100
},
["lightning_tendrils_channelled_larger_pulse_interval"] = {
flag("Every3UseCrit", { type = "SkillPart", skillPart = 1 }),
},
},
#baseMod mod("DPS", "MORE", -2/3 * 100, 0, 0, { type = "SkillPart", skillPart = 2 })
#baseMod mod("DPS", "MORE", -1/3 * 100, 0, 0, { type = "SkillPart", skillPart = 3 })
#mods

#skill LightningTendrilsAltX
#flags spell area channelling
postCritFunc = function(activeSkill, output, breakdown)
-- Formula to find a effective damage multiplier to take into account the 500% more damage on every 5th hit
if activeSkill.skillPart == 1 then
local critChance = output.PreEffectiveCritChance / 100
local effectiveCritChance = output.CritChance / 100
local critMulti = output.CritMultiplier
local averageMore = 100 * ((4 * (1 + critChance * (critMulti - 1)) + 6 * critMulti) / (5 * ((1 - effectiveCritChance) + critMulti * effectiveCritChance)) - 1)
activeSkill.skillModList:NewMod("Damage", "MORE", averageMore, "Average Pulse Damage", nil, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 1 })
end
end,
parts = {
{
name = "Average DPS",
},
{
name = "Normal pulse",
},
Expand All @@ -2798,16 +2819,21 @@ local skills, mod, flag, skill = ...
},
statMap = {
["lightning_tendrils_channelled_larger_pulse_damage_+%_final"] = {
mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 2 }),
mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "SkillPart", skillPart = 3 }),
},
["lightning_tendrils_channelled_larger_pulse_area_of_effect_+%_final"] = {
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "SkillPart", skillPart = 2 }),
mod("AreaOfEffect", "MORE", nil, 0, 0, { type = "SkillPart", skillPart = 3 }),
},
["lightning_tendrils_channelled_larger_pulse_always_crit"] = {
mod("CritChance", "OVERRIDE", nil, 0, 0, { type = "SkillPart", skillPart = 2 }),
mod("CritChance", "OVERRIDE", nil, 0, 0, { type = "SkillPart", skillPart = 3 }),
base = 100
},
["lightning_tendrils_channelled_larger_pulse_interval"] = {
flag("Every5UseCrit", { type = "SkillPart", skillPart = 1 }),
},
},
#baseMod mod("DPS", "MORE", -1/5 * 100, 0, 0, { type = "SkillPart", skillPart = 2 })
#baseMod mod("DPS", "MORE", -4/5 * 100, 0, 0, { type = "SkillPart", skillPart = 3 })
#mods

#skill LightningTendrilsAltY
Expand Down
14 changes: 11 additions & 3 deletions src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2847,11 +2847,14 @@ function calcs.offence(env, actor, activeSkill)
output.CritChance = (1 - (1 - output.CritChance / 100) ^ (critRolls + 1)) * 100
end
local preHitCheckCritChance = output.CritChance
local pre3rdUseCritChance= output.CritChance
local preSkillUseCritChance= output.CritChance
if env.mode_effective then
if skillModList:Flag(skillCfg, "Every3UseCrit") then
output.CritChance = (2 * output.CritChance + 100) / 3
end
if skillModList:Flag(skillCfg, "Every5UseCrit") then
output.CritChance = (4 * output.CritChance + 100) / 5
end
preHitCheckCritChance = output.CritChance
output.CritChance = output.CritChance * output.AccuracyHitChance / 100
end
Expand All @@ -2874,13 +2877,16 @@ function calcs.offence(env, actor, activeSkill)
local overCap = preCapCritChance - 100
t_insert(breakdown.CritChance, s_format("Crit is overcapped by %.2f%% (%d%% increased Critical Strike Chance)", overCap, overCap / more / (baseCrit + base) * 100))
end
if env.mode_effective and (critRolls ~= 0 or skillModList:Flag(skillCfg, "Every3UseCrit")) then
if env.mode_effective and (critRolls ~= 0 or skillModList:Flag(skillCfg, "Every3UseCrit") or skillModList:Flag(skillCfg, "Every5UseCrit")) then
if critRolls ~= 0 then
t_insert(breakdown.CritChance, "Crit Chance is Lucky:")
t_insert(breakdown.CritChance, s_format("1 - (1 - %.4f)^ %d", preLuckyCritChance / 100, critRolls + 1))
end
if skillModList:Flag(skillCfg, "Every3UseCrit") then
t_insert(breakdown.CritChance, s_format("+ %.2f%% ^8(crit every 3rd use)", (2 * pre3rdUseCritChance + 100) / 3 - pre3rdUseCritChance))
t_insert(breakdown.CritChance, s_format("+ %.2f%% ^8(crit every 3rd use)", (2 * preSkillUseCritChance + 100) / 3 - preSkillUseCritChance))
end
if skillModList:Flag(skillCfg, "Every5UseCrit") then
t_insert(breakdown.CritChance, s_format("+ %.2f%% ^8(crit every 5th use)", (4 * preSkillUseCritChance + 100) / 5 - preSkillUseCritChance))
end
t_insert(breakdown.CritChance, s_format("= %.2f%%", preHitCheckCritChance))
end
Expand Down Expand Up @@ -2968,6 +2974,8 @@ function calcs.offence(env, actor, activeSkill)

--Calculate reservation DPS
globalOutput.ReservationDpsMultiplier = 100 / (100 - enemyDB:Sum("BASE", nil, "LifeReservationPercent"))

runSkillFunc("postCritFunc")

-- Calculate base hit damage
for _, damageType in ipairs(dmgTypeList) do
Expand Down