diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index c42b5082d..99e186ed1 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -1652,35 +1652,51 @@ function calcs.perform(env, skipEHP) local linkSkills = { } local allyBuffs = env.partyMembers["Aura"] local buffExports = { Aura = {}, Curse = {}, Warcry = {}, Link = {}, EnemyMods = {}, EnemyConditions = {}, PlayerMods = {} } - for spectreId = 1, #env.spec.build.spectreList do - local spectreData = data.minions[env.spec.build.spectreList[spectreId]] - for modId = 1, #spectreData.modList do - local modData = spectreData.modList[modId] - if modData.name == "EnemyCurseLimit" or modData.name == "EnemyMarkLimit" then - minionCurses.limit = modData.value + 1 + local hasActiveSpectreSkill = false + for _, activeSkill in ipairs(env.player.activeSkillList) do + local skillFlags = activeSkill.activeEffect.statSet and activeSkill.activeEffect.statSet.skillFlags + if env.mode == "CALCS" then + skillFlags = activeSkill.activeEffect.statSetCalcs and activeSkill.activeEffect.statSetCalcs.skillFlags + end + if not (skillFlags and skillFlags.disable) then + local skillId = activeSkill.activeEffect.grantedEffect.id + if skillId and skillId:match("^SummonSpectre") then + hasActiveSpectreSkill = true break - elseif modData.name == "AllyModifier" and modData.type == "LIST" then - buffs["Spectre"] = buffs["Spectre"] or new("ModList") - minionBuffs["Spectre"] = minionBuffs["Spectre"] or new("ModList") - for _, modValue in pairs(modData.value) do - local copyModValue = copyTable(modValue) - copyModValue.source = "Spectre:"..spectreData.name - t_insert(minionBuffs["Spectre"], copyModValue) - t_insert(buffs["Spectre"], copyModValue) - end - elseif modData.name == "MinionModifier" and modData.type == "LIST" then - minionBuffs["Spectre"] = minionBuffs["Spectre"] or new("ModList") - for _, modValue in pairs(modData.value) do - local copyModValue = copyTable(modValue) - copyModValue.source = "Spectre:"..spectreData.name - t_insert(minionBuffs["Spectre"], copyModValue) - end - elseif modData.name == "PlayerModifier" and modData.type == "LIST" then - buffs["Spectre"] = buffs["Spectre"] or new("ModList") - for _, modValue in pairs(modData.value) do - local copyModValue = copyTable(modValue) - copyModValue.source = "Spectre:"..spectreData.name - t_insert(buffs["Spectre"], copyModValue) + end + end + end + if hasActiveSpectreSkill then + for spectreId = 1, #env.spec.build.spectreList do + local spectreData = data.minions[env.spec.build.spectreList[spectreId]] + for modId = 1, #spectreData.modList do + local modData = spectreData.modList[modId] + if modData.name == "EnemyCurseLimit" or modData.name == "EnemyMarkLimit" then + minionCurses.limit = modData.value + 1 + break + elseif modData.name == "AllyModifier" and modData.type == "LIST" then + buffs["Spectre"] = buffs["Spectre"] or new("ModList") + minionBuffs["Spectre"] = minionBuffs["Spectre"] or new("ModList") + for _, modValue in pairs(modData.value) do + local copyModValue = copyTable(modValue) + copyModValue.source = "Spectre:"..spectreData.name + t_insert(minionBuffs["Spectre"], copyModValue) + t_insert(buffs["Spectre"], copyModValue) + end + elseif modData.name == "MinionModifier" and modData.type == "LIST" then + minionBuffs["Spectre"] = minionBuffs["Spectre"] or new("ModList") + for _, modValue in pairs(modData.value) do + local copyModValue = copyTable(modValue) + copyModValue.source = "Spectre:"..spectreData.name + t_insert(minionBuffs["Spectre"], copyModValue) + end + elseif modData.name == "PlayerModifier" and modData.type == "LIST" then + buffs["Spectre"] = buffs["Spectre"] or new("ModList") + for _, modValue in pairs(modData.value) do + local copyModValue = copyTable(modValue) + copyModValue.source = "Spectre:"..spectreData.name + t_insert(buffs["Spectre"], copyModValue) + end end end end