Paragon: Save-Current build, archive retired share codes, reset clears active
Server side of the v0.7.10 Builds drop. Squashes a few footguns from the original Builds catalog and adds a one-click "save what I have right now" path the Overview pane can hook directly into. - HandleBuildSaveCurrent: new C BUILD SAVE_CURRENT verb. Inserts a fresh build row, snapshots the live panel into its recipe, sets it active. No AE/TE motion, no relearning -- just a named slot for whatever the player already has. - Reset abilities / Reset talents now SetActiveBuildId(0) and re-push the catalog. Without this, the next swap silently overwrote the active build's saved recipe with the (now empty/partial) post-reset state -- effectively erasing the build. - Delete of the *active* build is now a hard reset (HandleParagonResetAll): unlearn everything the panel bought, refund all AE/TE. Deleting a non-active slot still just removes the saved recipe row + parked pet. - Load of the currently-active build is now a "revert to last snapshot" instead of a no-op refresh: keeps the saved recipe authoritative, parks the pet, resets, re-applies. Useful for discarding pending edits. - After a successful Learn All while a build is active: archive the build's previous share_code + recipe into character_paragon_build_share_archive* (so codes already posted to Discord keep importing the frozen loadout), snapshot the new panel into the live build, assign a fresh share_code, push catalog. - HandleBuildImport now falls back to the archive tables when a code isn't in the live catalog -- old shared codes resurrect the recipe they pointed at when they were retired. - Imports never copy pet_number (the parked pet belongs to the source player); if the imported recipe contains Tame Beast we hint that the importer needs to tame their own pet. - BuildPanelOwnedSpellsAllowlist now walks SPELL_EFFECT_LEARN_SPELL effects on talent rank spells (Mangle, Feral Charge, Mutilate, ...) so the login cascade sweep stops revoking talent-granted active abilities. Schema: new mod-paragon migration 2026_05_10_05.sql adds character_paragon_build_share_archive (+ _spells / _talents). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
-- mod-paragon: preserve superseded share codes as importable snapshots.
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- When an active build is updated (Learn All), the live row gets a new
|
||||
-- share_code and a fresh recipe. Older codes the player posted to Discord
|
||||
-- must keep working: each retired code is frozen here with its spell/talent
|
||||
-- recipe so `C BUILD IMPORT <code>` still materializes that exact loadout.
|
||||
-- ----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `character_paragon_build_share_archive` (
|
||||
`share_code` CHAR(6) NOT NULL COMMENT 'retired code (same charset as live builds)',
|
||||
`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`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
COMMENT='mod-paragon: frozen build metadata for retired share codes';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `character_paragon_build_share_archive_spells` (
|
||||
`share_code` CHAR(6) NOT NULL,
|
||||
`spell_id` INT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (`share_code`, `spell_id`),
|
||||
KEY `idx_share` (`share_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
COMMENT='mod-paragon: spell recipe rows for an archived share code';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `character_paragon_build_share_archive_talents` (
|
||||
`share_code` CHAR(6) NOT NULL,
|
||||
`spec` TINYINT UNSIGNED NOT NULL,
|
||||
`talent_id` SMALLINT UNSIGNED NOT NULL,
|
||||
`rank` TINYINT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (`share_code`, `spec`, `talent_id`),
|
||||
KEY `idx_share` (`share_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
COMMENT='mod-paragon: talent recipe rows for an archived share code';
|
||||
Reference in New Issue
Block a user