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
15 changes: 7 additions & 8 deletions src/Data/Skills/act_int.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11201,29 +11201,28 @@ skills["KineticFusillade"] = {
-- Projectiles orbit for base_skill_effect_duration before firing
-- Recasting resets the timer, so attacking too fast wastes potential damage
local baseDuration = skillData.duration
local actualDuration = output.Duration or baseDuration
local ticksNeededForInitialDelay = math.ceil(actualDuration / data.misc.ServerTickTime)
local actualDuration = baseDuration * output.DurationMod
local timePerProjectile = baseDelayBetweenProjectiles * output.DurationMod
local timeForAllProjectiles = timePerProjectile * projectileCount
local effectiveDelay = ticksNeededForInitialDelay * data.misc.ServerTickTime + math.ceil(timeForAllProjectiles / data.misc.ServerTickTime) * data.misc.ServerTickTime
local effectiveDelay = actualDuration + timeForAllProjectiles
local maxEffectiveAPS = 1 / effectiveDelay
local currentAPS = output.Speed
local MissProjectile = math.ceil((effectiveDelay - (1/currentAPS)) / timePerProjectile)

output.KineticFusilladeMaxEffectiveAPS = maxEffectiveAPS

if breakdown then
local breakdownAPS = {}
t_insert(breakdownAPS, s_format("^1(These calculations are speculative and best-effort)", actualDuration))
t_insert(breakdownAPS, s_format("^1(These calculations are still in beta testing)", actualDuration))
t_insert(breakdownAPS, "")
t_insert(breakdownAPS, s_format("^8Delay of^7 %.3fs ^8before projectiles start firing", actualDuration))
t_insert(breakdownAPS, s_format("^8Each projectile fires sequentially with a^7 %.3fs ^8delay between each projectile", timePerProjectile))
t_insert(breakdownAPS, s_format("^8Server tick time:^7 %.3fs", data.misc.ServerTickTime))
t_insert(breakdownAPS, s_format("^8Ticks needed:^7 %d ^8(rounded up)", ticksNeededForInitialDelay + math.ceil(timeForAllProjectiles / data.misc.ServerTickTime)))
t_insert(breakdownAPS, s_format("^8Effective delay:^7 %.3fs", effectiveDelay))
t_insert(breakdownAPS, s_format("^8Max effective attack rate:^7 1 / %.3f = %.2f", effectiveDelay, maxEffectiveAPS))
if currentAPS and currentAPS > maxEffectiveAPS then
t_insert(breakdownAPS, "")
t_insert(breakdownAPS, s_format("^1Current attack rate (%.2f) exceeds max effective rate!", currentAPS))
t_insert(breakdownAPS, s_format("^1DPS is reduced by %.1f%%", (1 - maxEffectiveAPS / currentAPS) * 100))
t_insert(breakdownAPS, s_format("^1You will lose up to %d projectiles per volley.", MissProjectile))
elseif currentAPS then
t_insert(breakdownAPS, "")
t_insert(breakdownAPS, s_format("^2Current attack rate (%.2f) is within effective limits", currentAPS))
Expand Down Expand Up @@ -21099,4 +21098,4 @@ skills["Zealotry"] = {
[39] = { 19, 53, 33, cooldown = 1.2, levelRequirement = 99, manaReservationPercent = 50, storedUses = 1, statInterpolation = { 1, 1, 1, }, },
[40] = { 20, 54, 34, cooldown = 1.2, levelRequirement = 100, manaReservationPercent = 50, storedUses = 1, statInterpolation = { 1, 1, 1, }, },
},
}
}
13 changes: 6 additions & 7 deletions src/Export/Skills/act_int.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2324,29 +2324,28 @@ local skills, mod, flag, skill = ...
-- Projectiles orbit for base_skill_effect_duration before firing
-- Recasting resets the timer, so attacking too fast wastes potential damage
local baseDuration = skillData.duration
local actualDuration = output.Duration or baseDuration
local ticksNeededForInitialDelay = math.ceil(actualDuration / data.misc.ServerTickTime)
local actualDuration = baseDuration * output.DurationMod
local timePerProjectile = baseDelayBetweenProjectiles * output.DurationMod
local timeForAllProjectiles = timePerProjectile * projectileCount
local effectiveDelay = ticksNeededForInitialDelay * data.misc.ServerTickTime + math.ceil(timeForAllProjectiles / data.misc.ServerTickTime) * data.misc.ServerTickTime
local effectiveDelay = actualDuration + timeForAllProjectiles
local maxEffectiveAPS = 1 / effectiveDelay
local currentAPS = output.Speed
local MissProjectile = math.ceil((effectiveDelay - (1/currentAPS)) / timePerProjectile)

output.KineticFusilladeMaxEffectiveAPS = maxEffectiveAPS


if breakdown then
local breakdownAPS = {}
t_insert(breakdownAPS, s_format("^1(These calculations are speculative and best-effort)", actualDuration))
t_insert(breakdownAPS, s_format("^8Delay of^7 %.3fs ^8before projectiles start firing", actualDuration))
t_insert(breakdownAPS, s_format("^8Each projectile fires sequentially with a^7 %.3fs ^8delay between each projectile", timePerProjectile))
t_insert(breakdownAPS, s_format("^8Server tick time:^7 %.3fs", data.misc.ServerTickTime))
t_insert(breakdownAPS, s_format("^8Ticks needed:^7 %d ^8(rounded up)", ticksNeededForInitialDelay + math.ceil(timeForAllProjectiles / data.misc.ServerTickTime)))
t_insert(breakdownAPS, s_format("^8Effective delay:^7 %.3fs", effectiveDelay))
t_insert(breakdownAPS, s_format("^8Max effective attack rate:^7 1 / %.3f = %.2f", effectiveDelay, maxEffectiveAPS))
if currentAPS and currentAPS > maxEffectiveAPS then
t_insert(breakdownAPS, "")
t_insert(breakdownAPS, s_format("^1Current attack rate (%.2f) exceeds max effective rate!", currentAPS))
t_insert(breakdownAPS, s_format("^1DPS is reduced by %.1f%%", (1 - maxEffectiveAPS / currentAPS) * 100))
t_insert(breakdownAPS, s_format("^1You will lose up to %d projectiles per volley.", MissProjectile))

elseif currentAPS then
t_insert(breakdownAPS, "")
t_insert(breakdownAPS, s_format("^2Current attack rate (%.2f) is within effective limits", currentAPS))
Expand Down