From 455f09e8169da6386b82f0c97dc620945c318e91 Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Sun, 21 Sep 2025 02:20:49 +0200 Subject: [PATCH 01/13] add parsing for glory generation add support for glory generation add UI for glory generation --- src/Data/ModCache.lua | 8 ++++---- src/Data/SkillStatMap.lua | 7 ++++++- src/Modules/BuildDisplayStats.lua | 2 ++ src/Modules/CalcOffence.lua | 11 +++++++++++ src/Modules/ModParser.lua | 2 ++ 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index e2b805839c..e32b5a28c5 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1477,7 +1477,7 @@ c["15% increased Flask Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="Fla c["15% increased Freeze Buildup"]={{}," Freeze Buildup "} c["15% increased Freeze Buildup 15% increased Chill and Freeze Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyFreezeDuration",type="INC",value=15},[2]={flags=0,keywordFlags=0,name="EnemyChillDuration",type="INC",value=15}}," Freeze Buildup 15% increased "} c["15% increased Global Physical Damage"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=15}},nil} -c["15% increased Glory generation"]={{}," Glory generation "} +c["15% increased Glory generation"]={{[1]={flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=15}},nil} c["15% increased Ignite Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyIgniteDuration",type="INC",value=15}},nil} c["15% increased Ignite Magnitude"]={{[1]={flags=0,keywordFlags=8388608,name="AilmentMagnitude",type="INC",value=15}},nil} c["15% increased Immobilisation buildup"]={{}," Immobilisation buildup "} @@ -1789,7 +1789,7 @@ c["20% increased Freeze Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name c["20% increased Frenzy Charge Duration"]={{[1]={flags=0,keywordFlags=0,name="FrenzyChargesDuration",type="INC",value=20}},nil} c["20% increased Global Defences"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="Defences",type="INC",value=20}},nil} c["20% increased Global Physical Damage"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=20}},nil} -c["20% increased Glory generation for Banner Skills"]={{}," Glory generation for Banner Skills "} +c["20% increased Glory generation for Banner Skills"]={{[1]={[1]={skillType=88,type="SkillType"},flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=20}},nil} c["20% increased Hazard Duration"]={{[1]={[1]={skillType=203,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=20}},nil} c["20% increased Hazard Immobilisation buildup"]={{}," Immobilisation buildup "} c["20% increased Hinder Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=20}}," Hinder "} @@ -3039,7 +3039,7 @@ c["8% increased Flask Charges gained"]={{[1]={flags=0,keywordFlags=0,name="Flask c["8% increased Flask Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="FlaskDuration",type="INC",value=8}},nil} c["8% increased Flask and Charm Charges gained"]={{[1]={flags=0,keywordFlags=0,name="CharmChargesGained",type="INC",value=8},[2]={flags=0,keywordFlags=0,name="FlaskChargesGained",type="INC",value=8}},nil} c["8% increased Freeze Buildup"]={{}," Freeze Buildup "} -c["8% increased Glory generation"]={{}," Glory generation "} +c["8% increased Glory generation"]={{[1]={flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=8}},nil} c["8% increased Ignite Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyIgniteDuration",type="INC",value=8}},nil} c["8% increased Ignite Magnitude"]={{[1]={flags=0,keywordFlags=8388608,name="AilmentMagnitude",type="INC",value=8}},nil} c["8% increased Immobilisation buildup"]={{}," Immobilisation buildup "} @@ -3320,7 +3320,7 @@ c["Allies in your Presence have 15% increased Attack Speed"]={{[1]={flags=0,keyw c["Allies in your Presence have 15% increased Cast Speed"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=16,keywordFlags=0,name="Speed",type="INC",value=15},onlyAllies=true}}},nil} c["Allies in your Presence have 20% increased Attack Speed"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=1,keywordFlags=0,name="Speed",type="INC",value=20},onlyAllies=true}}},nil} c["Allies in your Presence have 20% increased Cast Speed"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=16,keywordFlags=0,name="Speed",type="INC",value=20},onlyAllies=true}}},nil} -c["Allies in your Presence have 30% increased Glory generation"]={{}," Glory generation "} +c["Allies in your Presence have 30% increased Glory generation"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=30},onlyAllies=true}}},nil} c["Allies in your Presence have 32% increased Critical Damage Bonus"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritMultiplier",type="INC",value=32},onlyAllies=true}}},nil} c["Allies in your Presence have 32% increased Critical Hit Chance"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritChance",type="INC",value=32},onlyAllies=true}}},nil} c["Allies in your Presence have 40% increased Critical Damage Bonus"]={{[1]={flags=0,keywordFlags=0,name="ExtraAura",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritMultiplier",type="INC",value=40},onlyAllies=true}}},nil} diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index 0246f89031..0fb8edc81f 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -318,6 +318,12 @@ return { skill("castTimeOverride", nil), div = 1000, }, +["active_skill_requires_X_glory"] = { + skill("gloryCost", nil), +}, +["active_skill_generates_mp_%_glory_per_attack_hit"] = { + mod("GloryPctOnHitMp", "BASE", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), +}, ["skill_cannot_gain_repeat_bonuses"] = { flag("NoRepeatBonuses"), }, @@ -2488,7 +2494,6 @@ return { ["banner_aura_magnitude_+%_final_per_resource"] = { mod("AuraEffect", "MORE", nil, 0, 0, { type = "Multiplier", var = "BannerValour" }, { type = "Condition", var = "BannerPlanted" }), }, - -- Crossbow ["reload_speed_+%"] = { mod("ReloadSpeed", "INC", nil), diff --git a/src/Modules/BuildDisplayStats.lua b/src/Modules/BuildDisplayStats.lua index 4e2d3986d6..297f40cdc4 100644 --- a/src/Modules/BuildDisplayStats.lua +++ b/src/Modules/BuildDisplayStats.lua @@ -75,6 +75,8 @@ local displayStats = { { stat = "SealMax", label = "Max Number of Seals", fmt = "d" }, { stat = "TimeMaxSeals", label = "Time to Gain Max Seals", fmt = ".2fs", lowerIsBetter = true }, { stat = "AreaOfEffectRadiusMetres", label = "AoE Radius", fmt = ".1fm" }, + { stat = "GloryCost", label = "Glory cost", fmt = ".0f", colorCodes.RARE }, + { stat = "GloryPerSecond", label = "Glory per second", fmt = ".0f", colorCodes.RARE }, { stat = "BrandAttachmentRangeMetre", label = "Attachment Range", fmt = ".1fm", flag = "brand" }, { stat = "BrandTicks", label = "Activations per Brand", fmt = "d", flag = "brand" }, { stat = "ManaCost", label = "Mana Cost", fmt = "d", color = colorCodes.MANA, pool = "ManaUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaHasCost end }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 09b98a9e41..bcbe80c78d 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -5599,6 +5599,17 @@ function calcs.offence(env, actor, activeSkill) end end + if skillData.gloryCost then + output.GloryCost = skillData.gloryCost + end + + local gloryPctOnHitMp = (modDB:Sum("BASE", skillCfg, "GloryPctOnHitMp") or 0) / 100 --local gloryPctOnHitMp = calcLib.mod(modDB, skillCfg, "GloryPctOnHitMp") + if gloryPctOnHitMp > 0 then + local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") / 100 + local monsterPower = 20 + output.GloryPerSecond = gloryPctOnHitMp * (1+inc) * output.Speed * monsterPower + end + -- Calculate combined DPS estimate, including DoTs local baseDPS = output[(skillData.showAverage and "AverageDamage") or "TotalDPS"] output.CombinedDPS = baseDPS diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 00315b849a..e06d8d471f 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -870,6 +870,7 @@ local modNameList = { ["penalty to accuracy rating at range"] = "AccuracyPenalty", ["when you reload a crossbow to be immediate"] = "InstantReloadChance", ["to not expend ammunition"] = "ChanceToNotConsumeAmmo", + ["glory generation"] = "GloryGeneration", -- Flask and Charm modifiers ["effect"] = "LocalEffect", ["effect of flasks"] = "FlaskEffect", @@ -1100,6 +1101,7 @@ local modFlagList = { ["of your mark skills"] = { tag = { type = "SkillType", skillType = SkillType.Mark } }, ["with command skills"] = { tag = { type = "Condition", var = "CommandableSkill" } }, ["for command skills"] = { tag = { type = "Condition", var = "CommandableSkill" } }, + ["for banner skills"] = { tag = { type = "SkillType", skillType = SkillType.Banner } }, ["minion"] = { addToMinion = true }, ["zombie"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Raise Zombie", includeTransfigured = true } }, ["raised zombie"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Raise Zombie", includeTransfigured = true } }, From 652e197399add513064b5dbe1c072417aa7544e5 Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Mon, 22 Sep 2025 02:08:36 +0200 Subject: [PATCH 02/13] fix multiple banners multiplying glory cost --- src/Data/SkillStatMap.lua | 3 ++- src/Modules/CalcOffence.lua | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index 0fb8edc81f..e70c2796af 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -322,7 +322,8 @@ return { skill("gloryCost", nil), }, ["active_skill_generates_mp_%_glory_per_attack_hit"] = { - mod("GloryPctOnHitMp", "BASE", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), + mod("GloryPctOnHitMp", "MAX", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), + div = 100 }, ["skill_cannot_gain_repeat_bonuses"] = { flag("NoRepeatBonuses"), diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index bcbe80c78d..cc716f198f 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -5602,12 +5602,12 @@ function calcs.offence(env, actor, activeSkill) if skillData.gloryCost then output.GloryCost = skillData.gloryCost end - - local gloryPctOnHitMp = (modDB:Sum("BASE", skillCfg, "GloryPctOnHitMp") or 0) / 100 --local gloryPctOnHitMp = calcLib.mod(modDB, skillCfg, "GloryPctOnHitMp") + + local gloryPctOnHitMp = modDB:Max(skillCfg, "GloryPctOnHitMp") or 0 if gloryPctOnHitMp > 0 then - local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") / 100 + local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") local monsterPower = 20 - output.GloryPerSecond = gloryPctOnHitMp * (1+inc) * output.Speed * monsterPower + output.GloryPerSecond = gloryPctOnHitMp * (1+inc/100) * output.Speed * monsterPower end -- Calculate combined DPS estimate, including DoTs From 5b695b5f9cb5fa2f7ea181475baa92a9f31cca6d Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Mon, 22 Sep 2025 02:22:14 +0200 Subject: [PATCH 03/13] clarify glory gain relates to banners --- src/Modules/BuildDisplayStats.lua | 4 ++-- src/Modules/CalcOffence.lua | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Modules/BuildDisplayStats.lua b/src/Modules/BuildDisplayStats.lua index 297f40cdc4..1f06f78455 100644 --- a/src/Modules/BuildDisplayStats.lua +++ b/src/Modules/BuildDisplayStats.lua @@ -75,8 +75,8 @@ local displayStats = { { stat = "SealMax", label = "Max Number of Seals", fmt = "d" }, { stat = "TimeMaxSeals", label = "Time to Gain Max Seals", fmt = ".2fs", lowerIsBetter = true }, { stat = "AreaOfEffectRadiusMetres", label = "AoE Radius", fmt = ".1fm" }, - { stat = "GloryCost", label = "Glory cost", fmt = ".0f", colorCodes.RARE }, - { stat = "GloryPerSecond", label = "Glory per second", fmt = ".0f", colorCodes.RARE }, + { stat = "GloryCost", label = "Glory Cost", fmt = ".0f", colorCodes.RARE }, + { stat = "BannerGloryPerSecond", label = "Banner glory per second", fmt = ".0f", colorCodes.RARE }, { stat = "BrandAttachmentRangeMetre", label = "Attachment Range", fmt = ".1fm", flag = "brand" }, { stat = "BrandTicks", label = "Activations per Brand", fmt = "d", flag = "brand" }, { stat = "ManaCost", label = "Mana Cost", fmt = "d", color = colorCodes.MANA, pool = "ManaUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaHasCost end }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 2b79ffbea2..27698f546e 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -5609,7 +5609,7 @@ function calcs.offence(env, actor, activeSkill) if gloryPctOnHitMp > 0 then local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") local monsterPower = 20 - output.GloryPerSecond = gloryPctOnHitMp * (1+inc/100) * output.Speed * monsterPower + output.BannerGloryPerSecond = gloryPctOnHitMp * (1+inc/100) * output.Speed * monsterPower end -- Calculate combined DPS estimate, including DoTs From 136fca67f3d0ea6059382f2ab23faf1e70b3e8fa Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Thu, 25 Sep 2025 05:01:32 +0200 Subject: [PATCH 04/13] remove banner-specific passive parsing rename variables move display from sidebar to calc fix hitrate and accuracy for banner glory/s --- src/Data/ModCache.lua | 2 +- src/Data/SkillStatMap.lua | 2 +- src/Modules/CalcOffence.lua | 24 +++++++++++++----------- src/Modules/CalcSections.lua | 1 + src/Modules/ModParser.lua | 1 - 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index e018eb7804..bfc2c15a50 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1698,7 +1698,7 @@ c["20% increased Freeze Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name c["20% increased Frenzy Charge Duration"]={{[1]={flags=0,keywordFlags=0,name="FrenzyChargesDuration",type="INC",value=20}},nil} c["20% increased Global Defences"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="Defences",type="INC",value=20}},nil} c["20% increased Global Physical Damage"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=20}},nil} -c["20% increased Glory generation for Banner Skills"]={{[1]={[1]={skillType=88,type="SkillType"},flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=20}},nil} +c["20% increased Glory generation for Banner Skills"]={{[1]={flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=20}}," for Banner Skills "} c["20% increased Hazard Duration"]={{[1]={[1]={skillType=203,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=20}},nil} c["20% increased Hazard Immobilisation buildup"]={{}," Immobilisation buildup "} c["20% increased Hinder Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=20}}," Hinder "} diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index 83ec5e997d..da14df530a 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -322,7 +322,7 @@ return { skill("gloryCost", nil), }, ["active_skill_generates_mp_%_glory_per_attack_hit"] = { - mod("GloryPctOnHitMp", "MAX", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), + mod("GloryMonsterPowerPercentOnHit", "MAX", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), div = 100 }, ["skill_cannot_gain_repeat_bonuses"] = { diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 27698f546e..88863f13fb 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -3296,6 +3296,10 @@ function calcs.offence(env, actor, activeSkill) activeSkill.activeEffect.grantedEffect.explosiveArrowFunc(activeSkill, output, globalOutput, globalBreakdown, env) end + if skillData.gloryCost then + output.GloryCost = skillData.gloryCost + end + -- Calculate crit chance, crit multiplier, and their combined effect if skillModList:Flag(cfg, "NeverCrit") then output.PreEffectiveCritChance = 0 @@ -3994,6 +3998,15 @@ function calcs.offence(env, actor, activeSkill) output.LifeOnHitRate = output.LifeOnHit * hitRate output.EnergyShieldOnHitRate = output.EnergyShieldOnHit * hitRate output.ManaOnHitRate = output.ManaOnHit * hitRate + local gloryOnHit = modDB:Max(skillCfg, "GloryMonsterPowerPercentOnHit") or 0 + if globalBreakdown then + if gloryOnHit > 0 then + local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") + + local power = m_max(modDB:Sum("BASE", nil, "Multiplier:EnemyPower"), 1) + globalOutput.BannerGloryPerSecond = gloryOnHit * (1+inc/100) * hitRate * power + end + end -- Calculate gain on kill if skillFlags.mine or skillFlags.trap or skillFlags.totem then @@ -5601,17 +5614,6 @@ function calcs.offence(env, actor, activeSkill) end end - if skillData.gloryCost then - output.GloryCost = skillData.gloryCost - end - - local gloryPctOnHitMp = modDB:Max(skillCfg, "GloryPctOnHitMp") or 0 - if gloryPctOnHitMp > 0 then - local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") - local monsterPower = 20 - output.BannerGloryPerSecond = gloryPctOnHitMp * (1+inc/100) * output.Speed * monsterPower - end - -- Calculate combined DPS estimate, including DoTs local baseDPS = output[(skillData.showAverage and "AverageDamage") or "TotalDPS"] output.CombinedDPS = baseDPS diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 3fde851089..8390a34e06 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -1427,6 +1427,7 @@ return { { label = "Enemy Mana Recovery", haveOutput = "EnemyManaRegen", { format = "{0:output:EnemyManaRegen}%", { modName = "ManaRegen", modType = "INC", enemy = true }, }, }, { label = "Enemy ES Recovery", haveOutput = "EnemyEnergyShieldRegen", { format = "{0:output:EnemyEnergyShieldRegen}%", { modName = "EnergyShieldRegen", modType = "INC", enemy = true }, }, }, { label = "MS While Casting", { format = "{1:output:MovementSpeedWhileUsingSkillPercent}%", { breakdown = "MovementSpeedWhileUsingSkill" }, { modName = { "SkillMovementSpeed", "MovementSpeedPenalty" }, cfg = "skill" }, }, }, + { label = "Banner glory", {format = "{0:output:BannerGloryPerSecond}/s"}} } } } }, -- attributes/resists diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 1fe6695d62..096467a07d 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1101,7 +1101,6 @@ local modFlagList = { ["of your mark skills"] = { tag = { type = "SkillType", skillType = SkillType.Mark } }, ["with command skills"] = { tag = { type = "Condition", var = "CommandableSkill" } }, ["for command skills"] = { tag = { type = "Condition", var = "CommandableSkill" } }, - ["for banner skills"] = { tag = { type = "SkillType", skillType = SkillType.Banner } }, ["minion"] = { addToMinion = true }, ["zombie"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Raise Zombie", includeTransfigured = true } }, ["raised zombie"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Raise Zombie", includeTransfigured = true } }, From 7c2e9f778f61353244884a542f7cd2d065b43ddc Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Thu, 25 Sep 2025 05:55:31 +0200 Subject: [PATCH 05/13] add parsing for chance for no glory consumed --- src/Data/ModCache.lua | 4 ++-- src/Modules/ModParser.lua | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index bfc2c15a50..99e8cd884a 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -5434,9 +5434,9 @@ c["Skills have 33% chance to not consume a Cooldown when used"]={{[1]={[1]={skil c["Skills have 5% chance to not remove Elemental Infusions but still count as consuming them"]={{}," to not remove Elemental Infusions but still count as consuming them "} c["Skills have 6% increased Skill Speed per Connected green Support Gem"]={{[1]={flags=0,keywordFlags=0,name="SkillSpeedIncreasedPerGreenSupport",type="FLAG",value=6}},nil} c["Skills have a 125% longer Perfect Timing window"]={{[1]={flags=0,keywordFlags=0,name="PerfectTiming",type="INC",value=125}},nil} -c["Skills have a 15% chance to not consume Glory"]={nil,"a 15% chance to not consume Glory "} +c["Skills have a 15% chance to not consume Glory"]={{[1]={flags=0,keywordFlags=0,name="ChanceToNotConsumeGlory",type="BASE",value=15}},nil} c["Skills have a 150% longer Perfect Timing window"]={{[1]={flags=0,keywordFlags=0,name="PerfectTiming",type="INC",value=150}},nil} -c["Skills have a 5% chance to not consume Glory"]={nil,"a 5% chance to not consume Glory "} +c["Skills have a 5% chance to not consume Glory"]={{[1]={flags=0,keywordFlags=0,name="ChanceToNotConsumeGlory",type="BASE",value=5}},nil} c["Skills reserve 50% less Spirit"]={{[1]={flags=0,keywordFlags=0,name="SpiritReserved",type="MORE",value=-50}},nil} c["Skills used by Totems have 30% more Skill Speed"]={{[1]={flags=0,keywordFlags=16384,name="Speed",type="MORE",value=30},[2]={flags=0,keywordFlags=16384,name="WarcrySpeed",type="MORE",value=30},[3]={flags=0,keywordFlags=16384,name="TotemPlacementSpeed",type="MORE",value=30}},nil} c["Slam Skills have 8% increased Area of Effect"]={{[1]={[1]={skillType=92,type="SkillType"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=8}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 096467a07d..373632a992 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -871,6 +871,7 @@ local modNameList = { ["when you reload a crossbow to be immediate"] = "InstantReloadChance", ["to not expend ammunition"] = "ChanceToNotConsumeAmmo", ["glory generation"] = "GloryGeneration", + ["to not consume glory"] = "ChanceToNotConsumeGlory", -- Flask and Charm modifiers ["effect"] = "LocalEffect", ["effect of flasks"] = "FlaskEffect", @@ -1274,7 +1275,7 @@ local preFlagList = { ["^non%-channelling spells [hd][ae][va][el] "] = { flags = ModFlag.Spell, tag = { type = "SkillType", skillType = SkillType.Channel, neg = true } }, ["^non%-vaal skills deal "] = { tag = { type = "SkillType", skillType = SkillType.Vaal, neg = true } }, ["^bolts fired by crossbow attacks [hd][ae][va][el] "] = { flags = ModFlag.Crossbow, tag = { type = "SkillType", skillType = SkillType.CrossbowSkill } }, - ["^skills [hgdf][aei][vari][eln] "] = { }, + ["^skills [hgdf][aei][vari][eln] a?n? ?"] = { }, ["^triggered spells [hd][ae][va][el] "] = { keywordFlags = KeywordFlag.Spell, tag = { type = "SkillType", skillType = SkillType.Triggered } }, ["^totems have "] = { keywordFlags = KeywordFlag.Totem }, ["^persistent buffs have "] = { tagList = { { type = "SkillType", skillType = SkillType.Persistent }, { type = "SkillType", skillType = SkillType.Buff } } }, From 638e9c2d2bb37f090b5f49a56ed7b477776aa09d Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Thu, 25 Sep 2025 06:53:50 +0200 Subject: [PATCH 06/13] add initial glory breakdown --- src/Modules/CalcOffence.lua | 9 ++++++++- src/Modules/CalcSections.lua | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 88863f13fb..0c3c426ce2 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -4004,7 +4004,13 @@ function calcs.offence(env, actor, activeSkill) local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") local power = m_max(modDB:Sum("BASE", nil, "Multiplier:EnemyPower"), 1) - globalOutput.BannerGloryPerSecond = gloryOnHit * (1+inc/100) * hitRate * power + if breakdown then + globalBreakdown["GloryDisplay"] = { + "Increased generation: " .. s_format("%.0f%%", inc), + "Chance to not consume glory: " .. s_format("%.0f%%", modDB:Sum("BASE", skillCfg, "ChanceToNotConsumeGlory")), + "Banner glory: " .. s_format("%.0f/s", gloryOnHit * (1+inc/100) * hitRate * power) + } + end end end @@ -4217,6 +4223,7 @@ function calcs.offence(env, actor, activeSkill) combineStat("ManaOnHit", "DPS") combineStat("ManaOnHitRate", "DPS") combineStat("ManaOnKill", "DPS") + combineStat("BannerGloryPerSecond" ,"AVERAGE") for _, damageType in ipairs(dmgTypeList) do combineStat(damageType.."StoredCombinedAvg", "DPS") end diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 8390a34e06..1f9a585f15 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -1427,7 +1427,10 @@ return { { label = "Enemy Mana Recovery", haveOutput = "EnemyManaRegen", { format = "{0:output:EnemyManaRegen}%", { modName = "ManaRegen", modType = "INC", enemy = true }, }, }, { label = "Enemy ES Recovery", haveOutput = "EnemyEnergyShieldRegen", { format = "{0:output:EnemyEnergyShieldRegen}%", { modName = "EnergyShieldRegen", modType = "INC", enemy = true }, }, }, { label = "MS While Casting", { format = "{1:output:MovementSpeedWhileUsingSkillPercent}%", { breakdown = "MovementSpeedWhileUsingSkill" }, { modName = { "SkillMovementSpeed", "MovementSpeedPenalty" }, cfg = "skill" }, }, }, - { label = "Banner glory", {format = "{0:output:BannerGloryPerSecond}/s"}} + { label = "Glory", {format = "-", + { breakdown = "GloryDisplay" }, + { label = "Glory modifiers", modName = {"GloryGeneration", "ChanceToNotConsumeGlory"} }, + }, }, } } } }, -- attributes/resists From 8b24d3daaa4ddebf1449cee15e505ea12a6196c0 Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Sat, 27 Sep 2025 12:56:16 +0200 Subject: [PATCH 07/13] add parsing for glory per second (tactician) rename variable in parser add ShowGlory flag to toggle display on attacks --- src/Data/ModCache.lua | 3 +-- src/Data/SkillStatMap.lua | 6 ++++- src/Modules/BuildDisplayStats.lua | 1 - src/Modules/CalcOffence.lua | 42 ++++++++++++++++++++----------- src/Modules/CalcSections.lua | 5 ++-- src/Modules/ModParser.lua | 3 +++ 6 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 99e8cd884a..273af963b0 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4065,8 +4065,7 @@ c["Banner Skills have 30% increased Area of Effect"]={{[1]={[1]={skillType=88,ty c["Banner Skills have 30% increased Duration"]={{[1]={[1]={skillType=88,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=30}},nil} c["Banners also grant +25% to all Elemental Resistances to you and Allies"]={{[1]={[1]={skillType=88,type="SkillType"},flags=0,keywordFlags=0,name="ExtraAuraEffect",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=25}}}},nil} c["Banners always have maximum Valour"]={nil,"Banners always have maximum Valour "} -c["Banners gain 5 Glory per second"]={nil,"Banners gain 5 Glory per second "} -c["Banners gain 5 Glory per second There is no Limit on the number of Banners you can place"]={nil,"Banners gain 5 Glory per second There is no Limit on the number of Banners you can place "} +c["Banners gain 5 Glory per second"]={{[1]={flags=0,keywordFlags=0,name="BannerGloryPerSecond",type="BASE",value=5}},nil} c["Barrageable Attacks with this Bow Repeat +1 time if no enemies are in your Presence"]={nil,"Barrageable Attacks with this Bow Repeat +1 time if no enemies are in your Presence "} c["Base Bleeding Duration is 1 second"]={{[1]={flags=0,keywordFlags=0,name="BleedDurationBase",type="OVERRIDE",value="1"}},nil} c["Base Critical Hit Chance for Attacks with Weapons is 7%"]={{[1]={flags=0,keywordFlags=0,name="WeaponBaseCritChance",type="OVERRIDE",value=7}},nil} diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index da14df530a..1e19f338a9 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -322,7 +322,11 @@ return { skill("gloryCost", nil), }, ["active_skill_generates_mp_%_glory_per_attack_hit"] = { - mod("GloryMonsterPowerPercentOnHit", "MAX", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), + mod("GloryOnHit", "MAX", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), + div = 100 +}, +["active_skill_generates_mp_%_glory_per_heavy_stun"] = { + skill("gloryOnStun", nil), div = 100 }, ["skill_cannot_gain_repeat_bonuses"] = { diff --git a/src/Modules/BuildDisplayStats.lua b/src/Modules/BuildDisplayStats.lua index 1f06f78455..e470bea0fa 100644 --- a/src/Modules/BuildDisplayStats.lua +++ b/src/Modules/BuildDisplayStats.lua @@ -76,7 +76,6 @@ local displayStats = { { stat = "TimeMaxSeals", label = "Time to Gain Max Seals", fmt = ".2fs", lowerIsBetter = true }, { stat = "AreaOfEffectRadiusMetres", label = "AoE Radius", fmt = ".1fm" }, { stat = "GloryCost", label = "Glory Cost", fmt = ".0f", colorCodes.RARE }, - { stat = "BannerGloryPerSecond", label = "Banner glory per second", fmt = ".0f", colorCodes.RARE }, { stat = "BrandAttachmentRangeMetre", label = "Attachment Range", fmt = ".1fm", flag = "brand" }, { stat = "BrandTicks", label = "Activations per Brand", fmt = "d", flag = "brand" }, { stat = "ManaCost", label = "Mana Cost", fmt = "d", color = colorCodes.MANA, pool = "ManaUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaHasCost end }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 0c3c426ce2..a4c9fe04e7 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -3298,6 +3298,9 @@ function calcs.offence(env, actor, activeSkill) if skillData.gloryCost then output.GloryCost = skillData.gloryCost + if globalOutput then + globalOutput.ShowGlory = 1 + end end -- Calculate crit chance, crit multiplier, and their combined effect @@ -3998,21 +4001,33 @@ function calcs.offence(env, actor, activeSkill) output.LifeOnHitRate = output.LifeOnHit * hitRate output.EnergyShieldOnHitRate = output.EnergyShieldOnHit * hitRate output.ManaOnHitRate = output.ManaOnHit * hitRate - local gloryOnHit = modDB:Max(skillCfg, "GloryMonsterPowerPercentOnHit") or 0 + + if globalBreakdown then - if gloryOnHit > 0 then - local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") - - local power = m_max(modDB:Sum("BASE", nil, "Multiplier:EnemyPower"), 1) - if breakdown then - globalBreakdown["GloryDisplay"] = { - "Increased generation: " .. s_format("%.0f%%", inc), - "Chance to not consume glory: " .. s_format("%.0f%%", modDB:Sum("BASE", skillCfg, "ChanceToNotConsumeGlory")), - "Banner glory: " .. s_format("%.0f/s", gloryOnHit * (1+inc/100) * hitRate * power) - } - end + globalBreakdown["Glory"] = {} + local power = 1 * (modDB:Sum("BASE", nil, "Multiplier:EnemyPower") or 1) + local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") or 0 + if inc then + t_insert(globalBreakdown["Glory"], "" .. s_format("%.0f%% increased generation", inc)) + end + local chanceToNotConsume = modDB:Sum("BASE", skillCfg, "ChanceToNotConsumeGlory") + if chanceToNotConsume then + t_insert(globalBreakdown["Glory"], s_format("%.0f%% chance to not consume", chanceToNotConsume)) + end + local bannerGloryPerSecond = modDB:Sum("BASE", skillCfg, "BannerGloryPerSecond") + if bannerGloryPerSecond then + t_insert(globalBreakdown["Glory"], s_format("%.0f passive glory/s for banners", bannerGloryPerSecond)) end - end + local gloryOnHit = modDB:Max(skillCfg, "GloryOnHit") + if gloryOnHit and not output.GloryCost then + t_insert(globalBreakdown["Glory"], s_format("%.0f active glory/s for banners", gloryOnHit * (1+inc/100) * hitRate * power)) + globalOutput.ShowGlory = 1 + end + if skillData.gloryOnStun then + t_insert(globalBreakdown["Glory"], s_format("%.0f glory gained on stun", skillData.gloryOnStun * (1+inc/100) * power)) + globalOutput.ShowGlory = 1 + end + end -- Calculate gain on kill if skillFlags.mine or skillFlags.trap or skillFlags.totem then @@ -4223,7 +4238,6 @@ function calcs.offence(env, actor, activeSkill) combineStat("ManaOnHit", "DPS") combineStat("ManaOnHitRate", "DPS") combineStat("ManaOnKill", "DPS") - combineStat("BannerGloryPerSecond" ,"AVERAGE") for _, damageType in ipairs(dmgTypeList) do combineStat(damageType.."StoredCombinedAvg", "DPS") end diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 1f9a585f15..9f9570c5db 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -1427,9 +1427,8 @@ return { { label = "Enemy Mana Recovery", haveOutput = "EnemyManaRegen", { format = "{0:output:EnemyManaRegen}%", { modName = "ManaRegen", modType = "INC", enemy = true }, }, }, { label = "Enemy ES Recovery", haveOutput = "EnemyEnergyShieldRegen", { format = "{0:output:EnemyEnergyShieldRegen}%", { modName = "EnergyShieldRegen", modType = "INC", enemy = true }, }, }, { label = "MS While Casting", { format = "{1:output:MovementSpeedWhileUsingSkillPercent}%", { breakdown = "MovementSpeedWhileUsingSkill" }, { modName = { "SkillMovementSpeed", "MovementSpeedPenalty" }, cfg = "skill" }, }, }, - { label = "Glory", {format = "-", - { breakdown = "GloryDisplay" }, - { label = "Glory modifiers", modName = {"GloryGeneration", "ChanceToNotConsumeGlory"} }, + { label = "Glory", haveOutput = "ShowGlory", {format = "-", { breakdown = "Glory" }, + { label = "Glory modifiers", modName = {"GloryGeneration", "ChanceToNotConsumeGlory", "BannerGloryPerSecond"} }, }, }, } } } }, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 373632a992..71cb17aaac 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3125,6 +3125,9 @@ local specialModList = { mod("ExtraAura", "LIST", { onlyAllies = true, mod = flag("GainMainHandDmgFromParent") }), mod("Multiplier:MainHandDamageToAllies", "BASE", num), } end, + ["banners gain (%d+) glory per second"] = function(num) return { + mod("BannerGloryPerSecond", "BASE", num) + } end, -- Warrior - Smith of Kitava ["body armour grants armour also applies to (%a+) damage taken from hits"] = function(_, dmgType) return { mod("ArmourAppliesTo"..firstToUpper(dmgType).."DamageTaken", "BASE", 100, { type = "ItemCondition", itemSlot = "Body Armour", rarityCond = "NORMAL" }) From c5897fe638dbd878996d2431469fec68a878aaab Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Sat, 27 Sep 2025 13:45:03 +0200 Subject: [PATCH 08/13] add parsing for increased banner glory generation --- src/Data/ModCache.lua | 2 +- src/Modules/CalcOffence.lua | 3 ++- src/Modules/ModParser.lua | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index fa384339e4..98c8adf67a 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1698,7 +1698,7 @@ c["20% increased Freeze Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name c["20% increased Frenzy Charge Duration"]={{[1]={flags=0,keywordFlags=0,name="FrenzyChargesDuration",type="INC",value=20}},nil} c["20% increased Global Defences"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="Defences",type="INC",value=20}},nil} c["20% increased Global Physical Damage"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=20}},nil} -c["20% increased Glory generation for Banner Skills"]={{[1]={flags=0,keywordFlags=0,name="GloryGeneration",type="INC",value=20}}," for Banner Skills "} +c["20% increased Glory generation for Banner Skills"]={{[1]={flags=0,keywordFlags=0,name="GloryOnHit",type="INC",value=20}},nil} c["20% increased Hazard Duration"]={{[1]={[1]={skillType=203,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=20}},nil} c["20% increased Hazard Immobilisation buildup"]={{}," Immobilisation buildup "} c["20% increased Hinder Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=20}}," Hinder "} diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index a4c9fe04e7..2ea25d879e 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -4020,7 +4020,8 @@ function calcs.offence(env, actor, activeSkill) end local gloryOnHit = modDB:Max(skillCfg, "GloryOnHit") if gloryOnHit and not output.GloryCost then - t_insert(globalBreakdown["Glory"], s_format("%.0f active glory/s for banners", gloryOnHit * (1+inc/100) * hitRate * power)) + local incBanner = modDB:Sum("INC", skillCfg, "GloryOnHit") or 0 + t_insert(globalBreakdown["Glory"], s_format("%.0f active glory/s for banners", gloryOnHit * (1+inc/100) * (1+incBanner/100) * hitRate * power)) globalOutput.ShowGlory = 1 end if skillData.gloryOnStun then diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 71f21aa992..4110f1ab25 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -872,6 +872,7 @@ local modNameList = { ["when you reload a crossbow to be immediate"] = "InstantReloadChance", ["to not expend ammunition"] = "ChanceToNotConsumeAmmo", ["glory generation"] = "GloryGeneration", + ["glory generation for banner skills"] = "GloryOnHit", ["to not consume glory"] = "ChanceToNotConsumeGlory", -- Flask and Charm modifiers ["effect"] = "LocalEffect", From 28d810779509fb7212f5ba757f4dd89fd210fffc Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Sat, 27 Sep 2025 13:50:20 +0200 Subject: [PATCH 09/13] fix bug where calcs shows 0% --- src/Modules/CalcOffence.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 2ea25d879e..ded9534185 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -4005,13 +4005,13 @@ function calcs.offence(env, actor, activeSkill) if globalBreakdown then globalBreakdown["Glory"] = {} - local power = 1 * (modDB:Sum("BASE", nil, "Multiplier:EnemyPower") or 1) + local power = modDB:Sum("BASE", nil, "Multiplier:EnemyPower") or 1 local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") or 0 - if inc then + if inc > 0 then t_insert(globalBreakdown["Glory"], "" .. s_format("%.0f%% increased generation", inc)) end - local chanceToNotConsume = modDB:Sum("BASE", skillCfg, "ChanceToNotConsumeGlory") - if chanceToNotConsume then + local chanceToNotConsume = modDB:Sum("BASE", skillCfg, "ChanceToNotConsumeGlory") or 0 + if chanceToNotConsume > 0 then t_insert(globalBreakdown["Glory"], s_format("%.0f%% chance to not consume", chanceToNotConsume)) end local bannerGloryPerSecond = modDB:Sum("BASE", skillCfg, "BannerGloryPerSecond") From 5ec306c696b3ab2732ffe738f27cd7b316ab708f Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Sat, 27 Sep 2025 15:44:57 +0200 Subject: [PATCH 10/13] add initial support for glory cost fix passive glory not scaling with increases --- src/Data/SkillStatMap.lua | 3 +++ src/Modules/CalcOffence.lua | 5 +++-- src/Modules/ModParser.lua | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index ad65605248..b4543d72be 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -329,6 +329,9 @@ return { skill("gloryOnStun", nil), div = 100 }, +["support_glory_required_+%_final"] = { + mod("GloryCost", "MORE", nil), +}, ["skill_cannot_gain_repeat_bonuses"] = { flag("NoRepeatBonuses"), }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index ded9534185..1696bb6ec5 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -3297,7 +3297,8 @@ function calcs.offence(env, actor, activeSkill) end if skillData.gloryCost then - output.GloryCost = skillData.gloryCost + local more = modDB:More(nil , "GloryCost") + output.GloryCost = skillData.gloryCost * more if globalOutput then globalOutput.ShowGlory = 1 end @@ -4016,7 +4017,7 @@ function calcs.offence(env, actor, activeSkill) end local bannerGloryPerSecond = modDB:Sum("BASE", skillCfg, "BannerGloryPerSecond") if bannerGloryPerSecond then - t_insert(globalBreakdown["Glory"], s_format("%.0f passive glory/s for banners", bannerGloryPerSecond)) + t_insert(globalBreakdown["Glory"], s_format("%.0f passive glory/s for banners", bannerGloryPerSecond * (1+inc/100))) end local gloryOnHit = modDB:Max(skillCfg, "GloryOnHit") if gloryOnHit and not output.GloryCost then diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 4110f1ab25..6edfb404ff 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -670,6 +670,7 @@ local modNameList = { ["to deal triple damage"] = "TripleDamageChance", ["curse activation"] = "CurseActivation", ["ice crystal life"] = "IceCrystalLife", + ["glory cost"] = "GloryCost", -- Effects ["onslaught effect"] = "OnslaughtEffect", ["effect of onslaught on you"] = "OnslaughtEffect", From c80d3f40a5ce7822c5077508c19895a26fe8cca1 Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Sat, 27 Sep 2025 17:41:50 +0200 Subject: [PATCH 11/13] add support for daresso's passion support add glory to resources --- src/Modules/CalcOffence.lua | 8 +++++--- src/Modules/ModParser.lua | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 1696bb6ec5..34c6b4f22d 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -3296,9 +3296,11 @@ function calcs.offence(env, actor, activeSkill) activeSkill.activeEffect.grantedEffect.explosiveArrowFunc(activeSkill, output, globalOutput, globalBreakdown, env) end - if skillData.gloryCost then - local more = modDB:More(nil , "GloryCost") - output.GloryCost = skillData.gloryCost * more + + local gloryCost = skillData.gloryCost or 0 + if gloryCost > 0 then + local more = skillModList:More(skillCfg , "GloryCost") + output.GloryCost = gloryCost * more if globalOutput then globalOutput.ShowGlory = 1 end diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 6edfb404ff..97b6b367c9 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -5926,6 +5926,7 @@ local resourceTypes = { ["energy shield, life and mana"] = { "Life", "Mana", "EnergyShield" }, ["energy shield, mana and life"] = { "Life", "Mana", "EnergyShield" }, ["rage"] = "Rage", + ["glory"] = "Glory", } do local maximumResourceTypes = { } From 0ad0139436f8e08a11054bdefe1020200e86e012 Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Sat, 27 Sep 2025 18:01:22 +0200 Subject: [PATCH 12/13] change from skill to base mod for readability --- src/Data/SkillStatMap.lua | 3 ++- src/Modules/CalcOffence.lua | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Data/SkillStatMap.lua b/src/Data/SkillStatMap.lua index b4543d72be..b426c8e373 100644 --- a/src/Data/SkillStatMap.lua +++ b/src/Data/SkillStatMap.lua @@ -319,7 +319,8 @@ return { div = 1000, }, ["active_skill_requires_X_glory"] = { - skill("gloryCost", nil), + -- skill("gloryCost", nil), + mod("GloryCost", "BASE", nil), }, ["active_skill_generates_mp_%_glory_per_attack_hit"] = { mod("GloryOnHit", "MAX", nil, 0, KeywordFlag.Attack, { type = "GlobalEffect", effectType = "Aura" }), diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 34c6b4f22d..e642a88f69 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -3297,7 +3297,7 @@ function calcs.offence(env, actor, activeSkill) end - local gloryCost = skillData.gloryCost or 0 + local gloryCost = skillModList:Sum("BASE", nil, "GloryCost") -- skillData.gloryCost or 0 if gloryCost > 0 then local more = skillModList:More(skillCfg , "GloryCost") output.GloryCost = gloryCost * more @@ -4010,6 +4010,9 @@ function calcs.offence(env, actor, activeSkill) globalBreakdown["Glory"] = {} local power = modDB:Sum("BASE", nil, "Multiplier:EnemyPower") or 1 local inc = modDB:Sum("INC", skillCfg, "GloryGeneration") or 0 + if output.GloryCost then + t_insert(globalBreakdown["Glory"], s_format("Uses %.0f glory", output.GloryCost)) + end if inc > 0 then t_insert(globalBreakdown["Glory"], "" .. s_format("%.0f%% increased generation", inc)) end From 0c41f2871bc5fcad61df0142dbc0fbd5a88301fb Mon Sep 17 00:00:00 2001 From: ImmotephSimon Date: Sat, 27 Sep 2025 20:28:59 +0200 Subject: [PATCH 13/13] add internal cooldown to banner active glory gain (ingame testing) --- src/Modules/CalcOffence.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index e642a88f69..00deeb6b9c 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -4027,7 +4027,9 @@ function calcs.offence(env, actor, activeSkill) local gloryOnHit = modDB:Max(skillCfg, "GloryOnHit") if gloryOnHit and not output.GloryCost then local incBanner = modDB:Sum("INC", skillCfg, "GloryOnHit") or 0 - t_insert(globalBreakdown["Glory"], s_format("%.0f active glory/s for banners", gloryOnHit * (1+inc/100) * (1+incBanner/100) * hitRate * power)) + local internalCooldown = 3 + local hitRateReduction = hitRate / internalCooldown + t_insert(globalBreakdown["Glory"], s_format("%.0f active glory/s for banners", gloryOnHit * (1+(inc+incBanner)/100) * hitRate * hitRateReduction * power)) globalOutput.ShowGlory = 1 end if skillData.gloryOnStun then