@@ -1063,13 +1063,48 @@ function calcs.perform(env, skipEHP)
10631063 modLib .mergeKeystones (env , env .modDB )
10641064
10651065 -- Build minion skills
1066+ local function initMinionSkills (activeSkill , minion , isPrimary )
1067+ minion .modDB = new (" ModDB" )
1068+ minion .modDB .actor = minion
1069+ if isPrimary then
1070+ calcs .createMinionSkills (env , activeSkill )
1071+ activeSkill .skillPartName = activeSkill .minion .mainSkill .activeEffect .grantedEffect .name
1072+ return
1073+ end
1074+ local tempSkill = {
1075+ activeEffect = activeSkill .activeEffect ,
1076+ effectList = activeSkill .effectList ,
1077+ supportList = activeSkill .supportList ,
1078+ actor = activeSkill .actor ,
1079+ socketGroup = activeSkill .socketGroup ,
1080+ baseSkillModList = activeSkill .baseSkillModList ,
1081+ skillModList = activeSkill .skillModList ,
1082+ skillCfg = activeSkill .skillCfg ,
1083+ skillData = activeSkill .skillData ,
1084+ skillFlags = activeSkill .skillFlags ,
1085+ buffList = activeSkill .buffList ,
1086+ minion = minion ,
1087+ }
1088+ local srcInstance = activeSkill .activeEffect and activeSkill .activeEffect .srcInstance
1089+ local savedMinionSkill = srcInstance and srcInstance .skillMinionSkill
1090+ local savedMinionSkillCalcs = srcInstance and srcInstance .skillMinionSkillCalcs
1091+ calcs .createMinionSkills (env , tempSkill )
1092+ if srcInstance then
1093+ srcInstance .skillMinionSkill = savedMinionSkill
1094+ srcInstance .skillMinionSkillCalcs = savedMinionSkillCalcs
1095+ end
1096+ end
10661097 for _ , activeSkill in ipairs (env .player .activeSkillList ) do
10671098 activeSkill .skillModList = new (" ModList" , activeSkill .baseSkillModList )
10681099 if activeSkill .minion then
1069- activeSkill .minion .modDB = new (" ModDB" )
1070- activeSkill .minion .modDB .actor = activeSkill .minion
1071- calcs .createMinionSkills (env , activeSkill )
1072- activeSkill .skillPartName = activeSkill .minion .mainSkill .activeEffect .grantedEffect .name
1100+ initMinionSkills (activeSkill , activeSkill .minion , true )
1101+ end
1102+ if activeSkill .spectreListMinions then
1103+ for _ , spectreMinion in ipairs (activeSkill .spectreListMinions ) do
1104+ if not activeSkill .minion or spectreMinion ~= activeSkill .minion then
1105+ initMinionSkills (activeSkill , spectreMinion , false )
1106+ end
1107+ end
10731108 end
10741109 end
10751110
@@ -2484,9 +2519,19 @@ function calcs.perform(env, skipEHP)
24842519 end
24852520 end
24862521 end
2522+ local minionsToProcess = { }
24872523 if activeSkill .minion and activeSkill .minion .activeSkillList then
2488- local castingMinion = activeSkill .minion
2489- for _ , activeMinionSkill in ipairs (activeSkill .minion .activeSkillList ) do
2524+ t_insert (minionsToProcess , activeSkill .minion )
2525+ end
2526+ if activeSkill .spectreListMinions then
2527+ for _ , spectreMinion in ipairs (activeSkill .spectreListMinions ) do
2528+ if spectreMinion ~= activeSkill .minion and spectreMinion .activeSkillList then
2529+ t_insert (minionsToProcess , spectreMinion )
2530+ end
2531+ end
2532+ end
2533+ for _ , castingMinion in ipairs (minionsToProcess ) do
2534+ for _ , activeMinionSkill in ipairs (castingMinion .activeSkillList ) do
24902535 local skillModList = activeMinionSkill .skillModList
24912536 local skillCfg = activeMinionSkill .skillCfg
24922537 for _ , buff in ipairs (activeMinionSkill .buffList ) do
@@ -2519,7 +2564,7 @@ function calcs.perform(env, skipEHP)
25192564 if envMinionCheck then
25202565 env .minion .modDB .conditions [" AffectedBy" .. buff .name :gsub (" " ," " )] = true
25212566 else
2522- activeSkill . minion .modDB .conditions [" AffectedBy" .. buff .name :gsub (" " ," " )] = true
2567+ castingMinion .modDB .conditions [" AffectedBy" .. buff .name :gsub (" " ," " )] = true
25232568 end
25242569 local srcList = new (" ModList" )
25252570 local inc = modStore :Sum (" INC" , skillCfg , " BuffEffect" , (env .minion == castingMinion ) and " BuffEffectOnSelf" or nil )
@@ -2536,7 +2581,7 @@ function calcs.perform(env, skipEHP)
25362581 if env .mode_buffs and activeMinionSkill .skillData .enable then
25372582 -- Check for extra modifiers to apply to aura skills
25382583 local extraAuraModList = { }
2539- for _ , value in ipairs (activeSkill . minion .modDB :List (skillCfg , " ExtraAuraEffect" )) do
2584+ for _ , value in ipairs (castingMinion .modDB :List (skillCfg , " ExtraAuraEffect" )) do
25402585 local add = true
25412586 for _ , mod in ipairs (extraAuraModList ) do
25422587 if modLib .compareModParams (mod , value .mod ) then
@@ -2549,7 +2594,7 @@ function calcs.perform(env, skipEHP)
25492594 t_insert (extraAuraModList , copyTable (value .mod , true ))
25502595 end
25512596 end
2552- if not (activeSkill . minion . modDB :Flag (nil , " SelfAurasCannotAffectAllies" ) or activeSkill . minion . modDB :Flag (nil , " SelfAurasOnlyAffectYou" ) or activeSkill . minion .modDB :Flag (nil , " SelfAuraSkillsCannotAffectAllies" ) or skillModList :Flag (skillCfg , " SelfAurasAffectYouAndLinkedTarget" )) then
2597+ if not (castingMinion . modDB :Flag (nil , " SelfAurasCannotAffectAllies" ) or castingMinion . modDB :Flag (nil , " SelfAurasOnlyAffectYou" ) or castingMinion .modDB :Flag (nil , " SelfAuraSkillsCannotAffectAllies" ) or skillModList :Flag (skillCfg , " SelfAurasAffectYouAndLinkedTarget" )) then
25532598 if not modDB :Flag (nil , " AlliesAurasCannotAffectSelf" ) and not modDB .conditions [" AffectedBy" .. buff .name :gsub (" " ," " )] then
25542599 local inc = skillModList :Sum (" INC" , skillCfg , " AuraEffect" , " BuffEffect" , " BuffEffectOnPlayer" , " AuraBuffEffect" ) + modDB :Sum (" INC" , skillCfg , " BuffEffectOnSelf" , " AuraEffectOnSelf" )
25552600 local more = skillModList :More (skillCfg , " AuraEffect" , " BuffEffect" , " AuraBuffEffect" ) * modDB :More (skillCfg , " BuffEffectOnSelf" , " AuraEffectOnSelf" )
@@ -2567,7 +2612,7 @@ function calcs.perform(env, skipEHP)
25672612 mergeBuff (srcList , buffs , buff .name )
25682613 end
25692614 end
2570- if env .minion and not env .minion .modDB .conditions [" AffectedBy" .. buff .name :gsub (" " ," " )] and (env .minion ~= activeSkill . minion or not activeSkill .skillData .auraCannotAffectSelf ) then
2615+ if env .minion and not env .minion .modDB .conditions [" AffectedBy" .. buff .name :gsub (" " ," " )] and (env .minion ~= castingMinion or not activeSkill .skillData .auraCannotAffectSelf ) then
25712616 local inc = skillModList :Sum (" INC" , skillCfg , " AuraEffect" , " BuffEffect" ) + env .minion .modDB :Sum (" INC" , skillCfg , " BuffEffectOnSelf" , " AuraEffectOnSelf" )
25722617 local more = skillModList :More (skillCfg , " AuraEffect" , " BuffEffect" ) * env .minion .modDB :More (skillCfg , " BuffEffectOnSelf" , " AuraEffectOnSelf" )
25732618 local mult = (1 + inc / 100 ) * more
@@ -2668,7 +2713,7 @@ function calcs.perform(env, skipEHP)
26682713 end
26692714 end
26702715 enemyDB .conditions [" AffectedBy" .. buff .name :gsub (" " ," " )] = true
2671- if env .minion and env .minion == activeSkill . minion then
2716+ if env .minion and env .minion == castingMinion then
26722717 env .minion .modDB .conditions [" AffectedBy" .. buff .name :gsub (" " ," " )] = true
26732718 end
26742719 if buff .type == " Debuff" then
0 commit comments