Example #1
0
        static void OnNewToolbarRequest(int playerSerialId)
        {
            ulong senderId = GetSenderIdSafe();
            var   playerId = new MyPlayer.PlayerId(senderId, playerSerialId);

            MySession.Static.Toolbars.CreateDefaultToolbar(playerId);
        }
Example #2
0
        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);
        }
Example #9
0
        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);
        }