Skip to content

Commit 8f85a76

Browse files
committed
Merge branch 'dev' into add-buildfile-onedrive-check
2 parents 32aa27f + 7390143 commit 8f85a76

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+40397
-37707
lines changed

.github/tweak_changelogs.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ sed -i -re 's/( \()?\[\\#[0-9]+\]\([^)]*\),? ?\)?//g' changelog_temp.txt
5050
sed -i -re 's/\[([^]]*)\]\(https:\/\/github\.com\/[^)]*\)/\1/g' changelog_temp.txt
5151
# Create new changelog format: add version header, remove lines 2-3, format section headers, remove ## headers with following line, prepend to existing changelog
5252
echo "VERSION[${RELEASE_VERSION#v}][$(date +'%Y/%m/%d')]" | cat - changelog_temp.txt | sed '2,3d' | sed -re 's/^### (.*)/\n--- \1 ---/' | sed -e '/^##.*/,+1 d' | cat - changelog.txt > changelog_new.txt
53+
# Convert dashes to asterisks for bullet points
54+
sed -i -e 's/^- /* /' changelog_new.txt
5355
mv changelog_new.txt changelog.txt
5456

5557
# Normalize line endings to CRLF for all output files to ensure consistent checksums with Windows

changelog.txt

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,54 @@
11
VERSION[2.58.1][2025/11/05]
22

33
--- User Interface ---
4-
- Fix incorrect tooltip when crafting some flask mods (LocalIdentity)
5-
- Fix Damage Gain breakdown including skill conversion (LocalIdentity)
6-
- Fix insufficient skill cost warning applying to other skills (LocalIdentity)
4+
* Fix incorrect tooltip when crafting some flask mods (LocalIdentity)
5+
* Fix Damage Gain breakdown including skill conversion (LocalIdentity)
6+
* Fix insufficient skill cost warning applying to other skills (LocalIdentity)
77

88
--- Fixed Calculations ---
9-
- Fix Spectre conversion multiplier applying to "gain as x" mods and Chaos damage (LocalIdentity)
10-
- Fix Pyroclast Mine Exposure being inverted and unscalable (LocalIdentity)
9+
* Fix Spectre conversion multiplier applying to "gain as x" mods and Chaos damage (LocalIdentity)
10+
* Fix Pyroclast Mine Exposure being inverted and unscalable (LocalIdentity)
1111

1212
--- Fixed Behaviours ---
13-
- Fix Intuitive Leap, Thread of Hope and Impossible Escape not parsing correctly (Wires77)
14-
- Fix mod order when crafting Grafts (LocalIdentity)
15-
- Fix "Farewell to Flesh" not applying to Agony Crawler ailment damage (LocalIdentity)
16-
- Fix Dying Breath Curse effect mod not working (LocalIdentity)
13+
* Fix Intuitive Leap, Thread of Hope and Impossible Escape not parsing correctly (Wires77)
14+
* Fix mod order when crafting Grafts (LocalIdentity)
15+
* Fix "Farewell to Flesh" not applying to Agony Crawler ailment damage (LocalIdentity)
16+
* Fix Dying Breath Curse effect mod not working (LocalIdentity)
1717

1818

1919
VERSION[2.58.0][2025/11/03]
2020

2121
--- Keepers of the Flame ---
22-
- Update and add new 3.27 skills (LocalIdentity)
23-
- Add new Wand and Ring item bases (LocalIdentity)
24-
- Add initial support for Grafts (LocalIdentity)
25-
- Add initial support for Foulborn unique mods (Wires77)
26-
- Add Support for new Monster Phys damage conversion logic (LocalIdentity)
27-
- Add support for "Farewell to Flesh" (Lycia Bloodline Herald Ascendancy Node) (majochem)
28-
- Add instant buyout to search URLs (Goufix)
22+
* Update and add new 3.27 skills (LocalIdentity)
23+
* Add new Wand and Ring item bases (LocalIdentity)
24+
* Add initial support for Grafts (LocalIdentity)
25+
* Add initial support for Foulborn unique mods (Wires77)
26+
* Add Support for new Monster Phys damage conversion logic (LocalIdentity)
27+
* Add support for "Farewell to Flesh" (Lycia Bloodline Herald Ascendancy Node) (majochem)
28+
* Add instant buyout to search URLs (Goufix)
2929

