diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index 8075f75884c..544fa347881 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -113,7 +113,7 @@ describe("TestSkills", function() assert.is_nil(supports.SupportSacredWisps) end) - it("keeps forced mana reservations on mana", function() + it("keeps Mana-Infused Staff reservation on mana and disables it without 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") @@ -132,8 +132,12 @@ describe("TestSkills", function() 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.ManaReservedBase) + assert.is_nil(activeSkill.skillData.ManaReservedPercent) assert.is_nil(activeSkill.skillData.LifeReservedBase) + assert.are.equals(0, build.calcsTab.mainEnv.player.reserved_ManaPercent) + assert.is_nil(build.calcsTab.mainEnv.player.output.ManaReservedPercent) + assert.are.equals(0, #build.calcsTab.mainEnv.player.breakdown.ManaReserved.reservations) end) it("Test Scorching ray applying exposure at max stages", function() diff --git a/src/Data/Skills/act_int.lua b/src/Data/Skills/act_int.lua index 1357761081a..24e2afa31b3 100644 --- a/src/Data/Skills/act_int.lua +++ b/src/Data/Skills/act_int.lua @@ -13456,6 +13456,9 @@ skills["ManaInfusedStaff"] = { area = true, duration = true, }, + baseMods = { + skill("requiresManaReservation", true), + }, qualityStats = { { "base_skill_effect_duration", 2.5 }, }, diff --git a/src/Export/Skills/act_int.txt b/src/Export/Skills/act_int.txt index 7c0ea12dc98..1b5588714c6 100644 --- a/src/Export/Skills/act_int.txt +++ b/src/Export/Skills/act_int.txt @@ -3198,6 +3198,7 @@ return function(skills, mod, flag, skill) #skill ManaInfusedStaff #flags spell area duration +#baseMod skill("requiresManaReservation", true) statMap = { ["mana_infused_staff_base_trigger_interval_ms"] = { skill("hitTimeOverride", nil), diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index c7f75eda6c4..aaa0904d7ea 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -1976,6 +1976,10 @@ function calcs.perform(env, skipEHP) breakdown.ManaReserved = { reservations = { } } end for _, activeSkill in ipairs(env.player.activeSkillList) do + if activeSkill.skillData.requiresManaReservation and output.Mana == 0 then + activeSkill.skillFlags.disable = true + activeSkill.disableReason = "This skill requires reserving Mana" + end if (activeSkill.skillTypes[SkillType.HasReservation] or activeSkill.skillData.triggeredByAutoexertion ) and not activeSkill.skillTypes[SkillType.ReservationBecomesCost] and not activeSkill.skillFlags.disable then local skillModList = activeSkill.skillModList local skillCfg = activeSkill.skillCfg @@ -1991,7 +1995,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") and not activeSkill.skillData.ManaReservationPercentForced then + if skillModList:Flag(skillCfg, "BloodMagicReserved") and not activeSkill.skillData.requiresManaReservation then pool.Life.baseFlat = pool.Life.baseFlat + pool.Mana.baseFlat pool.Mana.baseFlat = 0 activeSkill.skillData["LifeReservationFlatForced"] = activeSkill.skillData["ManaReservationFlatForced"] @@ -2081,10 +2085,6 @@ 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