static void OnRespawnRequest(ref RespawnMsg msg, MyNetworkClient sender) { Debug.Assert(Sync.IsServer, "This method can only be called on the server!"); Debug.Assert(Sync.Players.RespawnComponent != null, "The respawn component is not set! Cannot handle respawn request!"); if (Sync.Players.RespawnComponent == null) { return; } PlayerId playerId = new PlayerId(sender.SteamUserId, msg.PlayerSerialId); bool respawnSuccessful = Sync.Players.RespawnComponent.HandleRespawnRequest( msg.JoinGame, msg.NewIdentity, msg.RespawnEntityId, msg.RespawnShipId, playerId, msg.SpawnPosition, msg.BotDefinitionId ); if (respawnSuccessful) { MyIdentity identity = Sync.Players.TryGetPlayerIdentity(playerId); Debug.Assert(identity != null, "Could not find identity of respawning player!"); if (identity != null && !identity.FirstSpawnDone) { var identitySpawnedMsg = new IdentityFirstSpawnMsg() { IdentityId = identity.IdentityId }; MySession.Static.SyncLayer.SendMessageToAll(ref identitySpawnedMsg, MyTransportMessageEnum.Success); identity.PerformFirstSpawn(); } } else { MySession.Static.SyncLayer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Failure); } }
static void OnIdentityFirstSpawn(ref IdentityFirstSpawnMsg msg, MyNetworkClient sender) { var identity = Sync.Players.TryGetIdentity(msg.IdentityId); Debug.Assert(identity != null, "Server told me identity was spawned the first time, but I cannot find it!"); if (identity == null) return; identity.PerformFirstSpawn(); }