Skip to content

Commit

Permalink
[Kalandra] Add support for counting Mastery Type allocations (PathOfB…
Browse files Browse the repository at this point in the history
…uildingCommunity#4746)

* Feat: Add support for counting Mastery Type allocations

* added support for on kill portion of ascendancy node

* Fix spacing
  • Loading branch information
Nostrademous committed Aug 14, 2022
1 parent f61b17a commit 37e8867
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/Classes/PassiveSpec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,10 @@ function PassiveSpecClass:AllocateMasteryEffects(masteryEffects)
self.tree:ProcessStats(self.allocNodes[id])
self.masterySelections[id] = effectId
self.allocatedMasteryCount = self.allocatedMasteryCount + 1
if not self.allocatedMasteryTypes[self.allocNodes[id].name] then
self.allocatedMasteryTypes[self.allocNodes[id].name] = true
self.allocatedMasteryTypeCount = self.allocatedMasteryTypeCount + 1
end
end
end

Expand Down Expand Up @@ -849,6 +853,8 @@ function PassiveSpecClass:BuildAllDependsAndPaths()
-- Add selected mastery effect mods to mastery nodes
self.allocatedMasteryCount = 0
self.allocatedNotableCount = 0
self.allocatedMasteryTypes = { }
self.allocatedMasteryTypeCount = 0
for id, node in pairs(self.nodes) do
if node.type == "Mastery" and self.masterySelections[id] then
local effect = self.tree.masteryEffects[self.masterySelections[id]]
Expand All @@ -858,6 +864,10 @@ function PassiveSpecClass:BuildAllDependsAndPaths()
node.reminderText = { "Tip: Right click to select a different effect" }
self.tree:ProcessStats(node)
self.allocatedMasteryCount = self.allocatedMasteryCount + 1
if not self.allocatedMasteryTypes[node.name] then
self.allocatedMasteryTypes[node.name] = true
self.allocatedMasteryTypeCount = self.allocatedMasteryTypeCount + 1
end
else
self.nodes[id].alloc = false
self.allocNodes[id] = nil
Expand Down
1 change: 1 addition & 0 deletions src/Modules/CalcSetup.lua
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,7 @@ function calcs.initEnv(build, mode, override, specEnv)
modDB:NewMod("PerAbsorptionElementalEnergyShieldRecoup", "BASE", 12, "Base")
modDB:NewMod("Multiplier:AllocatedNotable", "BASE", env.spec.allocatedNotableCount, "")
modDB:NewMod("Multiplier:AllocatedMastery", "BASE", env.spec.allocatedMasteryCount, "")
modDB:NewMod("Multiplier:AllocatedMasteryType", "BASE", env.spec.allocatedMasteryTypeCount, "")

-- Add bandit mods
if env.configInput.bandit == "Alira" then
Expand Down
4 changes: 4 additions & 0 deletions src/Modules/ModParser.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1082,6 +1082,7 @@ local modTagList = {
["per fragile regrowth"] = { tag = { type = "Multiplier", var = "FragileRegrowthCount" } },
["per allocated mastery passive skill"] = { tag = { type = "Multiplier", var = "AllocatedMastery" } },
["per allocated notable passive skill"] = { tag = { type = "Multiplier", var = "AllocatedNotable" } },
["for each different type of mastery you have allocated"] = { tag = { type = "Multiplier", var = "AllocatedMasteryType" } },
-- Per stat
["per (%d+)%% of maximum mana they reserve"] = function(num) return { tag = { type = "PerStat", stat = "ManaReservedPercent", div = num } } end,
["per (%d+) strength"] = function(num) return { tag = { type = "PerStat", stat = "Str", div = num } } end,
Expand Down Expand Up @@ -2971,15 +2972,18 @@ local specialModList = {
["(%d+) life gained for each cursed enemy hit by your attacks"] = function(num) return { mod("LifeOnHit", "BASE", num, { type = "ActorCondition", actor = "enemy", var = "Cursed"})} end,
["(%d+) mana gained for each cursed enemy hit by your attacks"] = function(num) return { mod("ManaOnHit", "BASE", num, { type = "ActorCondition", actor = "enemy", var = "Cursed"})} end,
["recover (%d+)%% of life on kill"] = function(num) return { mod("LifeOnKill", "BASE", 1, { type = "PercentStat", stat = "Life", percent = num }) } end,
["recover (%d+)%% of life on kill for each different type of mastery you have allocated"] = function(num) return { mod("LifeOnKill", "BASE", 1, { type = "PercentStat", stat = "Life", percent = num }, { type = "Multiplier", var = "AllocatedMasteryType"}) } end,
["recover (%d+)%% of life on killing a poisoned enemy"] = function(num) return { mod("LifeOnKill", "BASE", 1, { type = "PercentStat", stat = "Life", percent = num }, { type = "MultiplierThreshold", actor = "enemy", var = "PoisonStack", threshold = 1 }) } end,
["recover (%d+)%% of life on killing a chilled enemy"] = function(num) return { mod("LifeOnKill", "BASE", 1, { type = "PercentStat", stat = "Life", percent = num }, { type = "ActorCondition", actor = "enemy", var = "Chilled" }) } end,
["recover (%d+)%% of life on kill if you've spent life recently"] = function(num) return { mod("LifeOnKill", "BASE", 1, { type = "PercentStat", stat = "Life", percent = num }, { type = "MultiplierThreshold", var = "LifeSpentRecently", threshold = 1 }) } end,
["lose (%d+)%% of life on kill"] = function(num) return { mod("LifeOnKill", "BASE", -1, { type = "PercentStat", stat = "Life", percent = num }) } end,
["%+(%d+) life gained on killing ignited enemies"] = function(num) return { mod("LifeOnKill", "BASE", num, { type = "ActorCondition", actor = "enemy", var = "Ignited" }) } end,
["recover (%d+)%% of mana on kill"] = function(num) return { mod("ManaOnKill", "BASE", 1, { type = "PercentStat", stat = "Mana", percent = num }) } end,
["recover (%d+)%% of mana on kill for each different type of mastery you have allocated"] = function(num) return { mod("ManaOnKill", "BASE", 1, { type = "PercentStat", stat = "Mana", percent = num }, { type = "Multiplier", var = "AllocatedMasteryType"}) } end,
["lose (%d+)%% of mana on kill"] = function(num) return { mod("ManaOnKill", "BASE", -1, { type = "PercentStat", stat = "Mana", percent = num }) } end,
["%+(%d+) mana gained on killing a frozen enemy"] = function(num) return { mod("ManaOnKill", "BASE", num, { type = "ActorCondition", actor = "enemy", var = "Frozen" }) } end,
["recover (%d+)%% of energy shield on kill"] = function(num) return { mod("EnergyShieldOnKill", "BASE", 1, { type = "PercentStat", stat = "EnergyShield", percent = num }) } end,
["recover (%d+)%% of energy shield on kill for each different type of mastery you have allocated"] = function(num) return { mod("EnergyShieldOnKill", "BASE", 1, { type = "PercentStat", stat = "EnergyShield", percent = num }, { type = "Multiplier", var = "AllocatedMasteryType"}) } end,
["lose (%d+)%% of energy shield on kill"] = function(num) return { mod("EnergyShieldOnKill", "BASE", -1, { type = "PercentStat", stat = "EnergyShield", percent = num }) } end,
["%+(%d+) energy shield gained on killing a shocked enemy"] = function(num) return { mod("EnergyShieldOnKill", "BASE", num, { type = "ActorCondition", actor = "enemy", var = "Shocked" }) } end,
["%+(%d+) energy shield gained on kill per level"] = function(num) return { mod("EnergyShieldOnKill", "BASE", num, { type = "Multiplier", var = "Level" }) } end,
Expand Down

0 comments on commit 37e8867

Please sign in to comment.