--- New to Path of Building ---
* Add build comparison tab (oboking)
* Add support for Imbued Supports (Peechey)
* Preserve skill selection on character re-import (mcagnion)
* Remember league for imported characters (pHiney)
* Watcher's eye trade search (vaisest)
* Trader improvements (vaisest)
* Add Unholy Aberration spectre (arielrahamim)
* Add Conjuror of Rot Spectre (Peechey)
* Add support for higher Life values in the Minion Pact config (Vanqy9316)
* Add support for Lethal Dose support (majochem)
* Add Life Recharge to sidebar when using Eternal Youth (LocalIdentity)
* Add support for listing all active Tattoos (Peechey)
* Add warning for eligible items missing an anoint (OursCodeur)
* Default staged skills to their maximum stages (OursCodeur)
* Add more specific jewel tooltip comparison sorting (vaisest)
--- Fixed Crashes ---
* Fix crash when both Blight + Blight of Contagion use "Maximum Sustainable Stacks" (rasmuskl)
* Fix crash caused by Phantasm Support being copied with mirage skills that take over mainSKill (Paliak)
* Fix CwC crash when using skills from items and multiple link groups (Paliak)
* Fix crash when hovering over more damage calc breakdown for Kinetic Fusillade of Destruction (FenikSRT4)
--- User Interface ---
* Add gem color indicators to socket group labels (valar-22)
* Default crafted cluster jewels to minimum passives (OursCodeur)
* Improve Hextoad breakdown and simplify calcs (Paliak)
* Fix Gem quality tooltips (LocalIdentity)
* Fix Loadouts dropdown not showing on smaller screens (Peechey)
* Guard Trader result dropdown tooltip against stale state (mcagnion)
* Dismiss power report toast message when checkbox is unticked (MrHB212)
--- Fixed Calculations ---
* Fix Cast while Channelling trigger interval being rounded to tick rate (Paliak)
* Fix Bleed chance over 100% scaling Vicious Skewering Impale effect (LocalIdentity)
* Fix Molten Strike of the Zenith Total Weighted Ball Average calc (LocalIdentity)
* Fix Generals Cry damage calculation with some skills (LocalIdentity)
* Fix Searing Bond of Detonation using Power charges instead of Max Power Charges (Wires77)
* Fix Varunastra not counting for Blade Blast of Dagger Detonation (Paliak)
* Add config option for Hallowing Flame magnitude (Paliak)
* Fix calculations for skills that can repeat (Peechey)
* Fix spectre buffs global effects applying just by existing in the spectre library (nofate121)
* Fix Maven Memory Game damage (LocalIdentity)
* Fix Poisonous Concoction Added Damage from disabled Life Flasks (Peechey)
* Fix issue with converted damage showing no poison stacks (wh98yap-hub)
* Fix Ghost Reaver instant leech calculation (LocalIdentity)
* Fix negative eHP and NaN Max hit values for some builds (LocalIdentity)
* Fix Catalyst scaling for Added Damage mods (Peechey)
* Fix for Chieftain resist nodes applying effects twice due to Foulborn Choir of the Storm (EminGul)
--- Fixed Behaviours ---
* Fix cluster import sometimes not allocating the correct nodes (LocalIdentity)
* Fix Resistance Shrine not granting max Chaos Resistance (LocalIdentity)
* Fix Replica Dragonfang's Flight not working with transfigured Lightning Tendrils (LocalIdentity)
* Fix Earthbreaker Totems Slam skills benefiting from Exert bonuses (LocalIdentity)
* Fix Exposure mods on Balance of Terror not working (LocalIdentity)
* Fix Ahuana's Bite and Bonechill's "inc damage taken" mods stacking (LocalIdentity)
* Fix Animate Weapon of Self Reflection not granting weapon mods to minion (LocalIdentity)
* Fix Cryogenesis disabling flat damage from other sources when using Ele Hit (Wires77)
* Fix mods on Ring 3 applying when The Unseen Hand isn't allocated (Peechey)
* Fix issues with gems socketed in Ring slot 3 (Paliak)
* Fix Vaal Flameblast base AoE and scaling (Blitz54)
* Fix Servant of Decay affecting Life Mastery (Peechey)
* Fix filtering Support gems in SkillsTab (Peechey)
* Fix Dual Wield mastery granting damage when using a Thrusting + non-thrusting sword (LocalIdentity)
* Remove tattoo tooltip and popup for cluster jewel keystones (Peechey)
* Fix Tinctures applying their effects even when you have no Mana (LocalIdentity)
--- Accuracy Improvements ---
* Fix Perfidy missing 3.25.0 changes (LocalIdentity)
* Fix Summon Reaper and Animate Guardian missing gem tooltip lines (LocalIdentity)
* Fix Sacred Chalice missing fire mod (Nightblade)
* Fix Divine Blessing and Earthbreaker appearing in gem list (LocalIdentity)
* Tag Serle's Masterwork as unobtainable (LocalIdentity)
--- Fixed Bugs ---
* Fix URL spoofing issue with imported URLs (Wires77)
* extract shared config visibility logic and use it in both the ConfigTab and CompareTab
* add support for Imbued gems in compared Skills tab
* fix wrapping of buff/debuff info text in compared Calcs tab
* remove map mods from compared Config and fix gaps between groups
* fix overlapping rendering of compared Config option controls
* change wording from impliable to canImply
* fix infinite scrolling in compare tabs Summary, Items, and Skills tabs
* add horizontal scroll to Compare Items tab
* use actual drawn y to draw controls
* fix drawing of item set dropdown in Items tab when using horizontal scroll
* adjust the layout of Items and Skills compare tabs. Instead of 50/50 now use a content-driven column split
The `[^/]+/` match pattern requires at least on non-slash character
before the trailing slash. This works on Windows where absolute paths
start with a drive letter.
With absolute POSIX paths, the leading slash is skipped by this pattern
causing the accumulated `dirStr` to not start with a slash. `dirStr` is
then interpreted as a relative path, causing the directories to be
erroneously created in the current working directory.
This change fixes the erroneous behavior with absolute POSIX paths by
initializing `dirStr` with a slash if the `fullPath` starts with a
slash. It retains the current behavior on Windows systems.
* Fix: Valako, Storm's Embrace and Tasalio, Cleansing Water Ascendancy nodes applying effects twice due to Foulborn Choir of the Storm
* Use temp actor instead of changing calcs
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Tinctures need stacks of mana burn in order to keep their effect active
If you are using a build with Blood Magic or have 100% Mana reserved then you cannot have any Tincture effects active unless you have Weeping Wounds
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Tag Serle's Masterwork as unobtainable
The unique can't be dropped anymore
* Export
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Some builds could show up having negative eHP values or nan max hit when they have single digit life values
numHits could become negative which would make eHP show up as negative too
Enemy damage conversion could also result in max hit becoming 0 in one part of the code and that would then display as NaN after it tries to divide by 0
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Ghost Reaver converts instances of Life Leech into instances of Energy Shield leech so that when you hit an enemy and you have both a source of life leech and es leech, it will create 2 es leech instances
This is important for instant leech where it effectively doubles your instant ES leech rate
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Generals Cry clones need to finish their attack before you cast General's Cry again or else they be be despawned before their attack animation finishes.
Technically it should use the contact point of the animation but since we do not support that yet this is the only way to handle it. It also then allows some time for the clone to move too without despawning
* set LifeFlaskRecovery for PConc if life flask is in a disabled slot
* update for multiple disabled life flasks and refactor into function
* indent fix
* Simplify code
Handle it all in the ordered slot loop so it doesn't need to be called on again
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Fix Divine Blessing appearing in gem list
The skill is no longer on a gem and only available through March of the Legion
* Remove Earthbreaker from gem list too
* Better fix
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Add more specific jewel tooltip comparison sorting by sorting by:
1. empty sockets
2. same base group jewel or same unique
3. DPS
4. EHP
* Fix crash on hovering over calcs tab breakdowns
* Fix sort when label names are the same e.g. Abyssal sockets
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* better update for the index of the Imbued GemSelectControl
stop click through of the GemSelectControls behind the Imbued dropdown
* Allow typing again
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* fix(trade): guard nil sortedResultTbl in dropdown tooltipFunc
The nil guard lost during the vaisest/trader-improvements merge
caused a crash when hovering the result dropdown after clearing
search results.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* test(trade): cover stale result dropdown tooltip guards
* style(spec): use tab indentation in TradeQuery test
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Watcher's eye trade search
* Improvements per comments
- move find button to separate slot instead of using exisitng jewel sockets
- use exisitng Watcher's Eye slot(if available) for usage in weight calculations with test item
- added option to include rest of applicable mods from Watcher's Eye mod pool that have weight 0 in final query
* fix merge mistake
* remove debugger setup -.-
* Fix getting unweighted mods
* Actually include corrupted mods
* fix checkboxcontrol for watchers eye
* show tooltips for watcher's eye search. either against all jewels or against an equipped eye
* remove mirrored button from eye and megalomaniac search because it is useless
* fix valid slot for watcher's eye
* Move mods to correct places
Moves the mods to their correct areas in ModParser
Removes parsing for mods that we do not currently support calcs for
* Fix crash when opening trader with empty jewel socket
* Fix skill name parsing
* add "include in person" setting
* change in person selection to be a dropdown of the ones that are on the trade site
* add button to find exact search result for trade tool
* trade query result filtering via trader name
* fix trader tool item slot anchor
* improvements to timeless jewel tool: trade type and realm selections
* trader tool: option to use current implicits and enchants
* as per comments: move implicit and enchant overrides to query options
* trader tool: add option to omit "while" eldritch mods and clarify anoint vs enchant for amulets and belts
* trader tool: fix#9678 crash
* trader tool: fix price based sorting #9678
* fix test for poe.ninja currencies
* trader tool: add price next to item name
* fix empty check in PriceBuilderProcessPoENinjaResponse
* trader tool: use result - klog10(price) estimation for value sorting
* Fix indents
* Fix failing test
Each test now runs with a clean slate as PriceBuilderProcessPoENinjaResponse was being affected by previous tests
* Fix test
* Fix league name and scourge ui anchor
pbLeagueRealName does not exist. The correct variable is pbLeague
The scourge anchor has a typo in it
* Fix search for item code
The trade site uses floats for the weights internally when sorting but only shows integers to the site and api
Need to use +-1 so that it doesn't accidently miss an item
e.g. before a weight of 100.3 would show as 100 in the api callback and then we'd search for 99.9 - 100.1 so the search would never show the item
* Use last query for manually pasted strings
Can now properly search for items when the user pastes a weighted sum search
* Add any to trade search types
* Spelling mistakes
* Wrong variable name for control
* More filters incase missing search elements
* Issue with newItem.base.weapon bypassed rest of checks
* Fix Timeless jewel league selection resetting
* Remove debug console prints
* Fix option depending on last changed dropdown
The dropdown checked if the last changed dropdown was set to none instead of checking that both of the dropdowns were set to none. Setting an influence and setting it back to none would make the copy eldritch box become selectable when it shouldn't be
* Fix weapon enchant only copying from weapon slot 1
* Comments
---------
Co-authored-by: Borna Ivankovic <borna.ivankovic92@gmail.com>
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Watcher's eye trade search
* Improvements per comments
- move find button to separate slot instead of using exisitng jewel sockets
- use exisitng Watcher's Eye slot(if available) for usage in weight calculations with test item
- added option to include rest of applicable mods from Watcher's Eye mod pool that have weight 0 in final query
* fix merge mistake
* remove debugger setup -.-
* Fix getting unweighted mods
* Actually include corrupted mods
* fix checkboxcontrol for watchers eye
* show tooltips for watcher's eye search. either against all jewels or against an equipped eye
* remove mirrored button from eye and megalomaniac search because it is useless
* fix valid slot for watcher's eye
* Move mods to correct places
Moves the mods to their correct areas in ModParser
Removes parsing for mods that we do not currently support calcs for
* Fix crash when opening trader with empty jewel socket
* Fix skill name parsing
---------
Co-authored-by: Borna Ivankovic <borna.ivankovic92@gmail.com>
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
The damage for the skill was not corrected when I added support for the phys as extra damage multi for enemies
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
The mastery that grants damage when you are wielding two different weapon types is not meant to work if you are wielding a non-thrusting sword with a thrusting sword as GGG have hard coded these weapons to share the same weapon type
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Remove Quality type dropdown
Cherrypicked from #9670 to make the diff from that PR cleaner
* Remove more quality stuff
* Last quality fix
* Remove quality types from export
* Remove dummy stat quality export
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* update Fatal Flourish parsing to ignore Travel and Retaliation skills
* update for Channel, Instant, and Triggered skills
* add skillTypeCheck to repeats logic in CalcOffence
* update to allow traps and mines, fix dps and cost for traps and mines
* fix damage to be 160 more, fix Ranged Attacks like Ice Shot or Kinetic Blast
* fix var usage
* Fixes
More generic handling for skills that can't repeat
Support skill stat for cannot repeat
Add DPS multiplier for traps and mines that can repeat spells / attacks
Fix parsing of mods in modparser
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* [ISSUE-9735] KF of Desctruction Calc Error
* Regenerates the skills because of a reference to
KineticFusilladeOfDestruction instead of to KineticFusilladeAltX which
is the proper key for the skill. This reference was causing errors for
some of the hover tooltips in the calcs tab.
* Fix PR
Removed changes from exporting using the wrong game version
Also fix issue with Charged Dash of Projection
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* remove ring 3 when deallocating Unseen Hand
* refactor to CalcSetup, fix tooltip
* Change to flag check
---------
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Port unique updater scripts from PoB2
Port the unique item updater scripts from PathOfBuilding-PoE2 (PRs #54,
#65, #175) and fix multiple bugs for PoE1 compatibility.
Scripts added:
- uTextToMods.lua: converts unique item text to mod IDs (run when adding
new uniques)
- uModsToText.lua: converts mod IDs back to text with fresh GGPK data
(run when game data updates)
Changes to existing files:
- mods.lua: add ModItemExclusive.lua and ModTextMap.lua generation
- statdesc.lua: handle '!' negation limits and ranges starting at 0
Bug fixes over the original PoE2 scripts:
- Fix uModsToText.lua not flushing mods for last item in each file
- Fix mod ID regex misidentifying base type names containing hyphens
(e.g. "Two-Point Arrow Quiver") as legacy mod ranges
- Fix unresolved text lines losing position among ordered mods
- Fix nil access on statOrder when processing legacy-only mods
- Fix uTextToMods.lua greedy tag stripping pattern and mod selection
- Make usedMods local and move modTextMap load outside loop
- Enable all 20 PoE1 item types (original only had axe enabled)
Bug fix in Item.lua:
- Fix excluded/exclude variable name mismatch creating accidental global
- Fix wrong Lua pattern ^%[a ]+ to correct ^[%a ]+ in jewel radius
- Fix space indentation to tabs in jewel radius block
* Add generated mod data and intermediate export files
- ModItemExclusive.lua: unique/exclusive mod data generated by mods.lua
- Export/Uniques/ModTextMap.lua: mod text to mod ID mapping
- Export/Uniques/*.lua: intermediate mod ID format for all item types
* Update unique item data from GGPK export
Re-export all unique item text files using the updater scripts with
current game data. Updates stat ordering, mod wording, and adds catalyst
tags to amulets and rings.
* Rename minz/maxz to minZ/maxZ for spellchecking
* Make scripts more robust and fix tags for PoE1
* Revert "Update unique item data from GGPK export"
This reverts commit b01d5f392c.
* Update uTextToMods to be much more robust
This script now handles sorting mods on preference to remove as much
manual mod entry as possible. There are still many caveats with using
it, so item types have been commented out for now with the intent to
tackle each type one at a time until we are confident in its data.
* Small script improvements + axe uniques
* Exclude all itemTypes from uTextToMods to prevent accidents
* bows
* Missed some axe mods
* Fix numerical errors after export
* Claws
* Daggers
* Fishing rods, maces
* Hopefully final bugfix and rewrite
* Staves
* Swords
* Wands
* Body armour, boots, gloves
* Jewels
* Re-export body, boots, gloves, jewel via uTextToMods + uModsToText
* Re-export belt via uTextToMods + uModsToText
* Fix spelling for linesBackward
* Revert "Re-export belt via uTextToMods + uModsToText"
This reverts commit 49ac1b88a7.
* Fix decimal range parsing in uModsToText
Pattern was missing dots so mods with values like 0.2 (leech rates etc)
would fail to parse and crash describeStats with nil comparison.
* Re-export belt via uTextToMods + uModsToText COPIUM
* Forgot to commit the staff export
* Skip continuation lines after resolving multi-line mods
When a mod ID resolves to N lines of text, the export file also has
N-1 plain text continuation lines after it. Without skipping those,
they'd get output twice (once from the mod resolution, once as
unresolved text).
* Helmets
* Manually fix enemy aura mods for now
* Fix multi-line mod handling in export round-trip
Rewrote io.linesBackward to read the whole file into memory instead
of the old chunk-based approach - the 4KB-chunk reader broke on
Windows because text-mode \r\n conversion threw off the seek math,
producing garbled lines at chunk boundaries.
After resolving a multi-line mod to its ID, strip stale continuation
lines from the output. Also handles sibling mods that share the same
first line (Dream/Nightmare jewels have 4 mods starting with the
same text but different continuations).
Reverted the skipLines workaround in uModsToText - it was eating
legitimate variant override lines (e.g. GrantShaperSkill_1 variants).
Fixed a few ModItemExclusive wording mismatches (Violent Dead
recovery rate/speed, unarmed attack/attacks pluralization, DNT tag).
* Revert ModItemExclusive.lua changes - generated file, fix in unique files instead
* Add ConvertMod to ModStore/ModList/ModDB
Like ReplaceMod but matches by oldName instead of the new mod's name,
so it can change a mod's identity (e.g. FireMin -> ColdMin) rather
than just updating its value. ModDB moves the mod between name buckets.
* Revert "Add ConvertMod to ModStore/ModList/ModDB"
This reverts commit c1228caff0.
* Rings
* Update export script to support multi-line implicit mods
* Tinctures
* Flasks
* Fix rings
* Add missing implicit line on Grattus Signet
* Update exporter
* Regenerate mods
* Jewels
* Amulets, haven't checked over the text changes yet
* Amulet mod value updates
* Export amulets after fix
* Belts
* Quivers
* Update export to handle spaces in mod names
* Shields
* Body
* Boots
* Gloves, text to mod
* Export gloves text
* New Rings
* New items, mod ordering and small fixes for weapons
* New armor items
* Final fixes and updates for jewels, jewellery, and consumables
* Fix typo
* Re-export exclusive mods
* Export ModCache
* Fix Seething Fury export
The stat description for the mod was rounding it when it should not have been
* Fix export of aura mods
Mods that grant effects like `Nearby Enemies have 50% increased Fire and Cold Resistances` contain stats that are used in the BuffTemplate for it to apply to enemies
We have to remove these stats as they aren't needed on the items
* Remove old code for removing BuffTemplate stats
The block used to handle the stat removal for the mods that gained an extra stat for the purpose of being using in the buff template
* Update ModCache
---------
Co-authored-by: Wires77 <Wires77@users.noreply.github.com>
Co-authored-by: PJacek <PJacek@users.noreply.github.com>
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Not sure when they added it but a bunch of gem tooltips in PoE 1 have their own stat description that is meant to be used
Also fixed an issue with cannoincal_line in which is meant to be used for the trade site and also an issue when a stat description has 2 special identifiers in a row
e.g. `#|-1 "{0}% less Critical Strike Chance" canonical_line negate 1` gets treated as `canonical_line ` as the type and `negate` as the value instead of knowing to treat `canonical_line` as its own singular case
PoB 2 didn't have this issue as they removed reminderText values from stat descriptions to the fix of checking for numbers in the second argument would work
Co-authored-by: LocalIdentity <localidentity2@gmail.com>