示例#1
0
 /// <summary>
 /// Sends handshake to the connected player.
 /// </summary>
 private void SendHandshake(NetPlayer player)
 {
     Messages.HandshakeMessage message = new Messages.HandshakeMessage();
     message.protocolVersion = PROTOCOL_VERSION;
     message.clock           = GetNetworkClock();
     SendMessage(player, message, Steamworks.EP2PSend.k_EP2PSendReliable);
 }
示例#2
0
        /// <summary>
        /// Write player state into handshake message.
        /// </summary>
        /// <param name="msg">Message to write to.</param>
        public void WriteHandshake(Messages.HandshakeMessage msg)
        {
            if (state == State.OnFoot)
            {
                msg.occupiedVehicleId = NetVehicle.INVALID_ID;
            }
            else
            {
                msg.occupiedVehicleId = currentVehicle.NetId;
                msg.passenger         = state == State.Passenger;
            }

            msg.pickedUpObject = NetPickupable.INVALID_ID;

            GamePlayer player = GameWorld.Instance.Player;

            if (player != null)
            {
                // It is possible the local player is not spawned yet. If so we do not
                // care about those values as those can be only set when player is actually spawned.

                var pickedUpObject = player.PickedUpObject;
                if (pickedUpObject == null)
                {
                    msg.pickedUpObject = netWorld.GetPickupableNetId(pickedUpObject);
                }
            }
        }
示例#3
0
 /// <summary>
 /// Sends handshake to the connected player.
 /// </summary>
 private void SendHandshake()
 {
     Messages.HandshakeMessage message = new Messages.HandshakeMessage();
     message.clock = GetNetworkClock();
     GetLocalPlayer().WriteHandshake(message);
     BroadcastMessage(message, Steamworks.EP2PSend.k_EP2PSendReliable);
 }
示例#4
0
        /// <summary>
        /// Process handshake message received from the given steam id.
        /// </summary>
        /// <param name="senderSteamId">The steam id of the sender.</param>
        /// <param name="msg">Hand shake message.</param>
        private void HandleHandshake(Steamworks.CSteamID senderSteamId, Messages.HandshakeMessage msg)
        {
            if (IsHost)
            {
                if (players[1] != null)
                {
                    Logger.Log("Received handshake from player but player is already here.");
                    LeaveLobby();
                    return;
                }

                // Setup THE PLAYER

                timeSinceLastHeartbeat = 0.0f;
                players[1]             = new NetPlayer(this, netWorld, senderSteamId);

                // Player can be spawned here safely. Host is already in game and all game objects are here.

                players[1].Spawn();

                SendHandshake();
            }
            else
            {
                if (players[1] == null)
                {
                    Logger.Log("Received handshake from host but host is not here.");
                    LeaveLobby();
                    return;
                }

                Logger.Log("CONNECTION ESTABLISHED!");

                MPController.Instance.LoadLevel("GAME");

                // Host will be spawned when game will be loaded and OnGameWorldLoad callback will be called.
            }

            // Set player state.

            players[1].Teleport(Utils.NetVec3ToGame(msg.spawnPosition), Utils.NetQuatToGame(msg.spawnRotation));
            if (msg.occupiedVehicleId != NetVehicle.INVALID_ID)
            {
                var vehicle = netWorld.GetVehicle(msg.occupiedVehicleId);
                Client.Assert(vehicle != null, $"Player {players[1].GetName()} ({players[1].SteamId}) you tried to join reported that he drives car that does not exists in your game. Vehicle id: {msg.occupiedVehicleId}, passenger: {msg.passenger}");
                players[1].EnterVehicle(vehicle, msg.passenger);
            }

            if (msg.pickedUpObject != NetPickupable.INVALID_ID)
            {
                players[1].PickupObject(msg.pickedUpObject);
            }

            players[1].hasHandshake = true;
        }
示例#5
0
        /// <summary>
        /// Process handshake message received from the given steam id.
        /// </summary>
        /// <param name="senderSteamId">The steam id of the sender.</param>
        /// <param name="msg">Hand shake message.</param>
        private void HandleHandshake(Steamworks.CSteamID senderSteamId, Messages.HandshakeMessage msg)
        {
            if (IsHost)
            {
                if (players[1] != null)
                {
                    Logger.Log("Received handshake from player but player is already here.");
                    LeaveLobby();
                    return;
                }

                // Setup THE PLAYER

                timeSinceLastHeartbeat = 0.0f;
                players[1]             = new NetPlayer(this, netWorld, senderSteamId);

                // Player can be spawned here safely. Host is already in game and all game objects are here.

                players[1].Spawn();

                SendHandshake();
            }
            else
            {
                if (players[1] == null)
                {
                    Logger.Log("Received handshake from host but host is not here.");
                    LeaveLobby();
                    return;
                }

                Logger.Log("CONNECTION ESTABLISHED!");

                MPController.Instance.LoadLevel("GAME");

                // Host will be spawned when game will be loaded and OnGameWorldLoad callback will be called.
            }

            players[1].hasHandshake = true;
        }
