• Knack117 released this 2026-05-10 19:12:12 +00:00 | 43 commits to main since this release

    Fractured v0.7.10 — Save-Current build + retired-code share archive

    Follow-up to v0.7.9 Builds QoL. The Builds catalog now has a one-click "Save current loadout" path on the Overview page, and several footguns from the original drop are now closed. Old share codes posted to Discord no longer rot when the owner edits their build — they continue importing the exact recipe that was current the moment they were retired.

    What's new

    • Overview → "Save as Build". Brand new button on the top-right of the Overview tab. Switches to the Builds page, opens the icon/name picker pre-titled "Save Current Loadout", and on Save creates a new build whose recipe is whatever you have learned right now (no AE/TE motion, no relearning). The new build is set active immediately. Server verb: C BUILD SAVE_CURRENT <name>\t<icon>.
    • Retired share codes keep working forever. When you Learn All on top of an active build, the build's previous share_code and recipe are now frozen into a new character_paragon_build_share_archive family of tables before the live row is overwritten with the new recipe and assigned a fresh code. Any code you posted to Discord, an alt's spellbook, etc. continues importing the exact loadout it pointed at the moment you shared it. C BUILD IMPORT <code> falls back to the archive transparently.
    • Reset Abilities / Reset Talents now detach you from the active build. Previously they left the active pointer set, so the next swap silently overwrote the active build's saved recipe with the (post-reset) state — effectively erasing the build. Now both reset paths clear the active pointer and re-push the catalog so the cell border drops client-side. The build's saved recipe is preserved; you can re-load it any time.
    • Deleting the active build now does a full panel reset. Same effect as C RESET ALL: unlearn everything the panel bought, refund all AE/TE. Deleting a non-active slot is unchanged (just removes the saved recipe + parked pet). Prevents the dangling state where the active pointer pointed at a row that no longer existed.
    • Loading the currently-active build = "revert to last snapshot". Used to be a no-op refresh. Now it skips the outgoing snapshot (so the saved recipe stays authoritative), parks the pet, runs the reset+respend cycle, and re-applies the recipe. Useful for discarding pending edits without manually reset-and-reload.
    • Imports never carry the source player's pet. A parked pet belongs to the original owner's character_pet rows; cloning that across to the importer would either steal the source player's pet or summon something the importer can't legally own. New imports always start with pet_number = NULL. If the imported recipe contains Tame Beast (1515), the server prints a one-line system message reminding you to tame your own pet after loading the build.
    • Talent-granted active spells survive relog. The login cascade sweep now walks SPELL_EFFECT_LEARN_SPELL triggers on talent rank spells (Mangle, Feral Charge, Mutilate, Lava Burst, etc.), so the abilities those passives grant are correctly preserved on the panel allowlist instead of being revoked as "not allowlisted".

    Client (patch-enUS-6.MPQ v0.9.11-build-picker-save-fix)

    • save_current mode for the build picker. Plumbed through ParagonAdvancement_Builds_OpenPicker and pinned on the picker frame as _openMode so nothing can clobber it between opening and saving. Title bar reads "Save Current Loadout (Max 32 Characters):".
    • Picker no longer breaks on % in build names. string.format("C BUILD ... %s\t%s", name, icon) was Lua's format parser eating any % in the name as a directive ("invalid option in format %c"), which silently aborted Save. All three send paths (NEW, SAVE_CURRENT, EDIT) now build the wire payload by concatenation + tostring(...) instead.
    • "Revert?" prompt when right-click → Load on the build that's already active, instead of the regular swap-confirm copy.

    New / changed PARAA verbs

    C BUILD SAVE_CURRENT <name>\t<icon>   -- create a build from current panel state
                                             (snapshot + set active; no AE/TE motion)
    

    C BUILD DELETE <id> semantics changed when <id> is the active build: in addition to deleting the row + parked pet, it now also runs a full panel reset (unlearn + refund) like C RESET ALL.

    C BUILD LOAD <id> semantics changed when <id> equals the active build: instead of being a no-op, it now reverts the panel to the build's last saved recipe (discards pending edits).

    Schema (mod-paragon migration 2026_05_10_05.sql)

    CREATE TABLE IF NOT EXISTS `character_paragon_build_share_archive` (
        `share_code`  CHAR(6)     NOT NULL,
        `name`        VARCHAR(32) NOT NULL,
        `icon`        VARCHAR(64) NOT NULL DEFAULT 'INV_Misc_QuestionMark',
        `archived_at` TIMESTAMP   NOT NULL DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (`share_code`)
    );
    
    CREATE TABLE IF NOT EXISTS `character_paragon_build_share_archive_spells`  (...);
    CREATE TABLE IF NOT EXISTS `character_paragon_build_share_archive_talents` (...);
    

    The old codes are populated lazily: a code only enters the archive when its build's owner does a Learn All on top of that build, at which point the live share_code rotates and the previous one is frozen here.

    Server commit

    Paragon: Save-Current build, archive retired share codes, reset clears active

    Install

    Drop the patch MPQs into WoW/Data/enUS/ and the Wow.exe at the WoW client root. Only patch-enUS-6.MPQ actually changed since v0.7.9 — the others are bundled for fresh installs. Fully exit and relaunch the WoW client afterward (patch MPQs are read at startup; /reload does not pick them up).

    Server side:

    git pull origin main
    docker compose build ac-db-import ac-worldserver
    docker compose up -d ac-db-import
    docker compose restart ac-worldserver
    

    ac-db-import is required so migration 2026_05_10_05.sql is applied. See CLIENT-PATCHES.md for the full install / troubleshoot guide.

    Pairing

    A pre-v0.7.10 client paired with a v0.7.10 server is harmless — the player just won't have an Overview "Save as Build" button. Save-as-Build still works for them via the existing "+" cell on the Builds page; the recipe ends up empty and they fill it via the normal commit flow.

    A v0.7.10 client paired with a pre-v0.7.10 server will see "Save as Build" silently no-op (the server doesn't recognize C BUILD SAVE_CURRENT and drops it without an R ERR). Update the server first if you're upgrading mid-realm.

    Downloads