From af39d5894820b62bdfb670275f3e7c5b8043b209 Mon Sep 17 00:00:00 2001 From: LocalIdentity <31035929+LocalIdentity@users.noreply.github.com> Date: Wed, 5 Nov 2025 10:38:20 +1100 Subject: [PATCH] Fix "Farewell to Flesh" not applying to Agony Crawler ailment damage (#9162) The `GetStat` code relied on using `cfg.summonSkillName` to match names for the skills but when we handle the ailments we were not including summonSkillName in the cfg so it would fail to match and not grant Ailment damage to Agony Crawler Also added a floor to the returned value as it was a float before Co-authored-by: LocalIdentity --- src/Classes/ModStore.lua | 4 ++-- src/Modules/CalcOffence.lua | 5 +++++ src/Modules/ModParser.lua | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Classes/ModStore.lua b/src/Classes/ModStore.lua index 93434dc0..925ca598 100644 --- a/src/Classes/ModStore.lua +++ b/src/Classes/ModStore.lua @@ -251,7 +251,7 @@ function ModStoreClass:GetStat(stat, cfg) for _, activeSkill in ipairs(self.actor.activeSkillList) do if (activeSkill.skillTypes[SkillType.HasReservation] and not activeSkill.skillFlags.disable and activeSkill.buffList and activeSkill.buffList[1] and cfg and (isNameInBuffList(activeSkill.buffList, cfg.skillName) or isNameInBuffList(activeSkill.buffList, cfg.summonSkillName)) ) then local manaBase = activeSkill.skillData["ManaReservedBase"] or 0 - reservedPercentMana = manaBase / totalMana * 100 + reservedPercentMana = m_floor(manaBase / totalMana * 100) break end end @@ -265,7 +265,7 @@ function ModStoreClass:GetStat(stat, cfg) for _, activeSkill in ipairs(self.actor.activeSkillList) do if (activeSkill.skillTypes[SkillType.HasReservation] and not activeSkill.skillFlags.disable and activeSkill.buffList and activeSkill.buffList[1] and cfg and (isNameInBuffList(activeSkill.buffList, cfg.skillName) or isNameInBuffList(activeSkill.buffList, cfg.summonSkillName)) ) then local lifeBase = activeSkill.skillData["LifeReservedBase"] or 0 - reservedPercentLife = lifeBase / totalLife * 100 + reservedPercentLife = m_floor(lifeBase / totalLife * 100) break end end diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 754738d5..9816cc18 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -4003,6 +4003,7 @@ function calcs.offence(env, actor, activeSkill) skillName = skillCfg.skillName, skillPart = skillCfg.skillPart, skillTypes = skillCfg.skillTypes, + summonSkillName = skillCfg.summonSkillName, slotName = skillCfg.slotName, flags = bor(ModFlag.Dot, ModFlag.Ailment, band(cfg.flags, ModFlag.WeaponMask), band(cfg.flags, ModFlag.Melee) ~= 0 and ModFlag.MeleeHit or 0), keywordFlags = bor(band(cfg.keywordFlags, bnot(KeywordFlag.Hit)), KeywordFlag.Bleed, KeywordFlag.Ailment, KeywordFlag.PhysicalDot), @@ -4275,6 +4276,7 @@ function calcs.offence(env, actor, activeSkill) skillName = skillCfg.skillName, skillPart = skillCfg.skillPart, skillTypes = skillCfg.skillTypes, + summonSkillName = skillCfg.summonSkillName, slotName = skillCfg.slotName, flags = bor(ModFlag.Dot, ModFlag.Ailment, band(cfg.flags, ModFlag.WeaponMask), band(cfg.flags, ModFlag.Melee) ~= 0 and ModFlag.MeleeHit or 0), keywordFlags = bor(band(cfg.keywordFlags, bnot(KeywordFlag.Hit)), KeywordFlag.Poison, KeywordFlag.Ailment, KeywordFlag.ChaosDot), @@ -4552,6 +4554,7 @@ function calcs.offence(env, actor, activeSkill) skillName = skillCfg.skillName, skillPart = skillCfg.skillPart, skillTypes = skillCfg.skillTypes, + summonSkillName = skillCfg.summonSkillName, slotName = skillCfg.slotName, flags = bor(ModFlag.Dot, ModFlag.Ailment, band(cfg.flags, ModFlag.WeaponMask), band(cfg.flags, ModFlag.Melee) ~= 0 and ModFlag.MeleeHit or 0), keywordFlags = bor(band(cfg.keywordFlags, bnot(KeywordFlag.Hit)), KeywordFlag.Ignite, KeywordFlag.Ailment, KeywordFlag.FireDot), @@ -5258,6 +5261,7 @@ function calcs.offence(env, actor, activeSkill) skillName = skillCfg.skillName, skillPart = skillCfg.skillPart, skillTypes = skillCfg.skillTypes, + summonSkillName = skillCfg.summonSkillName, slotName = skillCfg.slotName, flags = ModFlag.Dot, keywordFlags = bor(band(skillCfg.keywordFlags, bnot(KeywordFlag.Hit)), KeywordFlag.ChaosDot), @@ -5328,6 +5332,7 @@ function calcs.offence(env, actor, activeSkill) skillName = skillCfg.skillName, skillPart = skillCfg.skillPart, skillTypes = skillCfg.skillTypes, + summonSkillName = skillCfg.summonSkillName, slotName = skillCfg.slotName, flags = bor(ModFlag.Dot, skillCfg.flags), keywordFlags = band(skillCfg.keywordFlags, bnot(KeywordFlag.Hit)), diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index c324e531..a3334f82 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -2858,7 +2858,7 @@ local specialModList = { ["herald skills and minions from herald skills deal (%d+)%% more damage for every (%d+)%% of maximum life those skills reserve"] = function(_, num1, num2) return { mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", tonumber(num1), { type = "PerStat", stat = "LifeReservedPercent", div = tonumber(num2), actor = "parent" })}, { type = "SkillType", skillType = SkillType.Herald }), mod("Damage", "MORE", tonumber(num1), { type = "PerStat", stat = "LifeReservedPercent", div = tonumber(num2) }, { type = "SkillType", skillType = SkillType.Herald }), - } end, + } end, -- Oshabi Bloodline ["unsealed spells gain (%d+)%% more damage each time their effects reoccur"] = function(num) return { mod("MaxSealDamage", "MORE", num) } end, ["skills gain added chaos damage equal to (%d+)%% of life cost, if life cost is not higher than the maximum you could spend"] = function(num) return {