示例#6
0
        /// <summary>
        /// Process handshake message received from the given steam id.
        /// </summary>
        /// <param name="senderSteamId">The steam id of the sender.</param>
        /// <param name="msg">Hand shake message.</param>
        private void HandleHandshake(Steamworks.CSteamID senderSteamId, Messages.HandshakeMessage msg)
        {
            if (IsHost)
            {
                if (players[1] != null)
                {
                    Logger.Log("Received handshake from player but player is already here.");
                    LeaveLobby();
                    return;
                }

                // Setup THE PLAYER

                timeSinceLastHeartbeat = 0.0f;
                players[1]             = new NetPlayer(this, netWorld, senderSteamId);

                // Check if version matches - if not ignore this player.

                if (msg.protocolVersion != PROTOCOL_VERSION)
                {
                    RejectPlayer($"Mod version mismatch.");
                    return;
                }

                // Player can be spawned here safely. Host is already in game and all game objects are here.

                players[1].Spawn();
                SendHandshake(players[1]);

                MessagesList.AddMessage($"Player {players[1].GetName()} joined.", MessageSeverity.Info);
            }
            else
            {
                if (players[1] == null)
                {
                    Logger.Log("Received handshake from host but host is not here.");
                    LeaveLobby();
                    return;
                }

                // Check if protocol version matches.

                if (msg.protocolVersion != PROTOCOL_VERSION)
                {
                    string message;
                    if (msg.protocolVersion > PROTOCOL_VERSION)
                    {
                        message = "Host has newer version of the mod.";
                    }
                    else
                    {
                        message = "Host has older version of the mod.";
                    }

                    AbortJoining($"{message}\n(Your mod version: {PROTOCOL_VERSION}, Host mod version: {msg.protocolVersion})");
                    return;
                }

                // All is fine - load game world.

                MessagesList.AddMessage($"Connection established!", MessageSeverity.Info);

                MPController.Instance.LoadLevel("GAME");

                // Host will be spawned when game will be loaded and OnGameWorldLoad callback will be called.
            }

            remoteClock             = msg.clock;
            players[1].hasHandshake = true;
        }
示例#7
0
        /// <summary>
        /// Process handshake message received from the given steam id.
        /// </summary>
        /// <param name="senderSteamId">The steam id of the sender.</param>
        /// <param name="msg">Hand shake message.</param>
        private void HandleHandshake(Steamworks.CSteamID senderSteamId, Messages.HandshakeMessage msg)
        {
            if (IsHost)
            {
                // Setup THE PLAYER

                timeSinceLastHeartbeat = 0.0f;
                players.Add(players.Count, new NetPlayer(this, netWorld, senderSteamId));
                int connectingPlayerID = players.Count - 1;
                Logger.Log("Connecting player is now ID: " + (players.Count - 1));

                // Check if version matches - if not ignore this player.

                if (msg.protocolVersion != PROTOCOL_VERSION)
                {
                    RejectPlayer(connectingPlayerID, $"Mod version mismatch.");
                    return;
                }

                // Player can be spawned here safely. Host is already in game and all game objects are here.

                players[connectingPlayerID].Spawn();
                SendHandshake(players[connectingPlayerID]);

                MessagesList.AddMessage($"Player {players[connectingPlayerID].GetName()} joined.", MessageSeverity.Info);

                players[connectingPlayerID].hasHandshake = true;

                SendPlayerJoined(connectingPlayerID, players[players.Count - 1]);
            }
            else
            {
                // Check if protocol version matches.

                if (msg.protocolVersion != PROTOCOL_VERSION)
                {
                    string message;
                    if (msg.protocolVersion > PROTOCOL_VERSION)
                    {
                        message = "Host has newer version of the mod.";
                    }
                    else
                    {
                        message = "Host has older version of the mod.";
                    }

                    AbortJoining($"{message}\n(Your mod version: {PROTOCOL_VERSION}, Host mod version: {msg.protocolVersion})");
                    return;
                }

                // All is fine - load game world.

                MessagesList.AddMessage($"Connection established!", MessageSeverity.Info);

                MPController.Instance.LoadLevel("GAME");

                // Host will be spawned when game will be loaded and OnGameWorldLoad callback will be called.
            }

            remoteClock           = msg.clock;
            connectionStartedTime = DateTime.UtcNow;
        }