Add Path of Exile 2 BuildPlanner (.build) export#1832
Open
TheClassified wants to merge 1 commit into
Open
Conversation
Writes a .build JSON file to the in-game BuildPlanner folder
(Documents/My Games/Path of Exile 2/BuildPlanner/) from a new section in
the Import tab. Tree specs, item sets and skill sets export as
level-bracketed loadouts via the format's level_interval field, with
per-set Lvl Min/Max in each tab's Manage popup. The New Loadout dialog
also takes a level range that propagates across the matching tree spec,
item set and skill set on save. New sets auto-preset on a 30-level
cadence (1-30, 30-60, 60-90, 90-100).
Per-passive and per-gem author notes via Shift+Right-Click on the Tree
and Skills tabs. The keybind hint and any existing note are shown in
the respective tooltips. Notes flow into the exported additional_text;
the format's Custom Text markup (<bold>{}, <italic>{}, <red>{},
<rgb(R,G,B)>{}) is preserved in the input.
Non-unique items render rolled title + base type + mod list using the
same markup (italic implicits, plain explicits). Active skills carry a
"Level N[, Q% Quality]" hint when no note is set; trivial Level 1 /
0% Quality on uncustomised support gems is suppressed to avoid noise.
Skill IDs use the Gems.lua table key to work around the singular
"Metadata/Items/Gem/" typo on the gameId field of ~486 auto-generated
entries.
Passive IDs are emitted as PassiveSkills.Id strings (e.g.
"projectiles18", "AscendancyMercenary2Notable5"). This required adding
stringId to src/Export/Scripts/passivetree.lua and regenerating
src/TreeData/0_4/tree.lua against GGPK. Older tree versions (0_1, 0_2,
0_3) still carry numeric IDs and fall back accordingly with a one-time
console warning until they're regenerated too.
Author
|
related issue #1829 |
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.
Summary
Adds an Export to Path of Exile 2 BuildPlanner section in the
Import tab that writes a
.buildJSON file matching GGG'sspec.
Experimental. BuildPlanner isn't in-game yet, so there's no way to
load-test the output. Format conformance is what we can check.
Features
Documents/My Games/Path of Exile 2/BuildPlanner/.loadouts via
level_interval.global New Loadout dialog (propagates to tree / items / skills).
<bold>{},<italic>{},<red>{},<rgb()>{})preserved on items and notes.
Notes
src/Export/Scripts/passivetree.luanow emitsstringId, andsrc/TreeData/0_4/tree.luais regenerated to match. Older treeversions (
0_1to0_3) fall back to numeric IDs with a consolewarning until regenerated.
Gems.luatable key to bypass the singularMetadata/Items/Gem/typo on thegameIdfield of ~486 entries.inventory_idvalues other thanWeapon1are guesses. The devdocs only document the one example.
Example output
{ "ascendancy":"Witch3", "items":[{ "inventory_id":"Ring", "slot_x":0, "slot_y":0, "unique_name":"Andvarius" },{ "inventory_id":"Ring2", "slot_x":0, "slot_y":0, "unique_name":"Kalandra's Touch" },{ "inventory_id":"Charm2", "slot_x":0, "slot_y":0, "unique_name":"Nascent Hope" },{ "additional_text":"<bold>{Miracle Ward}\nArrayed Focus\n<italic>{+10 to Strength}\n<italic>{Bonded: +10 to maximum Life}\n<italic>{Bonded: +10 to maximum Mana}\n<italic>{+24 to maximum Mana}\n<italic>{14% reduced Attribute Requirements}\nSpell Skills have +1 to maximum number of Summoned Totems\n77% increased Spell Damage\n87% increased Chaos Damage\n+2 to Level of all Spell Skills\n27% increased Cast Speed\n42% increased Energy Shield Recharge Rate", "inventory_id":"Weapon2", "slot_x":0, "slot_y":0, "weapon_set":2 },{ "inventory_id":"Belt", "slot_x":0, "slot_y":0, "unique_name":"Headhunter" },{ "additional_text":"<bold>{Magic Golden Charm}\n<italic>{Used when you kill a Rare or Unique enemy}\nRecover 300 Mana when Used\n68% increased Charges", "inventory_id":"Charm3", "slot_x":0, "slot_y":0 },{ "additional_text":"<bold>{Magic Ultimate Mana Flask}\n50% reduced Amount Recovered\nInstant Recovery\n70% increased Charges", "inventory_id":"Flask2", "slot_x":0, "slot_y":0 },{ "inventory_id":"Flask1", "slot_x":0, "slot_y":0, "unique_name":"Olroth's Resolve" },{ "additional_text":"<bold>{Pandemonium Rosary}\nGold Amulet\n<italic>{18% increased Rarity of Items found}\n<italic>{Allocates Spiral into Insanity}\n33% increased Spell Damage\n+49 to Spirit\n14% increased Rarity of Items found\n+4 to Level of all Spell Skills\n32% increased Cast Speed\n59% increased Mana Regeneration Rate", "inventory_id":"Amulet", "slot_x":0, "slot_y":0 },{ "additional_text":"<bold>{Dragon Bane}\nWithered Wand\n<italic>{+1 to Level of all Spell Skills}\n<italic>{Gain 13% of Damage as Extra Chaos Damage}\n<italic>{Bonded: Gain 8% of Damage as Extra Physical Damage}\n<italic>{Bonded: Archon recovery period expires 30% faster}\n<italic>{Grants Skill: Level 18 Chaos Bolt}\n117% increased Spell Damage\n59% increased Critical Hit Chance for Spells\nGain 29% of Damage as Extra Fire Damage\nGain 33% of Damage as Extra Lightning Damage\n+5 to Level of all Spell Skills\n40% increased Cast Speed", "inventory_id":"Weapon1", "slot_x":0, "slot_y":0 },{ "inventory_id":"Charm1", "slot_x":0, "slot_y":0, "unique_name":"Rite of Passage" },{ "additional_text":"<bold>{Victory Visage}\nAncestral Tiara\n<italic>{+5% to all Elemental Resistances}\n<italic>{+11% to Chaos Resistance}\n<italic>{12% increased Cost Efficiency}\n<italic>{Bonded: Meta Skills have 12% increased Reservation Efficiency}\n19% increased Rarity of Items found\n98% increased Energy Shield\n+73 to maximum Energy Shield\n16% increased Rarity of Items found\n+39% to Cold Resistance\n+40% to Lightning Resistance", "inventory_id":"Helm", "slot_x":0, "slot_y":0 },{ "inventory_id":"Weapon2", "slot_x":0, "slot_y":0, "unique_name":"Palm of the Dreamer" },{ "additional_text":"<bold>{Gale Mantle}\nSacrificial Regalia\n<italic>{15% increased Rarity of Items found}\n<italic>{Bonded: 15% increased Quantity of Gold Dropped by Slain Enemies}\n<italic>{+1 to Level of all Corrupted Skill Gems}\n+61 to Spirit\n12% increased Spirit Reservation Efficiency of Skills\n+96 to maximum Energy Shield\n110% increased Armour, Evasion and Energy Shield\n+45% to Fire Resistance\n+45% to Lightning Resistance", "inventory_id":"BodyArmour", "slot_x":0, "slot_y":0 },{ "additional_text":"<bold>{Morbid Paw}\nGold Gloves\n<italic>{12% increased Cast Speed}\n<italic>{48% increased Magnitude of Non-Damaging Ailments you inflict}\n<italic>{Each Runic Inscription from your Curse Skills causes you to Regenerate Mana per second equal to 16% of that Skill's Mana Cost}\n<italic>{Bonded: 24% increased Duration of Elemental Ailments on Enemies}\n<italic>{Bonded: 32% increased Mana Cost Efficiency while on Low Mana}\n+57 to maximum Energy Shield\n137% increased Energy Shield\n+42 to maximum Life\n16% increased Rarity of Items found\n+31% to Lightning Resistance\n60% increased effect of Socketed Items", "inventory_id":"Gloves", "slot_x":0, "slot_y":0 },{ "additional_text":"<bold>{Behemoth Goad}\nSandsworn Sandals\n<italic>{8% increased Movement Speed}\n<italic>{+34% to Chaos Resistance}\n<italic>{Bonded: 16% increased Cooldown Recovery Rate}\n100% increased Energy Shield\n+60 to maximum Energy Shield\n35% increased Movement Speed\n+44% to Fire Resistance\n+45% to Cold Resistance\n60% increased effect of Socketed Items", "inventory_id":"Boots", "slot_x":0, "slot_y":0 }], "name":"Unnamed build", "passives":["triggers4","monkelemental1","criticals85","chaos30","witch595","chill_and_freeze1","intelligence60","jewel_slot1979","intelligence69","energy_shield24","energy_shield38","intelligence85","attributes24","intelligence53_","intelligence41__","physical15","passive_keystone_whispers_of_doom","criticals40","energy_shield11","projectile_spells8","jewel_slot1977","AscendancyWitch3Start_","totems36","projectile_spells2","criticals44","physical17","jewel_slot1972","criticals29","energy_shield14","criticals86","attributes3","intelligence51","energy_shield29","projectile_spells9","totems35","AscendancyWitch3Notable1","totems21","intelligence45","cast_speed18","mana_regeneration45","intelligence72","criticals84","criticals35","intelligence25","cast_speed2","mana_regeneration17","chill_and_freeze8","intelligence78","energy_shield15","intelligence16","energy_shield10_","attributes1","criticals34","intelligence71","spell_criticals5","intelligence8","chill_and_freeze2","physical36","energy_shield12","intelligence84","monkelemental6","energy_shield13","spell_criticals17_","AscendancyWitch3Small6_","triggers2","duration6","dexterity9","energy_shield21","intelligence58","attributes12","spell_criticals14","monkelemental3","intelligence68","cold32","spell_criticals11_","intelligence47","totems52_","jewel_slot1969","mana_regeneration11","physical23_","intelligence46","volatility2","cast_speed38","projectile_spells3","cast_speed1","AscendancyWitch3Notable6","totems33_","cast_speed13","attributes78","shock21","spell_criticals16","intelligence6","intelligence17",{ "additional_text":"testtestestset", "id":"mana_regeneration50_" },"jewel_slot1961","intelligence67","cold35","projectile_spells1","criticals32_","energy_shield7","triggers17","intelligence52","intelligence59","energy_shield41","energy_shield27","energy_shield37","spell_criticals18","physical18","AscendancyWitch3Small4","spell_criticals4","cold33","criticals20","spell_criticals10","spell_criticals12_","witch_sorceress_notable2","totems37","intelligence57","mana_regeneration46","spell_criticals3","AscendancyWitch3Notable5","AscendancyWitch3Notable3","attributes21","criticals30","intelligence56","spell_criticals8","intelligence74","cast_speed30","monkchakra24","criticals22","passive_keystone_fire_spells_to_chaos","energy_shield34_","intelligence54","triggers1","monkelemental2","duration10","AscendancyWitch3Small5","energy_shield36","energy_shield23","intelligence79","totems19","physical14","chill_and_freeze3","chaos32","duration12","ranged30_","spell_criticals15","passive_keystone_pain_attunement","strength44","AscendancyWitch3Small9","dexterity7","physical34"], "skills":[{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemComet", "support_skills":[{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemCastOnCriticalStrike" },{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemElementalWeakness" },"Metadata/Items/Gems/SkillGemDoedresUndoingSupport","Metadata/Items/Gems/SkillGemSpellCascadeSupport","Metadata/Items/Gems/SkillGemMagnifiedAreaSupportTwo"] },{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemBlasphemy", "support_skills":["Metadata/Items/Gems/SkillGemMysticismSupport",{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemDespair" },"Metadata/Items/Gems/SkillGemMagnifiedAreaSupportTwo","Metadata/Items/Gems/SkillGemRitualisticCurseSupport","Metadata/Items/Gems/SkillGemSlowPotencySupport"] },{ "additional_text":"Level 3, 20% Quality", "id":"Metadata/Items/Gems/SkillGemLivingBombPlayer", "support_skills":[{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemCastOnElementalAilment" },{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemComet" },"Metadata/Items/Gems/SkillGemDiallasDesireSupport","Metadata/Items/Gems/SkillGemExecuteSupportThree","Metadata/Items/Gems/SkillGemUhtredAugurySupport"] },{ "additional_text":"Level 21, 20% Quality", "id":"Metadata/Items/Gems/SkillGemDarkEffigy", "support_skills":["Metadata/Items/Gems/SkillGemIncreaseLimitSupportTwo","Metadata/Items/Gems/SkillGemConcentratedAreaSupport","Metadata/Items/Gems/SkillGemEfficiencySupportTwo","Metadata/Items/Gems/SkillGemChaosMasterySupport","Metadata/Items/Gems/SkillGemUrgentTotemsSupportThree"] },{ "additional_text":"Level 21, 20% Quality", "id":"Metadata/Items/Gems/SkillGemEssenceDrain", "support_skills":["Metadata/Items/Gems/SkillGemChaoticFreezeSupport","Metadata/Items/Gems/SkillGemXophsPyreSupport","Metadata/Items/Gems/SkillGemArcaneSurgeSupport","Metadata/Items/Gems/SkillGemExecuteSupportThree","Metadata/Items/Gems/SkillGemWildshardsSupportThree"] },{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemLivingBombPlayer", "support_skills":["Metadata/Items/Gems/SkillGemIgniteSupportThree","Metadata/Items/Gems/SkillGemFirePenetrationSupportTwo","Metadata/Items/Gems/SkillGemFireExposureSupport","Metadata/Items/Gems/SkillGemFleetingRemnantsSupportTwo","Metadata/Items/Gems/SkillGemFreezeSupport"] },{ "additional_text":"Level 18", "id":"Metadata/Items/Gems/SkillGemChaosbolt", "support_skills":["Metadata/Items/Gems/SkillGemLightningExposureSupport","Metadata/Items/Gems/SkillGemPoisonSupportThree","Metadata/Items/Gems/SkillGemTulsStillnessSupport","Metadata/Items/Gems/SkillGemExtractionSupport"] },{ "additional_text":"Level 18", "id":"Metadata/Items/Gems/SkillGemImpurity", "support_skills":["Metadata/Items/Gems/SkillGemMysticismSupportTwo","Metadata/Items/Gems/SkillGemClaritySupportTwo","Metadata/Items/Gems/SkillGemHerbalismSupportTwo","Metadata/Items/Gems/SkillGemWarmBloodedSupport"] },{ "additional_text":"Level 21, 22% Quality", "id":"Metadata/Items/Gems/SkillGemDespair", "support_skills":["Metadata/Items/Gems/SkillGemCurseEffectSupport","Metadata/Items/Gems/SkillGemDecayingHexSupport","Metadata/Items/Gems/SkillGemCursedGroundSupport","Metadata/Items/Gems/SkillGemChaoticFreezeSupport"] },{ "additional_text":"Level 21, 20% Quality", "id":"Metadata/Items/Gems/SkillGemConvalescence", "support_skills":["Metadata/Items/Gems/SkillGemSecondWindSupportThree","Metadata/Items/Gems/SkillGemCooldownRecoverySupportTwo","Metadata/Items/Gems/SkillGemClaritySupport"] },{ "additional_text":"Level 21, 23% Quality", "id":"Metadata/Items/Gems/SkillGemManaRemnants", "support_skills":["Metadata/Items/Gems/SkillGemRemnantPotencySupport","Metadata/Items/Gems/SkillGemFleetingRemnantsSupportTwo"] },{ "additional_text":"Level 21, 20% Quality", "id":"Metadata/Items/Gems/SkillGemElementalConflux", "support_skills":["Metadata/Items/Gems/SkillGemFireMasterySupport","Metadata/Items/Gems/SkillGemUhtredOmenSupport"] },{ "additional_text":"Level 18", "id":"Metadata/Items/Gems/SkillGemChaosbolt" },{ "additional_text":"Level 18", "id":"Metadata/Items/Gems/SkillGemImpurity" }] }