3.0 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. The later native sample below confirms this explanation. 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.
These diagnostic observations do not establish an account identity or network reconnect guarantee. The subsequent standalone admission implementation supplies an internal round-local roster key only for the verified sole local controller in RplMode.None; it does not substitute a platform identity. Network modes retain native identity handling.
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. The scoped standalone round-local roster key subsequently passed real ordinary Core and Chat admission in archived runs 082733 and 082938; network identity behavior remains unchanged.