static void OnNewToolbarRequest(int playerSerialId) { ulong senderId = GetSenderIdSafe(); var playerId = new MyPlayer.PlayerId(senderId, playerSerialId); MySession.Static.Toolbars.CreateDefaultToolbar(playerId); }
static void OnNewToolbarRequest(ref PlayerToolbarCreatedMsg msg, MyNetworkClient sender) { var playerId = new MyPlayer.PlayerId(sender.SteamUserId, msg.PlayerSerialId); if (MySession.Static.Toolbars.ContainsToolbar(playerId)) { return; } var toolbar = new MyToolbar(MyToolbarType.Character); MySession.Static.Toolbars.AddPlayerToolbar(playerId, toolbar); }
static void OnNewPlayerSuccess(ref NewPlayerSuccessMsg msg, MyNetworkClient sender) { var localHumanPlayerId = new MyPlayer.PlayerId(MySteam.UserId, 0); var playerId = new MyPlayer.PlayerId(msg.ClientSteamId, msg.PlayerSerialId); if (playerId == localHumanPlayerId && (!MyFakes.ENABLE_BATTLE_SYSTEM || !MySession.Static.Battle)) { MyPlayerCollection.RequestLocalRespawn(); } var handler = Sync.Players.NewPlayerRequestSucceeded; if (handler != null) handler(msg.PlayerSerialId); }
static void OnNewPlayerRequest(ref NewPlayerRequestMsg msg, MyNetworkClient sender) { if (msg.ClientSteamId != sender.SteamUserId) { Debug.Assert(false, "A client requested player for another client!"); return; } var playerId = new MyPlayer.PlayerId(msg.ClientSteamId, msg.PlayerSerialId); if (Sync.Players.m_players.ContainsKey(playerId)) return; if (Sync.Players.PlayerRequesting != null) { var args = new PlayerRequestArgs(playerId); Sync.Players.PlayerRequesting(args); if (args.Cancel) { var failMsg = new NewPlayerFailureMsg(); failMsg.ClientSteamId = msg.ClientSteamId; failMsg.PlayerSerialId = msg.PlayerSerialId; Sync.Layer.SendMessage(ref failMsg, sender.SteamUserId, MyTransportMessageEnum.Failure); return; } } var identity = Sync.Players.TryGetPlayerIdentity(playerId); if (identity == null) { identity = Sync.Players.RespawnComponent.CreateNewIdentity(msg.DisplayName, playerId, msg.CharacterModel); } Sync.Players.CreateNewPlayer(identity, playerId, msg.DisplayName); var response = new NewPlayerSuccessMsg(); response.ClientSteamId = msg.ClientSteamId; response.PlayerSerialId = msg.PlayerSerialId; Sync.Layer.SendMessage(ref response, sender.SteamUserId); }
public void LoadConnectedPlayers(MyObjectBuilder_Checkpoint checkpoint, MyPlayer.PlayerId? savingPlayerId = null) { #warning TODO: Probably not needed? If not, remove the method //long identityId = FindLocalIdentityId(checkpoint); // Backward compatibility if (checkpoint.AllPlayers != null && checkpoint.AllPlayers.Count != 0) { foreach (var playerItem in checkpoint.AllPlayers) { long identityId = playerItem.PlayerId; var playerOb = new MyObjectBuilder_Player(); playerOb.Connected = true; playerOb.DisplayName = playerItem.Name; playerOb.IdentityId = identityId; var playerId = new PlayerId(playerItem.SteamId, 0); if (savingPlayerId != null && playerId == savingPlayerId) { playerId = new PlayerId(MySteam.UserId); ChangeDisplayNameOfPlayerAndIdentity(playerOb, MySteam.UserName); } LoadPlayerInternal(ref playerId, playerOb, obsolete: true); } } // Backward compatibility else if (checkpoint.ConnectedPlayers != null && checkpoint.ConnectedPlayers.Dictionary.Count != 0) { Debug.Assert(checkpoint.DisconnectedPlayers != null, "Inconsistency in save! ConnectedPlayers were present, but DisconnectedPlayers not!"); foreach (var playerItem in checkpoint.ConnectedPlayers.Dictionary) { var playerId = new PlayerId(playerItem.Key.ClientId, playerItem.Key.SerialId); if (savingPlayerId != null && playerId == savingPlayerId) { playerId = new PlayerId(MySteam.UserId); ChangeDisplayNameOfPlayerAndIdentity(playerItem.Value, MySteam.UserName); } playerItem.Value.Connected = true; LoadPlayerInternal(ref playerId, playerItem.Value, obsolete: false); } foreach (var playerItem in checkpoint.DisconnectedPlayers.Dictionary) { var playerId = new PlayerId(playerItem.Key.ClientId, playerItem.Key.SerialId); var playerOb = new MyObjectBuilder_Player(); playerOb.Connected = false; playerOb.IdentityId = playerItem.Value; playerOb.DisplayName = null; if (savingPlayerId != null && playerId == savingPlayerId) { playerId = new PlayerId(MySteam.UserId); ChangeDisplayNameOfPlayerAndIdentity(playerOb, MySteam.UserName); } LoadPlayerInternal(ref playerId, playerOb, obsolete: false); } //LoadDisconnectedPlayers(checkpoint.DisconnectedPlayers.Dictionary); } else if (checkpoint.AllPlayersData != null) { foreach (var playerItem in checkpoint.AllPlayersData.Dictionary) { var playerId = new MyPlayer.PlayerId(playerItem.Key.ClientId, playerItem.Key.SerialId); if (savingPlayerId != null && playerId == savingPlayerId) { playerId = new PlayerId(MySteam.UserId); ChangeDisplayNameOfPlayerAndIdentity(playerItem.Value, MySteam.UserName); } LoadPlayerInternal(ref playerId, playerItem.Value, obsolete: false); } } /*long identityId = FindLocalIdentityId(checkpoint); //Player was saved in death state or there is no player if (identityId == 0) { checkpoint.ControlledObject = 0; //This will lead to RequestRespawn checkpoint.CameraController = MyCameraControllerEnum.Entity; IsCameraAwaitingEntity = true; } else { // TODO: Refactor this later MyEntity controlledObject = null; if (checkpoint.ControlledObject != -1) { MyEntities.TryGetEntityById(checkpoint.ControlledObject, out controlledObject); System.Diagnostics.Debug.Assert(controlledObject != null); if (controlledObject is IMyControllableEntity) { var cockpit = controlledObject as MyCockpit; if (cockpit != null) { var pilot = cockpit.Pilot; if (pilot == null) { Debug.Fail("Creating new pilot for cockpit, because saved cockpit was controlled and had no pilot sitting in it."); MySandboxGame.Log.WriteLine("Creating new pilot for cockpit, because saved cockpit was controlled and had no pilot sitting in it."); var characterOb = MyCharacter.Random(); characterOb.Battery = new MyObjectBuilder_Battery() { CurrentCapacity = MyEnergyConstants.BATTERY_MAX_CAPACITY }; pilot = (MyCharacter)MyEntityFactory.CreateEntity(characterOb); pilot.Init(characterOb); MyWorldGenerator.InitInventoryWithDefaults(pilot.GetInventory()); cockpit.RequestUse(UseActionEnum.Manipulate, pilot); } MySession.Player.Init(pilot, null, identityId); } else if (controlledObject.Parent is MyCockpit) { MySession.Player.Init((MyCharacter)controlledObject, null, identityId); controlledObject = controlledObject.Parent; } else { if (!MySandboxGame.IsDedicated) { if (controlledObject is MyCharacter) { MySession.Player.Init((MyCharacter)controlledObject, null, identityId); } } } if (!MySandboxGame.IsDedicated) MySession.Player.Controller.TakeControl((IMyControllableEntity)controlledObject); } } if (checkpoint.Players != null) { foreach (var playerIt in checkpoint.Players.Dictionary) { if (playerIt.Key == Player.SteamUserId) { Player.PlayerId = identityId; if (string.IsNullOrEmpty(Player.Model)) { if (!string.IsNullOrEmpty(playerIt.Value.PlayerModel)) Player.Model = playerIt.Value.PlayerModel; else Player.Model = MyCharacter.DefaultModel; } } MyPlayer player; if (Sync.Controllers.TryGetPlayer(playerIt.Key, out player)) { MyCharacter playerEntity; if (MyEntities.TryGetEntityById<MyCharacter>(playerIt.Value.PlayerEntity, out playerEntity)) { player.Init(playerEntity, playerIt.Value.PlayerModel, playerIt.Key == Player.SteamUserId ? identityId : playerIt.Value.PlayerId); } } } } }*/ }
private void LoadPlayers(List<AllPlayerData> allPlayersData) { foreach (var playerItem in allPlayersData) { var playerId = new MyPlayer.PlayerId(playerItem.SteamId, playerItem.SerialId); LoadPlayerInternal(ref playerId, playerItem.Player, obsolete: false); } }
static void OnNewToolbarRequest(ref PlayerToolbarCreatedMsg msg, MyNetworkClient sender) { var playerId = new MyPlayer.PlayerId(sender.SteamUserId, msg.PlayerSerialId); MySession.Static.Toolbars.CreateDefaultToolbar(playerId); }
static void OnPlayerRemoved(ulong clientSteamId, int playerSerialId) { var playerId = new MyPlayer.PlayerId(clientSteamId, playerSerialId); Debug.Assert(Sync.Players.m_players.ContainsKey(playerId)); if (clientSteamId == Sync.MyId) Sync.Players.RaiseLocalPlayerRemoved(playerSerialId); Sync.Players.RemovePlayerFromDictionary(playerId); }
static void OnNewToolbarRequest(ref PlayerToolbarCreatedMsg msg, MyNetworkClient sender) { var playerId = new MyPlayer.PlayerId(sender.SteamUserId, msg.PlayerSerialId); MySession.Static.Toolbars.CreateDefaultToolbar(playerId); }
static void OnNewPlayerSuccess(ulong clientSteamId, int playerSerialId) { var localHumanPlayerId = new MyPlayer.PlayerId(Sync.MyId, 0); var playerId = new MyPlayer.PlayerId(clientSteamId, playerSerialId); if (playerId == localHumanPlayerId && (!MyFakes.ENABLE_BATTLE_SYSTEM || !MySession.Static.Battle)) { if (!MySession.Static.IsScenario || MySession.Static.OnlineMode == MyOnlineModeEnum.OFFLINE) MyPlayerCollection.RequestLocalRespawn(); } var handler = Sync.Players.NewPlayerRequestSucceeded; if (handler != null) handler(playerSerialId); }
static void OnNewPlayerRequest(ulong clientSteamId, int playerSerialId, string displayName, [Serialize(MyObjectFlags.Nullable)] string characterModel) { if (!MyEventContext.Current.IsLocallyInvoked && clientSteamId != MyEventContext.Current.Sender.Value) { Debug.Assert(false, "A client requested player for another client!"); return; } var playerId = new MyPlayer.PlayerId(clientSteamId, playerSerialId); if (Sync.Players.m_players.ContainsKey(playerId)) return; if (Sync.Players.PlayerRequesting != null) { var args = new PlayerRequestArgs(playerId); Sync.Players.PlayerRequesting(args); if (args.Cancel) { if (MyEventContext.Current.IsLocallyInvoked) OnNewPlayerFailure(clientSteamId, playerSerialId); else MyMultiplayer.RaiseStaticEvent(s => MyPlayerCollection.OnNewPlayerFailure, clientSteamId, playerSerialId, MyEventContext.Current.Sender); return; } } var identity = Sync.Players.TryGetPlayerIdentity(playerId); if (identity == null) { identity = Sync.Players.RespawnComponent.CreateNewIdentity(displayName, playerId, characterModel); } Sync.Players.CreateNewPlayer(identity, playerId, identity.DisplayName); if (MyEventContext.Current.IsLocallyInvoked) OnNewPlayerSuccess(clientSteamId, playerSerialId); else MyMultiplayer.RaiseStaticEvent(s => MyPlayerCollection.OnNewPlayerSuccess, clientSteamId, playerSerialId, MyEventContext.Current.Sender); }
static void OnPlayerCreated(ref PlayerCreatedMsg msg, MyNetworkClient sender) { var identity = Sync.Players.TryGetIdentity(msg.IdentityId); Debug.Assert(identity != null, "Identity for the new player not found!"); if (identity == null) return; MyNetworkClient client = null; Sync.Clients.TryGetClient(msg.ClientSteamId, out client); Debug.Assert(client != null, "Could not find client of the new player!"); if (client == null) return; var playerId = new MyPlayer.PlayerId(msg.ClientSteamId, msg.PlayerSerialId); var playerBuilder = new MyObjectBuilder_Player(); playerBuilder.DisplayName = msg.DisplayName; playerBuilder.IdentityId = msg.IdentityId; playerBuilder.BuildColorSlots = msg.BuildColors; Sync.Players.CreateNewPlayerInternal(client, playerId, playerBuilder); }
static void OnNewToolbarRequest(int playerSerialId) { ulong senderId = GetSenderIdSafe(); var playerId = new MyPlayer.PlayerId(senderId, playerSerialId); MySession.Static.Toolbars.CreateDefaultToolbar(playerId); }
static void OnNewToolbarRequest(ref PlayerToolbarCreatedMsg msg, MyNetworkClient sender) { var playerId = new MyPlayer.PlayerId(sender.SteamUserId, msg.PlayerSerialId); if (MySession.Static.Toolbars.ContainsToolbar(playerId)) return; var toolbar = new MyToolbar(MyToolbarType.Character); MySession.Static.Toolbars.AddPlayerToolbar(playerId, toolbar); }
static void OnPlayerCreated(ref PlayerCreatedMsg msg, MyNetworkClient sender) { var identity = Sync.Players.TryGetIdentity(msg.IdentityId); Debug.Assert(identity != null, "Identity for the new player not found!"); if (identity == null) return; MyNetworkClient client = null; Sync.Clients.TryGetClient(msg.ClientSteamId, out client); Debug.Assert(client != null, "Could not find client of the new player!"); var playerId = new MyPlayer.PlayerId(msg.ClientSteamId, msg.PlayerSerialId); Sync.Players.CreateNewPlayerInternal(identity, client, msg.DisplayName, ref playerId); }
static void OnPlayerRemoved(ref PlayerRemoveMsg msg, MyNetworkClient sender) { var playerId = new MyPlayer.PlayerId(msg.ClientSteamId, msg.PlayerSerialId); Debug.Assert(Sync.Players.m_players.ContainsKey(playerId)); if (msg.ClientSteamId == Sync.MyId) Sync.Players.RaiseLocalPlayerRemoved(msg.PlayerSerialId); Sync.Players.RemovePlayerFromDictionary(playerId); }
static void OnPlayerCreated(ulong clientSteamId, int playerSerialId, long identityId, string displayName, [Serialize(MyObjectFlags.Nullable)] List<Vector3> buildColors) { var identity = Sync.Players.TryGetIdentity(identityId); Debug.Assert(identity != null, "Identity for the new player not found!"); if (identity == null) return; MyNetworkClient client = null; Sync.Clients.TryGetClient(clientSteamId, out client); Debug.Assert(client != null, "Could not find client of the new player!"); if (client == null) return; var playerId = new MyPlayer.PlayerId(clientSteamId, playerSerialId); var playerBuilder = new MyObjectBuilder_Player(); playerBuilder.DisplayName = displayName; playerBuilder.IdentityId = identityId; playerBuilder.BuildColorSlots = buildColors; Sync.Players.CreateNewPlayerInternal(client, playerId, playerBuilder); }