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
41 changes: 41 additions & 0 deletions spec/System/TestItemMods_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,47 @@ describe("TetsItemMods", function()
assert.are_not.equals(nonElusiveCritMult, build.calcsTab.mainOutput.CritMultiplier)
end)

it("Runegraft of the Agile affects average Elusive effect", function()
build.skillsTab:PasteSocketGroup("Smite 20/0 1\n")
build.configTab.input.customMods = "Gain Elusive on Critical Strike"
build.configTab.input.buffElusive = true
build.configTab:BuildModList()
runCallback("OnFrame")

assert.are.equals(50, build.calcsTab.mainOutput.ElusiveEffectMod)

build.configTab.input.customMods = [[Gain Elusive on Critical Strike
Elusive's Effect on you is increased instead for the first 2 seconds]]
build.configTab:BuildModList()
runCallback("OnFrame")

assert.are.near(730 / 9, build.calcsTab.mainOutput.ElusiveEffectMod, 10 ^ -9)

build.configTab.input.customMods = [[Gain Elusive on Critical Strike
Elusive's Effect on you is increased instead for the first 2 seconds
Elusive on you reduces in effect 50% slower
Elusive is removed from you at 20% Effect]]
build.configTab:BuildModList()
runCallback("OnFrame")

assert.are.near(244 / 3, build.calcsTab.mainOutput.ElusiveEffectMod, 10 ^ -9)

build.configTab.input.customMods = [[Gain Elusive on Critical Strike
Elusive's Effect on you is increased instead for the first 2 seconds
100% increased Elusive Effect
Elusive is removed from you at 100% Effect]]
build.configTab:BuildModList()
runCallback("OnFrame")

assert.are.near(1630 / 9, build.calcsTab.mainOutput.ElusiveEffectMod, 10 ^ -9)

build.configTab.input.overrideBuffElusive = 220
build.configTab:BuildModList()
runCallback("OnFrame")

assert.are.equals(220, build.calcsTab.mainOutput.ElusiveEffectMod)
end)

it("Varunastra works with close combat support", function()
build.itemsTab:CreateDisplayItemFromRaw([[Varunastra
Vaal Blade
Expand Down
6 changes: 2 additions & 4 deletions src/Data/ModCache.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8334,10 +8334,8 @@ c["Elusive also grants +40% to Critical Strike Multiplier for Skills Supported b
c["Elusive has 50% chance to be removed from you at 100% effect"]={nil,"Elusive has 50% chance to be removed from you at 100% effect "}
c["Elusive has 50% chance to be removed from you at 100% effect 50% increased Effect of your Marks while Elusive"]={nil,"Elusive has 50% chance to be removed from you at 100% effect 50% increased Effect of your Marks while Elusive "}
c["Elusive is removed from you at 20% effect"]={{[1]={flags=0,keywordFlags=0,name="ElusiveEffectMinThreshold",type="OVERRIDE",value=20}},nil}
c["Elusive on you reduces in effect 50% slower"]={nil,"Elusive on you reduces in effect 50% slower "}
c["Elusive on you reduces in effect 50% slower Elusive is removed from you at 20% effect"]={nil,"Elusive on you reduces in effect 50% slower Elusive is removed from you at 20% effect "}
c["Elusive's Effect on you is increased instead for the first 2 seconds"]={nil,"Elusive's Effect on you is increased instead for the first 2 seconds "}
c["Elusive's Effect on you is increased instead for the first 2 seconds Limited to 1 Runegraft of the Agile"]={nil,"Elusive's Effect on you is increased instead for the first 2 seconds Limited to 1 Runegraft of the Agile "}
c["Elusive on you reduces in effect 50% slower"]={{[1]={flags=0,keywordFlags=0,name="ElusiveEffectLossSlower",type="INC",value=50}},nil}
c["Elusive's Effect on you is increased instead for the first 2 seconds"]={{[1]={flags=0,keywordFlags=0,name="ElusiveEffectIncreaseDuration",type="BASE",value=2}},nil}
c["Endurance, Frenzy and Power Charges as you"]={nil,"Endurance, Frenzy and Power Charges as you "}
c["Enemies Become Chilled as they Unfreeze, causing 30% reduced Action Speed"]={nil,"Enemies Become Chilled as they Unfreeze, causing 30% reduced Action Speed "}
c["Enemies Become Chilled as they Unfreeze, causing 30% reduced Action Speed 30% chance to Freeze Enemies which are Chilled"]={nil,"Enemies Become Chilled as they Unfreeze, causing 30% reduced Action Speed 30% chance to Freeze Enemies which are Chilled "}
Expand Down
17 changes: 15 additions & 2 deletions src/Modules/CalcPerform.lua
Original file line number Diff line number Diff line change
Expand Up @@ -775,12 +775,25 @@ local function doActorMisc(env, actor)
end
inc = inc + maxSkillInc
local elusiveEffectMod = (1 + inc / 100) * modDB:More(nil, "ElusiveEffect", "BuffEffectOnSelf") * 100
output.ElusiveEffectMod = (elusiveEffectMod + (modDB:Override(nil, "ElusiveEffectMinThreshold") or 0)) / 2
local elusiveEffectMinThreshold = modDB:Override(nil, "ElusiveEffectMinThreshold") or 0
local elusiveEffectIncreaseDuration = modDB:Sum("BASE", nil, "ElusiveEffectIncreaseDuration")
local peakElusiveEffect = elusiveEffectMod
if elusiveEffectIncreaseDuration > 0 then
local elusiveEffectChangeRate = 20 / (1 + modDB:Sum("INC", nil, "ElusiveEffectLossSlower") / 100)
peakElusiveEffect = elusiveEffectMod + elusiveEffectChangeRate * elusiveEffectIncreaseDuration
local elusiveEffectDecreaseDuration = (peakElusiveEffect - elusiveEffectMinThreshold) / elusiveEffectChangeRate
local totalElusiveEffectDuration = elusiveEffectIncreaseDuration + elusiveEffectDecreaseDuration
local averageIncreaseEffect = (elusiveEffectMod + peakElusiveEffect) / 2
local averageDecreaseEffect = (peakElusiveEffect + elusiveEffectMinThreshold) / 2
output.ElusiveEffectMod = (averageIncreaseEffect * elusiveEffectIncreaseDuration + averageDecreaseEffect * elusiveEffectDecreaseDuration) / totalElusiveEffectDuration
else
output.ElusiveEffectMod = (elusiveEffectMod + elusiveEffectMinThreshold) / 2
end
-- if we want the max skill to not be noted as its own breakdown table entry, comment out below
modDB:NewMod("ElusiveEffect", "INC", maxSkillInc, "Max Skill Effect")
-- Override elusive effect if set.
if modDB:Override(nil, "ElusiveEffect") then
output.ElusiveEffectMod = m_min(modDB:Override(nil, "ElusiveEffect"), elusiveEffectMod)
output.ElusiveEffectMod = m_min(modDB:Override(nil, "ElusiveEffect"), peakElusiveEffect)
end
local effect = output.ElusiveEffectMod / 100
condList["Elusive"] = true
Expand Down
2 changes: 2 additions & 0 deletions src/Modules/ModParser.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5496,6 +5496,8 @@ local specialModList = {
["gain a random shrine buff every (%d+) seconds"] = { flag("Condition:CanHaveRegularShrines") },
["gain a random shrine buff for (%d+) seconds when you kill a rare or unique enemy"] = { flag("Condition:CanHaveRegularShrines") },
["(%d+)%% chance to gain elusive when you block while dual wielding"] = { flag("Condition:CanBeElusive", { type = "Condition", var = "DualWielding" }) },
["elusive on you reduces in effect (%d+)%% slower"] = function(num) return { mod("ElusiveEffectLossSlower", "INC", num) } end,
["elusive's effect on you is increased instead for the first (%d+) seconds"] = function(num) return { mod("ElusiveEffectIncreaseDuration", "BASE", num) } end,
["elusive is removed from you at (%d+)%% effect"] = function(num) return { mod("ElusiveEffectMinThreshold", "OVERRIDE", num) } end,
["nearby enemies have (%a+) resistance equal to yours"] = function(_, res) return { flag("Enemy"..(res:gsub("^%l", string.upper)).."ResistEqualToYours") } end,
["for each nearby corpse, regenerate ([%d%.]+)%% life per second, up to ([%d%.]+)%%"] = function(num, _, limit) return { mod("LifeRegenPercent", "BASE", num, { type = "Multiplier", var = "NearbyCorpse", limit = tonumber(limit), limitTotal = true }) } end,
Expand Down
Loading