Skip to content

Commit 58d791c

Browse files
ENH: minion skill multiple count spirit reservation (#761)
1 parent f9ec36a commit 58d791c

File tree

2 files changed

+34
-27
lines changed

2 files changed

+34
-27
lines changed

src/Modules/CalcDefence.lua

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,34 @@ function calcs.doActorDarkness(actor)
120120
output.UnreservedDarkness = output.Darkness - output.ReservedDarkness
121121
end
122122

123+
-- Return the gem count of the specified skill and it's enabled status
124+
---@param activeSkill table
125+
function calcs.getActiveSkillCount(activeSkill)
126+
if not activeSkill.socketGroup then
127+
return 1, true
128+
elseif activeSkill.socketGroup.groupCount then
129+
return activeSkill.socketGroup.groupCount, true
130+
else
131+
local gemList = activeSkill.socketGroup.gemList
132+
for _, gemData in pairs(gemList) do
133+
if gemData.gemData then
134+
if gemData.gemData.vaalGem then
135+
if activeSkill.activeEffect.grantedEffect == gemData.gemData.grantedEffectList[1] then
136+
return gemData.count or 1, gemData.enableGlobal1 == true
137+
elseif activeSkill.activeEffect.grantedEffect == gemData.gemData.grantedEffectList[2] then
138+
return gemData.count or 1, gemData.enableGlobal2 == true
139+
end
140+
else
141+
if (activeSkill.activeEffect.grantedEffect == gemData.gemData.grantedEffect and not gemData.gemData.grantedEffect.support) or isValueInArray(gemData.gemData.additionalGrantedEffects, activeSkill.activeEffect.grantedEffect) then
142+
return gemData.count or 1, true
143+
end
144+
end
145+
end
146+
end
147+
end
148+
return 1, true
149+
end
150+
123151
-- Calculate life/mana/spirit reservation
124152
---@param actor table
125153
function calcs.doActorLifeManaSpiritReservation(actor)
@@ -199,6 +227,11 @@ function calcs.doActorLifeManaSpiritReservation(actor)
199227
values.reservedFlat = values.reservedFlat * activeSkill.activeMineCount
200228
values.reservedPercent = values.reservedPercent * activeSkill.activeMineCount
201229
end
230+
if activeSkill.skillTypes[SkillType.MultipleReservation] then
231+
local activeSkillCount, enabled = calcs.getActiveSkillCount(activeSkill)
232+
values.reservedFlat = values.reservedFlat * activeSkillCount
233+
end
234+
202235
if activeSkill.skillTypes[SkillType.CanHaveMultipleOngoingSkillInstances] and activeSkill.activeEffect.srcInstance.supportEffect and activeSkill.activeEffect.srcInstance.supportEffect.isSupporting then
203236
-- Sadly no better way to get key/val table element count in lua.
204237
local instances = 0

src/Modules/Calcs.lua

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -149,32 +149,6 @@ function calcs.getMiscCalculator(build)
149149
end, env.player.output
150150
end
151151

152-
local function getActiveSkillCount(activeSkill)
153-
if not activeSkill.socketGroup then
154-
return 1, true
155-
elseif activeSkill.socketGroup.groupCount then
156-
return activeSkill.socketGroup.groupCount, true
157-
else
158-
local gemList = activeSkill.socketGroup.gemList
159-
for _, gemData in pairs(gemList) do
160-
if gemData.gemData then
161-
if gemData.gemData.vaalGem then
162-
if activeSkill.activeEffect.grantedEffect == gemData.gemData.grantedEffectList[1] then
163-
return gemData.count or 1, gemData.enableGlobal1 == true
164-
elseif activeSkill.activeEffect.grantedEffect == gemData.gemData.grantedEffectList[2] then
165-
return gemData.count or 1, gemData.enableGlobal2 == true
166-
end
167-
else
168-
if (activeSkill.activeEffect.grantedEffect == gemData.gemData.grantedEffect and not gemData.gemData.grantedEffect.support) or isValueInArray(gemData.gemData.additionalGrantedEffects, activeSkill.activeEffect.grantedEffect) then
169-
return gemData.count or 1, true
170-
end
171-
end
172-
end
173-
end
174-
end
175-
return 1, true
176-
end
177-
178152
function calcs.calcFullDPS(build, mode, override, specEnv)
179153
local fullEnv, cachedPlayerDB, cachedEnemyDB, cachedMinionDB = calcs.initEnv(build, mode, override, specEnv)
180154
local usedEnv = nil
@@ -204,7 +178,7 @@ function calcs.calcFullDPS(build, mode, override, specEnv)
204178

205179
for _, activeSkill in ipairs(fullEnv.player.activeSkillList) do
206180
if activeSkill.socketGroup and activeSkill.socketGroup.includeInFullDPS then
207-
local activeSkillCount, enabled = getActiveSkillCount(activeSkill)
181+
local activeSkillCount, enabled = calcs.getActiveSkillCount(activeSkill)
208182
if enabled then
209183
fullEnv.player.mainSkill = activeSkill
210184
calcs.perform(fullEnv, true)

0 commit comments

Comments
 (0)