4.5 KiB
Keepsakes status
Keepsakes are enabled for all rooms, with a room limit of 10 and the catalog's per-category limits. The September client tool defaults to enabled through Keepsakes.EnableTool in the BepInEx configuration. RADICADE_KEEPSAKE_TOOL can still be used to override it (skip disables hooks; off installs observation-only hooks).
Confirmed client compatibility fixes
The October 4 client log showed repeated FNKNJGBLBHO Keepsake runtime null references, a disabled client tool patch, and GET /api/keepsakes/events/1. Native inspection of the installed 20230831 client established these contracts:
- GGHPHLPMAAD reads room data as Instances, CollectionRecords, and KeepsakeProgressionEventIds. The server previously omitted Instances entirely. Instances now contains all active room instances, with the caller's collection records separate, so collected items remain available for count/category lookup.
- EBHENPDHDLN reads event data as Instances and CollectionRecords, each containing RoomId/KeepsakeInstanceIds groups (FHGMHPEJIGJ). GET events/{id} now serves this.
- AMAOGLDGNLL posts placement to /api/keepsakes with RoomId, SubRoomId and KeepsakeCategory, and expects a GUID response. Collection is POST /api/keepsakes/{guid}/collect; deletion is DELETE /api/keepsakes/{guid}. The older room-based routes remain available.
- JNOKNEBCEMD and NIAPIJPPFCM require KeepsakeRoomLists to contain room DTO objects, not bare numeric room IDs. Lists now include event identity and unlock settings. AllRooms enumerates database rooms for the event definition rather than emitting an empty list that cannot grant room eligibility.
- BAEFNEHEPIJ reads a player progression record (AccountId, Xp, RewardsCollected, BonusRewardsCollected, GameMinutesToday, XpBoostLastPurchasedAt), not another copy of the event definition. Event XP derives from stored collection records. A repeat pickup returns zero additional XP; no player-level XP is awarded by these routes.
Inspection output is under artifacts/keepsake-*.txt. The client patch now uses explicit September type references and handles zero-argument overloads safely. No exception suppression was added.
Validation and installation
56 Keepsake/startup compatibility tests pass, including the actual client request flow, non-null empty lists, object-shaped event room membership, per-player collection and XP, placement limits, ownership, removal, and config overrides. The server and September client plugin both build successfully.
The client DLL was installed in the 2023-09-06T06-53-47Z game folder with a backup named RadicadeSeptemberClient.dll.before-keepsake-fix-20261004-214443. The normal local server output was rebuilt. No remote deployment or in-game verification was performed. Start the rebuilt server and relaunch the game, then place a keepsake, save/rejoin, collect/rejoin, and delete it. Other unrelated glitches have not been verified fixed by this work.
Account authorization fix (October 5)
The screenshot's account authorization banner is a login-token issue, not a room
CAN_INVITE permission. Native inspection of FNKNJGBLBHO.DKKIJJLCNLH shows a call
to BLJANPFJMDG slot 4 (IBDFIOPDFBD.MABOKPPEEMA), which reads the account's Keepsake
flag. DAJDMOPMEGG.NOGOHJKFDFC initializes it from the JWT role keepsake; its
neighboring event-edit flag comes from livekeepsakeeventroomsaveoverride.
AuthAPI.GenerateToken now issues both when KeepsakeFeature.Enabled is true.
It grants neither developer nor moderator access. The separate room co-owner
check remains in place. Existing tokens need a fresh login after the server update.
Validation: 77 authentication, Keepsake, and startup compatibility tests passed, including feature-enabled and feature-disabled JWT role checks.
The latest available logs (October 4, 23:40) also show PrefabSpawner.Append and PrefabSpawner.Replace null references during CompositeController.OnModelChanged, plus Harmony/IL2CPP startup type-loading warnings. These are not established as fixed by the token change. No generic exception suppression was added. Evidence: artifacts/keepsake-auth-check.txt, keepsake-account-auth-real.txt, and keepsake-auth-roles.txt; full UI stacks are in Unity's Player.log.
The event is now disabled in the shipped configuration (EventEnabled: false), independently of Keepsake placement. Active-event lookup returns JSON null; room payloads advertise no progression event. Set EventEnabled to true to restore the event. The DynamicUiPrefabRepair client patch fills missing JNHHEBGEAMP mappings using a controller-compatible multi-select float prefab.