Reproduced twice on live-ebx. Severity is higher than it first looks: one bad spawn breaks the session for everyone who joins afterwards, and it presents as an unrelated join failure long after the spawn.
Repro
- Join, enter the editor.
- Spawn
Gameplay/Level_Setups/Components/CapturePointPrefab_HQ (from the blueprint list). The spawn itself appears to succeed; the server stays up.
- The spawning client dies shortly after.
- Restart/relaunch the client and join again — it connects, then dies ~23 s later, before reaching the editor. It never gets far enough to spawn anything.
- Restart the server → clients join fine again and the full e2e suite is 8/8.
So the object persists in the server's state and takes down every client that subsequently receives it.
Notes
- No crash dump is written, and there is no Lua traceback — the client just goes away.
- The server is unaffected throughout.
- Other spawns tested do NOT do this:
nongroupable_autogen prefabs, a destruction/nongroupable prefab (×3), a banger blueprint (×2), and SoldierWeaponBlueprint.
CapturePointPrefab is a SpatialPrefabBlueprint with NeedNetworkId True and InterfaceHasConnections True, referencing a graph of other blueprints — unlike the simple props above.
Hypothesis (initialisation ordering)
The live-spawn path and the join-sync path are not equivalent:
- Live spawn — the level is loaded and
InstanceParser has populated its blueprint / variation / mesh-variation databases, so CreateEntitiesFromBlueprint runs against fully-initialised state.
- Join sync — the server replays its objects to a newly connected client, and those spawns can arrive before the client has finished initialising what those blueprints depend on (variations, referenced sub-blueprints, registries). A prefab that references a graph of other blueprints is exactly what would fault under that.
This is the same class of problem the project-load path already handles with completion-gated batching (ME_CONFIG.LOAD_BATCH_SIZE, ServerTransactionManager waiting for BatchDone), but the join-sync path for objects spawned during a session has no equivalent gate.
Worth checking: ServerTransactionManager sync-to-new-client, ClientTransactionManager:OnSyncClientContext, and whether that replay waits for Level:Loaded / InstanceParser readiness on the joining client.
Related
Very likely the same family as #296 / #364 / #2 ("spawning certain prefabs crashes the client"). Note parentRepresentative (#202) is implemented on this branch and does not prevent it.
Warning while debugging
Any such spawn persists server-side, so the next join fails and looks like an unrelated regression. Restart the server between attempts.
Reproduced twice on
live-ebx. Severity is higher than it first looks: one bad spawn breaks the session for everyone who joins afterwards, and it presents as an unrelated join failure long after the spawn.Repro
Gameplay/Level_Setups/Components/CapturePointPrefab_HQ(from the blueprint list). The spawn itself appears to succeed; the server stays up.So the object persists in the server's state and takes down every client that subsequently receives it.
Notes
nongroupable_autogenprefabs, a destruction/nongroupable prefab (×3), a banger blueprint (×2), andSoldierWeaponBlueprint.CapturePointPrefabis aSpatialPrefabBlueprintwithNeedNetworkId TrueandInterfaceHasConnections True, referencing a graph of other blueprints — unlike the simple props above.Hypothesis (initialisation ordering)
The live-spawn path and the join-sync path are not equivalent:
InstanceParserhas populated its blueprint / variation / mesh-variation databases, soCreateEntitiesFromBlueprintruns against fully-initialised state.This is the same class of problem the project-load path already handles with completion-gated batching (
ME_CONFIG.LOAD_BATCH_SIZE,ServerTransactionManagerwaiting forBatchDone), but the join-sync path for objects spawned during a session has no equivalent gate.Worth checking:
ServerTransactionManagersync-to-new-client,ClientTransactionManager:OnSyncClientContext, and whether that replay waits forLevel:Loaded/InstanceParserreadiness on the joining client.Related
Very likely the same family as #296 / #364 / #2 ("spawning certain prefabs crashes the client"). Note
parentRepresentative(#202) is implemented on this branch and does not prevent it.Warning while debugging
Any such spawn persists server-side, so the next join fails and looks like an unrelated regression. Restart the server between attempts.