diff --git a/src/Modules/CalcMirages.lua b/src/Modules/CalcMirages.lua index 87bcf8e3db..8ce087fb5f 100644 --- a/src/Modules/CalcMirages.lua +++ b/src/Modules/CalcMirages.lua @@ -37,6 +37,8 @@ local function calculateMirage(env, config) if mirageSkill then local newSkill, newEnv = calcs.copyActiveSkill(env, "CALCULATOR", mirageSkill) newSkill.skillCfg.skillCond["usedByMirage"] = true + newSkill.skillFlags.multiPart = nil + newSkill.skillFlags.haveMinion = nil newEnv.limitedSkills = newEnv.limitedSkills or {} newEnv.limitedSkills[cacheSkillUUID(newSkill, newEnv)] = true newSkill.skillData.mirageUses = env.player.mainSkill.skillData.storedUses @@ -150,21 +152,8 @@ function calcs.mirages(env) postCalcFunc = function(env, newSkill, newEnv) env.player.mainSkill = newSkill env.player.mainSkill.infoMessage = tostring(maxMirageWarriors) .. " Mirage Warriors using " .. newSkill.activeEffect.grantedEffect.name - - -- Re-link over the output env.player.output = newEnv.player.output - if newSkill.minion then - env.minion = newEnv.player.mainSkill.minion - env.minion.output = newEnv.minion.output - end - - -- Re-link over the breakdown (if present) - if newEnv.player.breakdown then - env.player.breakdown = newEnv.player.breakdown - if newSkill.minion then - env.minion.breakdown = newEnv.minion.breakdown - end - end + env.player.breakdown = newEnv.player.breakdown or env.player.breakdown end, mirageSkillNotFoundFunc = function(env, config) env.player.mainSkill.disableReason = "No Saviour active skill found" diff --git a/src/Modules/CalcTriggers.lua b/src/Modules/CalcTriggers.lua index c0940ca031..acb7540db1 100644 --- a/src/Modules/CalcTriggers.lua +++ b/src/Modules/CalcTriggers.lua @@ -219,18 +219,19 @@ end local function CWCHandler(env) if not env.player.mainSkill.skillFlags.minion and not env.player.mainSkill.skillFlags.disable then local triggeredSkills = {} - local trigRate = 0 local source = nil local triggerName = "Cast While Channeling" local output = env.player.output local breakdown = env.player.breakdown for _, skill in ipairs(env.player.activeSkillList) do - local match1 = env.player.mainSkill.activeEffect.grantedEffect.fromItem and skill.socketGroup and skill.socketGroup.slot == env.player.mainSkill.socketGroup.slot - local match2 = (not env.player.mainSkill.activeEffect.grantedEffect.fromItem) and skill.socketGroup == env.player.mainSkill.socketGroup - if env.player.mainSkill.triggeredBy.gemData and calcLib.canGrantedEffectSupportActiveSkill(env.player.mainSkill.triggeredBy.gemData.grantedEffect, skill) and skill ~= env.player.mainSkill and (match1 or match2) and not isTriggered(skill) then - source, trigRate = findTriggerSkill(env, skill, source, trigRate) + local slotMatch = slotMatch(env, skill) + if not source then + local canSupport = env.player.mainSkill.triggeredBy.gemData and calcLib.canGrantedEffectSupportActiveSkill(env.player.mainSkill.triggeredBy.gemData.grantedEffect, skill) + if skill.skillData.triggerTime and canSupport and skill ~= env.player.mainSkill and slotMatch and not isTriggered(skill) then + source = skill + end end - if skill.skillData.triggeredWhileChannelling and (match1 or match2) then + if skill.skillData.triggeredWhileChannelling and slotMatch then t_insert(triggeredSkills, packageSkillDataForSimulation(skill, env)) end end