@@ -225,6 +225,16 @@ function calcs.doActorLifeManaSpiritReservation(actor)
225225 pool .Life .baseFlat = skillModList :Sum (" BASE" , skillCfg , " LifeCostBase" ) + (activeSkill .activeEffect .grantedEffectLevel .cost .Life or 0 )
226226 end
227227 pool .Life .basePercent = activeSkill .skillData .lifeReservationPercent or activeSkill .activeEffect .grantedEffectLevel .lifeReservationPercent or 0
228+ if activeSkill .skillTypes [SkillType .IsBlasphemy ] and activeSkill .activeEffect .srcInstance .supportEffect and activeSkill .activeEffect .srcInstance .supportEffect .isSupporting then
229+ -- Sadly no better way to get key/val table element count in lua.
230+ local instances = 0
231+ for _ in pairs (activeSkill .activeEffect .srcInstance .supportEffect .isSupporting ) do
232+ instances = instances + 1
233+ end
234+ for name , values in pairs (pool ) do
235+ values .baseFlat = values .baseFlat + (activeSkill .skillData [" blasphemyReservationFlat" .. name ] or 0 ) * instances
236+ end
237+ end
228238 if skillModList :Flag (skillCfg , " BloodMagicReserved" ) then
229239 pool .Life .baseFlat = pool .Life .baseFlat + pool .Mana .baseFlat
230240 pool .Mana .baseFlat = 0
@@ -235,14 +245,12 @@ function calcs.doActorLifeManaSpiritReservation(actor)
235245 activeSkill .skillData [" LifeReservationPercentForced" ] = activeSkill .skillData [" ManaReservationPercentForced" ]
236246 activeSkill .skillData [" ManaReservationPercentForced" ] = nil
237247 end
238- do
239- local lifePerSpirit = skillModList :Sum (" BASE" , skillCfg , " LifeReservePercentPerSpirit" )
240- if lifePerSpirit > 0 then
241- pool .Life .basePercent = pool .Life .basePercent + pool .Spirit .baseFlat * lifePerSpirit
242- pool .Spirit .baseFlat = 0
243- pool .Life .basePercent = pool .Life .basePercent + pool .Spirit .basePercent * lifePerSpirit
244- pool .Spirit .basePercent = 0
245- end
248+ local spiritToLifeReservation = skillModList :Sum (" BASE" , skillCfg , " LifeReservePercentPerSpirit" )
249+ if spiritToLifeReservation > 0 then
250+ pool .Life .basePercent = pool .Life .basePercent + pool .Spirit .baseFlat * spiritToLifeReservation
251+ pool .Spirit .baseFlat = 0
252+ pool .Life .basePercent = pool .Life .basePercent + pool .Spirit .basePercent * spiritToLifeReservation
253+ pool .Spirit .basePercent = 0
246254 end
247255 for name , values in pairs (pool ) do
248256 values .more = skillModList :More (skillCfg , name .. " Reserved" , " Reserved" )
@@ -278,37 +286,6 @@ function calcs.doActorLifeManaSpiritReservation(actor)
278286 values .count = activeSkillCount
279287 local minionFreeSpiritCount = skillModList :Sum (" BASE" , skillCfg , " MinionFreeSpiritCount" )
280288 values .reservedFlat = values .reservedFlat * m_max (activeSkillCount - minionFreeSpiritCount , 0 )
281- end
282- if activeSkill .skillTypes [SkillType .IsBlasphemy ] and activeSkill .activeEffect .srcInstance .supportEffect and activeSkill .activeEffect .srcInstance .supportEffect .isSupporting and activeSkill .skillData [" blasphemyReservationFlat" .. name ] then
283- -- Sadly no better way to get key/val table element count in lua.
284- local instances = 0
285- for _ in pairs (activeSkill .activeEffect .srcInstance .supportEffect .isSupporting ) do
286- instances = instances + 1
287- end
288-
289- -- Extra reservation of blasphemy needs to be separated from the reservation caused by curses
290- local blasphemyFlat = activeSkill .skillData [" blasphemyReservationFlat" .. name ]
291- local blasphemyEffectiveFlat = m_max (round (blasphemyFlat * mult * (100 + values .inc ) / 100 * values .more / (1 + values .efficiency / 100 ) / values .efficiencyMore , 0 ), 0 )
292- local lifePerSpirit = skillModList :Sum (" BASE" , skillCfg , " LifeReservePercentPerSpirit" )
293- if name == " Spirit" and lifePerSpirit > 0 then
294- local lifeBasePercent = blasphemyFlat * instances * lifePerSpirit
295- local lifeEffectivePercent = m_max (round (lifeBasePercent * mult * (100 + values .inc ) / 100 * values .more / (1 + values .efficiency / 100 ) / values .efficiencyMore , 2 ), 0 )
296- actor [" reserved_LifePercent" ] = actor [" reserved_LifePercent" ] + lifeEffectivePercent
297- if breakdown then
298- t_insert (breakdown [" LifeReserved" ].reservations , {
299- skillName = activeSkill .activeEffect .grantedEffect .name ,
300- base = lifeBasePercent .. " %" ,
301- mult = mult ~= 1 and (" x " .. mult ),
302- more = values .more ~= 1 and (" x " .. values .more ),
303- inc = values .inc ~= 0 and (" x " .. (1 + values .inc / 100 )),
304- efficiency = values .efficiency ~= 0 and (" x " .. round (100 / (100 + values .efficiency ), 4 )),
305- efficiencyMore = values .efficiencyMore ~= 1 and (" x " .. values .efficiencyMore ),
306- total = lifeEffectivePercent .. " %" ,
307- })
308- end
309- else
310- values .reservedFlat = values .reservedFlat + blasphemyEffectiveFlat * instances
311- end
312289 end
313290 -- Blood Sacrament increases reservation per stage channelled
314291 if activeSkill .skillCfg .skillName == " Blood Sacrament" and activeSkill .activeStageCount then
0 commit comments