Skip to content

Commit 28cfa69

Browse files
author
LocalIdentity
committed
1 parent 4e3e1db commit 28cfa69

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

spec/System/TestItemMods_spec.lua

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,40 @@ describe("TetsItemMods", function()
220220
assert.are_not.equals(120, build.calcsTab.mainOutput.Armour)
221221
runCallback("OnFrame")
222222
end)
223+
224+
t("Heralds apply exposure with Heraldry", function()
225+
build.itemsTab:CreateDisplayItemFromRaw([[
226+
New Item
227+
Razor Quarterstaff
228+
Quality: 0
229+
]])
230+
build.itemsTab:AddDisplayItem()
231+
build.skillsTab:PasteSocketGroup("Arc 20/0 Default 1\nHerald of Thunder 20/0 Default 1\n")
232+
runCallback("OnFrame")
233+
234+
assert.are.equals(0.5, build.calcsTab.calcsOutput.LightningEffMult)
235+
236+
build.configTab.input.customMods = [[
237+
Nearby Enemies have Lightning Exposure while you are affected by Herald of Thunder
238+
]]
239+
build.configTab:BuildModList()
240+
runCallback("OnFrame")
241+
242+
assert.are.equals(0.6, build.calcsTab.calcsOutput.LightningEffMult)
243+
end)
244+
245+
it("Enemy self curse effect", function()
246+
build.skillsTab:PasteSocketGroup("Arc 20/0 Default 1\nConductivity 22/0 Default 1\n")
247+
runCallback("OnFrame")
248+
249+
assert.are.equals(0.8, build.calcsTab.calcsOutput.LightningEffMult)
250+
251+
build.configTab.input.customMods = [[
252+
Nearby Enemies have 20% increased Effect of Curses on them
253+
]]
254+
build.configTab:BuildModList()
255+
runCallback("OnFrame")
256+
257+
assert.are.equals(0.68, build.calcsTab.calcsOutput.LightningEffMult)
258+
end)
223259
end)

src/Modules/CalcPerform.lua

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -434,10 +434,19 @@ local function determineCursePriority(curseName, activeSkill)
434434
return basePriority + socketPriority + slotPriority + sourcePriority
435435
end
436436

437-
local function applyEnemyModifiers(actor)
438-
-- Process enemy modifiers
437+
local function applyEnemyModifiers(actor, clearCache)
438+
if clearCache or not actor.appliedEnemyModifiers then
439+
actor.appliedEnemyModifiers = { }
440+
end
441+
local cache = actor.appliedEnemyModifiers
442+
local enemyDB = actor.enemy.modDB
439443
for _, value in ipairs(actor.modDB:Tabulate(nil, nil, "EnemyModifier")) do
440-
actor.enemy.modDB:AddMod(modLib.setSource(value.value.mod, value.value.mod.source or value.mod.source))
444+
local mod = value.value and value.value.mod
445+
if mod and not cache[mod] then
446+
local source = mod.source or value.mod.source
447+
enemyDB:AddMod(modLib.setSource(mod, source))
448+
cache[mod] = true
449+
end
441450
end
442451
end
443452

@@ -447,6 +456,9 @@ local function doActorMisc(env, actor)
447456
local enemyDB = actor.enemy.modDB
448457
local output = actor.output
449458
local condList = modDB.conditions
459+
460+
-- Process enemy modifiers
461+
applyEnemyModifiers(actor)
450462

451463
-- Add misc buffs/debuffs
452464
if env.mode_combat then
@@ -1021,11 +1033,11 @@ function calcs.perform(env, skipEHP)
10211033
output.WarcryPower = modDB:Override(nil, "WarcryPower") or modDB:Sum("BASE", nil, "WarcryPower") or 0
10221034
modDB.multipliers["WarcryPower"] = output.WarcryPower
10231035

1024-
applyEnemyModifiers(env.player)
1036+
applyEnemyModifiers(env.player, true)
10251037
if env.minion then
1026-
applyEnemyModifiers(env.minion)
1038+
applyEnemyModifiers(env.minion, true)
10271039
end
1028-
applyEnemyModifiers(env.enemy)
1040+
applyEnemyModifiers(env.enemy, true)
10291041

10301042
local minionTypeCount, ammoTypeCount, grenadeTypeCount = 0, 0, 0
10311043
local minionType, ammoType, grenadeType = { }, { }, { }

0 commit comments

Comments
 (0)