3030
--- User Interface ---
31-
- Show Foulborn Icon on new Foulborn uniques and flavour text on new base items (Blitz54)
32-
- Sort Replica Dragonfang's Flight mods (Wires77)
33-
- Fix "The Tactician" missing flavour text (Nightblade)
31+
* Show Foulborn Icon on new Foulborn uniques and flavour text on new base items (Blitz54)
32+
* Sort Replica Dragonfang's Flight mods (Wires77)
33+
* Fix "The Tactician" missing flavour text (Nightblade)
3434

3535
--- Fixed Calculations ---
36-
- Fix Warcry uptime when using Dual Strike of Ambidexterity (LocalIdentity)
36+
* Fix Warcry uptime when using Dual Strike of Ambidexterity (LocalIdentity)
3737

3838
--- Fixed Behaviours ---
39-
- Fix Gem dropdown tooltip not updating when hovering over gems (LocalIdentity)
40-
- Fix Aul Bloodline Aura nodes always applying (LocalIdentity)
41-
- Fix Everlasting Sacrifice not showing the config from the Chaos Ascendancy (Wires77)
42-
- Fix Intuitive Leap, Thread of Hope and Impossible Escape not working (n1tr0xs)
43-
- Fix legacy Curse cluster not appearing on tree sometimes (LocalIdentity)
44-
- Fix Overexertion and Echoes of Creation counting duplicate Warcries (LocalIdentity)
45-
- Fix Chaos Inoculation not disabling Righteous Fire Buff and Degen (LocalIdentity)
39+
* Fix Gem dropdown tooltip not updating when hovering over gems (LocalIdentity)
40+
* Fix Aul Bloodline Aura nodes always applying (LocalIdentity)
41+
* Fix Everlasting Sacrifice not showing the config from the Chaos Ascendancy (Wires77)
42+
* Fix Intuitive Leap, Thread of Hope and Impossible Escape not working (n1tr0xs)
43+
* Fix legacy Curse cluster not appearing on tree sometimes (LocalIdentity)
44+
* Fix Overexertion and Echoes of Creation counting duplicate Warcries (LocalIdentity)
45+
* Fix Chaos Inoculation not disabling Righteous Fire Buff and Degen (LocalIdentity)
4646

4747
--- Accuracy Improvements ---
48-
- Fix Burning Ground from Replica Siegebreaker not working (pabgarbar)
48+
* Fix Burning Ground from Replica Siegebreaker not working (pabgarbar)
4949

5050
--- Other changes ---
51-
- Fix broken header images on Linux (ZereoX)
51+
* Fix broken header images on Linux (ZereoX)
5252

5353
VERSION[2.57.0][2025/10/30]
5454

@@ -2587,7 +2587,7 @@ VERSION[2.19.0][2022/07/12]
25872587
VERSION[2.18.1][2022/06/05]
25882588

25892589
--- Fixed Bugs ---
2590-
- Fix crash related to Life gain on Block (Regisle)
2590+
* Fix crash related to Life gain on Block (Regisle)
25912591

25922592
VERSION[2.18.0][2022/06/05]
25932593

@@ -2833,7 +2833,7 @@ VERSION[2.14.0][2022/02/05]
28332833
* Add Armour and Evasion sorting to the tree and uniques tab (Lexy)
28342834
* Add Mastery tooltip for an unallocated node when comparing trees (pHiney)
28352835
* Add improvements to multiple passive tree jewel socket management (Lothrik)
2836-
- Update tree images to use the latest colours (LocalIdentity)
2836+
* Update tree images to use the latest colours (LocalIdentity)
28372837
* Fix Passive Tree Management Titles (pHiney)
28382838

28392839
--- New Calculations ---
@@ -2862,7 +2862,7 @@ VERSION[2.14.0][2022/02/05]
28622862
* Update Crimson Storm changes (lpolaright)
28632863
* Update Whispering Ice and its trigger conditions (Nostrademous)
28642864
* Update Kraityn's bandit rewards based on 3.16 values (Prismateria)
2865-
- Update Kingmaker with 3.16 changes (Wires77)
2865+
* Update Kingmaker with 3.16 changes (Wires77)
28662866
* Update Blightwell and Solstice Vigil to 3.16.0 (Lothrik)
28672867
* Update Saqawals Flock to 3.16 values (Lexy)
28682868
* Update Survival Jewels to 3.16.0 (Lothrik)

