From 4f2059ba4440920dbea4b1496ef9b67331799a7f Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Tue, 5 May 2026 05:58:33 +1000 Subject: [PATCH 1/2] Add auto calc of minion + non-vaal minions Automates the calc for the 2 config boxes so people don't need to manually work them out --- src/Modules/CalcPerform.lua | 8 ++++++++ src/Modules/ConfigOptions.lua | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index e92bb405a1..513a245f26 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -1249,6 +1249,7 @@ function calcs.perform(env, skipEHP) applyEnemyModifiers(env.minion, true) end applyEnemyModifiers(env.enemy, true) + local minionCount = {} for _, activeSkill in ipairs(env.player.activeSkillList) do if activeSkill.skillTypes[SkillType.Brand] then @@ -1331,6 +1332,13 @@ function calcs.perform(env, skipEHP) if activeSkill.minion and activeSkill.minion.minionData and activeSkill.minion.minionData.limit then local limit = m_floor(modDB:Override(nil, activeSkill.minion.minionData.limit) or (calcLib.val(activeSkill.skillModList, activeSkill.minion.minionData.limit) * activeSkill.skillModList:More(activeSkill.skillCfg, "ActiveMinionLimit"))) output[activeSkill.minion.minionData.limit] = m_max(limit, output[activeSkill.minion.minionData.limit] or 0) + if not minionCount[activeSkill.minion.minionData.limit] then + env.player.modDB:NewMod("Multiplier:SummonedMinion", "BASE", output[activeSkill.minion.minionData.limit], "Config", { type = "Condition", var = "Combat" }) + if not activeSkill.skillTypes[SkillType.Vaal] then + env.player.modDB:NewMod("Multiplier:NonVaalSummonedMinion", "BASE", output[activeSkill.minion.minionData.limit], "Config", { type = "Condition", var = "Combat" }) + end + minionCount[activeSkill.minion.minionData.limit] = true + end end if activeSkill.skillTypes[SkillType.CreatesMinion] and not activeSkill.skillTypes[SkillType.MinionsAreUndamagable] then modDB:NewMod("Condition:HaveDamageableMinion", "FLAG", true) diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index b81c0a65c9..8abdad1bb2 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -1108,11 +1108,11 @@ Huge sets the radius to 11. { var = "multiplierNearbyCorpse", type = "count", label = "# of Nearby Corpses:", ifMult = "NearbyCorpse", apply = function(val, modList, enemyModList) modList:NewMod("Multiplier:NearbyCorpse", "BASE", val, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "multiplierSummonedMinion", type = "count", label = "# of Summoned Minions:", ifMult = "SummonedMinion", apply = function(val, modList, enemyModList) - modList:NewMod("Multiplier:SummonedMinion", "BASE", val, "Config", { type = "Condition", var = "Combat" }) + { var = "multiplierSummonedMinion", type = "count", label = "# of Summoned Minions (if not maximum):", ifMult = "SummonedMinion", tooltip = "Use this to override the count if you do not have all your minions summoned", apply = function(val, modList, enemyModList) + modList:NewMod("Multiplier:SummonedMinion", "OVERRIDE", val, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "multiplierNonVaalSummonedMinion", type = "count", label = "# of non-vaal skill Summoned Minions:", ifMult = "NonVaalSummonedMinion", apply = function(val, modList, enemyModList) - modList:NewMod("Multiplier:NonVaalSummonedMinion", "BASE", val, "Config", { type = "Condition", var = "Combat" }) + { var = "multiplierNonVaalSummonedMinion", type = "count", label = "# of non-vaal skill Summoned Minions:", ifMult = "NonVaalSummonedMinion", tooltip = "Use this to override the count if you do not have all your minions summoned", apply = function(val, modList, enemyModList) + modList:NewMod("Multiplier:NonVaalSummonedMinion", "OVERRIDE", val, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionOnConsecratedGround", type = "check", label = "Are you on Consecrated Ground?", tooltip = "In addition to allowing any 'while on Consecrated Ground' modifiers to apply,\nConsecrated Ground grants 5% ^xE05030Life ^7Regeneration to players and allies.", apply = function(val, modList, enemyModList) modList:NewMod("Condition:OnConsecratedGround", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) From 18a4e41900e5808427f54ee79155a52978f3571e Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Tue, 5 May 2026 05:59:48 +1000 Subject: [PATCH 2/2] Fix animate weapon not using minion count stat For some reason the count of Animate weapon minions didn't use the same format as the other minion types so wasn't being counted in the total minion count calc Now will also show the minion max count in the sidebar too --- src/Data/ModCache.lua | 2 +- src/Data/SkillStatMap.lua | 6 ++++++ src/Data/Skills/act_dex.lua | 14 -------------- src/Data/Skills/other.lua | 5 ----- src/Data/Skills/sup_int.lua | 3 --- src/Export/Skills/act_dex.txt | 14 -------------- src/Export/Skills/other.txt | 5 ----- src/Export/Skills/sup_int.txt | 3 --- src/Modules/ModParser.lua | 2 +- 9 files changed, 8 insertions(+), 46 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 7069e22f93..6285711dcf 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -7517,7 +7517,7 @@ c["Anger has 50% increased Aura Effect while at maximum Endurance Charges"]={{[1 c["Anger has 50% increased Mana Reservation Efficiency"]={{[1]={[1]={includeTransfigured=true,skillName="Anger",type="SkillName"},flags=0,keywordFlags=0,name="ManaReservationEfficiency",type="INC",value=50}},nil} c["Anger has 60% increased Aura Effect"]={{[1]={[1]={includeTransfigured=true,skillName="Anger",type="SkillName"},flags=0,keywordFlags=0,name="AuraEffect",type="INC",value=60}},nil} c["Anger has no Reservation"]={{[1]={[1]={skillId="Anger",type="SkillId"},[2]={neg=true,skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="manaReservationFlat",value=0}},[2]={[1]={skillId="Anger",type="SkillId"},[2]={neg=true,skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="lifeReservationFlat",value=0}},[3]={[1]={skillId="Anger",type="SkillId"},[2]={neg=true,skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="manaReservationPercent",value=0}},[4]={[1]={skillId="Anger",type="SkillId"},[2]={neg=true,skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="lifeReservationPercent",value=0}}},nil} -c["Animated Guardian deals 5% increased Damage per Animated Weapon"]={{[1]={[1]={includeTransfigured=true,skillName="Animate Guardian",type="SkillName"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="parent",type="Multiplier",var="AnimatedWeapon"},flags=0,keywordFlags=0,name="Damage",type="INC",value=5}}}},nil} +c["Animated Guardian deals 5% increased Damage per Animated Weapon"]={{[1]={[1]={includeTransfigured=true,skillName="Animate Guardian",type="SkillName"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="parent",stat="ActiveAnimatedWeaponLimit",type="PerStat"},flags=0,keywordFlags=0,name="Damage",type="INC",value=5}}}},nil} c["Animated and Manifested Minions' Melee Strikes deal 50% less Splash Damage"]={nil,"Animated and Manifested Minions' Melee Strikes deal 50% less Splash Damage "} c["Animated and Manifested Minions' Melee Strikes deal 50% less Splash Damage You cannot have Non-Animated, Non-Manifested Minions"]={nil,"Animated and Manifested Minions' Melee Strikes deal 50% less Splash Damage You cannot have Non-Animated, Non-Manifested Minions "} c["Animated and Manifested Minions' Melee Strikes deal Splash"]={nil,"Animated and Manifested Minions' Melee Strikes deal Splash "} diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index decd9d44f0..326fb23035 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -1974,6 +1974,12 @@ return { ["base_number_of_skeletons_allowed"] = { mod("ActiveSkeletonLimit", "BASE", nil), }, +["base_number_of_animated_weapons_allowed"] = { + mod("ActiveAnimatedWeaponLimit", "BASE", nil), +}, +["base_number_of_support_ghosts_allowed"] = { + mod("ActivePhantasmLimit", "BASE", nil), +}, ["base_number_of_raging_spirits_allowed"] = { mod("ActiveRagingSpiritLimit", "BASE", nil), }, diff --git a/src/Data/Skills/act_dex.lua b/src/Data/Skills/act_dex.lua index 16787b918d..0f6f31b301 100644 --- a/src/Data/Skills/act_dex.lua +++ b/src/Data/Skills/act_dex.lua @@ -207,9 +207,6 @@ skills["AnimateWeapon"] = { ["attack_maximum_added_physical_damage_for_ethereal_blades"] = { mod("MinionModifier", "LIST", { mod = mod("PhysicalMax", "BASE", nil, 0, KeywordFlag.Attack, { type = "ActorCondition", actor = "parent", var = "AnimatingLingeringBlades" }) }), }, - ["base_number_of_animated_weapons_allowed"] = { - mod("Multiplier:AnimatedWeapon", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", unscalable = true }) - }, }, baseFlags = { spell = true, @@ -309,11 +306,6 @@ skills["AnimateWeaponAltX"] = { minionList = { "AnimatedWeapon", }, - statMap = { - ["base_number_of_animated_weapons_allowed"] = { - mod("Multiplier:AnimatedWeapon", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", unscalable = true }) - }, - }, baseFlags = { spell = true, minion = true, @@ -415,9 +407,6 @@ skills["AnimateWeaponAltY"] = { ["attack_maximum_added_physical_damage_for_ethereal_blades"] = { mod("MinionModifier", "LIST", { mod = mod("PhysicalMax", "BASE", nil, 0, KeywordFlag.Attack, { type = "ActorCondition", actor = "parent", var = "AnimatingLingeringBlades" }) }), }, - ["base_number_of_animated_weapons_allowed"] = { - mod("Multiplier:AnimatedWeapon", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", unscalable = true }) - }, }, baseFlags = { spell = true, @@ -513,9 +502,6 @@ skills["VaalAnimateWeapon"] = { ["base_movement_velocity_+%"] = { mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", nil) }), }, - ["base_number_of_animated_weapons_allowed"] = { - mod("Multiplier:VaalAnimatedWeapon", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", unscalable = true }) - }, }, baseFlags = { spell = true, diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index b1620f6b68..a8fc196fb8 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -4016,11 +4016,6 @@ skills["TriggeredSummonGhostOnKill"] = { minionList = { "SummonedPhantasm", }, - statMap = { - ["base_number_of_support_ghosts_allowed"] = { - mod("ActivePhantasmLimit", "BASE", nil), - }, - }, baseFlags = { spell = true, minion = true, diff --git a/src/Data/Skills/sup_int.lua b/src/Data/Skills/sup_int.lua index db30b36eb3..b6111ab449 100644 --- a/src/Data/Skills/sup_int.lua +++ b/src/Data/Skills/sup_int.lua @@ -6380,9 +6380,6 @@ skills["SupportSummonPhantasm"] = { "SummonedPhantasm" }, statMap = { - ["base_number_of_support_ghosts_allowed"] = { - mod("ActivePhantasmLimit", "BASE", nil), - }, ["phantasm_minimum_added_physical_damage_to_grant"] = { mod("PhysicalMin", "BASE", nil, ModFlag.Spell, 0, { type = "PerStat", stat = "ActivePhantasmLimit" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Phantasmal Might", effectCond = "PhantasmalMight", allowTotemBuff = true }) }, diff --git a/src/Export/Skills/act_dex.txt b/src/Export/Skills/act_dex.txt index 38c0db316d..ab609d55d3 100644 --- a/src/Export/Skills/act_dex.txt +++ b/src/Export/Skills/act_dex.txt @@ -62,9 +62,6 @@ local skills, mod, flag, skill = ... ["attack_maximum_added_physical_damage_for_ethereal_blades"] = { mod("MinionModifier", "LIST", { mod = mod("PhysicalMax", "BASE", nil, 0, KeywordFlag.Attack, { type = "ActorCondition", actor = "parent", var = "AnimatingLingeringBlades" }) }), }, - ["base_number_of_animated_weapons_allowed"] = { - mod("Multiplier:AnimatedWeapon", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", unscalable = true }) - }, }, #mods @@ -73,11 +70,6 @@ local skills, mod, flag, skill = ... minionList = { "AnimatedWeapon", }, - statMap = { - ["base_number_of_animated_weapons_allowed"] = { - mod("Multiplier:AnimatedWeapon", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", unscalable = true }) - }, - }, #baseMod skill("minionUseMainHandWeapon", true) #mods @@ -103,9 +95,6 @@ local skills, mod, flag, skill = ... ["attack_maximum_added_physical_damage_for_ethereal_blades"] = { mod("MinionModifier", "LIST", { mod = mod("PhysicalMax", "BASE", nil, 0, KeywordFlag.Attack, { type = "ActorCondition", actor = "parent", var = "AnimatingLingeringBlades" }) }), }, - ["base_number_of_animated_weapons_allowed"] = { - mod("Multiplier:AnimatedWeapon", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", unscalable = true }) - }, }, #mods @@ -122,9 +111,6 @@ local skills, mod, flag, skill = ... ["base_movement_velocity_+%"] = { mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", nil) }), }, - ["base_number_of_animated_weapons_allowed"] = { - mod("Multiplier:VaalAnimatedWeapon", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", unscalable = true }) - }, }, #mods diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index 602a0ab03d..484b1c228d 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -1037,11 +1037,6 @@ local skills, mod, flag, skill = ... minionList = { "SummonedPhantasm", }, - statMap = { - ["base_number_of_support_ghosts_allowed"] = { - mod("ActivePhantasmLimit", "BASE", nil), - }, - }, #mods #skill SummonSentinelOfRadiance diff --git a/src/Export/Skills/sup_int.txt b/src/Export/Skills/sup_int.txt index ffd440ee6d..9dce0c10c9 100644 --- a/src/Export/Skills/sup_int.txt +++ b/src/Export/Skills/sup_int.txt @@ -916,9 +916,6 @@ local skills, mod, flag, skill = ... "SummonedPhantasm" }, statMap = { - ["base_number_of_support_ghosts_allowed"] = { - mod("ActivePhantasmLimit", "BASE", nil), - }, ["phantasm_minimum_added_physical_damage_to_grant"] = { mod("PhysicalMin", "BASE", nil, ModFlag.Spell, 0, { type = "PerStat", stat = "ActivePhantasmLimit" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Phantasmal Might", effectCond = "PhantasmalMight", allowTotemBuff = true }) }, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 965e814105..2e9dbb0cf1 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1401,7 +1401,6 @@ local modTagList = { ["per socketed gem"] = { tag = { type = "Multiplier", var = "SocketedGemsIn{SlotName}"}}, ["for each impale on enemy"] = { tag = { type = "Multiplier", var = "ImpaleStacks", actor = "enemy" } }, ["per impale on enemy"] = { tag = { type = "Multiplier", var = "ImpaleStacks", actor = "enemy" } }, - ["per animated weapon"] = { tag = { type = "Multiplier", var = "AnimatedWeapon", actor = "parent" } }, ["per grasping vine"] = { tag = { type = "Multiplier", var = "GraspingVinesCount" } }, ["per fragile regrowth"] = { tag = { type = "Multiplier", var = "FragileRegrowthCount" } }, ["per bark"] = { tag = { type = "Multiplier", var = "BarkskinStacks" } }, @@ -1483,6 +1482,7 @@ local modTagList = { ["per skeleton you own"] = { tag = { type = "PerStat", stat = "ActiveSkeletonLimit", actor = "parent" } }, ["per summoned raging spirit"] = { tag = { type = "PerStat", stat = "ActiveRagingSpiritLimit" } }, ["per summoned phantasm"] = { tag = { type = "PerStat", stat = "ActivePhantasmLimit" } }, + ["per animated weapon"] = { tag = { type = "PerStat", stat = "ActiveAnimatedWeaponLimit", actor = "parent" } }, ["for each raised zombie"] = { tag = { type = "PerStat", stat = "ActiveZombieLimit" } }, ["per zombie you own"] = { tag = { type = "PerStat", stat = "ActiveZombieLimit", actor = "parent" } }, ["per raised zombie"] = { tag = { type = "PerStat", stat = "ActiveZombieLimit" } },