Skip to content

Commit 48825bc

Browse files
authored
Add support for "Unhallowed Rite" Occultist Ascendancy node (#9968)
* Add support for "Spirit Infusion" Occultist Ascendancy node * Add more flexible mod pattern * Slightly rename and reposition config option It is now right below "Spirit Charges" which seemed fitting
1 parent 85f6fa0 commit 48825bc

4 files changed

Lines changed: 21 additions & 0 deletions

File tree

src/Modules/CalcPerform.lua

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,15 @@ local function doActorMisc(env, actor)
708708
modDB:NewMod("Cost", "MORE", -effect, "Fanaticism", ModFlag.Cast)
709709
modDB:NewMod("AreaOfEffect", "INC", effect, "Fanaticism", ModFlag.Cast)
710710
end
711+
if modDB:Flag(nil, "Condition:CanGainSpiritInfusion") then
712+
-- storing tags in local var to avoid repetition
713+
local globalEffectTag = { type = "GlobalEffect", effectType = "Buff", effectName = "Spirit Infusion", unscalable = true }
714+
local multiplierTag = { type = "Multiplier", var = "SpiritInfusion"--[[ , limitVar = "SpiritInfusionsMax" ]] }
715+
716+
modDB:NewMod("EnergyShieldRechargeFaster", "INC", 30 , "Spirit Infusion", multiplierTag, globalEffectTag)
717+
modDB:NewMod("Damage", "MORE", 10 , "Spirit Infusion", nil, KeywordFlag.Spell, { type = "SkillType", skillType = SkillType.Channel }, multiplierTag, globalEffectTag)
718+
modDB:NewMod("Cost", "MORE", 20 , "Spirit Infusion", nil, KeywordFlag.Spell, { type = "SkillType", skillType = SkillType.Channel }, multiplierTag, globalEffectTag)
719+
end
711720
if modDB:Flag(nil, "UnholyMight") then
712721
local effect = 1 + modDB:Sum("INC", nil, "BuffEffectOnSelf") / 100
713722
modDB:NewMod("PhysicalDamageConvertToChaos", "BASE", m_floor(100 * effect), "Unholy Might")
@@ -957,6 +966,7 @@ local function doActorCharges(env, actor)
957966
output.AfflictionChargesMax = m_max(modDB:Flag(nil, "MaximumFrenzyChargesEqualsMaximumAfflictionCharges") and output.FrenzyChargesMax or 0, 0)
958967
output.BloodChargesMax = m_max(modDB:Sum("BASE", nil, "BloodChargesMax"), 0)
959968
output.SpiritChargesMax = m_max(modDB:Sum("BASE", nil, "SpiritChargesMax"), 0)
969+
output.SpiritInfusionsMax = modDB:Sum("BASE", nil, "SpiritInfusionsMax") + (modDB:Flag(nil, "Condition:CanGainSpiritInfusion") and 5 or 0)
960970

961971
-- Initialize Charges
962972
output.PowerCharges = 0
@@ -972,6 +982,7 @@ local function doActorCharges(env, actor)
972982
output.AfflictionCharges = 0
973983
output.BloodCharges = 0
974984
output.SpiritCharges = 0
985+
output.SpiritInfusions = 0
975986

976987
-- Conditionally over-write Charge values
977988
if modDB:Flag(nil, "MinimumFrenzyChargesIsMaximumFrenzyCharges") then
@@ -1036,6 +1047,8 @@ local function doActorCharges(env, actor)
10361047
end
10371048
output.BloodCharges = m_min(modDB:Override(nil, "BloodCharges") or output.BloodChargesMax, output.BloodChargesMax)
10381049
output.SpiritCharges = m_min(modDB:Override(nil, "SpiritCharges") or 0, output.SpiritChargesMax)
1050+
output.SpiritInfusions = m_min(modDB:Override(nil, "SpiritInfusion") or 0, output.SpiritInfusionsMax)
1051+
10391052

10401053
output.CrabBarriers = m_min(modDB:Override(nil, "CrabBarriers") or output.CrabBarriersMax, output.CrabBarriersMax)
10411054
if modDB:Flag(nil, "HaveMaximumPowerCharges") then
@@ -1069,6 +1082,7 @@ local function doActorCharges(env, actor)
10691082
modDB.multipliers["AfflictionCharge"] = output.AfflictionCharges
10701083
modDB.multipliers["BloodCharge"] = output.BloodCharges
10711084
modDB.multipliers["SpiritCharge"] = output.SpiritCharges
1085+
modDB.multipliers["SpiritInfusion"] = output.SpiritInfusions
10721086
end
10731087

10741088
function calcs.actionSpeedMod(actor)

src/Modules/Calcs.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,9 @@ function calcs.buildOutput(build, mode)
677677
if build.calcsTab.mainEnv.multipliersUsed["SpiritCharge"] then
678678
t_insert(combatList, s_format("%d Spirit Charges", output.SpiritCharges))
679679
end
680+
if build.calcsTab.mainEnv.multipliersUsed["SpiritInfusion"] then
681+
t_insert(combatList, s_format("%d Spirit Infusions", output.SpiritInfusions))
682+
end
680683
if env.player.mainSkill.baseSkillModList:Flag(nil, "Cruelty") then
681684
t_insert(combatList, "Cruelty")
682685
end

src/Modules/ConfigOptions.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,9 @@ Huge sets the radius to 11.
954954
{ var = "overrideSpiritCharges", type = "countAllowZero", label = "# of Spirit Charges:", ifMult = "SpiritCharge", apply = function(val, modList, enemyModList)
955955
modList:NewMod("SpiritCharges", "OVERRIDE", val, "Config", { type = "Condition", var = "Combat" })
956956
end },
957+
{ var = "overrideSpiritInfusion", type = "countAllowZero", label = "# of Spirit Infusions:", ifFlag = "Condition:CanGainSpiritInfusion", tooltip = "Each stack of Spirit Infusion grants:\n30% faster start of Energy Shield Recharge, \nChannelling Spells deal 10% more Damage and \nChannelling Spells have 20% more Cost", apply = function(val, modList, enemyModList)
958+
modList:NewMod("SpiritInfusion", "OVERRIDE", val, "Config", { type = "Condition", var = "Combat" } )
959+
end },
957960
{ var = "minionsUsePowerCharges", type = "check", label = "Do your Minions use Power Charges?", ifFlag = "haveMinion", apply = function(val, modList, enemyModList)
958961
modList:NewMod("MinionModifier", "LIST", { mod = modLib.createMod("UsePowerCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) }, "Config")
959962
end },

src/Modules/ModParser.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2873,6 +2873,7 @@ local specialModList = {
28732873
["every second, inflict withered on nearby enemies for (%d+) seconds"] = { flag("Condition:CanWither") },
28742874
["nearby hindered enemies deal (%d+)%% reduced damage over time"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("DamageOverTime", "INC", -num) }, { type = "ActorCondition", actor = "enemy", var = "Hindered" }) } end,
28752875
["nearby chilled enemies deal (%d+)%% reduced damage with hits"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("Damage", "INC", -num) }, { type = "ActorCondition", actor = "enemy", var = "Chilled" }) } end,
2876+
["gain spirit infusion every ?(%d?)%.?(%d?) seconds? while channelling a spell"] = function(_,_) return { flag("Condition:CanGainSpiritInfusion") } end,
28762877
-- Pathfinder
28772878
["always poison on hit while using a flask"] = { mod("PoisonChance", "BASE", 100, { type = "Condition", var = "UsingFlask" }) },
28782879
["poisons you inflict during any flask effect have (%d+)%% chance to deal (%d+)%% more damage"] = function(num, _, more) return { mod("Damage", "MORE", tonumber(more) * num / 100, nil, 0, KeywordFlag.Poison, { type = "Condition", var = "UsingFlask" }) } end,

0 commit comments

Comments
 (0)