Skip to content

Commit 8808dd4

Browse files
author
LocalIdentity
committed
Merge branch 'dev'
2 parents e7f9a98 + 47c75a6 commit 8808dd4

14 files changed

+81
-45
lines changed

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# Changelog
22

3+
## [v2.55.1](https://github.com/PathOfBuildingCommunity/PathOfBuilding/tree/v2.55.1) (2025/06/30)
4+
5+
[Full Changelog](https://github.com/PathOfBuildingCommunity/PathOfBuilding/compare/v2.55.0...v2.55.1)
6+
7+
## What's Changed
8+
### Fixed Crashes
9+
- Fix crash when trying to edit Config/Item Set after saving a new Set [\#8749](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8749) ([Blitz54](https://github.com/Blitz54))
10+
### Fixed Behaviours
11+
- Fix Summoned Phantasm not working correctly when used in Soulwrest [\#8757](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8757) ([LocalIdentity](https://github.com/LocalIdentity))
12+
- Fix The Dark Monarch not scaling "per summoned x" mods [\#8756](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8756) ([LocalIdentity](https://github.com/LocalIdentity))
13+
- Fix Swift Affliction less duration and damaging ailment duration not applying individually [\#8754](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8754) ([deathbeam](https://github.com/deathbeam))
14+
- Fix Coiling Whisper applying to all Curses instead of just Hexes [\#8752](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8752) ([pjo256](https://github.com/pjo256))
15+
- Fix Runegraft bonus for Boots / Gloves not working [\#8746](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8746) ([LocalIdentity](https://github.com/LocalIdentity))
16+
17+
318
## [v2.55.0](https://github.com/PathOfBuildingCommunity/PathOfBuilding/tree/v2.55.0) (2025/06/29)
419

520
[Full Changelog](https://github.com/PathOfBuildingCommunity/PathOfBuilding/compare/v2.54.0...v2.55.0)

changelog.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
VERSION[2.55.1][2025/06/30]
2+
3+
--- Fixed Crashes ---
4+
* Fix crash when trying to edit Config/Item Set after saving a new Set (Blitz54)
5+
6+
--- Fixed Behaviours ---
7+
* Fix Summoned Phantasm not working correctly when used in Soulwrest (LocalIdentity)
8+
* Fix The Dark Monarch not scaling "per summoned x" mods (LocalIdentity)
9+
* Fix Swift Affliction less duration and damaging ailment duration not applying individually (deathbeam)
10+
* Fix Coiling Whisper applying to all Curses instead of just Hexes (pjo256)
11+
* Fix Runegraft bonus for Boots / Gloves not working (LocalIdentity)
12+
113
VERSION[2.55.0][2025/06/29]
214

315
--- New to Path of Building ---

manifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version='1.0' encoding='UTF-8'?>
22
<PoBVersion>
3-
<Version number="2.55.0" />
3+
<Version number="2.55.1" />
44
<Source part="default" url="https://raw.githubusercontent.com/PathOfBuildingCommunity/PathOfBuilding/{branch}/" />
55
<Source part="runtime" platform="win32" url="https://raw.githubusercontent.com/PathOfBuildingCommunity/PathOfBuilding/{branch}/runtime/" />
66
<Source part="program" url="https://raw.githubusercontent.com/PathOfBuildingCommunity/PathOfBuilding/{branch}/src/" />

src/Classes/ConfigSetListControl.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ function ConfigSetListClass:RenameSet(configSet, addOnName)
5252
if addOnName then
5353
t_insert(self.list, configSet.id)
5454
self.selIndex = #self.list
55-
self.selValue = configSet
55+
self.selValue = configSet.id
5656
end
5757
self.configTab:AddUndoState()
5858
self.configTab.build:SyncLoadouts()

src/Classes/ItemSetListControl.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ function ItemSetListClass:RenameSet(itemSet, addOnName)
5353
if addOnName then
5454
t_insert(self.list, itemSet.id)
5555
self.selIndex = #self.list
56-
self.selValue = itemSet
56+
self.selValue = itemSet.id
5757
end
5858
self.itemsTab:AddUndoState()
5959
self.itemsTab.build:SyncLoadouts()

src/Classes/ModStore.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ function ModStoreClass:ScaleAddMod(mod, scale)
4545
if scale == 1 or unscalable then
4646
self:AddMod(mod)
4747
else
48-
scale = m_max(scale, 0)
4948
local scaledMod = copyTable(mod)
5049
local subMod = scaledMod
5150
if type(scaledMod.value) == "table" then

src/Data/ModCache.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11409,7 +11409,7 @@ c["Take no Extra Damage from Critical Strikes"]={{[1]={[1]={effectType="Global",
1140911409
c["Take no Extra Damage from Critical Strikes if you have a Magic Ring in left slot"]={{[1]={[1]={effectType="Global",type="GlobalEffect",unscalable=true},[2]={type="Condition",var="MagicItemInRing 1"},flags=0,keywordFlags=0,name="ReduceCritExtraDamage",type="BASE",value=100}},nil}
1141011410
c["Take no Extra Damage from Critical Strikes if you've cast Enfeeble in the past 10 seconds"]={{[1]={[1]={effectType="Global",type="GlobalEffect",unscalable=true},[2]={type="Condition",var="SelfCastEnfeeble"},flags=0,keywordFlags=0,name="ReduceCritExtraDamage",type="BASE",value=100}},nil}
1141111411
c["Taking Chaos Damage over Time heals you instead while Leeching Life"]={nil,"Taking Chaos Damage over Time heals you instead while Leeching Life "}
11412-
c["Targets are Unaffected by your Hexes"]={{[1]={flags=0,keywordFlags=0,name="CurseEffect",type="MORE",value=-100}},nil}
11412+
c["Targets are Unaffected by your Hexes"]={{[1]={[1]={skillType=108,type="SkillType"},flags=0,keywordFlags=0,name="CurseEffect",type="MORE",value=-100}},nil}
1141311413
c["Taunt on Hit"]={nil,"Taunt on Hit "}
1141411414
c["Taunt on Hit 15% increased effect of Non-Curse Auras from your Skills"]={nil,"Taunt on Hit 15% increased effect of Non-Curse Auras from your Skills "}
1141511415
c["Taunt on Hit 15% increased effect of Non-Curse Auras from your Skills Your Hits permanently Intimidate Enemies that are on Full Life"]={nil,"Taunt on Hit 15% increased effect of Non-Curse Auras from your Skills Your Hits permanently Intimidate Enemies that are on Full Life "}

src/Data/SkillStatMap.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -654,7 +654,8 @@ return {
654654
mod("FortifyDuration", "INC", nil),
655655
},
656656
["support_swift_affliction_skill_effect_and_damaging_ailment_duration_+%_final"] = {
657-
mod("SkillAndDamagingAilmentDuration", "MORE", nil),
657+
mod("Duration", "MORE", nil),
658+
mod("DamagingAilmentDuration", "MORE", nil),
658659
},
659660
["base_bleed_duration_+%"] = {
660661
mod("EnemyBleedDuration", "INC", nil),

src/Modules/CalcActiveSkill.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,8 +629,10 @@ function calcs.buildActiveSkillModList(env, activeSkill)
629629
for _, skillEffect in ipairs(activeSkill.effectList) do
630630
if skillEffect.grantedEffect.support and skillEffect.grantedEffect.addMinionList then
631631
for _, minionType in ipairs(skillEffect.grantedEffect.addMinionList) do
632-
t_insert(minionList, minionType)
633-
minionSupportLevel[minionType] = skillEffect.grantedEffect.levels[skillEffect.level].levelRequirement
632+
if not isValueInArray(minionList, minionType) then
633+
minionSupportLevel[minionType] = skillEffect.grantedEffect.levels[skillEffect.level].levelRequirement
634+
t_insert(minionList, minionType)
635+
end
634636
end
635637
end
636638
end

src/Modules/CalcOffence.lua

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ local function calcWarcryCastTime(skillModList, skillCfg, skillData, actor)
289289
end
290290

291291
function calcSkillDuration(skillModList, skillCfg, skillData, env, enemyDB)
292-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
292+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
293293
durationMod = m_max(durationMod, 0)
294294
local durationBase = (skillData.duration or 0) + skillModList:Sum("BASE", skillCfg, "Duration", "PrimaryDuration")
295295
local duration = durationBase * durationMod
@@ -1395,10 +1395,10 @@ function calcs.offence(env, actor, activeSkill)
13951395
debuffDurationMult = 1 / m_max(data.misc.BuffExpirationSlowCap, calcLib.mod(enemyDB, skillCfg, "BuffExpireFaster"))
13961396
end
13971397
do
1398-
output.DurationMod = calcLib.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1398+
output.DurationMod = calcLib.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
13991399
output.DurationMod = m_max(output.DurationMod, 0)
14001400
if breakdown then
1401-
breakdown.DurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1401+
breakdown.DurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
14021402
if breakdown.DurationMod and skillData.durationSecondary then
14031403
t_insert(breakdown.DurationMod, 1, "Primary duration:")
14041404
end
@@ -1426,15 +1426,15 @@ function calcs.offence(env, actor, activeSkill)
14261426
end
14271427
durationBase = (skillData.durationSecondary or 0) + skillModList:Sum("BASE", skillCfg, "Duration", "SecondaryDuration")
14281428
if durationBase > 0 then
1429-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "SecondaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1429+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "SecondaryDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
14301430
durationMod = m_max(durationMod, 0)
14311431
output.DurationSecondary = durationBase * durationMod
14321432
if skillData.debuffSecondary then
14331433
output.DurationSecondary = output.DurationSecondary * debuffDurationMult
14341434
end
14351435
output.DurationSecondary = m_ceil(output.DurationSecondary * data.misc.ServerTickRate) / data.misc.ServerTickRate
14361436
if breakdown and output.DurationSecondary ~= durationBase then
1437-
breakdown.SecondaryDurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "SecondaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1437+
breakdown.SecondaryDurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "SecondaryDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
14381438
if breakdown.SecondaryDurationMod then
14391439
t_insert(breakdown.SecondaryDurationMod, 1, "Secondary duration:")
14401440
end
@@ -1453,15 +1453,15 @@ function calcs.offence(env, actor, activeSkill)
14531453
end
14541454
durationBase = (skillData.durationTertiary or 0) + skillModList:Sum("BASE", skillCfg, "Duration", "TertiaryDuration")
14551455
if durationBase > 0 then
1456-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "TertiaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1456+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "TertiaryDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
14571457
durationMod = m_max(durationMod, 0)
14581458
output.DurationTertiary = durationBase * durationMod
14591459
if skillData.debuffTertiary then
14601460
output.DurationTertiary = output.DurationTertiary * debuffDurationMult
14611461
end
14621462
output.DurationTertiary = m_ceil(output.DurationTertiary * data.misc.ServerTickRate) / data.misc.ServerTickRate
14631463
if breakdown and output.DurationTertiary ~= durationBase then
1464-
breakdown.TertiaryDurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "TertiaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1464+
breakdown.TertiaryDurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "TertiaryDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
14651465
if breakdown.TertiaryDurationMod then
14661466
t_insert(breakdown.TertiaryDurationMod, 1, "Tertiary duration:")
14671467
end
@@ -1480,7 +1480,7 @@ function calcs.offence(env, actor, activeSkill)
14801480
end
14811481
durationBase = (skillData.auraDuration or 0)
14821482
if durationBase > 0 then
1483-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "SkillAndDamagingAilmentDuration")
1483+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration")
14841484
durationMod = m_max(durationMod, 0)
14851485
output.AuraDuration = durationBase * durationMod
14861486
output.AuraDuration = m_ceil(output.AuraDuration * data.misc.ServerTickRate) / data.misc.ServerTickRate
@@ -1495,7 +1495,7 @@ function calcs.offence(env, actor, activeSkill)
14951495
end
14961496
durationBase = (skillData.reserveDuration or 0)
14971497
if durationBase > 0 then
1498-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "SkillAndDamagingAilmentDuration")
1498+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration")
14991499
durationMod = m_max(durationMod, 0)
15001500
output.ReserveDuration = durationBase * durationMod
15011501
output.ReserveDuration = m_ceil(output.ReserveDuration * data.misc.ServerTickRate) / data.misc.ServerTickRate
@@ -1510,7 +1510,7 @@ function calcs.offence(env, actor, activeSkill)
15101510
end
15111511
durationBase = (skillData.soulPreventionDuration or 0)
15121512
if durationBase > 0 then
1513-
local durationMod = calcLib.mod(skillModList, skillCfg, "SoulGainPreventionDuration", skillData.skillEffectAppliesToSoulGainPrevention and "Duration" or "SkillAndDamagingAilmentDuration" or nil, skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1513+
local durationMod = calcLib.mod(skillModList, skillCfg, "SoulGainPreventionDuration", skillData.skillEffectAppliesToSoulGainPrevention and "Duration" or nil, skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
15141514
durationMod = m_max(durationMod, 0)
15151515
output.SoulGainPreventionDuration = durationBase * durationMod
15161516
output.SoulGainPreventionDuration = m_max(m_ceil(output.SoulGainPreventionDuration * data.misc.ServerTickRate), 1) / data.misc.ServerTickRate
@@ -2140,7 +2140,7 @@ function calcs.offence(env, actor, activeSkill)
21402140
--Calculates the max number of trauma stacks you can sustain
21412141
if skillModList:Flag(nil, "HasTrauma") then
21422142
local effectiveAttackRateCap = data.misc.ServerTickRate * output.Repeats
2143-
local duration = skillModList:Sum("BASE", cfg, "TraumaDuration") * calcLib.mod(skillModList, skillCfg, "Duration", "SkillAndDamagingAilmentDuration")
2143+
local duration = skillModList:Sum("BASE", cfg, "TraumaDuration") * calcLib.mod(skillModList, skillCfg, "Duration")
21442144
local traumaPerAttack = 1 + m_min(skillModList:Sum("BASE", cfg, "ExtraTrauma"), 100) / 100
21452145
local incAttackSpeedPerTrauma = skillModList:Sum("INC", skillCfg, "SpeedPerTrauma")
21462146
-- compute trauma using an exact form.
@@ -3974,7 +3974,7 @@ function calcs.offence(env, actor, activeSkill)
39743974
local overrideStackPotential = skillModList:Override(nil, "BleedStackPotentialOverride") and skillModList:Override(nil, "BleedStackPotentialOverride") / maxStacks
39753975
globalOutput.BleedStacksMax = maxStacks
39763976
local durationBase = skillData.bleedDurationIsSkillDuration and skillData.duration or data.misc.BleedDurationBase
3977-
local durationMod = calcLib.mod(skillModList, dotCfg, "EnemyBleedDuration", "EnemyAilmentDuration", "SkillAndDamagingAilmentDuration", skillData.bleedIsSkillEffect and "Duration" or nil) * calcLib.mod(enemyDB, nil, "SelfBleedDuration", "SelfAilmentDuration") / calcLib.mod(enemyDB, dotCfg, "BleedExpireRate")
3977+
local durationMod = calcLib.mod(skillModList, dotCfg, "EnemyBleedDuration", "EnemyAilmentDuration", "DamagingAilmentDuration", skillData.bleedIsSkillEffect and "Duration" or nil) * calcLib.mod(enemyDB, nil, "SelfBleedDuration", "SelfAilmentDuration") / calcLib.mod(enemyDB, dotCfg, "BleedExpireRate")
39783978
durationMod = m_max(durationMod, 0)
39793979
local rateMod = calcLib.mod(skillModList, cfg, "BleedFaster") + enemyDB:Sum("INC", nil, "SelfBleedFaster") / 100
39803980
globalOutput.BleedDuration = durationBase * durationMod / rateMod * debuffDurationMult
@@ -4247,7 +4247,7 @@ function calcs.offence(env, actor, activeSkill)
42474247
else
42484248
durationBase = data.misc.PoisonDurationBase
42494249
end
4250-
local durationMod = calcLib.mod(skillModList, dotCfg, "EnemyPoisonDuration", "EnemyAilmentDuration", "SkillAndDamagingAilmentDuration", skillData.poisonIsSkillEffect and "Duration" or nil) * calcLib.mod(enemyDB, nil, "SelfPoisonDuration", "SelfAilmentDuration")
4250+
local durationMod = calcLib.mod(skillModList, dotCfg, "EnemyPoisonDuration", "EnemyAilmentDuration", "DamagingAilmentDuration", skillData.poisonIsSkillEffect and "Duration" or nil) * calcLib.mod(enemyDB, nil, "SelfPoisonDuration", "SelfAilmentDuration")
42514251
durationMod = m_max(durationMod, 0)
42524252
globalOutput.PoisonDuration = durationBase * durationMod / rateMod * debuffDurationMult
42534253
-- The chance any given hit applies poison
@@ -4527,7 +4527,7 @@ function calcs.offence(env, actor, activeSkill)
45274527

45284528
local rateMod = (calcLib.mod(skillModList, cfg, "IgniteBurnFaster") + enemyDB:Sum("INC", nil, "SelfIgniteBurnFaster") / 100) / calcLib.mod(skillModList, cfg, "IgniteBurnSlower")
45294529
local durationBase = data.misc.IgniteDurationBase
4530-
local durationMod = m_max(calcLib.mod(skillModList, dotCfg, "EnemyIgniteDuration", "EnemyAilmentDuration", "EnemyElementalAilmentDuration", "SkillAndDamagingAilmentDuration") * calcLib.mod(enemyDB, nil, "SelfIgniteDuration", "SelfAilmentDuration", "SelfElementalAilmentDuration"), 0)
4530+
local durationMod = m_max(calcLib.mod(skillModList, dotCfg, "EnemyIgniteDuration", "EnemyAilmentDuration", "EnemyElementalAilmentDuration", "DamagingAilmentDuration") * calcLib.mod(enemyDB, nil, "SelfIgniteDuration", "SelfAilmentDuration", "SelfElementalAilmentDuration"), 0)
45314531
durationMod = m_max(durationMod, 0)
45324532
globalOutput.IgniteDuration = durationBase * durationMod / rateMod * debuffDurationMult
45334533
-- The chance any given hit applies ignite

0 commit comments

Comments
 (0)