spec/System/TestImpale_spec.lua

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -112,34 +112,34 @@ describe("TestAttacks", function()
112112
build.configTab.input.customMods = "\z
113113
never deal critical strikes\n\z
114114
"
115-
build.configTab.input.enemyPhysicalReduction = 10
115+
build.configTab.input.enemyPhysicalReduction = 8
116116
build.configTab.input.enemyArmour = 1000 -- 50% dr for 200 damage, 66.6% dr for 100 dmg (impale stacks)
117117
build.configTab:BuildModList()
118118
runCallback("OnFrame")
119119

120120
-- dam * (1 - (armourDR + additionalDR)
121-
assert.are.equals(200 * (1 - (0.5 + 0.1)), build.calcsTab.mainOutput.MainHand.PhysicalHitAverage)
121+
assert.are.equals(200 * (1 - (0.5 + 0.08)), build.calcsTab.mainOutput.MainHand.PhysicalHitAverage)
122122
assert.are.equals(200, build.calcsTab.mainOutput.MainHand.impaleStoredHitAvg)
123123
assert.are.equals(200, build.calcsTab.mainOutput.impaleStoredHitAvg)
124124
-- [5 impales * 10% stored damage] * 1.3 attacks * (armour mod - phys DR)
125-
assert.are.near(100 * 1.3 * (1 - (2/3 + 0.1)), build.calcsTab.mainOutput.ImpaleDPS, 0.0000001) -- floating point math
125+
assert.are.near(100 * 1.3 * (1 - (2/3 + 0.08)), build.calcsTab.mainOutput.ImpaleDPS, 0.0000001) -- floating point math
126126

127127

128128
-- 100% crit
129129
build.configTab.input.customMods = "\z
130130
+100% critical strike chance\n\z
131131
"
132-
build.configTab.input.enemyPhysicalReduction = 10
132+
build.configTab.input.enemyPhysicalReduction = 8
133133
build.configTab.input.enemyArmour = 1500 -- 50% dr for 300 damage, 66.6% dr for 150 dmg (impale stacks)
134134
build.configTab:BuildModList()
135135
runCallback("OnFrame")
136136

137137
-- dam * (1 - (armourDR + additionalDR)
138-
assert.are.equals(300 * (1 - (0.5 + 0.1)), build.calcsTab.mainOutput.MainHand.PhysicalCritAverage)
138+
assert.are.equals(300 * (1 - (0.5 + 0.08)), build.calcsTab.mainOutput.MainHand.PhysicalCritAverage)
139139
assert.are.equals(300, build.calcsTab.mainOutput.MainHand.impaleStoredHitAvg)
140140
assert.are.equals(300, build.calcsTab.mainOutput.impaleStoredHitAvg)
141141
-- [5 impales * 10% stored damage] * 1.3 attacks * (armour mod - phys DR)
142-
assert.are.near(150 * 1.3 * (1 - (2/3 + 0.1)), build.calcsTab.mainOutput.ImpaleDPS, 0.0000001) -- floating point math
142+
assert.are.near(150 * 1.3 * (1 - (2/3 + 0.08)), build.calcsTab.mainOutput.ImpaleDPS, 0.0000001) -- floating point math
143143

144144
end)
145145

@@ -149,35 +149,35 @@ describe("TestAttacks", function()
149149
never deal critical strikes\n\z
150150
Nearby enemies take 100% increased physical damage\n\z
151151
"
152-
build.configTab.input.enemyPhysicalReduction = 10
152+
build.configTab.input.enemyPhysicalReduction = 8
153153
build.configTab.input.enemyArmour = 1000 -- 50% dr for 200 damage, 66.6% dr for 100 dmg (impale stacks) .. damage taken is after armour
154154
build.configTab:BuildModList()
155155
runCallback("OnFrame")
156156

157157
-- taken * dam * (1 - (armourDR + additionalDR)
158-
assert.are.equals(2 * 200 * (1 - (0.5 + 0.1)), build.calcsTab.mainOutput.MainHand.PhysicalHitAverage)
158+
assert.are.equals(2 * 200 * (1 - (0.5 + 0.08)), build.calcsTab.mainOutput.MainHand.PhysicalHitAverage)
159159
assert.are.equals(200, build.calcsTab.mainOutput.MainHand.impaleStoredHitAvg)
160160
assert.are.equals(200, build.calcsTab.mainOutput.impaleStoredHitAvg)
161161
-- taken * [5 impales * 10% stored damage] * 1.3 attacks * (armour mod - phys DR)
162-
assert.are.near(2 * 100 * 1.3 * (1 - (2/3 + 0.1)), build.calcsTab.mainOutput.ImpaleDPS, 0.0000001) -- floating point math
162+
assert.are.near(2 * 100 * 1.3 * (1 - (2/3 + 0.08)), build.calcsTab.mainOutput.ImpaleDPS, 0.0000001) -- floating point math
163163

164164

165165
-- 100% crit
166166
build.configTab.input.customMods = "\z
167167
+100% critical strike chance\n\z
168168
Nearby enemies take 100% increased physical damage\n\z
169169
"
170-
build.configTab.input.enemyPhysicalReduction = 10
170+
build.configTab.input.enemyPhysicalReduction = 8
171171
build.configTab.input.enemyArmour = 1500 -- 50% dr for 300 damage, 66.6% dr for 150 dmg (impale stacks)
172172
build.configTab:BuildModList()
173173
runCallback("OnFrame")
174174

175175
-- taken * dam * (1 - (armourDR + additionalDR)
176-
assert.are.equals(2 * 300 * (1 - (0.5 + 0.1)), build.calcsTab.mainOutput.MainHand.PhysicalCritAverage)
176+
assert.are.equals(2 * 300 * (1 - (0.5 + 0.08)), build.calcsTab.mainOutput.MainHand.PhysicalCritAverage)
177177
assert.are.equals(300, build.calcsTab.mainOutput.MainHand.impaleStoredHitAvg)
178178
assert.are.equals(300, build.calcsTab.mainOutput.impaleStoredHitAvg)
179179
-- taken * [5 impales * 10% stored damage] * 1.3 attacks * (armour mod - phys DR)
180-
assert.are.near(2 * 150 * 1.3 * (1 - (2/3 + 0.1)), build.calcsTab.mainOutput.ImpaleDPS, 0.0000001) -- floating point math
180+
assert.are.near(2 * 150 * 1.3 * (1 - (2/3 + 0.08)), build.calcsTab.mainOutput.ImpaleDPS, 0.0000001) -- floating point math
181181

182182
end)
183183

spec/System/TestItemMods_spec.lua

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,4 +553,36 @@ describe("TetsItemMods", function()
553553
assert.are_not.equals(64, build.calcsTab.mainOutput.Armour)
554554
runCallback("OnFrame")
555555
end)
556+
557+
it("Heralds apply exposure with Heraldry", function()
558+
build.skillsTab:PasteSocketGroup("Arc 20/0 Default 1\nHerald of Thunder 20/0 Default 1\n")
559+
runCallback("OnFrame")
560+
561+
assert.are.equals(0.5, build.calcsTab.calcsOutput.LightningEffMult)
562+
563+
build.configTab.input.customMods = [[
564+
Nearby Enemies have Cold Exposure while you are affected by Herald of Ice
565+
Nearby Enemies have Fire Exposure while you are affected by Herald of Ash
566+
Nearby Enemies have Lightning Exposure while you are affected by Herald of Thunder
567+
]]
568+
build.configTab:BuildModList()
569+
runCallback("OnFrame")
570+
571+
assert.are.equals(0.6, build.calcsTab.calcsOutput.LightningEffMult)
572+
end)
573+
574+
it("Enemy self curse effect", function()
575+
build.skillsTab:PasteSocketGroup("Arc 20/0 Default 1\nConductivity 14/0 Default 1\n")
576+
runCallback("OnFrame")
577+
578+
assert.are.equals(0.8, build.calcsTab.calcsOutput.LightningEffMult)
579+
580+
build.configTab.input.customMods = [[
581+
Nearby Enemies have 20% increased Effect of Curses on them
582+
]]
583+
build.configTab:BuildModList()
584+
runCallback("OnFrame")
585+
586+
assert.are.equals(0.86, build.calcsTab.calcsOutput.LightningEffMult)
587+
end)
556588
end)

src/Classes/CalcBreakdownControl.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ function CalcBreakdownClass:AddModSection(sectionData, modList)
457457
elseif tag.type == "MultiplierThreshold" or tag.type == "StatThreshold" then
458458
desc = "If "..self:FormatVarNameOrList(tag.var or tag.stat, tag.varList or tag.statList)..(tag.upper and " <= " or " >= ")..(tag.thresholdPercent and tag.thresholdPercent.."% " or "")..(tag.threshold or self:FormatModName(tag.thresholdVar or tag.thresholdStat))
459459
elseif tag.type == "SkillName" then
460-
desc = "Skill: "..(tag.skillNameList and table.concat(tag.skillNameList, "/") or tag.skillName)
460+
desc = "Skill: "..(tag.skillNameList and table.concat(tag.skillNameList, " / ") or tag.skillName)
461461
elseif tag.type == "SkillId" then
462462
desc = "Skill: "..build.data.skills[tag.skillId].name
463463
elseif tag.type == "SkillType" then
@@ -494,7 +494,7 @@ function CalcBreakdownClass:FormatModName(modName)
494494
end
495495

496496
function CalcBreakdownClass:FormatVarNameOrList(var, varList)
497-
return var and self:FormatModName(var) or table.concat(varList, "/")
497+
return var and self:FormatModName(var) or self:FormatModName(table.concat(varList, " / "))
498498
end
499499

500500
function CalcBreakdownClass:FormatModBase(mod, base)

src/Classes/ImportTab.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,7 @@ function ImportTabClass:ImportSocketedItems(item, socketedItems, slotName)
11261126
itemSocketGroupList[groupID] = { label = "", enabled = true, gemList = { }, slot = slotName }
11271127
end
11281128
local socketGroup = itemSocketGroupList[groupID]
1129-
if not socketedItem.support and socketGroup.gemList[1] and socketGroup.gemList[1].support and item.title ~= "Dialla's Malefaction" then
1129+
if not socketedItem.support and socketGroup.gemList[1] and socketGroup.gemList[1].support and not item.title:match("Dialla's Malefaction") then
11301130
-- If the first gemInstance is a support gemInstance, put the first active gemInstance before it
11311131
t_insert(socketGroup.gemList, 1, gemInstance)
11321132
else

src/Classes/Item.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1438,6 +1438,7 @@ function ItemClass:BuildModListForSlotNum(baseList, slotNum)
14381438
local weaponData = { }
14391439
self.weaponData[slotNum] = weaponData
14401440
weaponData.type = self.base.type
1441+
weaponData.subType = self.base.subType
14411442
weaponData.name = self.name
14421443
weaponData.AttackSpeedInc = calcLocal(modList, "Speed", "INC", ModFlag.Attack) + m_floor(self.quality / 8 * calcLocal(modList, "AlternateQualityLocalAttackSpeedPer8Quality", "INC", 0))
14431444
weaponData.AttackRate = round(self.base.weapon.AttackRateBase * (1 + weaponData.AttackSpeedInc / 100), 2)
@@ -1552,7 +1553,7 @@ function ItemClass:BuildModListForSlotNum(baseList, slotNum)
15521553
end
15531554

15541555
if self.base.armour.BlockChance then
1555-
armourData.BlockChance = m_floor((self.base.armour.BlockChance + calcLocal(modList, "BlockChance", "BASE", 0)) * (1 + calcLocal(modList, "BlockChance", "INC", 0) / 100))
1556+
armourData.BlockChance = m_floor((self.base.armour.BlockChance * (1 + calcLocal(modList, "BlockChance", "INC", 0) / 100) + calcLocal(modList, "BlockChance", "BASE", 0)))
15561557
end
15571558
if self.base.armour.MovementPenalty then
15581559
modList:NewMod("MovementSpeed", "INC", -self.base.armour.MovementPenalty, self.modSource, { type = "Condition", var = "IgnoreMovementPenalties", neg = true })

src/Classes/ItemsTab.lua

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1542,6 +1542,14 @@ end
15421542
function ItemsTabClass:CreateDisplayItemFromRaw(itemRaw, normalise)
15431543
local newItem = new("Item", itemRaw)
15441544
if newItem.base then
1545+
-- if the new item is an amulet and does not have an anoint and your current amulet does, apply that anoint to the new item
1546+
if newItem.base.type == "Amulet" and #newItem.enchantModLines == 0 and self.activeItemSet["Amulet"].selItemId > 0 then
1547+
local currentAnoint = self.items[self.activeItemSet["Amulet"].selItemId].enchantModLines
1548+
if currentAnoint and #currentAnoint == 1 then -- skip if amulet has more than one anoint e.g. Stranglegasp
1549+
newItem.enchantModLines = currentAnoint
1550+
newItem:BuildAndParseRaw()
1551+
end
1552+
end
15451553
if normalise then
15461554
newItem:NormaliseQuality()
15471555
newItem:BuildModList()
@@ -3344,7 +3352,7 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)
33443352
if base.weapon then
33453353
-- Weapon-specific info
33463354
local weaponData = item.weaponData[slotNum]
3347-
tooltip:AddLine(fontSizeBig, s_format("^x7F7F7F%s", self.build.data.weaponTypeInfo[base.type].label or base.type), "FONTIN SC")
3355+
tooltip:AddLine(fontSizeBig, s_format("^x7F7F7F%s", self.build.data.weaponTypeInfo[base.type].label or base.subType or base.type), "FONTIN SC")
33483356
if item.quality > 0 then
33493357
tooltip:AddLine(fontSizeBig, s_format("^x7F7F7FQuality: "..colorCodes.MAGIC.."+%d%%", item.quality), "FONTIN SC")
33503358
end
@@ -3599,7 +3607,7 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)
35993607
end
36003608

36013609
if flavourTable then
3602-
if item.title == "Grand Spectrum" then
3610+
if item.title:match("Grand Spectrum") then
36033611
local selectedFlavourId = nil
36043612
for _, lineEntry in ipairs(tooltip.lines or {}) do
36053613
local lineText = lineEntry.text or ""
@@ -3899,7 +3907,7 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)
38993907
-- Build sorted list of slots to compare with
39003908
local compareSlots = { }
39013909
for slotName, slot in pairs(self.slots) do
3902-
if self:IsItemValidForSlot(item, slotName) and not slot.inactive and (not slot.weaponSet or slot.weaponSet == (self.activeItemSet.useSecondWeaponSet and 2 or 1)) then
3910+
if self:IsItemValidForSlot(item, slotName) and not slot.inactive and (not slot.weaponSet or slot.weaponSet == (self.activeItemSet.useSecondWeaponSet and 2 or 1)) and slot.shown() then
39033911
t_insert(compareSlots, slot)
39043912
end
39053913
end

