From f1521f0c022df0a08300dbcfa541890df5ecc8db Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 19:59:57 +1000 Subject: [PATCH 01/13] Triggered Skills --- src/Data/ModCache.lua | 10 +++++----- src/Data/SkillStatMap.lua | 3 +++ src/Modules/ConfigOptions.lua | 3 +++ src/Modules/ModParser.lua | 3 +++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 4d1db44f16..681e6673ac 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4962,11 +4962,11 @@ c["Inherent loss of Rage is 20% slower"]={{[1]={flags=0,keywordFlags=0,name="Inh c["Inherent loss of Rage is 25% slower"]={{[1]={flags=0,keywordFlags=0,name="InherentRageLoss",type="INC",value=-25}},nil} c["Instant Recovery"]={{[1]={flags=0,keywordFlags=0,name="FlaskInstantRecovery",type="BASE",value=100}},nil} c["Intelligence's inherent bonus is 1% increased Evasion Rating per 2 Intelligence instead"]={{[1]={[1]={div="2",stat="Int",type="PerStat"},flags=0,keywordFlags=0,name="Evasion",type="INC",value=1},[2]={flags=0,keywordFlags=0,name="NoIntBonusToMana",type="FLAG",value=true}},nil} -c["Invocated Spells deal 15% increased Damage"]={nil,"Invocated Spells deal 15% increased Damage "} -c["Invocated Spells have 15% increased Critical Hit Chance"]={nil,"Invocated Spells have 15% increased Critical Hit Chance "} -c["Invocated Spells have 40% chance to consume half as much Energy"]={nil,"Invocated Spells have 40% chance to consume half as much Energy "} -c["Invocated Spells have 40% increased Critical Hit Chance"]={nil,"Invocated Spells have 40% increased Critical Hit Chance "} -c["Invocated skills have 30% increased Maximum Energy"]={nil,"Invocated skills have 30% increased Maximum Energy "} +c["Invocated Spells deal 15% increased Damage"]={{[1]={[1]={type="Condition",var="InvocationSkill"},flags=0,keywordFlags=131072,name="Damage",type="INC",value=15}},nil} +c["Invocated Spells have 15% increased Critical Hit Chance"]={{[1]={[1]={type="Condition",var="InvocationSkill"},flags=0,keywordFlags=131072,name="CritChance",type="INC",value=15}},nil} +c["Invocated Spells have 40% chance to consume half as much Energy"]={{}," to consume half as much Energy "} +c["Invocated Spells have 40% increased Critical Hit Chance"]={{[1]={[1]={type="Condition",var="InvocationSkill"},flags=0,keywordFlags=131072,name="CritChance",type="INC",value=40}},nil} +c["Invocated skills have 30% increased Maximum Energy"]={{}," Maximum Energy "} c["Invocation Skills cannot gain Energy while Triggering Spells"]={nil,"Invocation Skills cannot gain Energy while Triggering Spells "} c["Invocation Skills cannot gain Energy while Triggering Spells Invoked Spells consume 50% less Energy"]={nil,"Invocation Skills cannot gain Energy while Triggering Spells Invoked Spells consume 50% less Energy "} c["Invocation Skills instead Trigger Spells every 2 seconds"]={nil,"Invocation Skills instead Trigger Spells every 2 seconds "} diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index bcb5f2390c..db85d12750 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -178,6 +178,9 @@ return { ["base_skill_cost_life_instead_of_mana"] = { flag("CostLifeInsteadOfMana"), }, +["generic_ongoing_triggerer_is_invocation_skill"] = { + flag("Condition:InvocationSkill"), +}, ["base_skill_cost_life_instead_of_mana_%"] = { mod("HybridManaAndLifeCost_Life", "BASE", nil), }, diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index efd78ca7f0..7d2955c3ca 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -1428,6 +1428,9 @@ Huge sets the radius to 11. { var = "trapsPerThrow", type = "count", label = "# of Traps per throw:", ifFlag = "trap", tooltip = "This will override the number of Traps per throw", apply = function(val, modList, enemyModList) modList:NewMod("TrapThrowCount", "OVERRIDE", val, "Config", {type = "Condition", var = "Combat"}) end }, + { var = "conditionTriggeredSkillRecently", type = "check", label = "Have you Triggered a skill Recently?", ifSkillType = SkillType.Triggered, apply = function(val, modList, enemyModList) + modList:NewMod("Condition:TriggeredSkillRecently", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) + end }, { var = "conditionCursedEnemyRecently", type = "check", label = "Have you Cursed an enemy Recently?", ifCond="CursedEnemyRecently", apply = function(val, modList, enemyModList) modList:NewMod("Condition:CursedEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 0ae35b950d..fe286ddc5c 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1238,6 +1238,8 @@ local preFlagList = { ["^aura skills [hd][ae][va][el] "] = { tag = { type = "SkillType", skillType = SkillType.Aura } }, ["^prismatic skills [hd][ae][va][el] "] = { tag = { type = "SkillType", skillType = SkillType.RandomElement } }, ["^retaliation skills [hd][ae][va][el] "] = { tag = { type = "SkillType", skillType = SkillType.Retaliation } }, + ["^invocated skills [hd][ae][va][el] "] = { tag = { type = "Condition", var = "InvocationSkill" } }, + ["^invocated spells [hd][ae][va][el] "] = { keywordFlags = KeywordFlag.Spell, tag = { type = "Condition", var = "InvocationSkill" } }, ["^slam skills [hd][ae][va][el] "] = { tag = { type = "SkillType", skillType = SkillType.Slam } }, ["^warcry skills have "] = { tag = { type = "SkillType", skillType = SkillType.Warcry } }, ["^non%-curse aura skills have "] = { tagList = { { type = "SkillType", skillType = SkillType.Aura }, { type = "SkillType", skillType = SkillType.AppliesCurse, neg = true } } }, @@ -1785,6 +1787,7 @@ local modTagList = { ["if you[' ]h?a?ve hit a cursed enemy recently"] = { tagList = { { type = "Condition", var = "HitRecently" }, { type = "ActorCondition", actor = "enemy", var = "Cursed" } } }, ["if you[' ]h?a?ve dealt a projectile attack hit in the past eight seconds"] = { tag = { type = "Condition", var = "HitProjectileRecently" } }, ["if you[' ]h?a?ve dealt a melee hit in the past eight seconds"] = { tag = { type = "Condition", var = "HitMeleeRecently" } }, + ["if you[' ]h?a?ve triggered a skill recently"] = { tag = { type = "Condition", var = "TriggeredSkillRecently" } }, ["when you or your totems hit an enemy with a spell"] = { tag = { type = "Condition", varList = { "HitSpellRecently","TotemsHitSpellRecently" } }, }, ["on hit with spells"] = { tag = { type = "Condition", var = "HitSpellRecently" } }, ["if you[' ]h?a?ve crit recently"] = { tag = { type = "Condition", var = "CritRecently" } }, From b77bc0bd3db07aaa71ae973e26e26ccbaf7bb445 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:00:17 +1000 Subject: [PATCH 02/13] Crossbow and Grenade Skills 30% chance to not consume a bolt if you've Reloaded Recently 25% increased Damage with Crossbows for each type of Ammunition fired in the past 10 seconds 30% chance to not consume a bolt if you've Reloaded Recently 30% chance when you Reload a Crossbow to be immediate Gain 4% of Damage as Extra Fire Damage for every different Grenade fired in the past 8 seconds --- src/Data/ModCache.lua | 11 +++++------ src/Modules/CalcOffence.lua | 27 +++++++++++++++++++-------- src/Modules/CalcPerform.lua | 14 ++++++++++++-- src/Modules/CalcSections.lua | 1 + src/Modules/ConfigOptions.lua | 21 +++++++++++++++------ src/Modules/ModParser.lua | 6 ++++++ 6 files changed, 58 insertions(+), 22 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 681e6673ac..a8bd618ddd 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1182,7 +1182,7 @@ c["10% reduced effect of Shock on you"]={{[1]={flags=0,keywordFlags=0,name="Self c["10% reduced maximum Mana"]={{[1]={flags=0,keywordFlags=0,name="Mana",type="INC",value=-10}},nil} c["100 Passive Skill Points become Weapon Set Skill Points"]={{[1]={flags=0,keywordFlags=0,name="PassivePointsToWeaponSetPoints",type="BASE",value=100}},nil} c["100% chance to Daze Enemies whose Hits you Block while Actively Blocking"]={{[1]={flags=0,keywordFlags=0,name="DazeChance",type="BASE",value=100}}," Enemies whose Hits you Block ly Blocking "} -c["100% chance to not consume a bolt if you've Reloaded Recently"]={{}," to not consume a bolt if you've Reloaded Recently "} +c["100% chance to not consume a bolt if you've Reloaded Recently"]={{[1]={[1]={type="Condition",var="ReloadedRecently"},flags=0,keywordFlags=0,name="ChanceToNotConsumeAmmo",type="BASE",value=100}},nil} c["100% faster start of Energy Shield Recharge"]={{[1]={flags=0,keywordFlags=0,name="EnergyShieldRechargeFaster",type="INC",value=100}},nil} c["100% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=100}},nil} c["100% increased Armour Break Duration"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=100}}," Break Duration "} @@ -1999,7 +1999,7 @@ c["25% increased Culling Strike Threshold Gain 13% of Damage as Extra Chaos Dama c["25% increased Damage during any Flask Effect"]={{[1]={[1]={type="Condition",var="UsingFlask"},flags=0,keywordFlags=0,name="Damage",type="INC",value=25}},nil} c["25% increased Damage while you have a Totem"]={{[1]={[1]={type="Condition",var="HaveTotem"},flags=0,keywordFlags=0,name="Damage",type="INC",value=25}},nil} c["25% increased Damage while your Companion is in your Presence"]={{[1]={[1]={type="Condition",var="CompanionInPresence"},flags=0,keywordFlags=0,name="Damage",type="INC",value=25}},nil} -c["25% increased Damage with Crossbows for each type of Ammunition fired in the past 10 seconds"]={{[1]={flags=67108868,keywordFlags=0,name="Damage",type="INC",value=25}}," for each type of Ammunition fired in the past 10 seconds "} +c["25% increased Damage with Crossbows for each type of Ammunition fired in the past 10 seconds"]={{[1]={[1]={limitVar="AmmoTypes",type="Multiplier",var="DifferentAmmoFired"},flags=67108868,keywordFlags=0,name="Damage",type="INC",value=25}},nil} c["25% increased Damage with Flails"]={{[1]={flags=134217732,keywordFlags=0,name="Damage",type="INC",value=25}},nil} c["25% increased Damage with Hits against Blinded Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Blinded"},flags=0,keywordFlags=262144,name="Damage",type="INC",value=25}},nil} c["25% increased Damage with Hits against Enemies affected by Elemental Ailments"]={{[1]={[1]={actor="enemy",type="ActorCondition",varList={[1]="Frozen",[2]="Chilled",[3]="Shocked",[4]="Ignited",[5]="Scorched",[6]="Brittle",[7]="Sapped"}},flags=0,keywordFlags=262144,name="Damage",type="INC",value=25}},nil} @@ -2181,8 +2181,8 @@ c["30% chance to Pierce an Enemy"]={{[1]={flags=0,keywordFlags=0,name="PierceCha c["30% chance to Poison on Hit"]={{[1]={flags=0,keywordFlags=0,name="PoisonChance",type="BASE",value=30}},nil} c["30% chance to Poison on Hit with Attacks"]={{[1]={flags=0,keywordFlags=65536,name="PoisonChance",type="BASE",value=30}},nil} c["30% chance to inflict Bleeding on Hit"]={{[1]={flags=0,keywordFlags=0,name="BleedChance",type="BASE",value=30}},nil} -c["30% chance to not consume a bolt if you've Reloaded Recently"]={{}," to not consume a bolt if you've Reloaded Recently "} -c["30% chance when you Reload a Crossbow to be immediate"]={{}," when you Reload a to be immediate "} +c["30% chance to not consume a bolt if you've Reloaded Recently"]={{[1]={[1]={type="Condition",var="ReloadedRecently"},flags=0,keywordFlags=0,name="ChanceToNotConsumeAmmo",type="BASE",value=30}},nil} +c["30% chance when you Reload a Crossbow to be immediate"]={{[1]={flags=0,keywordFlags=0,name="InstantReloadChance",type="BASE",value=30}},nil} c["30% faster start of Energy Shield Recharge"]={{[1]={flags=0,keywordFlags=0,name="EnergyShieldRechargeFaster",type="INC",value=30}},nil} c["30% faster start of Energy Shield Recharge when not on Full Life"]={{[1]={[1]={neg=true,type="Condition",var="FullLife"},flags=0,keywordFlags=0,name="EnergyShieldRechargeFaster",type="INC",value=30}},nil} c["30% increased Accuracy Rating"]={{[1]={flags=0,keywordFlags=0,name="Accuracy",type="INC",value=30}},nil} @@ -4627,7 +4627,7 @@ c["Gain 35% Base Chance to Block from Equipped Shield instead of the Shield's va c["Gain 35% of Damage as Extra Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="DamageGainAsChaos",type="BASE",value=35}},nil} c["Gain 4% of Damage as Extra Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="DamageGainAsChaos",type="BASE",value=4}},nil} c["Gain 4% of Damage as Extra Fire Damage for"]={{[1]={flags=0,keywordFlags=0,name="DamageGainAsFire",type="BASE",value=4}}," for "} -c["Gain 4% of Damage as Extra Fire Damage for every different Grenade fired in the past 8 seconds"]={{[1]={[1]={skillType=158,type="SkillType"},flags=0,keywordFlags=0,name="DamageGainAsFire",type="BASE",value=4}}," for every different fired in the past 8 seconds "} +c["Gain 4% of Damage as Extra Fire Damage for every different Grenade fired in the past 8 seconds"]={{[1]={[1]={limitVar="GrenadeTypes",type="Multiplier",var="DifferentGrenadeFired"},flags=0,keywordFlags=0,name="DamageGainAsFire",type="BASE",value=4}},nil} c["Gain 40 Life per Enemy Killed"]={{[1]={flags=0,keywordFlags=0,name="LifeOnKill",type="BASE",value=40}},nil} c["Gain 40% of Damage as Extra Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="DamageGainAsChaos",type="BASE",value=40}},nil} c["Gain 5 Life per Enemy Hit with Attacks"]={{[1]={flags=4,keywordFlags=65536,name="LifeOnHit",type="BASE",value=5}},nil} @@ -5716,7 +5716,6 @@ c["Your speed is unaffected by Slows"]={{[1]={flags=0,keywordFlags=0,name="Unaff c["additional Elemental Infusion of the same type"]={nil,"additional Elemental Infusion of the same type "} c["apply to Energy Shield Recharge Rate"]={nil,"apply to Energy Shield Recharge Rate "} c["apply to Energy Shield Recharge Rate Gain 50% of Maximum Mana as Armour"]={nil,"apply to Energy Shield Recharge Rate Gain 50% of Maximum Mana as Armour "} -c["every different Grenade fired in the past 8 seconds"]={nil,"every different Grenade fired in the past 8 seconds "} c["for 4 seconds, every 0.25 seconds while raised"]={nil,"for 4 seconds, every 0.25 seconds while raised "} c["gain 6 Cold Surges or 6 Fire Surges"]={{}," Cold Surges or 6 Fire Surges "} c["the enemy's Power for 6 seconds, up to a total of 500"]={nil,"the enemy's Power for 6 seconds, up to a total of 500 "} diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 7897b8bc06..59ef5fa8ca 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -2659,6 +2659,7 @@ function calcs.offence(env, actor, activeSkill) output.BoltCount = skillData.boltCount output.EffectiveBoltCount = output.BoltCount output.ChanceToNotConsumeAmmo = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "ChanceToNotConsumeAmmo") + output.ChanceToReloadInstantly = m_min(activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "InstantReloadChance"), 100) if output.ChanceToNotConsumeAmmo > 0 then if output.ChanceToNotConsumeAmmo < 100 then output.EffectiveBoltCount = output.BoltCount / (1 - (output.ChanceToNotConsumeAmmo / 100)) @@ -2669,11 +2670,12 @@ function calcs.offence(env, actor, activeSkill) output.TotalFiringTime = 1 / output.FiringRate * ((output.ChanceToNotConsumeAmmo >= 100) and 0 or output.EffectiveBoltCount) output.ReloadRate = 1 / skillData.reloadTime output.ReloadTime = skillData.reloadTime - output.Speed = (output.ChanceToNotConsumeAmmo >= 100) and output.FiringRate or (1 / ((output.TotalFiringTime + output.ReloadTime) / (output.EffectiveBoltCount))) + output.EffectiveReloadTime = output.ReloadTime * (1 - output.ChanceToReloadInstantly / 100) + output.Speed = (output.ChanceToNotConsumeAmmo >= 100) and output.FiringRate or (1 / ((output.TotalFiringTime + output.EffectiveReloadTime) / (output.EffectiveBoltCount))) -- Average bolts reloaded past six second for purposes of calculating Fresh Clip support damage bonus - local boltsReloadedPastSixSeconds = skillModList:Override({ source = "Config"}, "Multiplier:BoltsReloadedPastSixSeconds") or (output.ChanceToNotConsumeAmmo > 100) and 0 or (output.BoltCount * 6 / (output.TotalFiringTime + output.ReloadTime)) -- assume 0 bolts reloaded when none are consumed - local boltsReloadedPastEightSeconds = skillModList:Override({ source = "Config"}, "Multiplier:BoltsReloadedPastEightSeconds") or (output.ChanceToNotConsumeAmmo > 100) and 0 or (output.BoltCount * 8 / (output.TotalFiringTime + output.ReloadTime)) -- assume 0 bolts reloaded when none are consumed + local boltsReloadedPastSixSeconds = skillModList:Override({ source = "Config"}, "Multiplier:BoltsReloadedPastSixSeconds") or (output.ChanceToNotConsumeAmmo > 100) and 0 or (output.BoltCount * 6 / (output.TotalFiringTime + output.EffectiveReloadTime)) -- assume 0 bolts reloaded when none are consumed + local boltsReloadedPastEightSeconds = skillModList:Override({ source = "Config"}, "Multiplier:BoltsReloadedPastEightSeconds") or (output.ChanceToNotConsumeAmmo > 100) and 0 or (output.BoltCount * 8 / (output.TotalFiringTime + output.EffectiveReloadTime)) -- assume 0 bolts reloaded when none are consumed if boltsReloadedPastSixSeconds > 0 then skillModList:ReplaceMod("Multiplier:BoltsReloadedPastSixSeconds", "BASE", boltsReloadedPastSixSeconds, activeSkill.activeEffect.grantedEffect.name) end @@ -2733,10 +2735,10 @@ function calcs.offence(env, actor, activeSkill) breakdown.Speed = { } t_insert(breakdown.Speed, s_format(" %.2fs ^8(total firing time)", output.TotalFiringTime)) - t_insert(breakdown.Speed, s_format("+ %.2fs ^8(reload time)", output.ReloadTime)) - t_insert(breakdown.Speed, s_format("= %.2fs ^8(total attack time)", output.TotalFiringTime + output.ReloadTime)) + t_insert(breakdown.Speed, s_format("+ %.2fs ^8(eff. reload time)", output.EffectiveReloadTime)) + t_insert(breakdown.Speed, s_format("= %.2fs ^8(total attack time)", output.TotalFiringTime + output.EffectiveReloadTime)) t_insert(breakdown.Speed, s_format("\n")) - t_insert(breakdown.Speed, s_format(" %.2fs ^8(total attack time)", output.TotalFiringTime + output.ReloadTime)) + t_insert(breakdown.Speed, s_format(" %.2fs ^8(total attack time)", output.TotalFiringTime + output.EffectiveReloadTime)) t_insert(breakdown.Speed, s_format("/ %.2f ^8(eff. bolt count)", output.EffectiveBoltCount)) t_insert(breakdown.Speed, s_format("= %.2fs ^8(eff. attack time)", 1 / output.Speed)) t_insert(breakdown.Speed, s_format("\n")) @@ -4101,11 +4103,13 @@ function calcs.offence(env, actor, activeSkill) -- Combine stats related to reload and bolt functionality combineStat("FiringRate", "AVERAGE") combineStat("ReloadTime", "AVERAGE") + combineStat("EffectiveReloadTime", "AVERAGE") combineStat("ReloadRate", "AVERAGE") combineStat("BoltCount", "AVERAGE") combineStat("EffectiveBoltCount", "AVERAGE") combineStat("TotalFiringTime", "AVERAGE") combineStat("ChanceToNotConsumeAmmo", "AVERAGE") + combineStat("ChanceToReloadInstantly", "AVERAGE") -- Add stats related to "Chance to not consume a bolt" to breakdown if breakdown then @@ -4116,6 +4120,13 @@ function calcs.offence(env, actor, activeSkill) t_insert(breakdown.EffectiveBoltCount, s_format("\n")) t_insert(breakdown.EffectiveBoltCount, s_format("= %.2f ^8(effective bolt count)", output.EffectiveBoltCount or (1/0))) -- 1/0 is used as a stand-in for "infinite" end + if output.ChanceToReloadInstantly then + breakdown.EffectiveReloadTime = { } + t_insert(breakdown.EffectiveReloadTime, s_format("%.2f ^8(reload time)", output.ReloadTime)) + t_insert(breakdown.EffectiveReloadTime, s_format("* (1 - %.2f) ^8(chance to reload instantly)", m_min(output.ChanceToReloadInstantly / 100, 1))) + t_insert(breakdown.EffectiveReloadTime, s_format("\n")) + t_insert(breakdown.EffectiveReloadTime, s_format("= %.2f ^8(effective reload time)", output.EffectiveReloadTime)) + end end -- Game data specifies "base skill show average damage instead of dps" for many crossbow skills, where that doesn't make sense for PoB (e.g. Explosive Shot) @@ -5388,8 +5399,8 @@ function calcs.offence(env, actor, activeSkill) elseif skillModList:Flag(nil, "HasSeals") and skillModList:Flag(nil, "UseMaxUnleash") then useSpeed = env.player.mainSkill.skillData.hitTimeOverride / repeats timeType = "full unleash" - elseif output.ReloadTime then -- Crossbows: Account for mana cost only happening on reload (once all bolts are fired) - useSpeed = (not output.EffectiveBoltCount) and 0 or (1 / (output.TotalFiringTime + output.ReloadTime)) + elseif output.EffectiveReloadTime then -- Crossbows: Account for mana cost only happening on reload (once all bolts are fired) + useSpeed = (not output.EffectiveBoltCount) and 0 or (1 / (output.TotalFiringTime + output.EffectiveReloadTime)) timeType = "effective reload" else useSpeed = (output.Cooldown and output.Cooldown > 0 and (output.Speed > 0 and output.Speed or 1 / output.Cooldown) or output.Speed) / repeats diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index b71fd7f0e5..d93a1e3c5f 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -1011,8 +1011,8 @@ function calcs.perform(env, skipEHP) output.WarcryPower = modDB:Override(nil, "WarcryPower") or modDB:Sum("BASE", nil, "WarcryPower") or 0 modDB.multipliers["WarcryPower"] = output.WarcryPower - local minionTypeCount = 0 - local minionType = { } + local minionTypeCount, ammoTypeCount, grenadeTypeCount = 0, 0, 0 + local minionType, ammoType, grenadeType = { }, { }, { } for _, activeSkill in ipairs(env.player.activeSkillList) do local skillFlags if env.mode == "CALCS" then @@ -1087,6 +1087,16 @@ function calcs.perform(env, skipEHP) minionType[activeSkill.activeEffect.grantedEffect.id] = true end env.modDB.multipliers["PersistentMinionTypes"] = minionTypeCount + if activeSkill.skillTypes[SkillType.CrossbowAmmoSkill] and not ammoType[activeSkill.activeEffect.grantedEffect.id] then + ammoTypeCount = ammoTypeCount + 1 + ammoType[activeSkill.activeEffect.grantedEffect.id] = true + end + env.modDB.multipliers["AmmoTypes"] = ammoTypeCount + if activeSkill.skillTypes[SkillType.Grenade] and not grenadeType[activeSkill.activeEffect.grantedEffect.id] then + grenadeTypeCount = grenadeTypeCount + 1 + grenadeType[activeSkill.activeEffect.grantedEffect.id] = true + end + env.modDB.multipliers["GrenadeTypes"] = grenadeTypeCount if activeSkill.activeEffect.grantedEffect and activeSkill.skillTypes[SkillType.CreatesCompanion] then modDB:NewMod("Condition:HaveCompanion", "FLAG", true, activeSkill.activeEffect.grantedEffect.name) end diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 4a289aec71..41ed079f07 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -499,6 +499,7 @@ return { { label = "Inc. Reload Speed", haveOutput = "ReloadTime", notFlag = "triggered", { format = "{0:mod:1}%", { modName = "ReloadSpeed", modType = "INC", cfg = "skill"}, }, }, { label = "More Reload Speed", haveOutput = "ReloadTime", notFlag = "triggered", { format = "{0:mod:1}%", { modName = "ReloadSpeed", modType = "MORE", cfg = "skill"}, }, }, { label = "Reload Time", haveOutput = "ReloadTime", notFlag = "triggered", { format = "{2:output:ReloadTime}s", { breakdown = "ReloadTime" }, }, }, + { label = "Eff. Reload Time", haveOutput = "ChanceToReloadInstantly", { format = "{2:output:EffectiveReloadTime}", { breakdown = "EffectiveReloadTime" }, }, }, { label = "Attacks per second", flag = "bothWeaponAttack", notFlag = "triggered", { format = "{2:output:Speed}", { breakdown = "Speed" }, }, }, { label = "Attack time", flag = "attack", notFlag = "triggered", { format = "{2:output:Time}s", { breakdown = "MainHand.Time" }, }, }, { label = "Inc. Cast Speed", flag = "spell", notFlag = "triggered", { format = "{0:mod:1}%", { modName = "Speed", modType = "INC", cfg = "skill", }, }, }, diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 7d2955c3ca..8fc83d2dad 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -1456,6 +1456,9 @@ Huge sets the radius to 11. { var = "conditionTauntedEnemyRecently", type = "check", label = "Taunted an enemy Recently?", ifCond = "TauntedEnemyRecently", apply = function(val, modList, enemyModList) modList:NewMod("Condition:TauntedEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, + { var = "conditionReloadedlRecently", type = "check", label = "Have you Reloaded Recently?", ifSkillType = SkillType.CrossbowAmmoSkill, apply = function(val, modList, enemyModList) + modList:NewMod("Condition:ReloadedRecently", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) + end }, { var = "conditionLostEnduranceChargeInPast8Sec", type = "check", label = "Lost an Endurance Charge in the past 8s?", ifCond = "LostEnduranceChargeInPast8Sec", apply = function(val, modList, enemyModList) modList:NewMod("Condition:LostEnduranceChargeInPast8Sec", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, @@ -1531,6 +1534,9 @@ Huge sets the radius to 11. end }, -- Section: Effective DPS options { section = "For Effective DPS", col = 1 }, + { var = "enemyDistance", type = "count", label = "Distance to enemy:", tooltip = "10 units equals 1 metre\nPlayer and Minion Attacks incur an Accuracy penalty based on distance from the origin of the damage to the target,\nwith no penalty for targets within 2 metres and up to 90% less Accuracy for targets further than 12 metres away-", defaultPlaceholderState = 20, apply = function(val, modList, enemyModList) + modList:NewMod("Multiplier:enemyDistance", "BASE", val, "Config", { type = "Condition", var = "Effective" }) + end }, { var = "skillForkCount", type = "count", label = "# of times Skill has Forked:", ifFlag = "forking", apply = function(val, modList, enemyModList) modList:NewMod("ForkedCount", "BASE", val, "Config", { type = "Condition", var = "Effective" }) end }, @@ -1540,18 +1546,21 @@ Huge sets the radius to 11. { var = "skillPierceCount", type = "count", label = "# of times Skill has Pierced:", ifStat = "PiercedCount", ifFlag = "piercing", apply = function(val, modList, enemyModList) modList:NewMod("PiercedCount", "BASE", val, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "enemyDistance", type = "count", label = "Distance to enemy:", tooltip = "10 units equals 1 metre\nPlayer and Minion Attacks incur an Accuracy penalty based on distance from the origin of the damage to the target,\nwith no penalty for targets within 2 metres and up to 90% less Accuracy for targets further than 12 metres away-", defaultPlaceholderState = 20, apply = function(val, modList, enemyModList) - modList:NewMod("Multiplier:enemyDistance", "BASE", val, "Config", { type = "Condition", var = "Effective" }) - end }, - { var = "conditionAtCloseRange", type = "check", label = "Is the enemy at Close Range?", ifCond = "AtCloseRange", apply = function(val, modList, enemyModList) - modList:NewMod("Condition:AtCloseRange", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) - end }, { var = "multiplierBoltsReloadedPer6Seconds", type = "countAllowZero", label = "# bolts reloaded past 6 seconds", tooltip = "Override number of bolts reloaded in the past 6 seconds.\nUsed to calculate damage bonus from Fresh Clip I support.\nAssumes calculated average if no value is specified.", ifSkill = "Fresh Clip I", apply = function(val, modList, enemyModList) modList:NewMod("Multiplier:BoltsReloadedPastSixSeconds", "OVERRIDE", val, "Config", { type = "Condition", var = "Effective" }) end }, { var = "multiplierBoltsReloadedPer8Seconds", type = "countAllowZero", label = "# bolts reloaded past 8 seconds", tooltip = "Override number of bolts reloaded in the past 8 seconds.\nUsed to calculate damage bonus from Fresh Clip II support.\nAssumes calculated average if no value is specified.", ifSkill = "Fresh Clip II", apply = function(val, modList, enemyModList) modList:NewMod("Multiplier:BoltsReloadedPastEightSeconds", "OVERRIDE", val, "Config", { type = "Condition", var = "Effective" }) end }, + { var = "multiplierDifferentAmmoFired", type = "count", label = "# different Ammo Types Shot past 10s", tooltip = "Number of different Ammunition types used in tha past 10s", ifMult = "DifferentAmmoFired", defaultPlaceholderState = 1, apply = function(val, modList, enemyModList) + modList:NewMod("Multiplier:DifferentAmmoFired", "BASE", val, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "multiplierDifferentGrenadeFired", type = "count", label = "# different Grenade Types Shot past 10s", tooltip = "Number of different Grenade types used in tha past 10s", ifMult = "DifferentGrenadeFired", defaultPlaceholderState = 1, apply = function(val, modList, enemyModList) + modList:NewMod("Multiplier:DifferentGrenadeFired", "BASE", val, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionAtCloseRange", type = "check", label = "Is the enemy at Close Range?", ifCond = "AtCloseRange", apply = function(val, modList, enemyModList) + modList:NewMod("Condition:AtCloseRange", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) + end }, { var = "enemyMultiplierEnemyPresenceSeconds", type = "count", label = "Enemy in Your Presence Duration", tooltip = "Number of seconds the enemy has been in your presence.", ifEnemyMult = "EnemyPresenceSeconds", apply = function(val, modList, enemyModList) enemyModList:NewMod("Multiplier:EnemyPresenceSeconds", "BASE", val, "Config", { type = "Condition", var = "Effective" }) end }, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index fe286ddc5c..50ad6322c6 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -850,6 +850,8 @@ local modNameList = { ["to chain an additional time from terrain"] = "TerrainChainChance", ["to apply lightning exposure on hit"] = "LightningExposureChance", ["to pierce an enemy"] = "PierceChance", + ["when you reload a crossbow to be immediate"] = "InstantReloadChance", + ["to not consume a bolt"] = "ChanceToNotConsumeAmmo", -- Flask and Charm modifiers ["effect"] = "LocalEffect", ["effect of flasks"] = "FlaskEffect", @@ -989,6 +991,7 @@ local modFlagList = { ["with weapons"] = { flags = ModFlag.Weapon }, ["melee"] = { flags = ModFlag.Melee }, ["crossbow"] = { flags = ModFlag.Crossbow }, + ["for crossbow attacks"] = { flags = ModFlag.Crossbow, tag = { type = "SkillType", skillType = SkillType.CrossbowSkill } }, ["with melee attacks"] = { flags = ModFlag.Melee }, ["with melee critical hits"] = { flags = ModFlag.Melee, tag = { type = "Condition", var = "CriticalStrike" } }, ["with melee skills"] = { tag = { type = "SkillType", skillType = SkillType.Melee } }, @@ -1449,6 +1452,8 @@ local modTagList = { ["per (%d+) rampage kills"] = function(num) return { tag = { type = "Multiplier", var = "Rampage", div = num, limit = 1000 / num, limitTotal = true } } end, ["per minion, up to (%d+)%%"] = function(num) return { tag = { type = "Multiplier", var = "SummonedMinion", limit = tonumber(num), limitTotal = true } } end, ["for each different type of persistent minion in your presence"] = { tag = { type = "Multiplier", var = "PersistentMinionTypes" } }, + ["for each type of ammunition fired in the past (%d+) seconds"] = { tag = { type = "Multiplier", var = "DifferentAmmoFired", limitVar = "AmmoTypes" } }, + ["for every different grenade fired in the past (%d+) seconds"] = { tag = { type = "Multiplier", var = "DifferentGrenadeFired", limitVar = "GrenadeTypes" } }, ["for each enemy you or your minions have killed recently, up to (%d+)%%"] = function(num) return { tag = { type = "Multiplier", varList = { "EnemyKilledRecently","EnemyKilledByMinionsRecently" }, limit = tonumber(num), limitTotal = true } } end, ["for each enemy you or your minions have killed recently, up to (%d+)%% per second"] = function(num) return { tag = { type = "Multiplier", varList = { "EnemyKilledRecently","EnemyKilledByMinionsRecently" }, limit = tonumber(num), limitTotal = true } } end, ["for each (%d+) total mana y?o?u? ?h?a?v?e? ?spent recently"] = function(num) return { tag = { type = "Multiplier", var = "ManaSpentRecently", div = num } } end, @@ -1859,6 +1864,7 @@ local modTagList = { ["if you[' ]h?a?ve taunted an enemy recently"] = { tag = { type = "Condition", var = "TauntedEnemyRecently" } }, ["if you[' ]h?a?ve used a skill recently"] = { tag = { type = "Condition", var = "UsedSkillRecently" } }, ["if you[' ]h?a?ve used a travel skill recently"] = { tag = { type = "Condition", var = "UsedTravelSkillRecently" } }, + ["if you[' ]h?a?ve reloaded recently"] = { tag = { type = "Condition", var = "ReloadedRecently" } }, ["on skill use"] = { }, ["for each skill you've used recently, up to (%d+)%%"] = function(num) return { tag = { type = "Multiplier", var = "SkillUsedRecently", limit = num, limitTotal = true } } end, ["for each different non%-instant spell you[' ]h?a?ve cast recently"] = { tag = { type = "Multiplier", var = "NonInstantSpellCastRecently" } }, From cdeacb9fbe8e16ccdebc1730ee0da5b0ea39609f Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:14:46 +1000 Subject: [PATCH 03/13] Skill costs 12% increased Spell Damage with Spells that cost Life 30% increased Mana Cost Efficiency of Attacks during any Mana Flask Effect 50% of Skill Mana costs Converted to Life Costs during any Life Flask Effect 60% increased Mana Cost Efficiency of Marks --- src/Data/ModCache.lua | 12 +++++------- src/Modules/ModParser.lua | 15 ++++++++------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index a8bd618ddd..19cb6b4fff 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1315,7 +1315,7 @@ c["12% increased Spell Damage if you have consumed an Elemental Infusion Recentl c["12% increased Spell Damage per 10 Spirit"]={{[1]={[1]={div=10,stat="Spirit",type="PerStat"},flags=2,keywordFlags=0,name="Damage",type="INC",value=12}},nil} c["12% increased Spell Damage while on Full Energy Shield"]={{[1]={[1]={type="Condition",var="FullEnergyShield"},flags=2,keywordFlags=0,name="Damage",type="INC",value=12}},nil} c["12% increased Spell Damage while wielding a Melee Weapon"]={{[1]={[1]={type="Condition",var="UsingMeleeWeapon"},flags=2,keywordFlags=0,name="Damage",type="INC",value=12}},nil} -c["12% increased Spell Damage with Spells that cost Life"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=12}}," with Spells that cost Life "} +c["12% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={stat="LifeCost",threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=12}},nil} c["12% increased Stun Buildup"]={{}," Stun Buildup "} c["12% increased Stun Buildup 10% increased Damage with Maces"]={{[1]={flags=1048580,keywordFlags=0,name="Damage",type="INC",value=12}}," Stun Buildup 10% increased "} c["12% increased Stun Buildup Gain additional Stun Threshold equal to 10% of maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=12}}," Stun Buildup Gain additional equal to 10% of maximum Energy Shield "} @@ -2273,7 +2273,7 @@ c["30% increased Magnitude of Non-Damaging Ailments you inflict with Critical Hi c["30% increased Magnitude of Poison you inflict"]={{[1]={flags=0,keywordFlags=2097152,name="AilmentMagnitude",type="INC",value=30}},nil} c["30% increased Magnitude of Shock you inflict"]={{[1]={flags=0,keywordFlags=0,name="EnemyShockMagnitude",type="INC",value=30}},nil} c["30% increased Mana Cost Efficiency"]={{[1]={flags=0,keywordFlags=0,name="ManaCostEfficiency",type="INC",value=30}},nil} -c["30% increased Mana Cost Efficiency of Attacks during any Mana Flask Effect"]={{[1]={flags=0,keywordFlags=0,name="ManaCostEfficiency",type="INC",value=30}}," of Attacks during any Mana Flask Effect "} +c["30% increased Mana Cost Efficiency of Attacks during any Mana Flask Effect"]={{[1]={[1]={skillType=1,type="SkillType"},[2]={type="Condition",var="UsingManaFlask"},flags=0,keywordFlags=0,name="ManaCostEfficiency",type="INC",value=30}},nil} c["30% increased Mana Recovery from Flasks"]={{[1]={flags=0,keywordFlags=0,name="FlaskManaRecovery",type="INC",value=30}},nil} c["30% increased Mana Regeneration Rate"]={{[1]={flags=0,keywordFlags=0,name="ManaRegen",type="INC",value=30}},nil} c["30% increased Mana Regeneration Rate while moving"]={{[1]={[1]={type="Condition",var="Moving"},flags=0,keywordFlags=0,name="ManaRegen",type="INC",value=30}},nil} @@ -2792,7 +2792,7 @@ c["50% of Elemental Damage taken as Chaos Damage"]={{[1]={flags=0,keywordFlags=0 c["50% of Evasion Rating also grants Elemental Damage reduction"]={{[1]={flags=0,keywordFlags=0,name="EvasionAppliesToFireDamageTaken",type="BASE",value=50},[2]={flags=0,keywordFlags=0,name="EvasionAppliesToColdDamageTaken",type="BASE",value=50},[3]={flags=0,keywordFlags=0,name="EvasionAppliesToLightningDamageTaken",type="BASE",value=50}},nil} c["50% of Maximum Life Converted to Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="LifeConvertToEnergyShield",type="BASE",value=50}},nil} c["50% of Physical Damage prevented Recouped as Life"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="BASE",value=50}}," prevented Recouped as Life "} -c["50% of Skill Mana costs Converted to Life Costs during any Life Flask Effect"]={{[1]={flags=0,keywordFlags=0,name="ManaCost",type="BASE",value=50}}," Skill s Converted to Life Costs during any Life Flask Effect "} +c["50% of Skill Mana costs Converted to Life Costs during any Life Flask Effect"]={{[1]={[1]={type="Condition",var="UsingLifeFlask"},flags=0,keywordFlags=0,name="HybridManaAndLifeCost_Life",type="BASE",value=50}},nil} c["50% of charges used by Charms granted to your Life Flasks"]={{[1]={[3]={type="Multiplier",var="AvgCharmChargesUsed"},flags=0,keywordFlags=0,name="FlaskChargesGained",type="MORE",value=0.5}},nil} c["50% of your Base Life Regeneration is granted to Allies in your Presence"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="LifeRegen",type="BASE",value=50},onlyAllies=true}}}," your Base is granted to "} c["50% of your Base Life Regeneration is granted to Allies in your Presence +10 to all Attributes"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="LifeRegen",type="BASE",value=50},onlyAllies=true}}}," your Base is granted to +10 to all Attributes "} @@ -2861,8 +2861,7 @@ c["6% increased Reservation Efficiency of Herald Skills"]={{[1]={[1]={skillType= c["6% increased Reservation Efficiency of Minion Skills"]={{[1]={[1]={skillType=6,type="SkillType"},flags=0,keywordFlags=0,name="ReservationEfficiency",type="INC",value=6}},nil} c["6% increased Skill Speed"]={{[1]={flags=0,keywordFlags=0,name="Speed",type="INC",value=6},[2]={flags=0,keywordFlags=0,name="WarcrySpeed",type="INC",value=6}},nil} c["6% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=6}},nil} -c["6% increased Spell Damage with Spells that cost Life"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=6}}," with Spells that cost Life "} -c["6% increased Spell Damage with Spells that cost Life 8% of Spell Mana Cost Converted to Life Cost"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=6}}," with Spells that cost Life 8% of Spell Mana Cost Converted to Life Cost "} +c["6% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={stat="LifeCost",threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=6}},nil} c["6% increased Spirit"]={{[1]={flags=0,keywordFlags=0,name="Spirit",type="INC",value=6}},nil} c["6% increased Spirit Reservation Efficiency of Skills"]={{[1]={flags=0,keywordFlags=0,name="SpiritReservationEfficiency",type="INC",value=6}},nil} c["6% increased Strength"]={{[1]={flags=0,keywordFlags=0,name="Str",type="INC",value=6}},nil} @@ -2903,8 +2902,7 @@ c["60% increased Freeze Threshold"]={{[1]={flags=0,keywordFlags=0,name="FreezeTh c["60% increased Ice Crystal Life"]={{[1]={flags=0,keywordFlags=0,name="IceCrystalLife",type="INC",value=60}},nil} c["60% increased Magnitude of Abyssal Wasting you inflict"]={{}," Magnitude of Abyssal Wasting you inflict "} c["60% increased Magnitude of Abyssal Wasting you inflict Abyssal Wasting you inflict has Infinite Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=60}}," Magnitude of Abyssal Wasting you inflict Abyssal Wasting you inflict has Infinite "} -c["60% increased Mana Cost Efficiency of Marks"]={{[1]={flags=0,keywordFlags=0,name="ManaCostEfficiency",type="INC",value=60}}," of Marks "} -c["60% increased Mana Cost Efficiency of Marks 4% increased Movement Speed if you've used a Mark Recently"]={{[1]={flags=0,keywordFlags=0,name="ManaCostEfficiency",type="INC",value=60}}," of Marks 4% increased Movement Speed if you've used a Mark Recently "} +c["60% increased Mana Cost Efficiency of Marks"]={{[1]={[1]={skillType=98,type="SkillType"},flags=0,keywordFlags=0,name="ManaCostEfficiency",type="INC",value=60}},nil} c["60% increased Mana Regeneration Rate while Surrounded"]={{[1]={[1]={type="Condition",var="Surrounded"},flags=0,keywordFlags=0,name="ManaRegen",type="INC",value=60}},nil} c["60% increased Melee Damage if you've dealt a Projectile Attack Hit in the past eight seconds"]={{[1]={[1]={type="Condition",var="HitProjectileRecently"},flags=256,keywordFlags=0,name="Damage",type="INC",value=60}},nil} c["60% increased Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=60}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 50ad6322c6..b27af8e3ad 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -189,6 +189,7 @@ local modNameList = { ["cost efficiency of skills"] = "CostEfficiency", ["mana cost efficiency"] = "ManaCostEfficiency", ["mana cost efficiency of skills"] = "ManaCostEfficiency", + ["mana cost efficiency of attacks"] = { "ManaCostEfficiency", tag = { type = "SkillType", skillType = SkillType.Attack } }, ["life cost efficiency"] = "LifeCostEfficiency", ["life cost efficiency of skills"] = "LifeCostEfficiency", ["spirit cost efficiency"] = "SpiritCostEfficiency", @@ -201,6 +202,8 @@ local modNameList = { ["soul cost efficiency of skills"] = "SoulCostEfficiency", ["rage cost efficiency"] = "RageCostEfficiency", ["rage cost efficiency of skills"] = "RageCostEfficiency", + ["skill mana costs converted to life costs"] = "HybridManaAndLifeCost_Life", + ["spell mana cost converted to life cost"] = { "HybridManaAndLifeCost_Life", tag = { type = "SkillType", skillType = SkillType.Spell } }, ["mana reserved"] = "ManaReserved", ["mana reservation"] = "ManaReserved", ["mana reservation of skills"] = { "ManaReserved", tag = { type = "SkillType", skillType = SkillType.Aura } }, @@ -1075,9 +1078,9 @@ local modFlagList = { ["for stance skills"] = { tag = { type = "SkillType", skillType = SkillType.Stance } }, ["of stance skills"] = { tag = { type = "SkillType", skillType = SkillType.Stance } }, ["mark skills"] = { tag = { type = "SkillType", skillType = SkillType.Mark } }, + ["of marks"] = { tag = { type = "SkillType", skillType = SkillType.Mark } }, ["of mark skills"] = { tag = { type = "SkillType", skillType = SkillType.Mark } }, ["of your mark skills"] = { tag = { type = "SkillType", skillType = SkillType.Mark } }, - ["with skills that cost life"] = { tag = { type = "StatThreshold", stat = "LifeCost", threshold = 1 } }, ["with command skills"] = { tag = { type = "Condition", var = "CommandableSkill" } }, ["for command skills"] = { tag = { type = "Condition", var = "CommandableSkill" } }, ["minion"] = { addToMinion = true }, @@ -1586,6 +1589,8 @@ local modTagList = { ["while affected by a normal abyss jewel"] = { tag = { type = "MultiplierThreshold", var = "NormalAbyssJewels", threshold = 1 } }, ["while an enemy with an open weakness is in your presence"] = { tag = { type = "Condition", var = "OpenWeaknessEnemyPresence" } }, -- This one means there's an enemy that has open weakness "nearby" ["against enemies with an open weakness"] = { tag = { type = "Condition", var = "EnemyHasOpenWeakness" } }, -- This one means the enemy you're targeting has open weakness + ["with skills that cost life"] = { tag = { type = "StatThreshold", stat = "LifeCost", threshold = 1 } }, + ["with spells that cost life"] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", stat = "LifeCost", threshold = 1 } }, -- Gem conditions ["if you have at least (%d+) (%a+) support gems socketed"] = function(count, _, color) return { tag = { type = "MultiplierThreshold", var = firstToUpper(color) .. "SupportGems", threshold = count } } end, ["if you have at least (%d+) red, green and blue support gems socketed"] = function(count) @@ -1748,7 +1753,9 @@ local modTagList = { ["during any flask effect"] = { tag = { type = "Condition", var = "UsingFlask" } }, ["while under no flask effects"] = { tag = { type = "Condition", var = "UsingFlask", neg = true } }, ["during effect of any mana flask"] = { tag = { type = "Condition", var = "UsingManaFlask" } }, + ["during any mana flask effect"] = { tag = { type = "Condition", var = "UsingManaFlask" } }, ["during effect of any life flask"] = { tag = { type = "Condition", var = "UsingLifeFlask" } }, + ["during any life flask effect"] = { tag = { type = "Condition", var = "UsingLifeFlask" } }, ["if you've used a life flask in the past 10 seconds"] = { tag = { type = "Condition", var = "UsingLifeFlask" } }, ["if you've used a mana flask in the past 10 seconds"] = { tag = { type = "Condition", var = "UsingManaFlask" } }, ["while you have no life flask uses left"] = { tag = { type = "Condition", var = "NoLifeFlaskUsesLeft" } }, @@ -5519,14 +5526,8 @@ local specialModList = { } end, ["skills cost life instead of (%d+)%% of mana cost"] = function(num) return { mod("HybridManaAndLifeCost_Life", "BASE", num), - } end, - ["(%d+)%% of skill mana costs converted to life costs"] = function(num) return { - mod("HybridManaAndLifeCost_Life", "BASE", num), } end, ["skill mana costs converted to life costs"] = { mod("HybridManaAndLifeCost_Life", "BASE", 100) }, - ["(%d+)%% of spell mana cost converted to life cost"] = function(num) return { - mod("HybridManaAndLifeCost_Life", "BASE", num,{ type = "SkillType", skillType = SkillType.Spell }), - } end, ["attack skills cost life instead of (%d+)%% of mana cost"] = function(num) return { mod("HybridManaAndLifeCost_Life", "BASE", num, nil, ModFlag.Attack) } end, From 5b994254fd7bbccdffffb80bb9d9fd34328bb367 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:16:17 +1000 Subject: [PATCH 04/13] Chain 20% chance for Lightning Skills to Chain an additional time 25% chance to Chain an additional time --- src/Data/ModCache.lua | 9 ++++----- src/Modules/CalcOffence.lua | 2 +- src/Modules/CalcSections.lua | 2 +- src/Modules/ModParser.lua | 2 ++ 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 19cb6b4fff..c00f41a30e 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1655,7 +1655,7 @@ c["20% chance for Damage of Enemies Hitting you to be Unlucky 20% chance for Dam c["20% chance for Damage with Hits to be Lucky"]={{[1]={flags=0,keywordFlags=0,name="LuckyHitsChance",type="BASE",value=20}},nil} c["20% chance for Energy Shield Recharge to start when you Kill an Enemy"]={{[1]={[1]={type="Condition",var="KilledRecently"},flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=20}}," for Recharge to start "} c["20% chance for Flasks you use to not consume Charges"]={{[1]={flags=0,keywordFlags=0,name="FlaskChanceNotConsumeCharges",type="BASE",value=20}},nil} -c["20% chance for Lightning Skills to Chain an additional time"]={{}," for Lightning Skills to Chain an additional time "} +c["20% chance for Lightning Skills to Chain an additional time"]={{[1]={flags=0,keywordFlags=128,name="ChainChance",type="BASE",value=20}},nil} c["20% chance to Aggravate Bleeding on targets you Critically Hit with Attacks"]={{}," to Aggravate Bleeding on targets you Critically Hit "} c["20% chance to Aggravate Bleeding on targets you Hit with Empowered Attacks"]={{}," to Aggravate Bleeding on targets you Hit "} c["20% chance to Aggravate Bleeding on targets you Hit with Empowered Attacks Empowered Attacks deal 30% increased Damage"]={{[1]={[1]={type="Condition",var="Empowered"},flags=0,keywordFlags=0,name="Damage",type="BASE",value=20}}," to Aggravate Bleeding on targets you Hit Empowered Attacks deal 30% increased "} @@ -1939,6 +1939,7 @@ c["25% chance on Shocking Enemies to created Shocked Ground"]={{[1]={[1]={actor= c["25% chance that when Volatility on you explodes, you regain an equivalent amount of Volatility"]={{}," that when Volatility on you explodes, you regain an equivalent amount of Volatility "} c["25% chance to Avoid Chaos Damage from Hits"]={{[1]={flags=0,keywordFlags=0,name="AvoidChaosDamageChance",type="BASE",value=25}},nil} c["25% chance to Avoid Physical Damage from Hits"]={{[1]={flags=0,keywordFlags=0,name="AvoidPhysicalDamageChance",type="BASE",value=25}},nil} +c["25% chance to Chain an additional time"]={{[1]={flags=0,keywordFlags=0,name="ChainChance",type="BASE",value=25}},nil} c["25% chance to Intimidate Enemies for 4 seconds on Hit"]={{}," to Intimidate Enemies "} c["25% chance to Maim on Hit"]={{}," to Maim "} c["25% chance to Maim on Hit Adds 17 to 28 Physical Damage"]={{[1]={flags=4,keywordFlags=0,name="PhysicalDamage",type="BASE",value=25}}," to Maim Adds 17 to 28 "} @@ -2174,9 +2175,7 @@ c["3% reduced maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="INC c["30 Life Regeneration per second"]={{[1]={flags=0,keywordFlags=0,name="LifeRegen",type="BASE",value=30}},nil} c["30 to 40 Physical Thorns damage"]={{[1]={flags=0,keywordFlags=0,name="ThornsDamage",type="BASE",value=30}}," to 40 Physical "} c["30% chance for Lightning Damage with Hits to be Lucky"]={{[1]={flags=0,keywordFlags=0,name="LightningLuckyHitsChance",type="BASE",value=30}},nil} -c["30% chance to Chain an additional time"]={{}," to Chain an additional time "} -c["30% chance to Chain an additional time 172% increased Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="BASE",value=30}}," to Chain an additional time 172% increased "} -c["30% chance to Chain an additional time Adds 53 to 86 Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="FireDamage",type="BASE",value=30}}," to Chain an additional time Adds 53 to 86 "} +c["30% chance to Chain an additional time"]={{[1]={flags=0,keywordFlags=0,name="ChainChance",type="BASE",value=30}},nil} c["30% chance to Pierce an Enemy"]={{[1]={flags=0,keywordFlags=0,name="PierceChance",type="BASE",value=30}},nil} c["30% chance to Poison on Hit"]={{[1]={flags=0,keywordFlags=0,name="PoisonChance",type="BASE",value=30}},nil} c["30% chance to Poison on Hit with Attacks"]={{[1]={flags=0,keywordFlags=65536,name="PoisonChance",type="BASE",value=30}},nil} @@ -2876,7 +2875,7 @@ c["6% of Skill Mana Costs Converted to Life Costs"]={{[1]={flags=0,keywordFlags= c["6% reduced Charm Charges used"]={{[1]={flags=0,keywordFlags=0,name="CharmChargesUsed",type="INC",value=-6}},nil} c["6% reduced Projectile Speed"]={{[1]={flags=0,keywordFlags=0,name="ProjectileSpeed",type="INC",value=-6}},nil} c["60 Life Regeneration per second"]={{[1]={flags=0,keywordFlags=0,name="LifeRegen",type="BASE",value=60}},nil} -c["60% chance for Lightning Skills to Chain an additional time"]={{}," for Lightning Skills to Chain an additional time "} +c["60% chance for Lightning Skills to Chain an additional time"]={{[1]={flags=0,keywordFlags=128,name="ChainChance",type="BASE",value=60}},nil} c["60% faster start of Energy Shield Recharge if you've been Stunned Recently"]={{[1]={[1]={type="Condition",var="StunnedRecently"},flags=0,keywordFlags=0,name="EnergyShieldRechargeFaster",type="INC",value=60}},nil} c["60% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=60}},nil} c["60% increased Armour and Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="ArmourAndEnergyShield",type="INC",value=60}},nil} diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 59ef5fa8ca..3186b119d7 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -1152,7 +1152,7 @@ function calcs.offence(env, actor, activeSkill) if skillModList:Flag(skillCfg, "CannotChain") or skillModList:Flag(skillCfg, "NoAdditionalChains")then output.ChainMaxString = "Cannot chain" else - output.ChainMax = skillModList:Sum("BASE", skillCfg, "ChainCountMax", not skillFlags.projectile and "BeamChainCountMax" or nil) * skillModList:More(skillCfg, "ChainCountMax", not skillFlags.projectile and "BeamChainCountMax" or nil) + output.ChainMax = (skillModList:Sum("BASE", skillCfg, "ChainCountMax", not skillFlags.projectile and "BeamChainCountMax" or nil) + skillModList:Sum("BASE", skillCfg, "ChainChance") / 100) * skillModList:More(skillCfg, "ChainCountMax", not skillFlags.projectile and "BeamChainCountMax" or nil) output.TerrainChain = m_min(skillModList:Sum("BASE", skillCfg, "TerrainChainChance"), 100) if skillModList:Flag(skillCfg, "AdditionalProjectilesAddChainsInstead") then output.ChainMax = output.ChainMax + m_floor((skillModList:Sum("BASE", skillCfg, "ProjectileCount") - 1) * skillModList:More(skillCfg, "ProjectileCount")) diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 41ed079f07..58119249c0 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -680,7 +680,7 @@ return { { label = "2 Add. Proj. Chance", haveOutput = "TwoAdditionalProjectiles", { format = "{output:TwoAdditionalProjectiles}%", { modName = { "TwoAdditionalProjectilesChance", "NoAdditionalProjectiles" }, cfg = "skill" }, }, }, { label = "Pierce Count", haveOutput = "PierceCount", { format = "{output:PierceCountString}", { modName = { "CannotPierce", "PierceCount", "PierceChance", "PierceAllTargets" }, cfg = "skill" }, }, }, { label = "Fork Count", haveOutput = "ForkCountMax", { format = "{output:ForkCountString}", { modName = { "CannotFork", "ForkCountMax" }, cfg = "skill" }, }, }, - { label = "Max Chain Count", haveOutput = "ChainMax", { format = "{output:ChainMaxString}", { modName = { "CannotChain", "ChainCountMax", "NoAdditionalChains" }, cfg = "skill" }, }, }, + { label = "Max Chain Count", haveOutput = "ChainMax", { format = "{output:ChainMaxString}", { modName = { "CannotChain", "ChainCountMax", "ChainChance", "NoAdditionalChains" }, cfg = "skill" }, }, }, { label = "Terrain Chain", haveOutput = "TerrainChain", { format = "{output:TerrainChain}%", { modName = { "TerrainChainChance", "NoAdditionalChains" }, cfg = "skill" }, }, }, { label = "Split Count", haveOutput = "SplitCountString", { format = "{output:SplitCountString}", { label = "Player modifiers", modName = { "CannotSplit", "SplitCount", "AdditionalProjectilesAddSplitsInstead", "AdditionalChainsAddSplitsInstead" }, cfg = "skill" }, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index b27af8e3ad..20bf8f09fe 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -853,6 +853,7 @@ local modNameList = { ["to chain an additional time from terrain"] = "TerrainChainChance", ["to apply lightning exposure on hit"] = "LightningExposureChance", ["to pierce an enemy"] = "PierceChance", + ["to chain an additional time"] = "ChainChance", ["when you reload a crossbow to be immediate"] = "InstantReloadChance", ["to not consume a bolt"] = "ChanceToNotConsumeAmmo", -- Flask and Charm modifiers @@ -1063,6 +1064,7 @@ local modFlagList = { ["of travel skills"] = { tag = { type = "SkillType", skillType = SkillType.Travel } }, ["of banner skills"] = { tag = { type = "SkillType", skillType = SkillType.Banner } }, ["with lightning skills"] = { keywordFlags = KeywordFlag.Lightning }, + ["for lightning skills"] = { keywordFlags = KeywordFlag.Lightning }, ["with cold skills"] = { keywordFlags = KeywordFlag.Cold }, ["with fire skills"] = { keywordFlags = KeywordFlag.Fire }, ["with elemental skills"] = { keywordFlags = bor(KeywordFlag.Lightning, KeywordFlag.Cold, KeywordFlag.Fire) }, From 291efe3c5646e09d30778c77c65336883c17eb91 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:20:25 +1000 Subject: [PATCH 05/13] Minions 40% increased Spell Damage if one of your Minions has died Recently Minions have +3% to Maximum Cold Resistances Minions have +3% to Maximum Fire Resistances Minions have +3% to Maximum Lightning Resistances --- src/Data/ModCache.lua | 10 +++++----- src/Modules/ModParser.lua | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index c00f41a30e..3830969d97 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -2551,8 +2551,8 @@ c["40% increased Shock Duration"]={{[1]={flags=0,keywordFlags=0,name="EnemyShock c["40% increased Skill Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=40}},nil} c["40% increased Skill Speed while an enemy with an Open Weakness is in your Presence"]={{[1]={[1]={type="Condition",var="OpenWeaknessEnemyPresence"},flags=0,keywordFlags=0,name="Speed",type="INC",value=40},[2]={[1]={type="Condition",var="OpenWeaknessEnemyPresence"},flags=0,keywordFlags=0,name="WarcrySpeed",type="INC",value=40}},nil} c["40% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=40}},nil} -c["40% increased Spell Damage if one of your Minions has died Recently"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=40}}," if one of your Minions has died Recently "} -c["40% increased Spell Damage with Spells that cost Life"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=40}}," with Spells that cost Life "} +c["40% increased Spell Damage if one of your Minions has died Recently"]={{[1]={[1]={type="Condition",var="MinionsDiedRecently"},flags=2,keywordFlags=0,name="Damage",type="INC",value=40}},nil} +c["40% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={stat="LifeCost",threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=40}},nil} c["40% increased Spirit"]={{[1]={flags=0,keywordFlags=0,name="Spirit",type="INC",value=40}},nil} c["40% increased Stun Buildup"]={{}," Stun Buildup "} c["40% increased Stun Buildup Adds 11 to 20 Physical Damage to Attacks"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=40}}," Stun Buildup Adds 11 to 20 to Attacks "} @@ -5144,9 +5144,9 @@ c["Minions have +20% to Lightning Resistance"]={{[1]={flags=0,keywordFlags=0,nam c["Minions have +20% to all Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=20}}}},nil} c["Minions have +22% to all Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=22}}}},nil} c["Minions have +23% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=23}}}},nil} -c["Minions have +3% to Maximum Cold Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdResistMax",type="BASE",value=3}}}}," s "} -c["Minions have +3% to Maximum Fire Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="FireResistMax",type="BASE",value=3}}}}," s "} -c["Minions have +3% to Maximum Fire Resistances Minions have +20% to Fire Resistance"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="FireResistMax",type="BASE",value=3}}}}," s s have +20% to Fire Resistance "} +c["Minions have +3% to Maximum Cold Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdResistMax",type="BASE",value=3}}}},nil} +c["Minions have +3% to Maximum Fire Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="FireResistMax",type="BASE",value=3}}}},nil} +c["Minions have +3% to Maximum Lightning Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningResistMax",type="BASE",value=3}}}},nil} c["Minions have +3% to Maximum Lightning Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningResistMax",type="BASE",value=3}}}}," s "} c["Minions have +3% to all Maximum Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResistMax",type="BASE",value=3}}}},nil} c["Minions have +4% to all Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=4}}}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 20bf8f09fe..2158e19b73 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -254,10 +254,13 @@ local modNameList = { ["elemental damage reduction"] = "ElementalDamageReduction", ["fire resistance"] = "FireResist", ["maximum fire resistance"] = "FireResistMax", + ["maximum fire resistances"] = "FireResistMax", ["cold resistance"] = "ColdResist", ["maximum cold resistance"] = "ColdResistMax", + ["maximum cold resistances"] = "ColdResistMax", ["lightning resistance"] = "LightningResist", ["maximum lightning resistance"] = "LightningResistMax", + ["maximum lightning resistances"] = "LightningResistMax", ["chaos resistance"] = "ChaosResist", ["maximum chaos resistance"] = "ChaosResistMax", ["fire and cold resistances"] = { "FireResist", "ColdResist" }, @@ -1944,6 +1947,7 @@ local modTagList = { ["if you have a summoned golem"] = { tag = { type = "Condition", varList = { "HavePhysicalGolem", "HaveLightningGolem", "HaveColdGolem", "HaveFireGolem", "HaveChaosGolem", "HaveCarrionGolem" } } }, ["while you have a summoned golem"] = { tag = { type = "Condition", varList = { "HavePhysicalGolem", "HaveLightningGolem", "HaveColdGolem", "HaveFireGolem", "HaveChaosGolem", "HaveCarrionGolem" } } }, ["if a minion has died recently"] = { tag = { type = "Condition", var = "MinionsDiedRecently" } }, + ["if one of your minions has died recently"] = { tag = { type = "Condition", var = "MinionsDiedRecently" } }, ["if a minion has been killed recently"] = { tag = { type = "Condition", var = "MinionsDiedRecently" } }, ["while you have sacrificial zeal"] = { tag = { type = "Condition", var = "SacrificialZeal" } }, ["while sane"] = { tag = { type = "Condition", var = "Insane", neg = true } }, From b67708c25098cef3211315f2c2fafadc85af6f31 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:22:59 +1000 Subject: [PATCH 06/13] Exposure 15% increased Duration of Ailments against Enemies with Exposure 20% increased chance to inflict Ailments against Enemies with Exposure 30% increased Critical Hit Chance against enemies with Exposure Exposure you inflict lowers Resistances by an additional 5% --- src/Data/ModCache.lua | 9 ++++----- src/Modules/CalcPerform.lua | 1 + src/Modules/ModParser.lua | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 3830969d97..dd59b1f7da 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1445,7 +1445,7 @@ c["15% increased Damage with Maces"]={{[1]={flags=1048580,keywordFlags=0,name="D c["15% increased Defences from Equipped Shield"]={{[1]={[1]={slotName="Weapon 2",type="SlotName"},[2]={type="Condition",var="UsingShield"},flags=0,keywordFlags=0,name="Defences",type="INC",value=15}},nil} c["15% increased Dexterity"]={{[1]={flags=0,keywordFlags=0,name="Dex",type="INC",value=15}},nil} c["15% increased Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=15}},nil} -c["15% increased Duration of Ailments against Enemies with Exposure"]={{[1]={flags=0,keywordFlags=0,name="EnemyAilmentDuration",type="INC",value=15}}," against Enemies with Exposure "} +c["15% increased Duration of Ailments against Enemies with Exposure"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="HasExposure"},flags=0,keywordFlags=0,name="EnemyAilmentDuration",type="INC",value=15}},nil} c["15% increased Duration of Damaging Ailments on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyIgniteDuration",type="INC",value=15},[2]={flags=0,keywordFlags=0,name="EnemyBleedDuration",type="INC",value=15},[3]={flags=0,keywordFlags=0,name="EnemyPoisonDuration",type="INC",value=15}},nil} c["15% increased Duration of Elemental Ailments on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyElementalAilmentDuration",type="INC",value=15}},nil} c["15% increased Duration of Ignite, Shock and Chill on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyShockDuration",type="INC",value=15},[2]={flags=0,keywordFlags=0,name="EnemyChillDuration",type="INC",value=15},[3]={flags=0,keywordFlags=0,name="EnemyIgniteDuration",type="INC",value=15}},nil} @@ -1835,7 +1835,7 @@ c["20% increased Withered Magnitude"]={{[1]={flags=0,keywordFlags=0,name="Wither c["20% increased amount of Life Leeched"]={{[1]={flags=0,keywordFlags=0,name="MaxLifeLeechRate",type="INC",value=20}},nil} c["20% increased bonuses gained from Equipped Quiver"]={{[1]={flags=0,keywordFlags=0,name="EffectOfBonusesFromQuiver",type="INC",value=20}},nil} c["20% increased chance to Shock"]={{[1]={flags=0,keywordFlags=0,name="EnemyShockChance",type="INC",value=20}},nil} -c["20% increased chance to inflict Ailments against Enemies with Exposure"]={{[1]={flags=0,keywordFlags=0,name="AilmentChance",type="INC",value=20}}," against Enemies with Exposure "} +c["20% increased chance to inflict Ailments against Enemies with Exposure"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="HasExposure"},flags=0,keywordFlags=0,name="AilmentChance",type="INC",value=20}},nil} c["20% increased chance to inflict Ailments against Rare or Unique Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="RareOrUnique"},flags=0,keywordFlags=0,name="AilmentChance",type="INC",value=20}},nil} c["20% increased chance to inflict Ailments with Projectiles"]={{[1]={flags=1024,keywordFlags=0,name="AilmentChance",type="INC",value=20}},nil} c["20% increased damage against Immobilised Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Immobilised"},flags=0,keywordFlags=0,name="Damage",type="INC",value=20}},nil} @@ -2213,7 +2213,7 @@ c["30% increased Cooldown Recovery Rate"]={{[1]={flags=0,keywordFlags=0,name="Co c["30% increased Critical Damage Bonus"]={{[1]={flags=0,keywordFlags=0,name="CritMultiplier",type="INC",value=30}},nil} c["30% increased Critical Hit Chance"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=30}},nil} c["30% increased Critical Hit Chance against Bleeding Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Bleeding"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=30}},nil} -c["30% increased Critical Hit Chance against enemies with Exposure"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=30}}," against enemies with Exposure "} +c["30% increased Critical Hit Chance against enemies with Exposure"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="HasExposure"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=30}},nil} c["30% increased Critical Hit Chance for Attacks"]={{[1]={flags=1,keywordFlags=0,name="CritChance",type="INC",value=30}},nil} c["30% increased Critical Hit Chance for Spells"]={{[1]={flags=2,keywordFlags=0,name="CritChance",type="INC",value=30}},nil} c["30% increased Critical Hit Chance with Flails"]={{[1]={flags=134217732,keywordFlags=0,name="CritChance",type="INC",value=30}},nil} @@ -4531,7 +4531,7 @@ c["Every second, inflicts Critical Weakness on enemies in your Presence for 15 s c["Excess Life Recovery added as Guard for 10 seconds"]={nil,"Excess Life Recovery added as Guard for 10 seconds "} c["Excess Life Recovery from Leech is applied to Energy Shield"]={nil,"Excess Life Recovery from Leech is applied to Energy Shield "} c["Excess Life Recovery from Regeneration is applied to Energy Shield"]={{[1]={[1]={type="Condition",var="FullLife"},flags=0,keywordFlags=0,name="ZealotsOath",type="FLAG",value=true}},nil} -c["Exposure you inflict lowers Resistances by an additional 5%"]={nil,"Exposure you inflict lowers Resistances by an additional 5% "} +c["Exposure you inflict lowers Resistances by an additional 5%"]={{[1]={flags=0,keywordFlags=0,name="ExtraExposure",type="BASE",value=-5}},nil} c["Final Repeat of Spells has 30% increased Area of Effect"]={{[1]={[1]={neg=true,type="Condition",var="CastOnFrostbolt"},[2]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=2,keywordFlags=0,name="RepeatFinalAreaOfEffect",type="INC",value=30}},nil} c["Fire Damage from Hits Contributes to Shock Chance instead of Flammability and Ignite Magnitudes"]={nil,"Fire Damage from Hits Contributes to Shock Chance instead of Flammability and Ignite Magnitudes "} c["Fire Damage from Hits Contributes to Shock Chance instead of Flammability and Ignite Magnitudes Cold Damage from Hits Contributes to Flammability and Ignite Magnitudes instead of Chill Magnitude or Freeze Buildup"]={nil,"Fire Damage from Hits Contributes to Shock Chance instead of Flammability and Ignite Magnitudes Cold Damage from Hits Contributes to Flammability and Ignite Magnitudes instead of Chill Magnitude or Freeze Buildup "} @@ -5147,7 +5147,6 @@ c["Minions have +23% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="M c["Minions have +3% to Maximum Cold Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdResistMax",type="BASE",value=3}}}},nil} c["Minions have +3% to Maximum Fire Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="FireResistMax",type="BASE",value=3}}}},nil} c["Minions have +3% to Maximum Lightning Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningResistMax",type="BASE",value=3}}}},nil} -c["Minions have +3% to Maximum Lightning Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningResistMax",type="BASE",value=3}}}}," s "} c["Minions have +3% to all Maximum Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResistMax",type="BASE",value=3}}}},nil} c["Minions have +4% to all Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=4}}}},nil} c["Minions have +5% to all Maximum Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResistMax",type="BASE",value=5}}}},nil} diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index d93a1e3c5f..ad66eae1af 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -2947,6 +2947,7 @@ function calcs.perform(env, skipEHP) end min = min * (modDB:Sum("INC", nil, element.."ExposureEffect") / 100 + 1) enemyDB:NewMod("Condition:Has"..element.."Exposure", "FLAG", true, "") + enemyDB:NewMod("Condition:HasExposure", "FLAG", true, "") enemyDB:NewMod(element.."Resist", "BASE", m_min(min, modDB:Override(nil, "ExposureMin")), source) modDB:NewMod("Condition:AppliedExposureRecently", "FLAG", true, "") end diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 2158e19b73..00af10cb46 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1974,6 +1974,7 @@ local modTagList = { ["against stunned enemies"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Stunned" } }, ["against heavy stunned enemies"] = { tag = { type = "ActorCondition", actor = "enemy", var = "HeavyStunned" } }, ["against enemies with fully broken armour"] = { tag = { type = "ActorCondition", actor = "enemy", var = "ArmourFullyBroken" } }, + ["against enemies with exposure"] = { tag = { type = "ActorCondition", actor = "enemy", var = "HasExposure" } }, ["against immobilised enemies"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Immobilised" } }, ["on cursed enemies"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Cursed" } }, ["of cursed enemies'"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Cursed" } }, @@ -2724,6 +2725,7 @@ local specialModList = { ["(%d+)%% increased area of effect while you don't have convergence"] = function(num) return { mod("AreaOfEffect", "INC", num, { type = "Condition", neg = true, var = "Convergence" }) } end, ["exposure you inflict applies an extra (%-?%d+)%% to the affected resistance"] = function(num) return { mod("ExtraExposure", "BASE", num) } end, ["exposure you inflict lowers the affected resistance by an additional (%-?%d+)%%"] = function(num) return { mod("ExtraExposure", "BASE", -num) } end, + ["exposure you inflict lowers resistances by an additional (%-?%d+)%%"] = function(num) return { mod("ExtraExposure", "BASE", -num) } end, ["cannot take reflected elemental damage"] = { mod("ElementalReflectedDamageTaken", "MORE", -100, { type = "GlobalEffect", effectType = "Global", unscalable = true }) }, ["every %d+ seconds:"] = { }, ["gain chilling conflux for %d seconds"] = { From 6ff53ba08bf4aa1a11b57493fd683600b78c6eb4 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:24:54 +1000 Subject: [PATCH 07/13] Presence 15% increased Critical Hit Chance against Enemies that have entered your Presence Recently 50% increased Critical Damage Bonus against Enemies that have exited your Presence Recently Each Totem applies 2% increased Damage taken to Enemies in their Presence --- src/Data/ModCache.lua | 6 +++--- src/Modules/ConfigOptions.lua | 6 ++++++ src/Modules/ModParser.lua | 3 +++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index dd59b1f7da..73cbf9fa49 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1430,7 +1430,7 @@ c["15% increased Critical Damage Bonus for Attack Damage"]={{[1]={flags=1,keywor c["15% increased Critical Hit Chance"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=15}},nil} c["15% increased Critical Hit Chance against Blinded Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Blinded"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=15}},nil} c["15% increased Critical Hit Chance against Dazed Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Dazed"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=15}},nil} -c["15% increased Critical Hit Chance against Enemies that have entered your Presence Recently"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=15}}," against Enemies that have entered your Presence Recently "} +c["15% increased Critical Hit Chance against Enemies that have entered your Presence Recently"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="EnteredPresenceRecently"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=15}},nil} c["15% increased Critical Hit Chance for Attacks"]={{[1]={flags=1,keywordFlags=0,name="CritChance",type="INC",value=15}},nil} c["15% increased Critical Hit Chance for Spells"]={{[1]={flags=2,keywordFlags=0,name="CritChance",type="INC",value=15}},nil} c["15% increased Critical Hit Chance with Daggers"]={{[1]={flags=524292,keywordFlags=0,name="CritChance",type="INC",value=15}},nil} @@ -2702,7 +2702,7 @@ c["50% increased Blind Effect"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifie c["50% increased Block chance"]={{[1]={flags=0,keywordFlags=0,name="BlockChance",type="INC",value=50}},nil} c["50% increased Cooldown Recovery Rate"]={{[1]={flags=0,keywordFlags=0,name="CooldownRecovery",type="INC",value=50}},nil} c["50% increased Cost of Skills for each 200 total Mana Spent Recently"]={{[1]={[1]={div=200,type="Multiplier",var="ManaSpentRecently"},flags=0,keywordFlags=0,name="Cost",type="INC",value=50}},nil} -c["50% increased Critical Damage Bonus against Enemies that have exited your Presence Recently"]={{[1]={flags=0,keywordFlags=0,name="CritMultiplier",type="INC",value=50}}," against Enemies that have exited your Presence Recently "} +c["50% increased Critical Damage Bonus against Enemies that have exited your Presence Recently"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="ExitedPresenceRecently"},flags=0,keywordFlags=0,name="CritMultiplier",type="INC",value=50}},nil} c["50% increased Critical Hit Chance"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=50}},nil} c["50% increased Critical Hit Chance against Blinded Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Blinded"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=50}},nil} c["50% increased Critical Hit Chance against Enemies on Full Life"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="FullLife"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=50}},nil} @@ -4417,7 +4417,7 @@ c["Doubles Mana Costs"]={{[1]={flags=0,keywordFlags=0,name="ManaCost",type="MORE c["Drop Ignited Ground while moving, which lasts 8 seconds and Ignites as though dealing Fire Damage equal to 10% of your maximum Life"]={nil,"Drop Ignited Ground while moving, which lasts 8 seconds and Ignites as though dealing Fire Damage equal to 10% of your maximum Life "} c["Drop Shocked Ground while moving, lasting 8 seconds"]={nil,"Drop Shocked Ground while moving, lasting 8 seconds "} c["Each Arrow fired is a Crescendo, Splinter, Reversing, Diamond, Covetous, or Blunt Arrow"]={nil,"Each Arrow fired is a Crescendo, Splinter, Reversing, Diamond, Covetous, or Blunt Arrow "} -c["Each Totem applies 2% increased Damage taken to Enemies in their Presence"]={nil,"Each Totem applies 2% increased Damage taken to Enemies in their Presence "} +c["Each Totem applies 2% increased Damage taken to Enemies in their Presence"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Multiplier",var="TotemsSummoned"},flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=2}}}},nil} c["Effect is not removed when Unreserved Life is Filled"]={nil,"Effect is not removed when Unreserved Life is Filled "} c["Effect is not removed when Unreserved Life is Filled 30% of Damage taken during effect Recouped as Life"]={nil,"Effect is not removed when Unreserved Life is Filled 30% of Damage taken during effect Recouped as Life "} c["Effect is not removed when Unreserved Mana is Filled"]={{[1]={flags=0,keywordFlags=0,name="ManaFlaskEffectNotRemoved",type="FLAG",value=true}},nil} diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 8fc83d2dad..6e71d77c3b 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -1564,6 +1564,12 @@ Huge sets the radius to 11. { var = "enemyMultiplierEnemyPresenceSeconds", type = "count", label = "Enemy in Your Presence Duration", tooltip = "Number of seconds the enemy has been in your presence.", ifEnemyMult = "EnemyPresenceSeconds", apply = function(val, modList, enemyModList) enemyModList:NewMod("Multiplier:EnemyPresenceSeconds", "BASE", val, "Config", { type = "Condition", var = "Effective" }) end }, + { var = "conditionEnemyExitedPresenceRecently", type = "check", label = "Enemy exited Presence Recently?", ifEnemyCond = "ExitedPresenceRecently", tooltip = "Enemy has exited your Presence recently", apply = function(val, modList, enemyModList) + enemyModList:NewMod("Condition:ExitedPresenceRecently", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionEnemyExitedPresenceRecently", type = "check", label = "Enemy entered Presence Recently?", ifEnemyCond = "EnteredPresenceRecently", tooltip = "Enemy has entered your Presence recently", apply = function(val, modList, enemyModList) + enemyModList:NewMod("Condition:EnteredPresenceRecently", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) + end }, { var = "conditionEnemyMoving", type = "check", label = "Is the enemy Moving?", ifMod = "BleedChance", tooltip = "Bleeding deals an extra 100% damage while the target is moving, or if the Bleeding is Aggravated", apply = function(val, modList, enemyModList) enemyModList:NewMod("Condition:Moving", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 00af10cb46..0e2e1205bd 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1794,6 +1794,8 @@ local modTagList = { ["while there is only one nearby enemy"] = { tagList = { { type = "Multiplier", var = "NearbyEnemies", limit = 1 }, { type = "Condition", var = "OnlyOneNearbyEnemy" } } }, ["while t?h?e?r?e? ?i?s? ?a rare or unique enemy i?s? ?nearby"] = { tag = { type = "ActorCondition", actor = "enemy", varList = { "NearbyRareOrUniqueEnemy", "RareOrUnique" } } }, ["while a rare or unique enemy is in your presence"] = { tag = { type = "ActorCondition", actor = "enemy", varList = { "NearbyRareOrUniqueEnemy", "RareOrUnique" } } }, + ["against enemies that have exited your presence recently"] = { tag = { type = "ActorCondition", actor = "enemy", var = "ExitedPresenceRecently" } }, + ["against enemies that have entered your presence recently"] = { tag = { type = "ActorCondition", actor = "enemy", var = "EnteredPresenceRecently" } }, ["if you[' ]h?a?ve been stunned recently"] = { tag = { type = "Condition", var = "StunnedRecently" } }, ["if you[' ]h?a?ve been heavy stunned recently"] = { tag = { type = "Condition", var = "StunnedRecently" } }, ["if you haven't been stunned recently"] = { tag = { type = "Condition", var = "StunnedRecently", neg = true } }, @@ -4271,6 +4273,7 @@ local specialModList = { ["you can cast (%d+) additional brands"] = function(num) return { mod("ActiveBrandLimit", "BASE", num) } end, ["(%d+)%% increased damage while you are wielding a bow and have a totem"] = function(num) return { mod("Damage", "INC", num, { type = "Condition", var = "HaveTotem" }, { type = "Condition", var = "UsingBow" }) } end, ["each totem applies (%d+)%% increased damage taken to enemies near it"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("DamageTaken", "INC", num, { type = "Multiplier", var = "TotemsSummoned" }) }) } end, + ["each totem applies (%d+)%% increased damage taken to enemies in their presence"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("DamageTaken", "INC", num, { type = "Multiplier", var = "TotemsSummoned" }) }) } end, ["totems gain %+(%d+)%% to (%w+) resistance"] = function(num, _, resistance) return { mod("Totem"..firstToUpper(resistance).."Resist", "BASE", num) } end, ["totems gain %+(%d+)%% to all elemental resistances"] = function(num) return { mod("TotemElementalResist", "BASE", num) } end, -- Minions From 6da5016aeb83c9b8dd2eb9ddc29d24cf34b40c38 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:27:14 +1000 Subject: [PATCH 08/13] Ground Effect Gain 15% of Damage as Extra Cold Damage while on Chilled Ground Gain 15% of Damage as Extra Fire Damage while on Ignited Ground Gain 15% of Damage as Extra Lightning Damage while on Shocked Ground --- src/Data/ModCache.lua | 7 +++---- src/Modules/ConfigOptions.lua | 4 ++++ src/Modules/ModParser.lua | 3 +++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 73cbf9fa49..c78bce691b 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4580,12 +4580,11 @@ c["Gain 15 Life per Enemy Killed"]={{[1]={flags=0,keywordFlags=0,name="LifeOnKil c["Gain 15 Mana per Enemy Hit with Attacks"]={{[1]={flags=4,keywordFlags=65536,name="ManaOnHit",type="BASE",value=15}},nil} c["Gain 15 Mana per Enemy Killed"]={{[1]={flags=0,keywordFlags=0,name="ManaOnKill",type="BASE",value=15}},nil} c["Gain 15% of Damage as Extra Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="DamageGainAsCold",type="BASE",value=15}},nil} -c["Gain 15% of Damage as Extra Cold Damage while on Chilled Ground"]={{[1]={[1]={type="Condition",var="OnChilledGround"},flags=0,keywordFlags=0,name="DamageGainAsCold",type="BASE",value=15}}," while "} +c["Gain 15% of Damage as Extra Cold Damage while on Chilled Ground"]={{[1]={[1]={type="Condition",var="OnChilledGround"},flags=0,keywordFlags=0,name="DamageGainAsCold",type="BASE",value=15}},nil} c["Gain 15% of Damage as Extra Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="DamageGainAsFire",type="BASE",value=15}},nil} -c["Gain 15% of Damage as Extra Fire Damage while on Ignited Ground"]={{[1]={flags=0,keywordFlags=0,name="DamageGainAsFire",type="BASE",value=15}}," while on Ignited Ground "} +c["Gain 15% of Damage as Extra Fire Damage while on Ignited Ground"]={{[1]={[1]={type="Condition",var="OnIgnitedGround"},flags=0,keywordFlags=0,name="DamageGainAsFire",type="BASE",value=15}},nil} c["Gain 15% of Damage as Extra Lightning Damage"]={{[1]={flags=0,keywordFlags=0,name="DamageGainAsLightning",type="BASE",value=15}},nil} -c["Gain 15% of Damage as Extra Lightning Damage while on Shocked Ground"]={{[1]={[1]={type="Condition",var="OnShockedGround"},flags=0,keywordFlags=0,name="DamageGainAsLightning",type="BASE",value=15}}," while "} -c["Gain 15% of Damage as Extra Lightning Damage while on Shocked Ground 40% reduced effect of Shock on you"]={{[1]={[1]={type="Condition",var="OnShockedGround"},flags=0,keywordFlags=0,name="DamageGainAsLightning",type="BASE",value=15}}," while 40% reduced effect of Shock on you "} +c["Gain 15% of Damage as Extra Lightning Damage while on Shocked Ground"]={{[1]={[1]={type="Condition",var="OnShockedGround"},flags=0,keywordFlags=0,name="DamageGainAsLightning",type="BASE",value=15}},nil} c["Gain 15% of maximum Energy Shield as additional Freeze Threshold"]={{[1]={[1]={percent=15,stat="EnergyShield",type="PercentStat"},flags=0,keywordFlags=0,name="FreezeThreshold",type="BASE",value=1}},nil} c["Gain 15% of maximum Life as Extra maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="LifeGainAsEnergyShield",type="BASE",value=15}},nil} c["Gain 18 Mana per Enemy Killed"]={{[1]={flags=0,keywordFlags=0,name="ManaOnKill",type="BASE",value=18}},nil} diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 6e71d77c3b..567c48d917 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -979,6 +979,10 @@ Huge sets the radius to 11. modList:NewMod("Condition:OnBurningGround", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) modList:NewMod("Condition:Burning", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, + { var = "conditionOnIgnitedGround", type = "check", label = "Are you on ^xB97123Ignited ^7Ground?", ifCond = "OnIgnitedGround", implyCond = "Ignited", tooltip = "This also implies that you are ^xB97123Ignited.", apply = function(val, modList, enemyModList) + modList:NewMod("Condition:OnIgnitedGround", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:Ignited", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) + end }, { var = "conditionOnChilledGround", type = "check", label = "Are you on ^x3F6DB3Chilled ^7Ground?", ifCond = "OnChilledGround", implyCond = "Chilled", tooltip = "This also implies that you are ^x3F6DB3Chilled.", apply = function(val, modList, enemyModList) modList:NewMod("Condition:OnChilledGround", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) modList:NewMod("Condition:Chilled", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 0e2e1205bd..c34e3f760e 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1777,11 +1777,14 @@ local modTagList = { ["while burning"] = { tag = { type = "Condition", var = "Burning" } }, ["while ignited"] = { tag = { type = "Condition", var = "Ignited" } }, ["while you are ignited"] = { tag = { type = "Condition", var = "Ignited" } }, + ["while on ignited ground"] = { tag = { type = "Condition", var = "OnIgnitedGround" } }, ["while chilled"] = { tag = { type = "Condition", var = "Chilled" } }, ["while you are chilled"] = { tag = { type = "Condition", var = "Chilled" } }, + ["while on chilled ground"] = { tag = { type = "Condition", var = "OnChilledGround" } }, ["while frozen"] = { tag = { type = "Condition", var = "Frozen" } }, ["while shocked"] = { tag = { type = "Condition", var = "Shocked" } }, ["while you are shocked"] = { tag = { type = "Condition", var = "Shocked" } }, + ["while on shocked ground"] = { tag = { type = "Condition", var = "OnShockedGround" } }, ["while you are bleeding"] = { tag = { type = "Condition", var = "Bleeding" } }, ["while not ignited, frozen or shocked"] = { tag = { type = "Condition", varList = { "Ignited", "Frozen", "Shocked" }, neg = true } }, ["while bleeding"] = { tag = { type = "Condition", var = "Bleeding" } }, From 3d907616bc9ba1ffe6d5f50592ca6a1b1a18c0a0 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:28:12 +1000 Subject: [PATCH 09/13] Arcane Surge Arcane Surge grants more Life Regeneration Rate instead of Mana Regeneration Rate --- src/Data/ModCache.lua | 2 +- src/Modules/CalcDefence.lua | 6 +++++- src/Modules/ModParser.lua | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index c78bce691b..762753114e 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4066,7 +4066,7 @@ c["Ancestrally Boosted Attacks deal 8% increased Damage"]={nil,"Ancestrally Boos c["Any number of Poisons from this Weapon can affect a target at the same time"]={{[1]={flags=0,keywordFlags=0,name="PoisonCanStack",type="FLAG",value=true},[2]={[1]={type="Condition",var="{Hand}Attack"},[2]={neg=true,skillType=167,type="SkillType"},flags=0,keywordFlags=0,name="PoisonStacks",type="OVERRIDE",value=math.huge}},nil} c["Apply 5 Critical Weakness to Enemies when Consuming a Mark on them"]={nil,"Apply 5 Critical Weakness to Enemies when Consuming a Mark on them "} c["Apply Debilitate to Enemies 3 Metres in front of you while actively Blocking"]={nil,"Apply Debilitate to Enemies 3 Metres in front of you while actively Blocking "} -c["Arcane Surge grants more Life Regeneration Rate instead of Mana Regeneration Rate"]={nil,"Arcane Surge grants more Life Regeneration Rate instead of Mana Regeneration Rate "} +c["Arcane Surge grants more Life Regeneration Rate instead of Mana Regeneration Rate"]={{[1]={flags=0,keywordFlags=0,name="ArcaneSurgeLifeRegen",type="FLAG",value=true}},nil} c["Archon Buffs also grant +20% to all Elemental Resistances"]={nil,"Archon Buffs also grant +20% to all Elemental Resistances "} c["Archon Buffs also grant +20% to all Elemental Resistances Archon Buffs also grant 10% increased Movement Speed"]={nil,"Archon Buffs also grant +20% to all Elemental Resistances Archon Buffs also grant 10% increased Movement Speed "} c["Archon Buffs also grant 10% increased Movement Speed"]={nil,"Archon Buffs also grant 10% increased Movement Speed "} diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 5c3631576a..2aa128f632 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -1530,7 +1530,11 @@ function calcs.defence(env, actor) if modDB.conditions["AffectedByArcaneSurge"] or modDB:Flag(nil, "Condition:ArcaneSurge") then modDB.conditions["AffectedByArcaneSurge"] = true local effect = 1 + modDB:Sum("INC", nil, "ArcaneSurgeEffect", "BuffEffectOnSelf") / 100 - modDB:NewMod("ManaRegen", "MORE", (modDB:Max(nil, "ArcaneSurgeManaRegen") or 20) * effect, "Arcane Surge") + if modDB:Flag(nil, "ArcaneSurgeLifeRegen") then + modDB:NewMod("LifeRegen", "MORE", (modDB:Max(nil, "ArcaneSurgeManaRegen") or 20) * effect, "Arcane Surge") + else + modDB:NewMod("ManaRegen", "MORE", (modDB:Max(nil, "ArcaneSurgeManaRegen") or 20) * effect, "Arcane Surge") + end modDB:NewMod("Speed", "INC", (modDB:Max(nil, "ArcaneSurgeCastSpeed") or 15) * effect, "Arcane Surge", ModFlag.Cast) local arcaneSurgeDamage = modDB:Max(nil, "ArcaneSurgeDamage") or 0 if arcaneSurgeDamage ~= 0 then modDB:NewMod("Damage", "MORE", arcaneSurgeDamage * effect, "Arcane Surge", ModFlag.Spell) end diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index c34e3f760e..48b86c228f 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -4049,6 +4049,7 @@ local specialModList = { ["gain arcane surge after spending a total of (%d+) life"] = function(num) return { mod("ExtraAura", "LIST", { mod = flag("Condition:ArcaneSurge")}, { type = "MultiplierThreshold", var = "LifeSpentRecently", threshold = num }), } end, + ["arcane surge grants more life regeneration rate instead of mana regeneration rate"] = { flag("ArcaneSurgeLifeRegen") }, ["gain onslaught for (%d+) seconds on hit while at maximum frenzy charges"] = { flag("Onslaught", { type = "StatThreshold", stat = "FrenzyCharges", thresholdStat = "FrenzyChargesMax" }, { type = "Condition", var = "HitRecently" }) }, ["enemies in your chilling areas take (%d+)%% increased lightning damage"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("LightningDamageTaken", "INC", num) }, { type = "ActorCondition", actor = "enemy", var = "InChillingArea" }) } end, ["warcries count as having (%d+) additional nearby enemies"] = function(num) return { From 98f7ade1d17578bc8155f23fdd29b11789696638 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:32:14 +1000 Subject: [PATCH 10/13] Marks 25% increased Critical Hit Chance against Marked Enemies 25% increased Magnitude of Ailments you inflict against Marked Enemies 4% increased Movement Speed if you've used a Mark Recently Mark Skills have 10% increased Use Speed --- src/Data/ModCache.lua | 11 ++++------- src/Modules/ConfigOptions.lua | 2 +- src/Modules/ModParser.lua | 3 +++ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 762753114e..3d2f76ec67 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1989,8 +1989,7 @@ c["25% increased Critical Damage Bonus if you've dealt a Non-Critical Hit Recent c["25% increased Critical Damage Bonus with Daggers"]={{[1]={flags=524292,keywordFlags=0,name="CritMultiplier",type="INC",value=25}},nil} c["25% increased Critical Damage Bonus with Quarterstaves"]={{[1]={flags=2097156,keywordFlags=0,name="CritMultiplier",type="INC",value=25}},nil} c["25% increased Critical Hit Chance"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=25}},nil} -c["25% increased Critical Hit Chance against Marked Enemies"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=25}}," against Marked Enemies "} -c["25% increased Critical Hit Chance against Marked Enemies +10 to Dexterity"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=25}}," against Marked Enemies +10 to Dexterity "} +c["25% increased Critical Hit Chance against Marked Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Marked"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=25}},nil} c["25% increased Critical Hit Chance against Shocked Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Shocked"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=25}},nil} c["25% increased Critical Hit Chance for Attacks"]={{[1]={flags=1,keywordFlags=0,name="CritChance",type="INC",value=25}},nil} c["25% increased Critical Hit Chance for Spells"]={{[1]={flags=2,keywordFlags=0,name="CritChance",type="INC",value=25}},nil} @@ -2034,9 +2033,7 @@ c["25% increased Life Recovery from Flasks used when on Low Life"]={{[1]={[1]={t c["25% increased Life Regeneration rate"]={{[1]={flags=0,keywordFlags=0,name="LifeRegen",type="INC",value=25}},nil} c["25% increased Light Radius"]={{[1]={flags=0,keywordFlags=0,name="LightRadius",type="INC",value=25}},nil} c["25% increased Lightning Damage"]={{[1]={flags=0,keywordFlags=0,name="LightningDamage",type="INC",value=25}},nil} -c["25% increased Magnitude of Ailments you inflict against Marked Enemies"]={{[1]={flags=0,keywordFlags=0,name="AilmentMagnitude",type="INC",value=25}}," against Marked Enemies "} -c["25% increased Magnitude of Ailments you inflict against Marked Enemies 25% increased Critical Hit Chance against Marked Enemies"]={{[1]={flags=0,keywordFlags=0,name="AilmentMagnitude",type="INC",value=25}}," against Marked Enemies 25% increased Critical Hit Chance against Marked Enemies "} -c["25% increased Magnitude of Ailments you inflict against Marked Enemies 25% increased Critical Hit Chance against Marked Enemies +10 to Dexterity"]={{[1]={flags=0,keywordFlags=0,name="AilmentMagnitude",type="INC",value=25}}," against Marked Enemies 25% increased Critical Hit Chance against Marked Enemies +10 to Dexterity "} +c["25% increased Magnitude of Ailments you inflict against Marked Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Marked"},flags=0,keywordFlags=0,name="AilmentMagnitude",type="INC",value=25}},nil} c["25% increased Magnitude of Bleeding you inflict"]={{[1]={flags=0,keywordFlags=4194304,name="AilmentMagnitude",type="INC",value=25}},nil} c["25% increased Magnitude of Chill you inflict"]={{[1]={flags=0,keywordFlags=0,name="EnemyChillMagnitude",type="INC",value=25}},nil} c["25% increased Magnitude of Poison you inflict"]={{[1]={flags=0,keywordFlags=2097152,name="AilmentMagnitude",type="INC",value=25}},nil} @@ -2439,7 +2436,7 @@ c["4% increased Energy Shield per Power Charge"]={{[1]={[1]={type="Multiplier",v c["4% increased Magnitude of Unholy Might Buffs you grant per 100 maximum Mana"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={[1]={effectName="BlackenedHeart",effectType="Aura",type="GlobalEffect",unscalable=true},mod={[1]={actor="parent",div=100,stat="Mana",type="PerStat"},flags=0,keywordFlags=0,name="Multiplier:UnholyMightMagnitude",type="BASE",value=4}}}},nil} c["4% increased Movement Speed"]={{[1]={flags=0,keywordFlags=0,name="MovementSpeed",type="INC",value=4}},nil} c["4% increased Movement Speed if you've Killed Recently"]={{[1]={[1]={type="Condition",var="KilledRecently"},flags=0,keywordFlags=0,name="MovementSpeed",type="INC",value=4}},nil} -c["4% increased Movement Speed if you've used a Mark Recently"]={{[1]={flags=0,keywordFlags=0,name="MovementSpeed",type="INC",value=4}}," if you've used a Mark Recently "} +c["4% increased Movement Speed if you've used a Mark Recently"]={{[1]={[1]={type="Condition",var="CastMarkRecently"},flags=0,keywordFlags=0,name="MovementSpeed",type="INC",value=4}},nil} c["4% increased Skill Speed"]={{[1]={flags=0,keywordFlags=0,name="Speed",type="INC",value=4},[2]={flags=0,keywordFlags=0,name="WarcrySpeed",type="INC",value=4}},nil} c["4% increased Spell Damage per 10 Intelligence"]={{[1]={[1]={div=10,stat="Int",type="PerStat"},flags=2,keywordFlags=0,name="Damage",type="INC",value=4}},nil} c["4% increased Spirit"]={{[1]={flags=0,keywordFlags=0,name="Spirit",type="INC",value=4}},nil} @@ -5072,7 +5069,7 @@ c["Mana Flasks used while on Low Mana apply Recovery Instantly"]={{[1]={[1]={typ c["Mana Leech recovers based on Elemental Damage Types instead of Physical Damage"]={nil,"Mana Leech recovers based on Elemental Damage Types instead of Physical Damage "} c["Mana Recovery from Regeneration is not applied"]={{[1]={flags=0,keywordFlags=0,name="UnaffectedByManaRegen",type="FLAG",value=true}},nil} c["Mana Recovery other than Regeneration cannot Recover Mana"]={nil,"Mana Recovery other than Regeneration cannot Recover Mana "} -c["Mark Skills have 10% increased Use Speed"]={{}," Use Speed "} +c["Mark Skills have 10% increased Use Speed"]={{[1]={[1]={skillType=98,type="SkillType"},flags=0,keywordFlags=0,name="Speed",type="INC",value=10}},nil} c["Mark Skills have 25% increased Skill Effect Duration"]={{[1]={[1]={skillType=98,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=25}},nil} c["Maximum 10 Fragile Regrowth"]={nil,"Maximum 10 Fragile Regrowth "} c["Maximum 10 Fragile Regrowth 0.5% of maximum Life Regenerated per second per Fragile Regrowth"]={nil,"Maximum 10 Fragile Regrowth 0.5% of maximum Life Regenerated per second per Fragile Regrowth "} diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 567c48d917..812443cc8e 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -1438,7 +1438,7 @@ Huge sets the radius to 11. { var = "conditionCursedEnemyRecently", type = "check", label = "Have you Cursed an enemy Recently?", ifCond="CursedEnemyRecently", apply = function(val, modList, enemyModList) modList:NewMod("Condition:CursedEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "conditionCastMarkRecently", type = "check", label = "Have you cast a Mark Spell Recently?", ifCond = "CastMarkRecently", apply = function(val, modList, enemyModList) + { var = "conditionCastMarkRecently", type = "check", label = "Have you used a Mark Recently?", ifCond = "CastMarkRecently", apply = function(val, modList, enemyModList) modList:NewMod("Condition:CastMarkRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionSpawnedCorpseRecently", type = "check", label = "Spawned a corpse Recently?", ifCond = "SpawnedCorpseRecently", apply = function(val, modList, enemyModList) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 48b86c228f..abe2f690a1 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -736,6 +736,7 @@ local modNameList = { ["cast speed"] = { "Speed", flags = ModFlag.Cast }, ["warcry speed"] = { "WarcrySpeed", keywordFlags = KeywordFlag.Warcry }, ["attack and cast speed"] = "Speed", + ["use speed"] = "Speed", ["skill speed"] = { "Speed", "WarcrySpeed" }, ["reload speed"] = { "ReloadSpeed", flags = ModFlag.Attack }, ["dps"] = "DPS", @@ -1876,6 +1877,7 @@ local modTagList = { ["if you[' ]h?a?ve consumed a corpse recently"] = { tag = { type = "Condition", var = "ConsumedCorpseRecently" } }, ["if you[' ]h?a?ve cursed an enemy recently"] = { tag = { type = "Condition", var = "CursedEnemyRecently" } }, ["if you[' ]h?a?ve cast a mark spell recently"] = { tag = { type = "Condition", var = "CastMarkRecently" } }, + ["if you[' ]h?a?ve used a mark recently"] = { tag = { type = "Condition", var = "CastMarkRecently" } }, ["if you have ?n[o']t consumed a corpse recently"] = { tag = { type = "Condition", var = "ConsumedCorpseRecently", neg = true } }, ["for each corpse consumed recently"] = { tag = { type = "Multiplier", var = "CorpseConsumedRecently" } }, ["if you[' ]h?a?ve taunted an enemy recently"] = { tag = { type = "Condition", var = "TauntedEnemyRecently" } }, @@ -1986,6 +1988,7 @@ local modTagList = { ["when hitting cursed enemies"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Cursed" }, keywordFlags = KeywordFlag.Hit }, ["from cursed enemies"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Cursed" } }, ["against marked enemy"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Marked" } }, + ["against marked enemies"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Marked" } }, ["when hitting marked enemy"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Marked" }, keywordFlags = KeywordFlag.Hit }, ["from marked enemy"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Marked" } }, ["against taunted enemies"] = { tag = { type = "ActorCondition", actor = "enemy", var = "Taunted" } }, From bba92dd93c3978c34004f6812a9cc142ae0bf6d1 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:33:54 +1000 Subject: [PATCH 11/13] Misc Mods 30% reduced penalty to Accuracy Rating at range 40% increased Damage if you've Triggered a Skill Recently 35% increased Critical Hit Chance if you've Triggered a Skill Recently 60% increased Effect of Poison you inflict on targets that are not Poisoned Enemies you kill with Empowered Attacks have a 10% chance to Explode, dealing a tenth of their maximum Life as Fire Damage Inherent Life granted by Strength is halved Pinned Enemies cannot deal Critical Hits Warcries Debilitate Enemies Your Hits cannot be Evaded by Heavy Stunned Enemies Your Hits cannot be Evaded by Pinned Enemies --- src/Data/ModCache.lua | 29 ++++++++++++----------------- src/Modules/ModParser.lua | 18 +++++++++++++++--- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 3d2f76ec67..fed6158cae 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1778,8 +1778,7 @@ c["20% increased Light Radius"]={{[1]={flags=0,keywordFlags=0,name="LightRadius" c["20% increased Magnitude of Bleeding you inflict"]={{[1]={flags=0,keywordFlags=4194304,name="AilmentMagnitude",type="INC",value=20}},nil} c["20% increased Magnitude of Chill you inflict"]={{[1]={flags=0,keywordFlags=0,name="EnemyChillMagnitude",type="INC",value=20}},nil} c["20% increased Magnitude of Damaging Ailments you inflict"]={{[1]={flags=0,keywordFlags=14680064,name="AilmentMagnitude",type="INC",value=20}},nil} -c["20% increased Magnitude of Impales inflicted with Spells"]={{}," Magnitude of Impales inflicted "} -c["20% increased Magnitude of Impales inflicted with Spells 20% increased Physical Damage"]={{[1]={flags=0,keywordFlags=131072,name="PhysicalDamage",type="INC",value=20}}," Magnitude of Impales inflicted 20% increased "} +c["20% increased Magnitude of Impales inflicted with Spells"]={{[1]={flags=0,keywordFlags=131072,name="ImpaleEffect",type="INC",value=20}},nil} c["20% increased Magnitude of Non-Damaging Ailments you inflict with Critical Hits"]={{[1]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemyShockMagnitude",type="INC",value=20},[2]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemyChillMagnitude",type="INC",value=20},[3]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemyFreezeEffect",type="INC",value=20}},nil} c["20% increased Magnitude of Poison you inflict"]={{[1]={flags=0,keywordFlags=2097152,name="AilmentMagnitude",type="INC",value=20}},nil} c["20% increased Magnitude of Shock you inflict"]={{[1]={flags=0,keywordFlags=0,name="EnemyShockMagnitude",type="INC",value=20}},nil} @@ -1962,8 +1961,7 @@ c["25% increased Area of Effect of Curses"]={{[1]={flags=0,keywordFlags=2,name=" c["25% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=25}},nil} c["25% increased Armour Break Duration"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=25}}," Break Duration "} c["25% increased Armour Break Duration 25% increased Attack Area Damage"]={{[1]={flags=512,keywordFlags=0,name="Armour",type="INC",value=25}}," Break Duration 25% increased Attack Damage "} -c["25% increased Armour if you've Hit an Enemy with a Melee Attack Recently"]={{[1]={flags=256,keywordFlags=0,name="Armour",type="INC",value=25}}," if you've Hit an Enemy with a Attack Recently "} -c["25% increased Armour if you've Hit an Enemy with a Melee Attack Recently 50% increased Melee Damage against Immobilised Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Immobilised"},flags=256,keywordFlags=0,name="Armour",type="INC",value=25}}," if you've Hit an Enemy with a Attack Recently 50% increased Melee Damage "} +c["25% increased Armour if you've Hit an Enemy with a Melee Attack Recently"]={{[1]={[1]={type="Condition",var="HitMeleeRecently"},flags=0,keywordFlags=0,name="Armour",type="INC",value=25}},nil} c["25% increased Attack Area Damage"]={{[1]={flags=513,keywordFlags=0,name="Damage",type="INC",value=25}},nil} c["25% increased Attack Damage"]={{[1]={flags=1,keywordFlags=0,name="Damage",type="INC",value=25}},nil} c["25% increased Attack Damage if you have been Heavy Stunned Recently"]={{[1]={[1]={type="Condition",var="StunnedRecently"},flags=1,keywordFlags=0,name="Damage",type="INC",value=25}},nil} @@ -2364,7 +2362,7 @@ c["30% reduced effect of Curses on you"]={{[1]={flags=0,keywordFlags=0,name="Cur c["30% reduced effect of Shock on you"]={{[1]={flags=0,keywordFlags=0,name="SelfShockEffect",type="INC",value=-30}},nil} c["30% reduced maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="INC",value=-30}},nil} c["30% reduced maximum Mana"]={{[1]={flags=0,keywordFlags=0,name="Mana",type="INC",value=-30}},nil} -c["30% reduced penalty to Accuracy Rating at range"]={{[1]={flags=0,keywordFlags=0,name="Accuracy",type="INC",value=-30}}," penalty to at range "} +c["30% reduced penalty to Accuracy Rating at range"]={{[1]={flags=0,keywordFlags=0,name="AccuracyPenalty",type="INC",value=-30}},nil} c["30% slower start of Energy Shield Recharge"]={{[1]={flags=0,keywordFlags=0,name="EnergyShieldRechargeFaster",type="INC",value=-30}},nil} c["300 Physical Damage taken on Minion Death"]={{[1]={flags=0,keywordFlags=0,name="HeartboundLoopSelfDamage",type="LIST",value={baseDamage=300,damageType="physical"}}},nil} c["300% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=300}},nil} @@ -2389,8 +2387,7 @@ c["35% increased Attack Speed"]={{[1]={flags=1,keywordFlags=0,name="Speed",type= c["35% increased Charges"]={{[1]={flags=0,keywordFlags=0,name="FlaskCharges",type="INC",value=35}},nil} c["35% increased Charges gained"]={{[1]={flags=0,keywordFlags=0,name="FlaskChargesGained",type="INC",value=35}},nil} c["35% increased Critical Hit Chance"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=35}},nil} -c["35% increased Critical Hit Chance if you've Triggered a Skill Recently"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=35}}," if you've Triggered a Skill Recently "} -c["35% increased Critical Hit Chance if you've Triggered a Skill Recently Meta Skills gain 25% increased Energy if you've dealt a Critical Hit Recently"]={{[1]={[1]={type="Condition",var="CritRecently"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=35}}," if you've Triggered a Skill Recently Meta Skills gain 25% increased Energy "} +c["35% increased Critical Hit Chance if you've Triggered a Skill Recently"]={{[1]={[1]={type="Condition",var="TriggeredSkillRecently"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=35}},nil} c["35% increased Damage with Hits against Burning Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Burning"},flags=0,keywordFlags=262144,name="Damage",type="INC",value=35}},nil} c["35% increased Damage with Hits against Enemies that are on Low Life"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="LowLife"},flags=0,keywordFlags=262144,name="Damage",type="INC",value=35}},nil} c["35% increased Elemental Ailment Threshold"]={{[1]={flags=0,keywordFlags=0,name="AilmentThreshold",type="INC",value=35}},nil} @@ -2492,8 +2489,7 @@ c["40% increased Culling Strike Threshold against Rare or Unique Enemies"]={{}," c["40% increased Curse Duration"]={{[1]={flags=0,keywordFlags=2,name="Duration",type="INC",value=40}},nil} c["40% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="Damage",type="INC",value=40}},nil} c["40% increased Damage against Dazed Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Dazed"},flags=0,keywordFlags=0,name="Damage",type="INC",value=40}},nil} -c["40% increased Damage if you've Triggered a Skill Recently"]={{[1]={flags=0,keywordFlags=0,name="Damage",type="INC",value=40}}," if you've Triggered a Skill Recently "} -c["40% increased Damage if you've Triggered a Skill Recently Meta Skills gain 15% increased Energy"]={{[1]={flags=0,keywordFlags=0,name="Damage",type="INC",value=40}}," if you've Triggered a Skill Recently Meta Skills gain 15% increased Energy "} +c["40% increased Damage if you've Triggered a Skill Recently"]={{[1]={[1]={type="Condition",var="TriggeredSkillRecently"},flags=0,keywordFlags=0,name="Damage",type="INC",value=40}},nil} c["40% increased Damage with Bow Skills"]={{[1]={flags=0,keywordFlags=1024,name="Damage",type="INC",value=40}},nil} c["40% increased Damage with Hits against Ignited Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Ignited"},flags=0,keywordFlags=262144,name="Damage",type="INC",value=40}},nil} c["40% increased Damage with Two Handed Weapons"]={{[1]={flags=34359738372,keywordFlags=0,name="Damage",type="INC",value=40}},nil} @@ -2884,7 +2880,7 @@ c["60% increased Block chance"]={{[1]={flags=0,keywordFlags=0,name="BlockChance" c["60% increased Critical Damage Bonus"]={{[1]={flags=0,keywordFlags=0,name="CritMultiplier",type="INC",value=60}},nil} c["60% increased Critical Hit Chance against Immobilised enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Immobilised"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=60}},nil} c["60% increased Damage with Hits against Enemies that are on Low Life"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="LowLife"},flags=0,keywordFlags=262144,name="Damage",type="INC",value=60}},nil} -c["60% increased Effect of Poison you inflict on targets that are not Poisoned"]={{[1]={flags=0,keywordFlags=0,name="LocalEffect",type="INC",value=60}}," of Poison you inflict on targets that are not Poisoned "} +c["60% increased Effect of Poison you inflict on targets that are not Poisoned"]={{[1]={[1]={threshold=1,type="MultiplierThreshold",upper=true,var="PoisonStacks"},flags=0,keywordFlags=2097152,name="AilmentEffect",type="INC",value=60}},nil} c["60% increased Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="INC",value=60}},nil} c["60% increased Energy Shield from Equipped Body Armour"]={{[1]={[1]={slotName="Body Armour",type="SlotName"},flags=0,keywordFlags=0,name="EnergyShield",type="INC",value=60}},nil} c["60% increased Energy Shield from Equipped Focus"]={{[1]={[1]={slotName="Weapon 2",type="SlotName"},[2]={type="Condition",var="UsingFocus"},flags=0,keywordFlags=0,name="EnergyShield",type="INC",value=60}},nil} @@ -4494,7 +4490,7 @@ c["Enemies you Mark have 10% reduced Accuracy Rating"]={{[1]={[1]={actor="enemy" c["Enemies you Mark take 10% increased Damage"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Marked"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=10}}}},nil} c["Enemies you apply Incision to take 2% increased Physical Damage per Incision"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Multiplier",var="IncisionStack"},flags=0,keywordFlags=0,name="PhysicalDamageTaken",type="INC",value=2}}}},nil} c["Enemies you inflict Bleeding on cannot Regenerate Life"]={nil,"Enemies you inflict Bleeding on cannot Regenerate Life "} -c["Enemies you kill with Empowered Attacks have a 10% chance to Explode, dealing a tenth of their maximum Life as Fire Damage"]={nil,"Enemies you kill with Empowered Attacks have a 10% chance to Explode, dealing a tenth of their maximum Life as Fire Damage "} +c["Enemies you kill with Empowered Attacks have a 10% chance to Explode, dealing a tenth of their maximum Life as Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="ExplodeMod",type="LIST",value={amount=10,chance=0.1,keyOfScaledMod="chance",type="Fire"}},[2]={flags=0,keywordFlags=0,name="CanExplode",type="FLAG",value=true}},nil} c["Enemies' Damage with Critical Hits against you is Lucky"]={nil,"Enemies' Damage with Critical Hits is Lucky "} c["Energy Generation is doubled"]={{},"Energy Generation "} c["Energy Shield Recharge is not interrupted by Damage if Recharge began Recently"]={nil,"Energy Shield Recharge is not interrupted by Damage if Recharge began Recently "} @@ -4948,7 +4944,7 @@ c["Inflict Lightning Exposure on Critical Hit"]={nil,"Inflict Lightning Exposure c["Inflicts Fire Exposure when this Weapon Fully Breaks Armour"]={nil,"Inflicts Fire Exposure when this Weapon Fully Breaks Armour "} c["Inflicts a random Curse on you when your Totems die, ignoring Curse limit"]={nil,"Inflicts a random Curse on you when your Totems die, ignoring Curse limit "} c["Infusion Remnants you create are always a Random Element"]={nil,"Infusion Remnants you create are always a Random Element "} -c["Inherent Life granted by Strength is halved"]={nil,"Inherent Life granted by Strength is halved "} +c["Inherent Life granted by Strength is halved"]={{[1]={flags=0,keywordFlags=0,name="HalvesLifeFromStrength",type="FLAG",value=true}},nil} c["Inherent Rage Loss starts 1 second later"]={{[1]={flags=0,keywordFlags=0,name="InherentRageLossDelay",type="BASE",value=1}},nil} c["Inherent bonuses gained from Attributes are doubled"]={{[1]={flags=0,keywordFlags=0,name="DoubledInherentAttributeBonuses",type="FLAG",value=true}},nil} c["Inherent loss of Rage is 20% slower"]={{[1]={flags=0,keywordFlags=0,name="InherentRageLoss",type="INC",value=-20}},nil} @@ -5280,7 +5276,7 @@ c["Physical Damage is Pinning"]={nil,"Physical Damage is Pinning "} c["Physical Spell Critical Hits build Pin"]={nil,"Physical Spell Critical Hits build Pin "} c["Pin Enemies which are Primed for Pinning"]={nil,"Pin Enemies which are Primed for Pinning "} c["Pin Enemies which are Primed for Pinning Require 5 fewer enemies to be Surrounded"]={nil,"Pin Enemies which are Primed for Pinning Require 5 fewer enemies to be Surrounded "} -c["Pinned Enemies cannot deal Critical Hits"]={nil,"Pinned Enemies cannot deal Critical Hits "} +c["Pinned Enemies cannot deal Critical Hits"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Pinned"},flags=0,keywordFlags=0,name="NeverCrit",type="FLAG",value=true}}},[2]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Pinned"},flags=0,keywordFlags=0,name="Condition:NeverCrit",type="FLAG",value=true}}}},nil} c["Pinned enemies cannot perform actions"]={nil,"Pinned enemies cannot perform actions "} c["Possessed by Spirit Of The Bear for 20 seconds on use"]={nil,"Possessed by Spirit Of The Bear for 20 seconds on use "} c["Possessed by Spirit Of The Bear for 20 seconds on use Possessed by Spirit Of The Boar for 20 seconds on use"]={nil,"Possessed by Spirit Of The Bear for 20 seconds on use Possessed by Spirit Of The Boar for 20 seconds on use "} @@ -5587,8 +5583,7 @@ c["Used when you take Fire damage from a Hit 40% increased Charges"]={nil,"Used c["Used when you take Lightning damage from a Hit"]={nil,"Used when you take Lightning damage from a Hit "} c["Used when you take Lightning damage from a Hit 40% increased Charges gained"]={nil,"Used when you take Lightning damage from a Hit 40% increased Charges gained "} c["Volatile Power also grants 1% increased Critical Hit chance per Volatility exploded"]={nil,"Volatile Power also grants 1% increased Critical Hit chance per Volatility exploded "} -c["Warcries Debilitate Enemies"]={nil,"Warcries Debilitate Enemies "} -c["Warcries Debilitate Enemies Warcry Skills have 25% increased Area of Effect"]={nil,"Warcries Debilitate Enemies Warcry Skills have 25% increased Area of Effect "} +c["Warcries Debilitate Enemies"]={{[1]={flags=0,keywordFlags=0,name="DebilitateChance",type="BASE",value=100}},nil} c["Warcries Empower an additional Attack"]={nil,"Warcries Empower an additional Attack "} c["Warcries Explode Corpses dealing 10% of their Life as Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="ExplodeMod",type="LIST",value={amount=10,chance=1,keyOfScaledMod="chance",type="Physical"}},[2]={flags=0,keywordFlags=0,name="CanExplode",type="FLAG",value=true}},nil} c["Warcries Explode Corpses dealing 25% of their Life as Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="ExplodeMod",type="LIST",value={amount=25,chance=1,keyOfScaledMod="chance",type="Physical"}},[2]={flags=0,keywordFlags=0,name="CanExplode",type="FLAG",value=true}},nil} @@ -5692,8 +5687,8 @@ c["Your Heavy Stun buildup empties 50% faster"]={nil,"Your Heavy Stun buildup em c["Your Heavy Stun buildup empties 50% faster if you've successfully Parried Recently"]={nil,"Your Heavy Stun buildup empties 50% faster if you've successfully Parried Recently "} c["Your Hits are Crushing Blows"]={nil,"Your Hits are Crushing Blows "} c["Your Hits can Penetrate Elemental Resistances down to a minimum of -50%"]={{[1]={flags=0,keywordFlags=262144,name="ElementalPenetrationMinimum",type="BASE",value=-50}},nil} -c["Your Hits cannot be Evaded by Heavy Stunned Enemies"]={nil,"Your Hits cannot be Evaded by Heavy Stunned Enemies "} -c["Your Hits cannot be Evaded by Pinned Enemies"]={nil,"Your Hits cannot be Evaded by Pinned Enemies "} +c["Your Hits cannot be Evaded by Heavy Stunned Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="HeavyStunned"},flags=0,keywordFlags=0,name="CannotBeEvaded",type="FLAG",value=true}},nil} +c["Your Hits cannot be Evaded by Pinned Enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Pinned"},flags=0,keywordFlags=0,name="CannotBeEvaded",type="FLAG",value=true}},nil} c["Your Life Flask also applies to your Minions"]={nil,"Your Life Flask also applies to your Minions "} c["Your Life Flask also applies to your Minions Minions cannot Die while affected by a Life Flask"]={nil,"Your Life Flask also applies to your Minions Minions cannot Die while affected by a Life Flask "} c["Your Life cannot change while you have Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EternalLife",type="FLAG",value=true}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index abe2f690a1..b16587def9 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -573,6 +573,7 @@ local modNameList = { ["effect of impales you inflict"] = "ImpaleEffect", ["effects of impale inflicted"] = "ImpaleEffect", -- typo / old wording change ["effect of impales inflicted"] = "ImpaleEffect", + ["magnitude of impales inflicted"] = "ImpaleEffect", -- Projectile modifiers ["projectile"] = "ProjectileCount", ["projectiles"] = "ProjectileCount", @@ -759,6 +760,7 @@ local modNameList = { ["magnitude of ignite you inflict"] = { "AilmentMagnitude", keywordFlags = KeywordFlag.Ignite }, ["ignite magnitude"] = { "AilmentMagnitude", keywordFlags = KeywordFlag.Ignite }, ["magnitude of poison you inflict"] = { "AilmentMagnitude", keywordFlags = KeywordFlag.Poison }, + ["effect of poison you inflict"] = { "AilmentEffect", keywordFlags = KeywordFlag.Poison }, ["magnitude of ailments you inflict"] = "AilmentMagnitude", ["magnitude of damaging ailments you inflict"] = { "AilmentMagnitude", keywordFlags = bor(KeywordFlag.Poison, KeywordFlag.Bleed, KeywordFlag.Ignite) }, ["effect of lightning ailments"] = "EnemyShockMagnitude", @@ -858,6 +860,7 @@ local modNameList = { ["to apply lightning exposure on hit"] = "LightningExposureChance", ["to pierce an enemy"] = "PierceChance", ["to chain an additional time"] = "ChainChance", + ["penalty to accuracy rating at range"] = "AccuracyPenalty", ["when you reload a crossbow to be immediate"] = "InstantReloadChance", ["to not consume a bolt"] = "ChanceToNotConsumeAmmo", -- Flask and Charm modifiers @@ -981,7 +984,7 @@ local modFlagList = { -- Skill types ["spell"] = { flags = ModFlag.Spell }, ["for spells"] = { flags = ModFlag.Spell }, - ["for spell skills"] = {flags = ModFlag.Spell }, + ["for spell skills"] = { flags = ModFlag.Spell }, ["for spell damage"] = { flags = ModFlag.Spell }, ["with spell damage"] = { flags = ModFlag.Spell }, ["with spells"] = { keywordFlags = KeywordFlag.Spell }, @@ -1810,6 +1813,8 @@ local modTagList = { ["if you[' ]h?a?ve hit a cursed enemy recently"] = { tagList = { { type = "Condition", var = "HitRecently" }, { type = "ActorCondition", actor = "enemy", var = "Cursed" } } }, ["if you[' ]h?a?ve dealt a projectile attack hit in the past eight seconds"] = { tag = { type = "Condition", var = "HitProjectileRecently" } }, ["if you[' ]h?a?ve dealt a melee hit in the past eight seconds"] = { tag = { type = "Condition", var = "HitMeleeRecently" } }, + ["if you[' ]h?a?ve dealt a melee hit in the past eight seconds"] = { tag = { type = "Condition", var = "HitMeleeRecently" } }, + ["if you[' ]h?a?ve hit an enemy with a melee attack recently"] = { tag = { type = "Condition", var = "HitMeleeRecently" } }, ["if you[' ]h?a?ve triggered a skill recently"] = { tag = { type = "Condition", var = "TriggeredSkillRecently" } }, ["when you or your totems hit an enemy with a spell"] = { tag = { type = "Condition", varList = { "HitSpellRecently","TotemsHitSpellRecently" } }, }, ["on hit with spells"] = { tag = { type = "Condition", var = "HitSpellRecently" } }, @@ -2030,6 +2035,7 @@ local modTagList = { ["against enemies that are affected by elemental ailments"] = { tag = { type = "ActorCondition", actor = "enemy", varList = { "Frozen","Chilled","Shocked","Ignited","Scorched","Brittle","Sapped" } } }, ["against enemies that are affected by no elemental ailments"] = { tagList = { { type = "ActorCondition", actor = "enemy", varList = { "Frozen","Chilled","Shocked","Ignited","Scorched","Brittle","Sapped" }, neg = true }, { type = "Condition", var = "Effective" } } }, ["against enemies affected by (%d+) spider's webs"] = function(num) return { tag = { type = "MultiplierThreshold", actor = "enemy", var = "Spider's WebStack", threshold = num } } end, + ["on targets that are not poisoned"] = { tag = { type = "MultiplierThreshold", var = "PoisonStacks", threshold = 1, upper = true } }, ["against enemies on consecrated ground"] = { tag = { type = "ActorCondition", actor = "enemy", var = "OnConsecratedGround" } }, ["if (%d+)%% of curse duration expired"] = function(num) return { tag = { type = "MultiplierThreshold", actor = "enemy", var = "CurseExpired", threshold = num } } end, ["against enemies with (%w+) exposure"] = function(element) return { tag = { type = "ActorCondition", actor = "enemy", var = "Has"..(firstToUpper(element).."Exposure") } } end, @@ -2145,6 +2151,9 @@ local specialModList = { ["enemies you or your totems kill have (%d+)%% chance to explode, dealing (%d+)%% of their maximum life as (.+) damage"] = function(chance, _, amount, type) -- Hinekora, Death's Fury 3.23 return explodeFunc(chance, amount, type) end, + ["enemies you kill with empowered attacks have a (%d+)%% chance to explode, dealing a (.+) of their maximum life as (.+) damage"] = function(chance, _, amount, type) -- Obliteration, Unspeakable Gifts (chaos cluster), synth implicit mod, current crusader body mod, Ngamahu Warmonger tattoo + return explodeFunc(chance, amount, type) + end, ["enemies you kill while using pride have (%d+)%% chance to explode, dealing a (.+) of their maximum life as (.+) damage"] = function(chance, _, amount, type) -- Sublime Vision return explodeFunc(chance, amount, type, { type = "Condition", var = "AffectedByPride" }) end, @@ -2226,7 +2235,7 @@ local specialModList = { mod("SpellSuppressionChance", "OVERRIDE", 0, "Acrobatics"), }, ["maximum chance to dodge spell hits is (%d+)%%"] = function(num) return { mod("SpellDodgeChanceMax", "OVERRIDE", num, "Acrobatics") } end, - ["halves the amount of life granted by strength"] = { flag("HalvesLifeFromStrength")}, + ["inherent life granted by strength is halved"] = { flag("HalvesLifeFromStrength")}, ["dexterity provides no bonus to evasion rating"] = { flag("NoDexBonusToEvasion") }, ["dexterity provides no inherent bonus to evasion rating"] = { flag("NoDexBonusToEvasion") }, ["your hits can't be evaded"] = { flag("CannotBeEvaded") }, @@ -3493,6 +3502,7 @@ local specialModList = { ["gain a flask charge when you deal a critical hit while affected by precision"] = { mod("FlaskChargeOnCritChance", "BASE", 100, { type = "Condition", var = "AffectedByPrecision" }) }, ["gain a flask charge when you deal a critical hit while at maximum frenzy charges"] = { mod("FlaskChargeOnCritChance", "BASE", 100, { type = "StatThreshold", stat = "FrenzyCharges", thresholdStat = "FrenzyChargesMax" }) }, ["enemies poisoned by you cannot deal critical hits"] = { mod("EnemyModifier", "LIST", { mod = flag("NeverCrit", { type = "Condition", var = "Poisoned" }) }), mod("EnemyModifier", "LIST", { mod = flag("Condition:NeverCrit", { type = "Condition", var = "Poisoned" })}) }, + ["pinned enemies cannot deal critical hits"] = { mod("EnemyModifier", "LIST", { mod = flag("NeverCrit", { type = "Condition", var = "Pinned" }) }), mod("EnemyModifier", "LIST", { mod = flag("Condition:NeverCrit", { type = "Condition", var = "Pinned" })}) }, ["enemies you mark cannot deal critical hits"] = { mod("EnemyModifier", "LIST", { mod = flag("NeverCrit", { type = "Condition", var = "Marked" }) }), mod("EnemyModifier", "LIST", { mod = flag("Condition:NeverCrit", { type = "Condition", var = "Marked" })}) }, ["hits against you cannot be critical hits if you've been stunned recently"] = { mod("EnemyModifier", "LIST", { mod = flag("NeverCrit") }, {type = "Condition", var = "StunnedRecently" }), mod("EnemyModifier", "LIST", { mod = flag("Condition:NeverCrit")}, {type = "Condition", var = "StunnedRecently" })}, ["nearby enemies cannot deal critical hits"] = { mod("EnemyModifier", "LIST", { mod = flag("NeverCrit") }), mod("EnemyModifier", "LIST", { mod = flag("Condition:NeverCrit") }) }, @@ -4212,6 +4222,7 @@ local specialModList = { ["debuffs on you expire (%d+)%% faster"] = function(num) return { mod("SelfDebuffExpirationRate", "BASE", num) } end, ["buffs on you expire (%d+)%% slower"] = function(num) return { mod("Duration", "INC", num, { type = "SkillType", skillType = SkillType.Buff }) } end, ["warcries debilitate enemies for (%d+) seconds?"] = { mod("DebilitateChance", "BASE", 100) }, + ["warcries debilitate enemies"] = { mod("DebilitateChance", "BASE", 100) }, ["debilitate enemies for (%d+) seconds? when you suppress their spell damage"] = { mod("DebilitateChance", "BASE", 100) }, ["debilitate nearby enemies for (%d+) seconds? when f?l?a?s?k? ?effect ends"] = { mod("DebilitateChance", "BASE", 100) }, ["counterattacks have a (%d+)%% chance to debilitate on hit for (%d+) seconds?"] = function (num) return { mod("DebilitateChance", "BASE", num) } end, @@ -4459,7 +4470,6 @@ local specialModList = { ["bow attacks fire (%d+) additional arrows"] = function(num) return { mod("ProjectileCount", "BASE", num, nil, ModFlag.Bow) } end, ["bow attacks fire (%d+) additional arrows if you haven't cast dash recently"] = function(num) return { mod("ProjectileCount", "BASE", num, nil, ModFlag.Bow, { type = "Condition", var = "CastDashRecently", neg = true }) } end, ["wand attacks fire an additional projectile"] = { mod("ProjectileCount", "BASE", 1, nil, ModFlag.Wand) }, - ["(%d+)%% chance for crossbow attacks to not consume a bolt"] = function(num) return { mod("ChanceToNotConsumeAmmo", "BASE", num, nil, ModFlag.Crossbow, { type = "SkillType", skillType = SkillType.CrossbowSkill }) } end, ["loads? an additional bolt"] = { mod("CrossbowBoltCount", "BASE", 1, nil, ModFlag.Crossbow, { type = "SkillType", skillType = SkillType.CrossbowSkill }) }, ["loads? (%d+) additional bolts?"] = function(num) return { mod("CrossbowBoltCount", "BASE", num, nil, ModFlag.Crossbow, { type = "SkillType", skillType = SkillType.CrossbowSkill }) } end, ["grenade skills fire an additional projectile"] = { mod("ProjectileCount", "BASE", 1, nil, ModFlag.Projectile, { type = "SkillType", skillType = SkillType.Grenade })}, @@ -5357,6 +5367,8 @@ local specialModList = { ["you have resolute technique while you do not have elemental overload"] = { mod("Keystone", "LIST", "Resolute Technique", { neg = true, type = "Condition", var = "HaveElementalOverload" }) }, ["hits ignore enemy monster fire resistance while you are ignited"] = { flag("IgnoreFireResistance", { type = "Condition", var = "Ignited" }) }, ["your hits can't be evaded by blinded enemies"] = { flag("CannotBeEvaded", { type = "ActorCondition", actor = "enemy", var = "Blinded" }) }, + ["your hits cannot be evaded by pinned enemies"] = { flag("CannotBeEvaded", { type = "ActorCondition", actor = "enemy", var = "Pinned" }) }, + ["your hits cannot be evaded by heavy stunned enemies"] = { flag("CannotBeEvaded", { type = "ActorCondition", actor = "enemy", var = "HeavyStunned" }) }, ["blind does not affect your chance to hit"] = { flag("IgnoreBlindHitChance") }, ["enemies blinded by you while you are blinded have malediction"] = { mod("EnemyModifier", "LIST", { mod = flag("HasMalediction", { type = "Condition", var = "Blinded" }) }, { type = "Condition", var = "Blinded" }, { type = "Condition", var = "CannotBeBlinded", neg = true }) }, ["enemies blinded by you have malediction"] = { mod("EnemyModifier", "LIST", { mod = flag("HasMalediction", { type = "Condition", var = "Blinded" }) }) }, From 2d3dfc0b52121d47005a6b9edf42040421797f44 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:35:13 +1000 Subject: [PATCH 12/13] Config clean up Stop always showing some configs Mana burn isn't even needed any more at this point --- src/Modules/ConfigOptions.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 812443cc8e..b8b8ce1ac2 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -936,7 +936,6 @@ Huge sets the radius to 11. { var = "conditionUsingCharm", type = "check", label = "Do you have a Charm active?", ifCond = "UsingCharm", tooltip = "This is automatically enabled if you have a charm active,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) modList:NewMod("Condition:UsingCharm", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "multiplierManaBurnStacks", type = "count", label = "Mana Burn Stacks:", tooltip = "Mana Burn Applies a 1% of mana degen per stack\nThis also applies Weeping Wounds if the Keystone is Allocated"}, { var = "conditionHaveTotem", type = "check", label = "Do you have a Totem summoned?", ifCond = "HaveTotem", tooltip = "You will automatically be considered to have a Totem if your main skill is a Totem,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) modList:NewMod("Condition:HaveTotem", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, @@ -1003,7 +1002,7 @@ Huge sets the radius to 11. { var = "conditionScorched", type = "check", label = "Are you ^xB97123Scorched?", ifCond = "Scorched", apply = function(val, modList, enemyModList) modList:NewMod("Condition:Scorched", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionChilled", type = "check", label = "Are you ^x3F6DB3Chilled?", apply = function(val, modList, enemyModList) + { var = "conditionChilled", type = "check", label = "Are you ^x3F6DB3Chilled?", ifCond = "Chilled", apply = function(val, modList, enemyModList) modList:NewMod("Condition:Chilled", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionChilledEffect", type = "count", label = "Effect of ^x3F6DB3Chill:", ifOption = "conditionChilled", apply = function(val, modList, enemyModList) @@ -1397,7 +1396,7 @@ Huge sets the radius to 11. { var = "conditionSoulGainPrevention", type = "check", label = "Do you have Soul Gain Prevention?", ifCond = "SoulGainPrevention", apply = function(val, modList, enemyModList) modList:NewMod("Condition:SoulGainPrevention", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionUsedWarcryRecently", type = "check", label = "Have you used a Warcry Recently?", {ifFlag = "warcry", ifCond = "UsedWarcryRecently"}, implyCondList = {"UsedWarcryInPast8Seconds", "UsedSkillRecently"}, tooltip = "This also implies that you have used a Skill Recently.", apply = function(val, modList, enemyModList) + { var = "conditionUsedWarcryRecently", type = "check", label = "Have you used a Warcry Recently?", ifFlag = "warcry", implyCondList = {"UsedWarcryInPast8Seconds", "UsedSkillRecently"}, tooltip = "This also implies that you have used a Skill Recently.", apply = function(val, modList, enemyModList) modList:NewMod("Condition:UsedWarcryRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) modList:NewMod("Condition:UsedWarcryInPast8Seconds", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) modList:NewMod("Condition:UsedSkillRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) From 9be84a99fab359f477f63f3cf7279d34f8133583 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 21:39:52 +1000 Subject: [PATCH 13/13] Typo --- src/Modules/ConfigOptions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index b8b8ce1ac2..4bbeb01709 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -1459,7 +1459,7 @@ Huge sets the radius to 11. { var = "conditionTauntedEnemyRecently", type = "check", label = "Taunted an enemy Recently?", ifCond = "TauntedEnemyRecently", apply = function(val, modList, enemyModList) modList:NewMod("Condition:TauntedEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionReloadedlRecently", type = "check", label = "Have you Reloaded Recently?", ifSkillType = SkillType.CrossbowAmmoSkill, apply = function(val, modList, enemyModList) + { var = "conditionReloadedRecently", type = "check", label = "Have you Reloaded Recently?", ifSkillType = SkillType.CrossbowAmmoSkill, apply = function(val, modList, enemyModList) modList:NewMod("Condition:ReloadedRecently", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionLostEnduranceChargeInPast8Sec", type = "check", label = "Lost an Endurance Charge in the past 8s?", ifCond = "LostEnduranceChargeInPast8Sec", apply = function(val, modList, enemyModList)