Skip to content

Commit 578b659

Browse files
github-actions[bot]LocalIdentityLocalIdentity
authored
[pob1-port] Fix Spectre corpse buffs applying when no Spectre gem is in build (#1596)
* Apply changes from PathOfBuildingCommunity/PathOfBuilding#9306 * Fix merge issues Had to change the logic for skill flags as for some reason activeSkill.activeEffect.statSet.skillFlags can be nil for some skills --------- Co-authored-by: LocalIdentity <[email protected]> Co-authored-by: LocalIdentity <[email protected]>
1 parent e1360fe commit 578b659

File tree

1 file changed

+44
-28
lines changed

1 file changed

+44
-28
lines changed

src/Modules/CalcPerform.lua

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1666,35 +1666,51 @@ function calcs.perform(env, skipEHP)
16661666
local linkSkills = { }
16671667
local allyBuffs = env.partyMembers["Aura"]
16681668
local buffExports = { Aura = {}, Curse = {}, Warcry = {}, Link = {}, EnemyMods = {}, EnemyConditions = {}, PlayerMods = {} }
1669-
for spectreId = 1, #env.spec.build.spectreList do
1670-
local spectreData = data.minions[env.spec.build.spectreList[spectreId]]
1671-
for modId = 1, #spectreData.modList do
1672-
local modData = spectreData.modList[modId]
1673-
if modData.name == "EnemyCurseLimit" or modData.name == "EnemyMarkLimit" then
1674-
minionCurses.limit = modData.value + 1
1669+
local hasActiveSpectreSkill = false
1670+
for _, activeSkill in ipairs(env.player.activeSkillList) do
1671+
local skillFlags = activeSkill.activeEffect.statSet and activeSkill.activeEffect.statSet.skillFlags
1672+
if env.mode == "CALCS" then
1673+
skillFlags = activeSkill.activeEffect.statSetCalcs and activeSkill.activeEffect.statSetCalcs.skillFlags
1674+
end
1675+
if not (skillFlags and skillFlags.disable) then
1676+
local skillId = activeSkill.activeEffect.grantedEffect.id
1677+
if skillId and skillId:match("^SummonSpectre") then
1678+
hasActiveSpectreSkill = true
16751679
break
1676-
elseif modData.name == "AllyModifier" and modData.type == "LIST" then
1677-
buffs["Spectre"] = buffs["Spectre"] or new("ModList")
1678-
minionBuffs["Spectre"] = minionBuffs["Spectre"] or new("ModList")
1679-
for _, modValue in pairs(modData.value) do
1680-
local copyModValue = copyTable(modValue)
1681-
copyModValue.source = "Spectre:"..spectreData.name
1682-
t_insert(minionBuffs["Spectre"], copyModValue)
1683-
t_insert(buffs["Spectre"], copyModValue)
1684-
end
1685-
elseif modData.name == "MinionModifier" and modData.type == "LIST" then
1686-
minionBuffs["Spectre"] = minionBuffs["Spectre"] or new("ModList")
1687-
for _, modValue in pairs(modData.value) do
1688-
local copyModValue = copyTable(modValue)
1689-
copyModValue.source = "Spectre:"..spectreData.name
1690-
t_insert(minionBuffs["Spectre"], copyModValue)
1691-
end
1692-
elseif modData.name == "PlayerModifier" and modData.type == "LIST" then
1693-
buffs["Spectre"] = buffs["Spectre"] or new("ModList")
1694-
for _, modValue in pairs(modData.value) do
1695-
local copyModValue = copyTable(modValue)
1696-
copyModValue.source = "Spectre:"..spectreData.name
1697-
t_insert(buffs["Spectre"], copyModValue)
1680+
end
1681+
end
1682+
end
1683+
if hasActiveSpectreSkill then
1684+
for spectreId = 1, #env.spec.build.spectreList do
1685+
local spectreData = data.minions[env.spec.build.spectreList[spectreId]]
1686+
for modId = 1, #spectreData.modList do
1687+
local modData = spectreData.modList[modId]
1688+
if modData.name == "EnemyCurseLimit" or modData.name == "EnemyMarkLimit" then
1689+
minionCurses.limit = modData.value + 1
1690+
break
1691+
elseif modData.name == "AllyModifier" and modData.type == "LIST" then
1692+
buffs["Spectre"] = buffs["Spectre"] or new("ModList")
1693+
minionBuffs["Spectre"] = minionBuffs["Spectre"] or new("ModList")
1694+
for _, modValue in pairs(modData.value) do
1695+
local copyModValue = copyTable(modValue)
1696+
copyModValue.source = "Spectre:"..spectreData.name
1697+
t_insert(minionBuffs["Spectre"], copyModValue)
1698+
t_insert(buffs["Spectre"], copyModValue)
1699+
end
1700+
elseif modData.name == "MinionModifier" and modData.type == "LIST" then
1701+
minionBuffs["Spectre"] = minionBuffs["Spectre"] or new("ModList")
1702+
for _, modValue in pairs(modData.value) do
1703+
local copyModValue = copyTable(modValue)
1704+
copyModValue.source = "Spectre:"..spectreData.name
1705+
t_insert(minionBuffs["Spectre"], copyModValue)
1706+
end
1707+
elseif modData.name == "PlayerModifier" and modData.type == "LIST" then
1708+
buffs["Spectre"] = buffs["Spectre"] or new("ModList")
1709+
for _, modValue in pairs(modData.value) do
1710+
local copyModValue = copyTable(modValue)
1711+
copyModValue.source = "Spectre:"..spectreData.name
1712+
t_insert(buffs["Spectre"], copyModValue)
1713+
end
16981714
end
16991715
end
17001716
end

0 commit comments

Comments
 (0)