src/Classes/ModStore.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits)
631631
end
632632
if tag.searchCond then
633633
for slot, item in pairs(items) do
634-
if (not tag.allSlots or tag.allSlots and item.type ~= "Jewel") and slot ~= itemSlot or not tag.excludeSelf then
634+
if (not tag.allSlots or tag.allSlots and (item.type ~= "Jewel" and item.type ~= "Graft")) and slot ~= itemSlot or not tag.excludeSelf then
635635
t_insert(matches, item:FindModifierSubstring(tag.searchCond:lower(), slot:lower()))
636636
end
637637
end

src/Classes/PassiveTreeView.lua

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ function PassiveTreeViewClass:Draw(build, viewPort, inputEvents)
795795
local outerSize = radData.outer * scale
796796
local innerSize = radData.inner * scale * 1.06
797797
SetDrawColor(1,1,1,0.7)
798-
if jewel.title == "Impossible Escape" then
798+
if jewel.title:match("Impossible Escape") then
799799
-- Impossible Escape ring shows on the allocated Keystone
800800
for keystoneName, _ in pairs(jewel.jewelData.impossibleEscapeKeystones) do
801801
local keystone = spec.tree.keystoneMap[keystoneName]
@@ -1230,9 +1230,17 @@ function PassiveTreeViewClass:AddNodeTooltip(tooltip, node, build)
12301230
end
12311231
end
12321232
end
1233+
local goldCost = data.goldRespecPrices[build.characterLevel]
1234+
if node.ascendancyName then
1235+
goldCost = goldCost * 5
1236+
end
12331237
if node.depends and #node.depends > 1 then
12341238
tooltip:AddSeparator(14)
12351239
tooltip:AddLine(14, "^7"..#node.depends .. " points gained from unallocating these nodes")
1240+
tooltip:AddLine(14, "^xFFD700"..formatNumSep(#node.depends * goldCost) .. " Gold ^7required to unallocate these nodes")
1241+
tooltip:AddLine(14, colorCodes.TIP)
1242+
elseif node.alloc then
1243+
tooltip:AddLine(14, "^xFFD700"..formatNumSep(#node.depends * goldCost) .. " Gold ^7required to unallocate this node")
12361244
tooltip:AddLine(14, colorCodes.TIP)
12371245
end
12381246
if node.type == "Socket" then

0 commit comments

Comments
 (0)