static void OnCharacterChanged(MySyncEntity entity, ref CharacterChangedMsg msg, MyNetworkClient sender) { MyCharacter characterEntity = entity.Entity as MyCharacter; MyEntity controlledEntity; if (!MyEntities.TryGetEntity(msg.ControlledEntityId, out controlledEntity)) { MySandboxGame.Log.WriteLine("Controlled entity not found"); Debug.Fail("Controlled entity not found"); } PlayerId id = new PlayerId(msg.ClientSteamId, msg.PlayerSerialId); MyPlayer player = Sync.Players.TryGetPlayerById(id); ChangePlayerCharacterInternal(player, characterEntity, controlledEntity); }
public void SetPlayerCharacter(MyPlayer player, MyCharacter newCharacter, MyEntity controlledEntity = null) { Debug.Assert(Sync.IsServer, "SetPlayerCharacter can be only called on the server!"); if (controlledEntity == null) controlledEntity = newCharacter; ChangePlayerCharacterInternal(player, newCharacter, controlledEntity); var msg = new CharacterChangedMsg(); msg.ClientSteamId = player.Id.SteamId; msg.PlayerSerialId = player.Id.SerialId; msg.CharacterEntityId = newCharacter.EntityId; msg.ControlledEntityId = controlledEntity.EntityId; Sync.Layer.SendMessageToAll(ref msg); }