Sync with upstream#92
Open
jay9297 wants to merge 70 commits into
Open
Conversation
Both of these skills use a crit chance override which we were not taking into account unless you were dealing damage with an offhand weapon Now all skills that have a crit chance value on the skill, will override the crit chance of the weapon or minion Co-authored-by: LocalIdentity <localidentity2@gmail.com>
The mod was using the wrong mod name so it wasn't working Co-authored-by: LocalIdentity <localidentity2@gmail.com>
The mod is very similar to the other soul core and rune effect mods we already supported This now supports the mod on gloves and also the mod on Darkness Enthroned Co-authored-by: LocalIdentity <localidentity2@gmail.com>
The JSON import order was doing items before the passive tree so builds that used giants blood or the other nodes that change item equips would not work Co-authored-by: LocalIdentity <localidentity2@gmail.com>
The Jewel is in the second socket of the item so the previous code would try to add the jewel to Gloves Jewel Socket 2 instead of socket 1 We now remove non jewel types from the index list incase GGG adds other jewel + rune combos in the future Co-authored-by: LocalIdentity <localidentity2@gmail.com>
The ascendancy node wasn't scaling gem levels as it wasn't being handled in CalcSetup before gems were initialised Co-authored-by: LocalIdentity <localidentity2@gmail.com>
It appears that curses round to the nearest value instead of rounding down like other mods Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Was missing the skill flag Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Some base types have changed names between updates so the old item no longer works. We were not checking that the base still exists before trying to render the tooltip for them Now adds specific popup just for these items so that it doesn't run the other tooltip code and cause a crash Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Gem level supports were currently only applying their effect to the granted effect of the skill part that they matched. This causes issues when you have a skill like Apocalypse that has multiple granted effects Fire Mastery was only increasing the gem level for the meteor instead of the actual gem itself Now mods that use `SupportedGemProperty` apply to all the granted effects on a gem and go through their own loop We now have a `GemTag` mod type too that makes it easier to apply for future scenarios Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Unlike other Infusion-powered spells, Arc just has conditional stats rather than a separate statset. I therefore included a skill-specific config option similar to the one for Flame Wall.
We didn't have parsing for the levels mod so it wasn't working Co-authored-by: LocalIdentity <localidentity2@gmail.com>
… the legacy tag (#2281) * Fix Undermine and Murderous Intent missing the legacy tag These gems are drop disabled and meant to have the legacy tag on them * Add Bloodlust and Lasting Ground --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
… Life mods (#2293) * Channeling skills properly count lifecostpersecond as opposed to flat * Regenerate cache * Formatting --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Remove old barkskin stacking behaviour * remove typo
This reverts commit a14b22c.
We didn't have parsing for the levels mod so it wasn't working Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Add support for Atziri's Communion support gem Supports Persistent Skills by reserving Life instead of Spirit. * Simplify calc and add test * Fix ModCache test * Fix alphabetical order --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Added support for limiting the mod to 90% Had to add support for negative value limiting Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Fix radius jewels only applying the first mod in the list * Clarify Peechey's comment * Remove modcache line * :madashell:
* Rework power stats by combining minion and player dps, and separating minion stats * Also use dps sumlogic for off/def tree * Remove unnecessary import * Apply stat transform in data.powerStatList.GetFromOutput and fix anoint * Make stat weight panel larger * Fix tests * Fix remaining issues * Fix FullDPS stat fallback --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Add option to return to build selection when crashing * Fix for when a crash occurs in a popup When a crash happened in a popup, it would not clear the popup on pressing f4 so would still be stuck in a crash loop e.g. Crash in the item set manager popup UI We now clear the popup events and input events just incase --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Change border size to be 1 px * Clarify border code in calcbreakdowncontrol
* Release 0.21.0 --- New to Path of Building --- * Add 0.5.2 Passive tree changes (trompetin17) * Add support for very large time-lost jewel mod (vaisest) --- User Interface --- * Fix window title changing in compare tab (vaisest) --- Fixed Calculations --- * Fix many supports not adding cooldown (Peechey) * Fix calculation of inverted Resistances when having a source of Penetration (LocalIdentity) * Fix Discipline not being converted by Eldritch Battery (LocalIdentity) --- Fixed Behaviours --- * Fix Split Personality not working with Monk and Druid starting points (LocalIdentity) * Fix mods duplicating when crafting some Crossbows (LocalIdentity) * Fix Full DPS breakdown and gem dropdowns showing the wrong name for Companion / Spectre skills (ltogniolli) * Fix PoB Trader search not working correctly after comparing a build (vaisest) * Fix Mageblood mods merging in item crafter (LocalIdentity) * Add tooltips for skills granted by items and fix skill tooltip wrapping * Slightly refactor item skill tooltips: - Use lookup table instead of iterating through gems - Fix math from subtooltip and remove dead code * "Improve" tooltip math again (I'm still just as confused) * Revert "Release 0.21.0" This reverts commit b4f9a3c. --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Fix compare config tab edit controls not supporting selections * Fix negative values being wiped Couldn't type a `-` character into the box without it being wiped --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Fix staff runes being listed on quarter/warstaves * Correctly use quarterstaff for runes instead of warstaff
* Export emotion data * Add emotion mods to jewel craft item * Fix error error, only show mod list when there are mods, and simplify code * Fix radius mod text prefix for desecrate-only mods * Make CSpell happy * Avoid crashing when adding emotions to unknown jewel base
* Allow disabling scroll interacting with controls * Revert SliderControl.lua (It actually makes sense here imo) * Only block scroll wheel, not arrow keys * Fix tooltip + cancel selection The tooltip still mentioned scroll bars When pressing cancel it wasn't reverting to the previous choice --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Allow From Nothing to shorten power report distance * Fix list path length
* Add "Buy similar" button to display item controls * Work around belt implicit matching * Fix buy similar matching for emotion mods
* Add required stats filter to trader * Fix empty results being shown and hide filters for uniques * Fix mod selectors for jewels and add implicits+corrupts * fix typo * Fix weapon filters * Fix crash when editing a set min value Was being treated as a string so would cause a crash expecting an int --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Add support for Sinister Jewel sockets adds support for sinister jewel sockets granted by amulet anoints and Voices, including Zarokh's Gift. granted sockets now apply in calculator environments, update main build socket state only during the main calc pass, and are removed cleanly when the granting anoint/item goes away. also fixes the anoint picker so Zarokh's Gift appears by adding the new 0.5 emotions to the filter list, and verifies tooltip comparisons include jewels socketed into prospective Zarokh sockets. * Remove new emotion UI additions Added already in a different PR * Use ModParser + cleanup Uses the sinister jewel count from ModParser now Cleans up some duplicated code * Cleanup Condense some functions * Mark sinister jewels in tree data + fix adorned Now mark the sockets in the tree export so it's easier to check them in different files Now stops the sockets working with Adorned --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Support "+X% to Fire Spell Critical Hit Chance" affix
The "of Xoph" suffix ("+X% to Fire Spell Critical Hit Chance", mod group
FireSpellBaseCriticalChance) had no modNameList entry, so the "fire spell"
qualifier was left unparsed and the affix did nothing.
Add a modNameList mapping to CritChance (BASE) restricted to fire spells via
ModFlag.Spell + KeywordFlag.Fire, matching the codebase's existing "fire spells"
convention in preFlagList. Add a parse regression test.
Closes #2226
* Address review: composable "<element> spell" tags instead of one stat entry
Per review feedback: rather than a single modNameList entry for "fire spell
critical hit chance", add fire/cold/lightning/chaos spell to modFlagList's
Skill types section. These compose with any stat (critical hit chance, critical
damage bonus, ...) through the normal modName parse, and future-proof the other
elements. Update the regression test to assert the tag composes with both
CritChance and CritMultiplier and works per element.
---------
Co-authored-by: luther-rotmg <ryan.duke360@gmail.com>
* Fix crash importing minion skill with missing activeSkillList * Add tests for missing minion activeSkillList * Guard activeSkillList in Calcs.lua and add end-to-end minion test - Add nil guards for activeSkill.minion.activeSkillList at two sites in Calcs.lua (lines 469, 578) that would crash with ipairs(nil) during the same frame cycle as the Build.lua fix - Add end-to-end test using a real minion skill (Skeletal Sniper) through the full OnFrame pipeline to verify activeSkillList, mainSkill, and UI controls are properly populated * Guard missing minion main skill in tooltips * Add integration test for minion skill character import (issue #2243) Reproduce the exact bug scenario: ImportItemsAndSkills with a minion skill gem, then ImportPassiveTreeAndJewels to trigger a full rebuild, then verify OnFrame completes without crashing and that the minion's activeSkillList and mainSkill are properly populated. --------- Co-authored-by: xh-forge <xh-forge@users.noreply.github.com>
…elt and ring bases (#2140) These mods only spawn on the genesis_tree_* tags, which GGG grants at runtime and omits from base data, so they matched no item. Adding the tags to belt/ring bases during export lets the existing spawn-weight logic route them to the right slot.
* Make socket tree view code more portable and add it to trader sockets on hover * Also add tree view to compare tab compact mode * Fix being able to hover two slots at once * Fix crosshair * Guard against nil slot just in case
* Prevent overwriting socket-bound augments and add tests for copyanointsandaugments * Fix copying of items and remove augments trader --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Add 26 beast spectre/companion varieties: - Anundr, the Sandworm - The Ravenous Fang (map variant) - Rasp Scavenger (medium, large and Sekhema Trial sizes) - Black Strider (incl. Sekhema Trial variant) - Porcupine Crab - Venomous Crab Matriarch - Tarnished Beetle - Adorned Scarab - Adorned Beetle - Hyena Demon - Sun Clan Scavenger - Tombshrieker (Sekhema Trial variant) - Plague Nymph - Nymph Wasp - Chaw Mongrel - Moray Clan - Armoured Parasite - Kreth Parasite - Feral Primate - Flesh Larva (ranged variant) - Tendril Prowler - Rabid Dog Add the monster skills these beasts use to the spectre skill export; this also fills in the previously-empty kits shared by The Devourer, The Ravenous Fang and Rasp Scavenger. The spectre list report now counts same-name monsters with different Spirit reservations as distinct variants instead of duplicates, and beast-category monsters are no longer excluded by the boss-health-bar filter, since boss beast companions like Anundr carry it.
…gle hit (#2006) * Change combined hit flag to `combinesHitsWhenDualWielding` In PoE2 `doubleHitsWhenDualWielding` does not actually cause a combined hit from both weapons, but instead causes two separate near simultaneous hits. In order to still be able to reuse the old logic, I changed all checks for `doublenHitsWhenDualWielding` to `combinesHitsWhenDualWielding` instead. Support for the old flag will be in separate commit. * Make `combineStat("HARMONICMEAN")` use double hits * Update the `Speed` breakdown Now correctly reflects behavior of the three possible dual wield hitRate scenarios: 1. One combined hit from both weapons (Harmonic Mean) 2. Two separate simultaneous hits from each weapon (2x Harmonic Mean) 3. Alternating between Mainhand and Offhand (Harmonic Mean) * Use "DPS" mod instead of directly changing `Speed` This is still not ideal imo, but it's mostly due to the fact that we don't have a good breakdown for "DPS" mods * Add nil check for `gemName` in CalcSetup Found this bug when expanding `PasteSocketGroup()`, which probably wasn't a problem until now because it could only occur with `testInput` * Add option specify `skillId` to `PasteSocketGroup` Also added emmylua annotations for easier understanding of the `testInput` structure * Add `dpsMultiplier` to `output` to avoid doubling Since `skillData.dpsMultiplier` was multiplied with itself in each pass, any modifiers would be applied twice for dual wield skills. Instead it is now added to `output.DpsMultiplier` and combined with `combineStat()` * Add stat for future combined hit dual wield skills * Add tests for dual wield stats * small fix for test conditions * Add rounding to tests Previously got a failed test because DPS value were not equal after 10 decimals ... * Fix breakdown for average hit & attack speed * Fix label logic Was excluding grantedEffect.name skills --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Speed up gem dropdown DPS sorting and hover tooltips The dropdown hover tooltip was cleared and rebuilt every frame, and each rebuild runs a full build calculation - hovering one gem cost ~60 full calcs per second. It now rebuilds only when the hovered gem, the build's outputRevision, or the relevant default settings change (tooltip:CheckForUpdate), turning the per-frame cost into a one-time cost per hovered gem. This also implements the fastCalcOptions path that the DPS sort loop was already calling into: UpdateSortCache defines the options and CalcOutputWithThisGem forwards them to the misc calculator, which now accepts them as an optional third argument: - Accelerated environment reuse: per-gem calcs carry over the cached player/enemy/minion DBs and a persistent environment with the existing accelerate flags (nodeAlloc, requirementsItems, requirementsGems), instead of rebuilding unchanged state from scratch for every gem. - skipEHP: defence estimations (EHP/max hit) are skipped during sorting unless sorting by Effective Hit Pool. - fullDPSOnly: when sorting by Full DPS, only the calcFullDPS roll-up is computed; the main-skill pass whose output was discarded is skipped. All other GetMiscCalculator callers pass two arguments and are unchanged. Verified by comparing outputs of the fast and unaccelerated paths for every supportable gem on test builds: identical results across all sort fields. * Cache per-skill Full DPS results during gem dropdown sorting When sorting the gem dropdown by Full DPS, every candidate gem triggered a full calcFullDPS pass: one perform per Full-DPS-included skill, even though a support socketed into one group cannot affect most other skills. On builds with many included skills (e.g. several companions), this multiplied the cost of every dropdown open by the skill count. calcFullDPS now supports an optional per-skill result cache (specEnv.fullDPSCache), driven by diffing each skill's calculation inputs rather than by guessing what the candidate gem does: - During the base pass, each skill's harvested outputs are captured into a plain snapshot, together with its input references: the skill's own modifier list and the environment's "coupling surface" - the buffs, auras and curses every skill provides (buffList) and the exposure it can inflict, which are the channels through which one skill's gems can influence another skill's results. - On later calls, a skill whose own modifier list and the coupling surface are both unchanged merges its cached snapshot instead of recalculating. Anything that touches the surface (auras, exposure, buff-granting supports) conservatively recalculates every skill. - Modifier lists are compared by table identity, with a depth-limited structural fallback for the few modifiers that are reconstructed on every initEnv, which would otherwise defeat the diff. The harvest section of calcFullDPS is restructured into capture-then- merge to make snapshots replayable; merge order and semantics (sum vs maximum fields, Absolution count fix, entry naming) are preserved exactly. The cache is only used by the gem sort's fullDPSOnly path and is rebuilt with the calculator on every build change, so all other calcFullDPS callers and any stale-data concerns are unaffected. Adds TestFullDPSCache covering: cached results matching fresh calculations, local supports reusing other skills' results, exposure and aura supports forcing recalculation, the reconstructed-modifier corner case, candidate gem levels, and cache invalidation on build changes. * Simplify Full DPS harvesting into shared folding and uniform actor entries - Replace the repeated per-stat, per-actor merge blocks with a single merge spec and fold; pass snapshots hold uniform per-actor entries, with the per-actor differences (entry naming, pass counts, dot scaling and gating) resolved as plain data at capture time. - Unify the captured output fields into one harvestFields list. Stats previously not folded for minions never occur on test builds, and the mirage path is currently disabled, so results are unchanged. - Compare modifiers with tableDeepEquals, called in both directions since it only inspects the first table's keys; a one-sided match could let a modifier that gained a field produce a stale cache hit. * Fix cache for triggered skills * Indent * Fix merge issues --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
…#2159) * Add support for damage taken from Companion's Life before you Implements the "% of Damage from Hits is taken from your (Damageable) Companion's Life before you" mechanic as a new "companion" ally pool in the existing alliesTakenBeforeYou framework, covering: - Tree nodes, Starkonja's Head, and the Bonded rune (hit redirect) - Forgotten Warden (Deflected Hits variant, scaled by Deflect chance) - Loyalty and Romira's Requital support gems via a shared statMap entry (Romira's recoup is left unsupported for a follow-up) Total companion life is summed automatically from all active damageable companion skills: the main-skill minion init in CalcPerform is extracted into initMinionModDB so non-main companions can be initialised the same way, with a "Total Companion Life" config field as a manual override. Also drops the stale ifSkill="Raise Spectre" gate from the Total Spectre Life config field so it is reachable in PoE2, and regenerates the four mis-parsed companion entries in ModCache. * Fix ModParser + duplicated function All the companion mods have damageable in the name so no need to exclude it Added Override to the config to its clearer to users without needing to hover Made the minion mod loop into a function as its used multiple times * Fixes Now auto calcs for spectres too Changes the mod name so it's capilatised as it now appears in a breakdown list Fixes the handling of Loyalty as it previously wasn't stacking when using multiple companions --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
The Adorned is meant to scale the mods granted by Time-Lost jewels but it seems we never implemented it Since Time-Lost jewel mods are treated differently we need to have a bunch of logic to fix the notable display and the scaling logic in CalcSetup Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Tamed beasts are meant to use rare monster resistances, not the normal monster resistance values we were previously using Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Is meant to be using the weapons damage and is not unarmed Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Add support for Gemling's additional quality Stats Adds support for the new gemling quality stats There are still a bunch that need supporting but that should be easy Only shows the quality stats and adds their effect when you have the node allocated Also fixes an issue where some stat descriptions for quality mods weren't working as they were using the wrong stat set stat description scope * Add support for new quality mods * Fix default distance not applying for distance ramp The placeholder value wasn't being used for distance ramp, you had to manually set it * Fix gem tooltip max width * Rain of Blade quality --------- Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Gem Studded - Green mod * Storm's Rebuke * Arcane Mixtures * Scarred Faith - ES above armour mod * Furious Wellspring - no loss of rage
* Prepare release 0.22.0 * Fix changelog --------- Co-authored-by: LocalIdentity <LocalIdentity@users.noreply.github.com> Co-authored-by: LocalIdentity <localidentity2@gmail.com>
It was still using the regular resist values in the tooltip of the beast selection UI and for the sort
--- 0.5 Return of the Ancients --- * Add support for Sinister Jewel sockets (followingthefasciaplane, LocalIdentity) * Add support for Gemling's additional quality Stats (LocalIdentity) * Add support for Atziri's Communion support gem (cupkax, LocalIdentity) * Add support for new emotions anoints (cupkax) --- New to Path of Building --- * Performance improvements for gem dropdown sort when using Full DPS (ltogniolli) * Add item skill tooltips when holding shift while hovering over an item (vaisest) * Add more tamable beasts and their skills (ltogniolli) * Add support for effect of Socketed Augments mod (LocalIdentity) * Add support for automatic calculation of damage taken from Companion / Spectre Life before you mods (ltogniolli, LocalIdentity) * Add support for movement speed penalty mods on Resonating Shield, Raise Shield and Parry (moxaj) * Add support for Arc Lightning Infusion stats (majochem) * Add support for Atziri's Splendour mana to life cost conversion for corrupted gems (slaren) * Add minion stats to sorting options for trade and tree (vaisest) * Add Liquid Emotions and more Desecrate mods to crafter (vaisest) * Add missing genesis tree exclusive mods to Rings and Belts (ltogniolli) * Add Necrotic Catalyst to item crafter (Blitz54) * Allow From Nothing to shorten power report distance (vaisest) * Add "Buy similar" button to item view (vaisest) * Add socket position view to trader and compare tab (vaisest) * Add required stats filter to trader (vaisest) * Respect socket-bound augments in trader (vaisest) * Add support for "+X% to Fire Spell Critical Hit Chance" mod (luther-rotmg) * Channelling skills now benefit from Spell Damage with Spells that cost Life mods (cupkax) * Support Vestige of Darkness physical damage to Chill/Freeze modifier (bct8925) * Add support for some tree mods (Blitz54) --- Fixed Crashes --- * Fix crash when importing items with +1 suffix rune (vaisest) * Fix crash on hovering over legacy shared items (LocalIdentity) * Fix crash importing a character with a minion main skill (xh-forge) --- User Interface --- * Add option to return to build selection when crashing (vaisest) * Add option to disable scroll wheel interacting with controls (vaisest) * Change border size to be 1 px (vaisest) * Fix colour of Fractured crafted mods on items (Blitz54) * Fix "- level from corrupt" tooltip spacing and Item title spacing (Blitz54) --- Fixed Calculations --- * Fix Adorned not scaling Time-Lost jewels (LocalIdentity) * Fix dual wield skills with "both weapons hit..." combining into a single hit (majochem) * Fix Crit chance for Living Lightning and Caltrops (LocalIdentity) * Fix Ritualist Mystic Attunement node not scaling gem level mods (LocalIdentity) * Fix Curse rounding on enemies (LocalIdentity) * Fix Melee mods not scaling the damage of Combust (LocalIdentity) * Fix gem level supports not working properly with some skills (LocalIdentity) * Fix Overwhelming Presence not limiting to 90% (LocalIdentity) * Fix Warcries not working with Channelled skills (vaisest) * Fix Tamed Beast resistances (LocalIdentity) * Fix Shattering Palm Explosion using unarmed damage (LocalIdentity) --- Fixed Behaviours --- * Fix Legacy of Gold mods not increasing Item Rarity value (LocalIdentity) * Fix jewels socketed in Gloves not importing correctly (LocalIdentity) * Fix Undermine, Murderous Intent, Bloodlust and Lasting Ground missing the legacy tag (LocalIdentity) * Fix some radius jewels mods not working correctly (vaisest) * Fix not being able to highlight text in compare config tab (vaisest) * Fix Staff runes showing on Quarterstaves (vaisest) * Fix desecrate-only mods becoming monk glove mods (vaisest) * Fix Demon Form not counting as being Shapeshifted (cupkax) * Fix number of times block recently gated behind unique enemies (cupkax) * Fix Time-Lost jewel bonuses applying across weapon sets (cupkax) --- Accuracy Improvements --- * Fix searching for Low Life in Config tab (Blitz54) * Fix formatting of 'Waistgate Heavy Belt' in unique list (Pcodcsja)
The export was not using the correct stat set as the base for some skills so it was adding extra crit or damage values to gems Co-authored-by: LocalIdentity <localidentity2@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes # .
Description of the problem being solved:
Steps taken to verify a working solution:
Link to a build that showcases this PR:
Before screenshot:
After screenshot: