Repository navigation
Give each account's old per-character data to its most-played character once - #3
Merged
Merged
Conversation
…er once On an account's first session after this change, its account-level one_time flags and cooldowns for events that are now per character move to its most-played living character (else its most-played character), the same character Codex copies the old journal to. Other characters start fresh. The file records seeded-to, so it happens once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The character that receives an account's old data is chosen once and pinned in plugins/TLibs/legacy-recipients/<account>.txt, written atomically and never overwritten while readable. Codex and ConditionalEvents both use the pin, so they always pick the same character, and a retry after a failure goes to that character again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> ConditionalEvents also reports failed saves: player files are written through a temporary file, data is marked clean only after a successful write, and data whose quit save failed stays in memory for the periodic save instead of being dropped; a rejoin reuses it.
- Player data stays in memory until restart in every setup, so a quick reconnect can never lose the object a prelogin reused, and a failed quit save is retried by the periodic save. The retain_player_data_until_restart setting is gone; an old key is ignored. - /ce reset * now resets only the files of accounts not in memory, atomically and under a lock that loading also holds; accounts in memory are reset there and saved as usual, so a reset never writes over a newer save. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
Reviewed by Astra (GPT-6-Astra) over rounds 5-7 (one-off seed, shared recipient pin, save and reset persistence); every finding fixed, round 7 left only a Docs wording fix, now applied. Merging with admin bypass. Not released or deployed. |
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.
This is the ConditionalEvents half of Codex #3: as a one-off, each account's most-played character keeps what the account did before, and every other character starts fresh.
How it works.
one_timeflags and cooldowns for events that are now per character move to its most-played living character, or its most-played character if none is alive. That's the same choice Codex makes at the same moment. Account-scoped events, such as Main's catch-up events once they are set todata_scope: account, stay on the account.seeded-to: <character>, so this happens once. If the roster is unknown, the seed waits for a later session.Effect on Main. The most-played character's research theses and Codex achievements stay done, so using a thesis it already learned still answers "You have already unlocked this Research" and keeps the item. Other characters can earn them.
Tests.
mvn clean verifypasses (29 tests, coverage gate).🤖 Generated with Claude Code