From 76ab4938b5e68253131d0a39b3f8fe0db44bf14c Mon Sep 17 00:00:00 2001 From: Peechey Date: Mon, 18 May 2026 08:03:08 +0000 Subject: [PATCH 1/3] Apply changes from https://github.com/PathOfBuildingCommunity/PathOfBuilding-PoE2/pull/1846 --- spec/System/TestSkills_spec.lua.rej | 54 +++++++++++ src/Classes/CalcBreakdownControl.lua.rej | 10 +++ src/Classes/ModStore.lua | 48 +++++++--- src/Classes/ModStore.lua.rej | 16 ++++ src/Data/ModCache.lua.rej | 12 +++ src/Data/Skills/act_dex.lua.rej | 9 ++ src/Data/Skills/act_int.lua.rej | 109 +++++++++++++++++++++++ src/Data/Skills/other.lua.rej | 27 ++++++ src/Export/Skills/act_dex.txt.rej | 10 +++ src/Export/Skills/act_int.txt.rej | 101 +++++++++++++++++++++ src/Export/Skills/other.txt.rej | 28 ++++++ src/Modules/CalcOffence.lua.rej | 10 +++ src/Modules/CalcPerform.lua.rej | 10 +++ src/Modules/CalcSections.lua.rej | 13 +++ src/Modules/ModParser.lua.rej | 19 ++++ 15 files changed, 462 insertions(+), 14 deletions(-) create mode 100644 spec/System/TestSkills_spec.lua.rej create mode 100644 src/Classes/CalcBreakdownControl.lua.rej create mode 100644 src/Classes/ModStore.lua.rej create mode 100644 src/Data/ModCache.lua.rej create mode 100644 src/Data/Skills/act_dex.lua.rej create mode 100644 src/Data/Skills/act_int.lua.rej create mode 100644 src/Data/Skills/other.lua.rej create mode 100644 src/Export/Skills/act_dex.txt.rej create mode 100644 src/Export/Skills/act_int.txt.rej create mode 100644 src/Export/Skills/other.txt.rej create mode 100644 src/Modules/CalcOffence.lua.rej create mode 100644 src/Modules/CalcPerform.lua.rej create mode 100644 src/Modules/CalcSections.lua.rej create mode 100644 src/Modules/ModParser.lua.rej diff --git a/spec/System/TestSkills_spec.lua.rej b/spec/System/TestSkills_spec.lua.rej new file mode 100644 index 00000000000..771c05c0956 --- /dev/null +++ b/spec/System/TestSkills_spec.lua.rej @@ -0,0 +1,54 @@ +diff a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua (rejected hunks) +@@ -85,7 +85,7 @@ describe("TestSkills", function() + assert.are.equals(16, round(finalCost)) + end) + +- it("Test 'every rage also grants you' for minion mods", function() ++ it("Test 'every rage also grants you' for minion mods and minion apply to you mods #run", function() + build.itemsTab:CreateDisplayItemFromRaw([[ + New Item + Fanatic Greathammer +@@ -106,5 +106,42 @@ describe("TestSkills", function() + runCallback("OnFrame") + + assert.True(baseUnearthAttackSpeed < build.calcsTab.mainOutput.Minion.Speed) ++ ++ newBuild() ++ build.itemsTab:CreateDisplayItemFromRaw([[ ++ Rarity: UNIQUE ++ Chober Chaber ++ Leaden Greathammer ++ Variant: Pre 0.1.1 ++ Variant: Current ++ Selected Variant: 2 ++ Quality: 20 ++ LevelReq: 33 ++ Implicits: 0 ++ +100 Intelligence Requirement ++ {variant:1}{range:0.5}(80-120)% increased Physical Damage ++ {variant:2}{range:0.5}Adds (58-65) to (102-110) Physical Damage ++ {range:0.5}+(80-100) to maximum Mana ++ {variant:2}+50 to Spirit ++ {variant:1}+5% to Critical Hit Chance ++ Increases and Reductions to Minion Damage also affect you ++ ]]) ++ build.itemsTab:AddDisplayItem() ++ runCallback("OnFrame") ++ ++ build.skillsTab:PasteSocketGroup("Leap Slam 20/0 1\nRage I 1/0 1") ++ runCallback("OnFrame") ++ ++ build.configTab.input.multiplierRage = 30 ++ build.configTab:BuildModList() ++ runCallback("OnFrame") ++ ++ local baseLeapSlamHit = build.calcsTab.mainOutput.AverageDamage ++ ++ build.configTab.input.customMods = "Every Rage also grants you 1% increased Minion Damage" ++ build.configTab:BuildModList() ++ runCallback("OnFrame") ++ ++ assert.True(baseLeapSlamHit < build.calcsTab.mainOutput.AverageDamage) + end) + end) +\ No newline at end of file diff --git a/src/Classes/CalcBreakdownControl.lua.rej b/src/Classes/CalcBreakdownControl.lua.rej new file mode 100644 index 00000000000..eb57c31e6ce --- /dev/null +++ b/src/Classes/CalcBreakdownControl.lua.rej @@ -0,0 +1,10 @@ +diff a/src/Classes/CalcBreakdownControl.lua b/src/Classes/CalcBreakdownControl.lua (rejected hunks) +@@ -481,6 +481,8 @@ function CalcBreakdownClass:AddModSection(sectionData, modList) + else + desc = "Skill type: "..(tag.neg and "Not " or "")..self:FormatModName(SkillTypeName[tag.skillType]) + end ++ elseif tag.type == "BaseFlag" then ++ desc = "Base flag: "..(tag.neg and "Not " or "")..self:FormatModName(tostring(tag.baseFlag)) + elseif tag.type == "SlotNumber" then + desc = "When in slot #"..tag.num + elseif tag.type == "GlobalEffect" then diff --git a/src/Classes/ModStore.lua b/src/Classes/ModStore.lua index 92603eb3235..d5d103ce5c5 100644 --- a/src/Classes/ModStore.lua +++ b/src/Classes/ModStore.lua @@ -323,15 +323,17 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) -- This explicit target is necessary because even though the GetMultiplier method does call self.parent.GetMultiplier, it does so with noMod = true, -- disabling the summation (3rd part): (not noMod and self:Sum("BASE", cfg, multiplierName[var]) or 0) if tag.limitActor then - if self.actor[tag.limitActor] then - limitTarget = self.actor[tag.limitActor].modDB + local limitActor = getActor(self, tag.limitActor) + if limitActor then + limitTarget = limitActor.modDB else return end end if tag.actor then - if self.actor[tag.actor] then - target = self.actor[tag.actor].modDB + local actor = getActor(self, tag.actor) + if actor then + target = actor.modDB else return end @@ -398,15 +400,17 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) local target = self local thresholdTarget = self if tag.thresholdActor then - if self.actor[tag.thresholdActor] then - thresholdTarget = self.actor[tag.thresholdActor].modDB + local thresholdActor = getActor(self, tag.thresholdActor) + if thresholdActor then + thresholdTarget = thresholdActor.modDB else return end end if tag.actor then - if self.actor[tag.actor] then - target = self.actor[tag.actor].modDB + local actor = getActor(self, tag.actor) + if actor then + target = actor.modDB else return end @@ -428,8 +432,9 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) local target = self -- This functions similar to the above tagTypes in regard to which actor to use, but for PerStat -- if the actor is 'parent', we don't want to return if we're already using 'parent', just keep using 'self' - if tag.actor and self.actor[tag.actor] then - target = self.actor[tag.actor].modDB + local actor = getActor(self, tag.actor) + if actor then + target = actor.modDB end if tag.statList then base = 0 @@ -476,8 +481,9 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) local target = self -- This functions similar to the above tagTypes in regard to which actor to use, but for PercentStat -- if the actor is 'parent', we don't want to return if we're already using 'parent', just keep using 'self' - if tag.actor and self.actor[tag.actor] then - target = self.actor[tag.actor].modDB + local actor = getActor(self, tag.actor) + if actor then + target = actor.modDB end if tag.statList then base = 0 @@ -608,7 +614,8 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) local match = false local target = self if tag.actor then - target = self.actor[tag.actor] and self.actor[tag.actor].modDB + local actor = getActor(self, tag.actor) + target = actor and actor.modDB end if target and (tag.var or tag.varList) then if tag.varList then @@ -820,6 +827,19 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) if not match then return end + elseif tag.type == "BaseFlag" then + local match = false + if cfg and cfg.skillGem and cfg.skillGem.grantedEffect and cfg.skillGem.grantedEffect.statSets and cfg.skillGem.grantedEffect.statSets[1] then + match = cfg.skillGem.grantedEffect.statSets[1].baseFlags[tag.baseFlag] + else + match = cfg and cfg.baseFlags and cfg.baseFlags[tag.baseFlag] + end + if tag.neg then + match = not match + end + if not match then + return + end elseif tag.type == "SlotName" then if not cfg then return @@ -901,4 +921,4 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) end end return value -end \ No newline at end of file +end diff --git a/src/Classes/ModStore.lua.rej b/src/Classes/ModStore.lua.rej new file mode 100644 index 00000000000..36462c90d90 --- /dev/null +++ b/src/Classes/ModStore.lua.rej @@ -0,0 +1,16 @@ +diff a/src/Classes/ModStore.lua b/src/Classes/ModStore.lua (rejected hunks) +@@ -34,6 +34,14 @@ local ModStoreClass = newClass("ModStore", function(self, parent) + self.conditions = { } + end) + ++local function getActor(self, actorType) ++ if actorType == "player" then ++ return self.actor.player or (self.actor.parent and self.actor.parent.player) or (self.actor.enemy and self.actor.enemy.player) ++ else ++ return self.actor[actorType] ++ end ++end ++ + function ModStoreClass:ScaleAddMod(mod, scale) + local unscalable = false + for _, effects in ipairs(mod) do diff --git a/src/Data/ModCache.lua.rej b/src/Data/ModCache.lua.rej new file mode 100644 index 00000000000..59dbcc73741 --- /dev/null +++ b/src/Data/ModCache.lua.rej @@ -0,0 +1,12 @@ +diff a/src/Data/ModCache.lua b/src/Data/ModCache.lua (rejected hunks) +@@ -4877,8 +4877,8 @@ c["Every Rage also grants 1% increased Fire Damage"]={{[1]={[1]={type="Multiplie + c["Every Rage also grants 1% increased Stun Threshold"]={{[1]={[1]={type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=1}},nil} + c["Every Rage also grants 2% increased Spell Damage"]={{[1]={[1]={type="Multiplier",var="RageEffect"},flags=2,keywordFlags=0,name="Damage",type="INC",value=2}},nil} + c["Every Rage also grants 2% increased Stun Threshold"]={{[1]={[1]={type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=2}},nil} +-c["Every Rage also grants you 1% increased Minion Attack Speed"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="player",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Speed",type="INC",value=1}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="parent",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Speed",type="INC",value=1}}}},nil} +-c["Every Rage also grants you 1% increased Minion Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="player",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Damage",type="INC",value=1}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="parent",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Damage",type="INC",value=1}}}},nil} ++c["Every Rage also grants you 1% increased Minion Attack Speed"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="player",type="Multiplier",var="RageEffect"},flags=1,keywordFlags=0,name="Speed",type="INC",value=1}}}},nil} ++c["Every Rage also grants you 1% increased Minion Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="player",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Damage",type="INC",value=1}}}},nil} + c["Every Third Slam skill that doesn't create Fissures which you use yourself causes 3 additional Aftershocks ahead and to each side of the initial area"]={nil,"Every Third Slam skill that doesn't create Fissures which you use yourself causes 3 additional Aftershocks ahead and to each side of the initial area "} + c["Every second Slam Skill you use yourself is Ancestrally Boosted"]={nil,"Every second Slam Skill you use yourself is Ancestrally Boosted "} + c["Every second, inflicts Critical Weakness on enemies in your Presence for 1 second"]={{[1]={flags=0,keywordFlags=0,name="ApplyCriticalWeakness",type="FLAG",value=true}},nil} diff --git a/src/Data/Skills/act_dex.lua.rej b/src/Data/Skills/act_dex.lua.rej new file mode 100644 index 00000000000..03ed9989959 --- /dev/null +++ b/src/Data/Skills/act_dex.lua.rej @@ -0,0 +1,9 @@ +diff a/src/Data/Skills/act_dex.lua b/src/Data/Skills/act_dex.lua (rejected hunks) +@@ -897,7 +897,6 @@ skills["SummonBeastPlayer"] = { + minion = true, + summonBeast = true, + duration = true, +- permanentMinion = true, + }, + baseMods = { + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 25) }), --Server side damage mod added in 0.3, diff --git a/src/Data/Skills/act_int.lua.rej b/src/Data/Skills/act_int.lua.rej new file mode 100644 index 00000000000..44d4c855c10 --- /dev/null +++ b/src/Data/Skills/act_int.lua.rej @@ -0,0 +1,109 @@ +diff a/src/Data/Skills/act_int.lua b/src/Data/Skills/act_int.lua (rejected hunks) +@@ -16168,7 +16168,6 @@ skills["RagingSpiritsPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, + }, + constantStats = { + { "base_number_of_raging_spirits_allowed", 10 }, +@@ -16292,9 +16291,6 @@ skills["RaiseZombiePlayer"] = { + spell = true, + minion = true, + }, +- baseMods = { +- flag("Condition:TemporaryMinion"), +- }, + constantStats = { + { "display_minion_monster_type", 1 }, + { "zombie_decay_rate_increase_+%_final", 25 }, +@@ -17692,7 +17688,7 @@ skills["SummonSkeletalArsonistsPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 2 }, +@@ -17812,7 +17808,7 @@ skills["SummonSkeletalBrutesPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 2 }, +@@ -17932,7 +17928,7 @@ skills["SummonSkeletalClericsPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 2 }, +@@ -18052,7 +18048,7 @@ skills["SummonSkeletalFrostMagesPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 2 }, +@@ -18173,7 +18169,7 @@ skills["SummonSkeletalReaversPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 2 }, +@@ -18294,7 +18290,7 @@ skills["SummonSkeletalSnipersPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 2 }, +@@ -18414,7 +18410,7 @@ skills["SummonSkeletalStormMagesPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 2 }, +@@ -18536,7 +18532,7 @@ skills["SummonSkeletalWarriorsPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 2 }, +@@ -19715,7 +19711,6 @@ skills["SummonSpectrePlayer"] = { + minion = true, + spectre = true, + duration = true, +- permanentMinion = true, + }, + baseMods = { + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 25) }), --Server side damage mod added in 0.3, +@@ -21219,9 +21214,6 @@ skills["UnearthPlayer"] = { + area = true, + minion = true, + }, +- baseMods = { +- flag("Condition:TemporaryMinion"), +- }, + constantStats = { + { "unearth_base_cone_speed_multiplier", 50 }, + { "active_skill_base_area_of_effect_radius", 60 }, diff --git a/src/Data/Skills/other.lua.rej b/src/Data/Skills/other.lua.rej new file mode 100644 index 00000000000..a85cb306702 --- /dev/null +++ b/src/Data/Skills/other.lua.rej @@ -0,0 +1,27 @@ +diff a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua (rejected hunks) +@@ -5307,7 +5307,6 @@ skills["ManifestWeaponPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- duration = true, + }, + constantStats = { + { "minion_1%_damage_+%_per_X_player_strength", 1 }, +@@ -8022,7 +8021,7 @@ skills["SummonInfernalHoundPlayer"] = { + baseFlags = { + spell = true, + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "display_minion_monster_type", 8 }, +@@ -8151,7 +8150,7 @@ skills["SupportingFirePlayer"] = { + }, + baseFlags = { + minion = true, +- permanentMinion = true, ++ duration = true, + }, + constantStats = { + { "minion_1%_damage_+%_per_X_player_strength", 1 }, diff --git a/src/Export/Skills/act_dex.txt.rej b/src/Export/Skills/act_dex.txt.rej new file mode 100644 index 00000000000..d8abb979217 --- /dev/null +++ b/src/Export/Skills/act_dex.txt.rej @@ -0,0 +1,10 @@ +diff a/src/Export/Skills/act_dex.txt b/src/Export/Skills/act_dex.txt (rejected hunks) +@@ -90,7 +90,7 @@ statMap = { + #minionList + #skill SummonBeastPlayer + #set SummonBeastPlayer +-#flags spell minion summonBeast duration permanentMinion ++#flags spell minion summonBeast duration + #baseMod mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 25) }), --Server side damage mod added in 0.3 + #mods + #skillEnd diff --git a/src/Export/Skills/act_int.txt.rej b/src/Export/Skills/act_int.txt.rej new file mode 100644 index 00000000000..9cdc5912272 --- /dev/null +++ b/src/Export/Skills/act_int.txt.rej @@ -0,0 +1,101 @@ +diff a/src/Export/Skills/act_int.txt b/src/Export/Skills/act_int.txt (rejected hunks) +@@ -1095,7 +1095,7 @@ statMap = { + #minionList SummonedRagingSpirit + #skill RagingSpiritsPlayer + #set RagingSpiritsPlayer +-#flags spell minion permanentMinion ++#flags spell minion + #mods + #skillEnd + +@@ -1103,7 +1103,6 @@ statMap = { + #skill RaiseZombiePlayer + #set RaiseZombiePlayer + #flags spell minion +-#baseMod flag("Condition:TemporaryMinion") + #mods + #skillEnd + +@@ -1189,49 +1188,49 @@ statMap = { + #minionList RaisedSkeletonArsonist + #skill SummonSkeletalArsonistsPlayer + #set SummonSkeletalArsonistsPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + + #minionList RaisedSkeletonBrute + #skill SummonSkeletalBrutesPlayer + #set SummonSkeletalBrutesPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + + #minionList RaisedSkeletonCleric + #skill SummonSkeletalClericsPlayer + #set SummonSkeletalClericsPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + + #minionList RaisedSkeletonFrostMage + #skill SummonSkeletalFrostMagesPlayer + #set SummonSkeletalFrostMagesPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + + #minionList RaisedSkeletonReaver + #skill SummonSkeletalReaversPlayer + #set SummonSkeletalReaversPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + + #minionList RaisedSkeletonSniper + #skill SummonSkeletalSnipersPlayer + #set SummonSkeletalSnipersPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + + #minionList RaisedSkeletonStormMage + #skill SummonSkeletalStormMagesPlayer + #set SummonSkeletalStormMagesPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + +@@ -1239,7 +1238,7 @@ statMap = { + #minionList RaisedSkeletonWarriors + #skill SummonSkeletalWarriorsPlayer + #set SummonSkeletalWarriorsPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + +@@ -1309,7 +1308,7 @@ statMap = { + #minionList + #skill SummonSpectrePlayer + #set SummonSpectrePlayer +-#flags spell minion spectre duration permanentMinion ++#flags spell minion spectre duration + #baseMod mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 25) }), --Server side damage mod added in 0.3 + #mods + #skillEnd +@@ -1401,7 +1400,6 @@ statMap = { + #skill UnearthPlayer + #set UnearthPlayer + #flags spell area minion +-#baseMod flag("Condition:TemporaryMinion") + #mods + #skillEnd + diff --git a/src/Export/Skills/other.txt.rej b/src/Export/Skills/other.txt.rej new file mode 100644 index 00000000000..686d35154c6 --- /dev/null +++ b/src/Export/Skills/other.txt.rej @@ -0,0 +1,28 @@ +diff a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt (rejected hunks) +@@ -368,7 +368,7 @@ minionUses = { + ["Weapon 1"] = true, + }, + #set ManifestWeaponPlayer +-#flags spell minion duration ++#flags spell minion + statMap = { + ["minion_1%_damage_+%_per_X_player_strength"] = { + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", nil, 0, 0, { type = "PerStat", stat = "Str", actor = "parent" }) }), +@@ -556,7 +556,7 @@ statMap = { + #minionList SummonedHellhound + #skill SummonInfernalHoundPlayer + #set SummonInfernalHoundPlayer +-#flags spell minion permanentMinion ++#flags spell minion duration + #mods + #skillEnd + +@@ -564,7 +564,7 @@ statMap = { + #minionList TacticianMinion + #skill SupportingFirePlayer + #set SupportingFirePlayer +-#flags minion permanentMinion ++#flags minion duration + statMap = { + ["minion_1%_damage_+%_per_X_player_strength"] = { + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", nil, 0, 0, { type = "PerStat", stat = "Str", actor = "parent" }) }), diff --git a/src/Modules/CalcOffence.lua.rej b/src/Modules/CalcOffence.lua.rej new file mode 100644 index 00000000000..ad6f7030709 --- /dev/null +++ b/src/Modules/CalcOffence.lua.rej @@ -0,0 +1,10 @@ +diff a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua (rejected hunks) +@@ -1192,7 +1192,7 @@ function calcs.offence(env, actor, activeSkill) + -- Calculate skill type stats + if skillFlags.minion then + if activeSkill.minion and activeSkill.minion.minionData.limit then +- output.ActiveMinionLimit = m_floor(env.modDB:Override(nil, activeSkill.minion.minionData.limit) or calcLib.val(skillModList, activeSkill.minion.minionData.limit, skillCfg)) ++ output.ActiveMinionLimit = m_floor(env.modDB:Override(nil, activeSkill.minion.minionData.limit) or (calcLib.val(skillModList, activeSkill.minion.minionData.limit, skillCfg) + calcLib.val(skillModList, "ActiveMinionLimit", skillCfg))) + end + output.SummonedMinionsPerCast = m_floor(calcLib.val(skillModList, "MinionPerCastCount", skillCfg)) + if output.SummonedMinionsPerCast == 0 then diff --git a/src/Modules/CalcPerform.lua.rej b/src/Modules/CalcPerform.lua.rej new file mode 100644 index 00000000000..4d7349988a2 --- /dev/null +++ b/src/Modules/CalcPerform.lua.rej @@ -0,0 +1,10 @@ +diff a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua (rejected hunks) +@@ -255,7 +255,7 @@ local function doActorAttribsConditions(env, actor) + if actor.mainSkill.skillTypes[SkillType.Movement] then + condList["UsedMovementSkillRecently"] = true + end +- if skillFlags.minion and not skillFlags.permanentMinion then ++ if skillFlags.minion and not skillFlags.duration then + condList["UsedMinionSkillRecently"] = true + end + if actor.mainSkill.skillTypes[SkillType.Vaal] then diff --git a/src/Modules/CalcSections.lua.rej b/src/Modules/CalcSections.lua.rej new file mode 100644 index 00000000000..d2315574188 --- /dev/null +++ b/src/Modules/CalcSections.lua.rej @@ -0,0 +1,13 @@ +diff a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua (rejected hunks) +@@ -641,7 +641,10 @@ return { + { label = "Rage per second", color = colorCodes.RAGE, haveOutput = "RagePerSecondHasCost", { format = "{2:output:RagePerSecondCost}", { breakdown = "RagePerSecondCost" }, { modName = { "RageCost", "Cost", "RageNoMult" }, cfg = "skill" }, }, }, + { label = "Armour Break / hit", haveOutput = "ArmourBreakPerHit", { format = "{0:output:ArmourBreakPerHit}", { modName = "ArmourBreakPerHit", modType = "BASE"} }, }, + { label = "Soul Cost", color = colorCodes.RAGE, haveOutput = "SoulHasCost", { format = "{0:output:SoulCost}", { breakdown = "SoulCost" }, { modName = { "SoulCost" }, cfg = "skill" }, }, }, +- { label = "Active Minion Limit", haveOutput = "ActiveMinionLimit", { format = "{0:output:ActiveMinionLimit}" } }, ++ { label = "Active Minion Limit", haveOutput = "ActiveMinionLimit", { format = "{0:output:ActiveMinionLimit}", ++ { breakdown = "ActiveMinionLimit" }, ++ { modName = { "ActiveMinionLimit" }, cfg = "skill" }, ++ }, }, + { label = "Minion Revival Time", haveOutput = "MinionRevivalSpeed", { format = "{2:output:MinionRevivalSpeed}s", { breakdown = "MinionRevivalSpeed" }, { modName = { "MinionRevivalSpeed" } } },}, + { label = "Quantity Multiplier", haveOutput = "QuantityMultiplier", { format = "{0:output:QuantityMultiplier}", + { breakdown = "QuantityMultiplier" }, diff --git a/src/Modules/ModParser.lua.rej b/src/Modules/ModParser.lua.rej new file mode 100644 index 00000000000..59252f42aef --- /dev/null +++ b/src/Modules/ModParser.lua.rej @@ -0,0 +1,19 @@ +diff a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua (rejected hunks) +@@ -4656,13 +4656,11 @@ local specialModList = { + ["summoned skeleton warriors are permanent and follow you"] = { flag("RaisedSkeletonPermanentDuration", { type = "SkillName", skillName = "Summon Skeletons" }) }, + ["minions recoup (%d+)%% of damage taken as life"] = function(num) return { mod("MinionModifier", "LIST", { mod = mod("LifeRecoup", "BASE", num) }) } end, + ["temporary minion skills have %+(%d+) to limit of minions summoned"] = function(num) return { mod("ActiveMinionLimit", "BASE", num, { type = "BaseFlag", baseFlag = "duration", neg = true }) } end, +- ["every rage also grants you (%d+)%% increased minion attack speed"] = function(num) return { +- mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "player" }) }), +- mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "parent" }) }), +- } end, + ["every rage also grants you (%d+)%% increased minion damage"] = function(num) return { +- mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "player" }) }), +- mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "parent" }) }), ++ mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "player" }) }), ++ } end, ++ ["every rage also grants you (%d+)%% increased minion attack speed"] = function(num) return { ++ mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", num, nil, ModFlag.Attack, { type = "Multiplier", var = "RageEffect", actor = "player" }) }), + } end, + -- Projectiles + ["skills chain %+(%d) times"] = function(num) return { mod("ChainCountMax", "BASE", num) } end, From 77128bbec2a7f4f50d7b406db4557e1b8ae05b75 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Thu, 23 Jul 2026 10:15:23 +1000 Subject: [PATCH 2/3] Fix merge I only wanted the actor and basFlag changes --- spec/System/TestSkills_spec.lua.rej | 54 ----------- src/Classes/CalcBreakdownControl.lua | 2 + src/Classes/CalcBreakdownControl.lua.rej | 10 --- src/Classes/ModStore.lua | 22 +++-- src/Classes/ModStore.lua.rej | 16 ---- src/Data/ModCache.lua.rej | 12 --- src/Data/Skills/act_dex.lua.rej | 9 -- src/Data/Skills/act_int.lua.rej | 109 ----------------------- src/Data/Skills/other.lua.rej | 27 ------ src/Export/Skills/act_dex.txt.rej | 10 --- src/Export/Skills/act_int.txt.rej | 101 --------------------- src/Export/Skills/other.txt.rej | 28 ------ src/Modules/CalcOffence.lua.rej | 10 --- src/Modules/CalcPerform.lua.rej | 10 --- src/Modules/CalcSections.lua.rej | 13 --- src/Modules/ModParser.lua.rej | 19 ---- 16 files changed, 17 insertions(+), 435 deletions(-) delete mode 100644 spec/System/TestSkills_spec.lua.rej delete mode 100644 src/Classes/CalcBreakdownControl.lua.rej delete mode 100644 src/Classes/ModStore.lua.rej delete mode 100644 src/Data/ModCache.lua.rej delete mode 100644 src/Data/Skills/act_dex.lua.rej delete mode 100644 src/Data/Skills/act_int.lua.rej delete mode 100644 src/Data/Skills/other.lua.rej delete mode 100644 src/Export/Skills/act_dex.txt.rej delete mode 100644 src/Export/Skills/act_int.txt.rej delete mode 100644 src/Export/Skills/other.txt.rej delete mode 100644 src/Modules/CalcOffence.lua.rej delete mode 100644 src/Modules/CalcPerform.lua.rej delete mode 100644 src/Modules/CalcSections.lua.rej delete mode 100644 src/Modules/ModParser.lua.rej diff --git a/spec/System/TestSkills_spec.lua.rej b/spec/System/TestSkills_spec.lua.rej deleted file mode 100644 index 771c05c0956..00000000000 --- a/spec/System/TestSkills_spec.lua.rej +++ /dev/null @@ -1,54 +0,0 @@ -diff a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua (rejected hunks) -@@ -85,7 +85,7 @@ describe("TestSkills", function() - assert.are.equals(16, round(finalCost)) - end) - -- it("Test 'every rage also grants you' for minion mods", function() -+ it("Test 'every rage also grants you' for minion mods and minion apply to you mods #run", function() - build.itemsTab:CreateDisplayItemFromRaw([[ - New Item - Fanatic Greathammer -@@ -106,5 +106,42 @@ describe("TestSkills", function() - runCallback("OnFrame") - - assert.True(baseUnearthAttackSpeed < build.calcsTab.mainOutput.Minion.Speed) -+ -+ newBuild() -+ build.itemsTab:CreateDisplayItemFromRaw([[ -+ Rarity: UNIQUE -+ Chober Chaber -+ Leaden Greathammer -+ Variant: Pre 0.1.1 -+ Variant: Current -+ Selected Variant: 2 -+ Quality: 20 -+ LevelReq: 33 -+ Implicits: 0 -+ +100 Intelligence Requirement -+ {variant:1}{range:0.5}(80-120)% increased Physical Damage -+ {variant:2}{range:0.5}Adds (58-65) to (102-110) Physical Damage -+ {range:0.5}+(80-100) to maximum Mana -+ {variant:2}+50 to Spirit -+ {variant:1}+5% to Critical Hit Chance -+ Increases and Reductions to Minion Damage also affect you -+ ]]) -+ build.itemsTab:AddDisplayItem() -+ runCallback("OnFrame") -+ -+ build.skillsTab:PasteSocketGroup("Leap Slam 20/0 1\nRage I 1/0 1") -+ runCallback("OnFrame") -+ -+ build.configTab.input.multiplierRage = 30 -+ build.configTab:BuildModList() -+ runCallback("OnFrame") -+ -+ local baseLeapSlamHit = build.calcsTab.mainOutput.AverageDamage -+ -+ build.configTab.input.customMods = "Every Rage also grants you 1% increased Minion Damage" -+ build.configTab:BuildModList() -+ runCallback("OnFrame") -+ -+ assert.True(baseLeapSlamHit < build.calcsTab.mainOutput.AverageDamage) - end) - end) -\ No newline at end of file diff --git a/src/Classes/CalcBreakdownControl.lua b/src/Classes/CalcBreakdownControl.lua index c93ff9f84c1..94e6fb55a3e 100644 --- a/src/Classes/CalcBreakdownControl.lua +++ b/src/Classes/CalcBreakdownControl.lua @@ -474,6 +474,8 @@ function CalcBreakdownClass:AddModSection(sectionData, modList) if not desc then desc = "Skill type: "..(tag.neg and "Not " or "").."?" end + elseif tag.type == "BaseFlag" then + desc = "Base flag: "..(tag.neg and "Not " or "")..self:FormatModName(tostring(tag.baseFlag)) elseif tag.type == "SlotNumber" then desc = "When in slot #"..tag.num elseif tag.type == "GlobalEffect" then diff --git a/src/Classes/CalcBreakdownControl.lua.rej b/src/Classes/CalcBreakdownControl.lua.rej deleted file mode 100644 index eb57c31e6ce..00000000000 --- a/src/Classes/CalcBreakdownControl.lua.rej +++ /dev/null @@ -1,10 +0,0 @@ -diff a/src/Classes/CalcBreakdownControl.lua b/src/Classes/CalcBreakdownControl.lua (rejected hunks) -@@ -481,6 +481,8 @@ function CalcBreakdownClass:AddModSection(sectionData, modList) - else - desc = "Skill type: "..(tag.neg and "Not " or "")..self:FormatModName(SkillTypeName[tag.skillType]) - end -+ elseif tag.type == "BaseFlag" then -+ desc = "Base flag: "..(tag.neg and "Not " or "")..self:FormatModName(tostring(tag.baseFlag)) - elseif tag.type == "SlotNumber" then - desc = "When in slot #"..tag.num - elseif tag.type == "GlobalEffect" then diff --git a/src/Classes/ModStore.lua b/src/Classes/ModStore.lua index d5d103ce5c5..56e971ff0fa 100644 --- a/src/Classes/ModStore.lua +++ b/src/Classes/ModStore.lua @@ -34,6 +34,14 @@ local ModStoreClass = newClass("ModStore", function(self, parent) self.conditions = { } end) +local function getActor(self, actorType) + if actorType == "player" then + return self.actor.player or (self.actor.parent and self.actor.parent.player) or (self.actor.enemy and self.actor.enemy.player) + else + return self.actor[actorType] + end +end + function ModStoreClass:ScaleAddMod(mod, scale, replace) local unscalable = false for _, effects in ipairs(mod) do @@ -455,7 +463,7 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) limitTotal = limit else mult = m_min(mult, limit) - end + end end if type(value) == "table" then value = copyTable(value) @@ -505,7 +513,7 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) limitTotal = limit else mult = m_min(mult, limit) - end + end end if type(value) == "table" then value = copyTable(value) @@ -561,9 +569,9 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) end end end - -- Syntax: { type = "MeleeProximity", ramp = {MaxBonusPct,MinBonusPct} } - -- Both MaxBonusPct and MinBonusPct are percent in decimal form (1.0 = 100%) - -- Example: { type = "MeleeProximity", ramp = {1,0} } ## Duelist-Slayer: Impact + -- Syntax: { type = "MeleeProximity", ramp = {MaxBonusPct,MinBonusPct} } + -- Both MaxBonusPct and MinBonusPct are percent in decimal form (1.0 = 100%) + -- Example: { type = "MeleeProximity", ramp = {1,0} } ## Duelist-Slayer: Impact elseif tag.type == "MeleeProximity" then if not cfg or not cfg.skillDist then return @@ -571,7 +579,7 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) -- Max potency is 0-15 units of distance if cfg.skillDist <= 15 then value = value * tag.ramp[1] - -- Reduced potency (linear) until 40 units + -- Reduced potency (linear) until 40 units elseif cfg.skillDist >= 16 and cfg.skillDist <= 39 then value = value * (tag.ramp[1] - ((tag.ramp[1] / 25) * (cfg.skillDist - 15))) elseif cfg.skillDist >= 40 then @@ -720,7 +728,7 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) end return false end - + local match = {} if tag.slotName then match["slotName"] = (tag.slotName == cfg.slotName) or false diff --git a/src/Classes/ModStore.lua.rej b/src/Classes/ModStore.lua.rej deleted file mode 100644 index 36462c90d90..00000000000 --- a/src/Classes/ModStore.lua.rej +++ /dev/null @@ -1,16 +0,0 @@ -diff a/src/Classes/ModStore.lua b/src/Classes/ModStore.lua (rejected hunks) -@@ -34,6 +34,14 @@ local ModStoreClass = newClass("ModStore", function(self, parent) - self.conditions = { } - end) - -+local function getActor(self, actorType) -+ if actorType == "player" then -+ return self.actor.player or (self.actor.parent and self.actor.parent.player) or (self.actor.enemy and self.actor.enemy.player) -+ else -+ return self.actor[actorType] -+ end -+end -+ - function ModStoreClass:ScaleAddMod(mod, scale) - local unscalable = false - for _, effects in ipairs(mod) do diff --git a/src/Data/ModCache.lua.rej b/src/Data/ModCache.lua.rej deleted file mode 100644 index 59dbcc73741..00000000000 --- a/src/Data/ModCache.lua.rej +++ /dev/null @@ -1,12 +0,0 @@ -diff a/src/Data/ModCache.lua b/src/Data/ModCache.lua (rejected hunks) -@@ -4877,8 +4877,8 @@ c["Every Rage also grants 1% increased Fire Damage"]={{[1]={[1]={type="Multiplie - c["Every Rage also grants 1% increased Stun Threshold"]={{[1]={[1]={type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=1}},nil} - c["Every Rage also grants 2% increased Spell Damage"]={{[1]={[1]={type="Multiplier",var="RageEffect"},flags=2,keywordFlags=0,name="Damage",type="INC",value=2}},nil} - c["Every Rage also grants 2% increased Stun Threshold"]={{[1]={[1]={type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=2}},nil} --c["Every Rage also grants you 1% increased Minion Attack Speed"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="player",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Speed",type="INC",value=1}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="parent",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Speed",type="INC",value=1}}}},nil} --c["Every Rage also grants you 1% increased Minion Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="player",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Damage",type="INC",value=1}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="parent",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Damage",type="INC",value=1}}}},nil} -+c["Every Rage also grants you 1% increased Minion Attack Speed"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="player",type="Multiplier",var="RageEffect"},flags=1,keywordFlags=0,name="Speed",type="INC",value=1}}}},nil} -+c["Every Rage also grants you 1% increased Minion Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="player",type="Multiplier",var="RageEffect"},flags=0,keywordFlags=0,name="Damage",type="INC",value=1}}}},nil} - c["Every Third Slam skill that doesn't create Fissures which you use yourself causes 3 additional Aftershocks ahead and to each side of the initial area"]={nil,"Every Third Slam skill that doesn't create Fissures which you use yourself causes 3 additional Aftershocks ahead and to each side of the initial area "} - c["Every second Slam Skill you use yourself is Ancestrally Boosted"]={nil,"Every second Slam Skill you use yourself is Ancestrally Boosted "} - c["Every second, inflicts Critical Weakness on enemies in your Presence for 1 second"]={{[1]={flags=0,keywordFlags=0,name="ApplyCriticalWeakness",type="FLAG",value=true}},nil} diff --git a/src/Data/Skills/act_dex.lua.rej b/src/Data/Skills/act_dex.lua.rej deleted file mode 100644 index 03ed9989959..00000000000 --- a/src/Data/Skills/act_dex.lua.rej +++ /dev/null @@ -1,9 +0,0 @@ -diff a/src/Data/Skills/act_dex.lua b/src/Data/Skills/act_dex.lua (rejected hunks) -@@ -897,7 +897,6 @@ skills["SummonBeastPlayer"] = { - minion = true, - summonBeast = true, - duration = true, -- permanentMinion = true, - }, - baseMods = { - mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 25) }), --Server side damage mod added in 0.3, diff --git a/src/Data/Skills/act_int.lua.rej b/src/Data/Skills/act_int.lua.rej deleted file mode 100644 index 44d4c855c10..00000000000 --- a/src/Data/Skills/act_int.lua.rej +++ /dev/null @@ -1,109 +0,0 @@ -diff a/src/Data/Skills/act_int.lua b/src/Data/Skills/act_int.lua (rejected hunks) -@@ -16168,7 +16168,6 @@ skills["RagingSpiritsPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, - }, - constantStats = { - { "base_number_of_raging_spirits_allowed", 10 }, -@@ -16292,9 +16291,6 @@ skills["RaiseZombiePlayer"] = { - spell = true, - minion = true, - }, -- baseMods = { -- flag("Condition:TemporaryMinion"), -- }, - constantStats = { - { "display_minion_monster_type", 1 }, - { "zombie_decay_rate_increase_+%_final", 25 }, -@@ -17692,7 +17688,7 @@ skills["SummonSkeletalArsonistsPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 2 }, -@@ -17812,7 +17808,7 @@ skills["SummonSkeletalBrutesPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 2 }, -@@ -17932,7 +17928,7 @@ skills["SummonSkeletalClericsPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 2 }, -@@ -18052,7 +18048,7 @@ skills["SummonSkeletalFrostMagesPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 2 }, -@@ -18173,7 +18169,7 @@ skills["SummonSkeletalReaversPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 2 }, -@@ -18294,7 +18290,7 @@ skills["SummonSkeletalSnipersPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 2 }, -@@ -18414,7 +18410,7 @@ skills["SummonSkeletalStormMagesPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 2 }, -@@ -18536,7 +18532,7 @@ skills["SummonSkeletalWarriorsPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 2 }, -@@ -19715,7 +19711,6 @@ skills["SummonSpectrePlayer"] = { - minion = true, - spectre = true, - duration = true, -- permanentMinion = true, - }, - baseMods = { - mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 25) }), --Server side damage mod added in 0.3, -@@ -21219,9 +21214,6 @@ skills["UnearthPlayer"] = { - area = true, - minion = true, - }, -- baseMods = { -- flag("Condition:TemporaryMinion"), -- }, - constantStats = { - { "unearth_base_cone_speed_multiplier", 50 }, - { "active_skill_base_area_of_effect_radius", 60 }, diff --git a/src/Data/Skills/other.lua.rej b/src/Data/Skills/other.lua.rej deleted file mode 100644 index a85cb306702..00000000000 --- a/src/Data/Skills/other.lua.rej +++ /dev/null @@ -1,27 +0,0 @@ -diff a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua (rejected hunks) -@@ -5307,7 +5307,6 @@ skills["ManifestWeaponPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- duration = true, - }, - constantStats = { - { "minion_1%_damage_+%_per_X_player_strength", 1 }, -@@ -8022,7 +8021,7 @@ skills["SummonInfernalHoundPlayer"] = { - baseFlags = { - spell = true, - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "display_minion_monster_type", 8 }, -@@ -8151,7 +8150,7 @@ skills["SupportingFirePlayer"] = { - }, - baseFlags = { - minion = true, -- permanentMinion = true, -+ duration = true, - }, - constantStats = { - { "minion_1%_damage_+%_per_X_player_strength", 1 }, diff --git a/src/Export/Skills/act_dex.txt.rej b/src/Export/Skills/act_dex.txt.rej deleted file mode 100644 index d8abb979217..00000000000 --- a/src/Export/Skills/act_dex.txt.rej +++ /dev/null @@ -1,10 +0,0 @@ -diff a/src/Export/Skills/act_dex.txt b/src/Export/Skills/act_dex.txt (rejected hunks) -@@ -90,7 +90,7 @@ statMap = { - #minionList - #skill SummonBeastPlayer - #set SummonBeastPlayer --#flags spell minion summonBeast duration permanentMinion -+#flags spell minion summonBeast duration - #baseMod mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 25) }), --Server side damage mod added in 0.3 - #mods - #skillEnd diff --git a/src/Export/Skills/act_int.txt.rej b/src/Export/Skills/act_int.txt.rej deleted file mode 100644 index 9cdc5912272..00000000000 --- a/src/Export/Skills/act_int.txt.rej +++ /dev/null @@ -1,101 +0,0 @@ -diff a/src/Export/Skills/act_int.txt b/src/Export/Skills/act_int.txt (rejected hunks) -@@ -1095,7 +1095,7 @@ statMap = { - #minionList SummonedRagingSpirit - #skill RagingSpiritsPlayer - #set RagingSpiritsPlayer --#flags spell minion permanentMinion -+#flags spell minion - #mods - #skillEnd - -@@ -1103,7 +1103,6 @@ statMap = { - #skill RaiseZombiePlayer - #set RaiseZombiePlayer - #flags spell minion --#baseMod flag("Condition:TemporaryMinion") - #mods - #skillEnd - -@@ -1189,49 +1188,49 @@ statMap = { - #minionList RaisedSkeletonArsonist - #skill SummonSkeletalArsonistsPlayer - #set SummonSkeletalArsonistsPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - - #minionList RaisedSkeletonBrute - #skill SummonSkeletalBrutesPlayer - #set SummonSkeletalBrutesPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - - #minionList RaisedSkeletonCleric - #skill SummonSkeletalClericsPlayer - #set SummonSkeletalClericsPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - - #minionList RaisedSkeletonFrostMage - #skill SummonSkeletalFrostMagesPlayer - #set SummonSkeletalFrostMagesPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - - #minionList RaisedSkeletonReaver - #skill SummonSkeletalReaversPlayer - #set SummonSkeletalReaversPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - - #minionList RaisedSkeletonSniper - #skill SummonSkeletalSnipersPlayer - #set SummonSkeletalSnipersPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - - #minionList RaisedSkeletonStormMage - #skill SummonSkeletalStormMagesPlayer - #set SummonSkeletalStormMagesPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - -@@ -1239,7 +1238,7 @@ statMap = { - #minionList RaisedSkeletonWarriors - #skill SummonSkeletalWarriorsPlayer - #set SummonSkeletalWarriorsPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - -@@ -1309,7 +1308,7 @@ statMap = { - #minionList - #skill SummonSpectrePlayer - #set SummonSpectrePlayer --#flags spell minion spectre duration permanentMinion -+#flags spell minion spectre duration - #baseMod mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 25) }), --Server side damage mod added in 0.3 - #mods - #skillEnd -@@ -1401,7 +1400,6 @@ statMap = { - #skill UnearthPlayer - #set UnearthPlayer - #flags spell area minion --#baseMod flag("Condition:TemporaryMinion") - #mods - #skillEnd - diff --git a/src/Export/Skills/other.txt.rej b/src/Export/Skills/other.txt.rej deleted file mode 100644 index 686d35154c6..00000000000 --- a/src/Export/Skills/other.txt.rej +++ /dev/null @@ -1,28 +0,0 @@ -diff a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt (rejected hunks) -@@ -368,7 +368,7 @@ minionUses = { - ["Weapon 1"] = true, - }, - #set ManifestWeaponPlayer --#flags spell minion duration -+#flags spell minion - statMap = { - ["minion_1%_damage_+%_per_X_player_strength"] = { - mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", nil, 0, 0, { type = "PerStat", stat = "Str", actor = "parent" }) }), -@@ -556,7 +556,7 @@ statMap = { - #minionList SummonedHellhound - #skill SummonInfernalHoundPlayer - #set SummonInfernalHoundPlayer --#flags spell minion permanentMinion -+#flags spell minion duration - #mods - #skillEnd - -@@ -564,7 +564,7 @@ statMap = { - #minionList TacticianMinion - #skill SupportingFirePlayer - #set SupportingFirePlayer --#flags minion permanentMinion -+#flags minion duration - statMap = { - ["minion_1%_damage_+%_per_X_player_strength"] = { - mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", nil, 0, 0, { type = "PerStat", stat = "Str", actor = "parent" }) }), diff --git a/src/Modules/CalcOffence.lua.rej b/src/Modules/CalcOffence.lua.rej deleted file mode 100644 index ad6f7030709..00000000000 --- a/src/Modules/CalcOffence.lua.rej +++ /dev/null @@ -1,10 +0,0 @@ -diff a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua (rejected hunks) -@@ -1192,7 +1192,7 @@ function calcs.offence(env, actor, activeSkill) - -- Calculate skill type stats - if skillFlags.minion then - if activeSkill.minion and activeSkill.minion.minionData.limit then -- output.ActiveMinionLimit = m_floor(env.modDB:Override(nil, activeSkill.minion.minionData.limit) or calcLib.val(skillModList, activeSkill.minion.minionData.limit, skillCfg)) -+ output.ActiveMinionLimit = m_floor(env.modDB:Override(nil, activeSkill.minion.minionData.limit) or (calcLib.val(skillModList, activeSkill.minion.minionData.limit, skillCfg) + calcLib.val(skillModList, "ActiveMinionLimit", skillCfg))) - end - output.SummonedMinionsPerCast = m_floor(calcLib.val(skillModList, "MinionPerCastCount", skillCfg)) - if output.SummonedMinionsPerCast == 0 then diff --git a/src/Modules/CalcPerform.lua.rej b/src/Modules/CalcPerform.lua.rej deleted file mode 100644 index 4d7349988a2..00000000000 --- a/src/Modules/CalcPerform.lua.rej +++ /dev/null @@ -1,10 +0,0 @@ -diff a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua (rejected hunks) -@@ -255,7 +255,7 @@ local function doActorAttribsConditions(env, actor) - if actor.mainSkill.skillTypes[SkillType.Movement] then - condList["UsedMovementSkillRecently"] = true - end -- if skillFlags.minion and not skillFlags.permanentMinion then -+ if skillFlags.minion and not skillFlags.duration then - condList["UsedMinionSkillRecently"] = true - end - if actor.mainSkill.skillTypes[SkillType.Vaal] then diff --git a/src/Modules/CalcSections.lua.rej b/src/Modules/CalcSections.lua.rej deleted file mode 100644 index d2315574188..00000000000 --- a/src/Modules/CalcSections.lua.rej +++ /dev/null @@ -1,13 +0,0 @@ -diff a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua (rejected hunks) -@@ -641,7 +641,10 @@ return { - { label = "Rage per second", color = colorCodes.RAGE, haveOutput = "RagePerSecondHasCost", { format = "{2:output:RagePerSecondCost}", { breakdown = "RagePerSecondCost" }, { modName = { "RageCost", "Cost", "RageNoMult" }, cfg = "skill" }, }, }, - { label = "Armour Break / hit", haveOutput = "ArmourBreakPerHit", { format = "{0:output:ArmourBreakPerHit}", { modName = "ArmourBreakPerHit", modType = "BASE"} }, }, - { label = "Soul Cost", color = colorCodes.RAGE, haveOutput = "SoulHasCost", { format = "{0:output:SoulCost}", { breakdown = "SoulCost" }, { modName = { "SoulCost" }, cfg = "skill" }, }, }, -- { label = "Active Minion Limit", haveOutput = "ActiveMinionLimit", { format = "{0:output:ActiveMinionLimit}" } }, -+ { label = "Active Minion Limit", haveOutput = "ActiveMinionLimit", { format = "{0:output:ActiveMinionLimit}", -+ { breakdown = "ActiveMinionLimit" }, -+ { modName = { "ActiveMinionLimit" }, cfg = "skill" }, -+ }, }, - { label = "Minion Revival Time", haveOutput = "MinionRevivalSpeed", { format = "{2:output:MinionRevivalSpeed}s", { breakdown = "MinionRevivalSpeed" }, { modName = { "MinionRevivalSpeed" } } },}, - { label = "Quantity Multiplier", haveOutput = "QuantityMultiplier", { format = "{0:output:QuantityMultiplier}", - { breakdown = "QuantityMultiplier" }, diff --git a/src/Modules/ModParser.lua.rej b/src/Modules/ModParser.lua.rej deleted file mode 100644 index 59252f42aef..00000000000 --- a/src/Modules/ModParser.lua.rej +++ /dev/null @@ -1,19 +0,0 @@ -diff a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua (rejected hunks) -@@ -4656,13 +4656,11 @@ local specialModList = { - ["summoned skeleton warriors are permanent and follow you"] = { flag("RaisedSkeletonPermanentDuration", { type = "SkillName", skillName = "Summon Skeletons" }) }, - ["minions recoup (%d+)%% of damage taken as life"] = function(num) return { mod("MinionModifier", "LIST", { mod = mod("LifeRecoup", "BASE", num) }) } end, - ["temporary minion skills have %+(%d+) to limit of minions summoned"] = function(num) return { mod("ActiveMinionLimit", "BASE", num, { type = "BaseFlag", baseFlag = "duration", neg = true }) } end, -- ["every rage also grants you (%d+)%% increased minion attack speed"] = function(num) return { -- mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "player" }) }), -- mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "parent" }) }), -- } end, - ["every rage also grants you (%d+)%% increased minion damage"] = function(num) return { -- mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "player" }) }), -- mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "parent" }) }), -+ mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "Multiplier", var = "RageEffect", actor = "player" }) }), -+ } end, -+ ["every rage also grants you (%d+)%% increased minion attack speed"] = function(num) return { -+ mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", num, nil, ModFlag.Attack, { type = "Multiplier", var = "RageEffect", actor = "player" }) }), - } end, - -- Projectiles - ["skills chain %+(%d) times"] = function(num) return { mod("ChainCountMax", "BASE", num) } end, From 31324e5d2eb464b030e9b6ddf6e2a1d90e074707 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Thu, 23 Jul 2026 10:21:23 +1000 Subject: [PATCH 3/3] Fix baseFlag implementation --- spec/System/TestSkills_spec.lua | 23 ++++++++++++++++++++++- src/Classes/ModStore.lua | 8 ++------ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index 831ac254660..16b6f4aece2 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -150,4 +150,25 @@ describe("TestAttacks", function() assert.True(preAdrenalineMaxStages < build.calcsTab.mainEnv.player.activeSkillList[1].skillModList:Sum("BASE", nil, "Multiplier:BlightMaxStages")) end) -end) \ No newline at end of file + + it("evaluates BaseFlag tags using PoB 1 skill data", function() + build.skillsTab:PasteSocketGroup("Absolution 20/0 1\n") + runCallback("OnFrame") + + local durationSkill = build.calcsTab.mainEnv.player.mainSkill + durationSkill.skillModList:NewMod("BaseFlagTest", "BASE", 1, "Test", { type = "BaseFlag", baseFlag = "duration" }) + durationSkill.skillModList:NewMod("NegatedBaseFlagTest", "BASE", 1, "Test", { type = "BaseFlag", baseFlag = "duration", neg = true }) + assert.are.equals(1, durationSkill.skillModList:Sum("BASE", durationSkill.skillCfg, "BaseFlagTest")) + assert.are.equals(0, durationSkill.skillModList:Sum("BASE", durationSkill.skillCfg, "NegatedBaseFlagTest")) + + newBuild() + build.skillsTab:PasteSocketGroup("Fireball 20/0 1\n") + runCallback("OnFrame") + + local nonDurationSkill = build.calcsTab.mainEnv.player.mainSkill + nonDurationSkill.skillModList:NewMod("BaseFlagTest", "BASE", 1, "Test", { type = "BaseFlag", baseFlag = "duration" }) + nonDurationSkill.skillModList:NewMod("NegatedBaseFlagTest", "BASE", 1, "Test", { type = "BaseFlag", baseFlag = "duration", neg = true }) + assert.are.equals(0, nonDurationSkill.skillModList:Sum("BASE", nonDurationSkill.skillCfg, "BaseFlagTest")) + assert.are.equals(1, nonDurationSkill.skillModList:Sum("BASE", nonDurationSkill.skillCfg, "NegatedBaseFlagTest")) + end) +end) diff --git a/src/Classes/ModStore.lua b/src/Classes/ModStore.lua index 56e971ff0fa..36426b352f7 100644 --- a/src/Classes/ModStore.lua +++ b/src/Classes/ModStore.lua @@ -836,12 +836,8 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) return end elseif tag.type == "BaseFlag" then - local match = false - if cfg and cfg.skillGem and cfg.skillGem.grantedEffect and cfg.skillGem.grantedEffect.statSets and cfg.skillGem.grantedEffect.statSets[1] then - match = cfg.skillGem.grantedEffect.statSets[1].baseFlags[tag.baseFlag] - else - match = cfg and cfg.baseFlags and cfg.baseFlags[tag.baseFlag] - end + local baseFlags = cfg and ((cfg.skillGrantedEffect and cfg.skillGrantedEffect.baseFlags) or cfg.baseFlags) + local match = baseFlags and baseFlags[tag.baseFlag] or false if tag.neg then match = not match end