2.9 KiB
Ordinary offline identity diagnosis
Installed RplMode values are None=0, Client=1, Listen=2 and Dedicated=3. The observed regular offline run's mode=0 therefore does not enter the dedicated-server branch of SCR_PlayerIdentityUtils. A native local controller exists; the remaining issue is identity conversion/binding, not absence of a player object.
The installed utility calls BackendApi.GetPlayerIdentityId and only attempts its non-dedicated PeerTool name fallback when the returned string is empty. A nonempty null UUID sentinel or malformed string bypasses that fallback. This is a possible explanation, not yet the observed raw result. The installed UUID type remains a string: invalid-format strings are considered null, and both empty and all-zero strings are null despite not being string-equal. The installed int.ToString(8, true) uses hexadecimal formatting (the boolean means hex), so decimal width growth is not a supported explanation for the fallback result.
The optional admission diagnostic now records raw cached identity string length, emptiness, UUID null/format status, equality to the null UUID sentinel, returned helper length/format status and the actual Dedicated comparison. Raw length=-1 denotes an unavailable backend API object. It is compiled outside WORKBENCH and executes only for the explicit errOrdinaryScenario core/chat diagnostic. It logs neither identity contents nor player name contents, does not call authentication/initialization methods, creates no replacement identity and leaves strict Players().Bind behavior unchanged.
Interpretation of the next native sample:
- rawLength>0, rawNullSentinel=1: native backend supplied the initialized null UUID; vanilla's empty-string test bypasses its fallback.
- rawLength>0, rawNull=1, rawNullSentinel=0: a nonempty invalid/native sentinel value bypasses fallback.
- rawEmpty=1, dedicated=0, helperLength>0, helperFormatValid=0: vanilla returned its fallback string, but UUID validation rejected its format.
- rawEmpty=1, dedicated=0, helperLength=0: the expected fallback did not produce a string; inspect native/local initialization rather than inferring from player-name length.
None of these observations authorizes using a name-derived or generated ordinary player identity. A valid production fix requires evidence for a supported native local platform/session identity path and its reconnect/account guarantees. Offline diagnostic admission remains failed until that exists; no backend contact or identity policy change is included here.
Native game-2026-09-19-081359 confirms the first case: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0. The normal local audit callback occurred; the helper returned the native null sentinel unchanged. A narrowly scoped standalone round-local roster key is being designed separately; network identity behavior remains unchanged.