diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index 12f9edbc57..8075f75884 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -112,6 +112,29 @@ describe("TestSkills", function() assert.is_true(supports.SupportNightblade) assert.is_nil(supports.SupportSacredWisps) end) + + it("keeps forced mana reservations on mana", function() + build.itemsTab:CreateDisplayItemFromRaw("Test Staff\nJudgement Staff") + build.itemsTab:AddDisplayItem() + build.skillsTab:PasteSocketGroup("Mana-Infused Staff 20/0 1\nArrogance 20/0 1\n") + runCallback("OnFrame") + + local activeSkill = build.calcsTab.mainEnv.player.mainSkill + assert.are.equals("SupportArrogance", activeSkill.effectList[2].grantedEffect.id) + assert.is_nil(activeSkill.skillFlags.disable) + assert.are.equals(30, build.calcsTab.mainEnv.player.output.ManaReservedPercent) + assert.are.equals(0, build.calcsTab.mainEnv.player.output.LifeReserved) + + build.configTab.input.customMods = "Removes all mana\nSkills Reserve Life instead of Mana" + build.configTab:BuildModList() + runCallback("OnFrame") + + activeSkill = build.calcsTab.mainEnv.player.mainSkill + assert.is_true(activeSkill.skillFlags.disable) + assert.are.equals("This skill requires reserving Mana", activeSkill.disableReason) + assert.are.equals(0, activeSkill.skillData.ManaReservedBase) + assert.is_nil(activeSkill.skillData.LifeReservedBase) + end) it("Test Scorching ray applying exposure at max stages", function() build.skillsTab:PasteSocketGroup("Scorching Ray 20/0 1\n") diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index 3112659bdf..3276bdc175 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -1983,7 +1983,7 @@ function calcs.perform(env, skipEHP) pool.Life.baseFlat = skillModList:Sum("BASE", skillCfg, "LifeCostBase") + (activeSkill.activeEffect.grantedEffectLevel.cost.Life or 0) end pool.Life.basePercent = activeSkill.skillData.lifeReservationPercent or activeSkill.activeEffect.grantedEffectLevel.lifeReservationPercent or 0 - if skillModList:Flag(skillCfg, "BloodMagicReserved") then + if skillModList:Flag(skillCfg, "BloodMagicReserved") and not activeSkill.skillData.ManaReservationPercentForced then pool.Life.baseFlat = pool.Life.baseFlat + pool.Mana.baseFlat pool.Mana.baseFlat = 0 activeSkill.skillData["LifeReservationFlatForced"] = activeSkill.skillData["ManaReservationFlatForced"] @@ -2073,6 +2073,10 @@ function calcs.perform(env, skipEHP) env.player["uncancellable_"..name.."Reservation"] = env.player["uncancellable_"..name.."Reservation"] + values.reservedPercent end end + if activeSkill.skillData.ManaReservationPercentForced and activeSkill.skillData.ManaReservedBase == 0 then + activeSkill.skillFlags.disable = true + activeSkill.disableReason = "This skill requires reserving Mana" + end end end