public NetworkSerializer __beginSendServerRpc(ServerRpcParams serverRpcParams, RpcDelivery rpcDelivery)
#endif
        {
            PooledNetworkWriter writer;

            var rpcQueueContainer = NetworkManager.Singleton.RpcQueueContainer;
            var isUsingBatching   = rpcQueueContainer.IsUsingBatching();
            var transportChannel  = rpcDelivery == RpcDelivery.Reliable ? NetworkChannel.ReliableRpc : NetworkChannel.UnreliableRpc;

            if (IsHost)
            {
                writer = rpcQueueContainer.BeginAddQueueItemToFrame(RpcQueueContainer.QueueItemType.ServerRpc, Time.realtimeSinceStartup, transportChannel,
                                                                    NetworkManager.Singleton.ServerClientId, null, RpcQueueHistoryFrame.QueueFrameType.Inbound, serverRpcParams.Send.UpdateStage);

                if (!isUsingBatching)
                {
                    writer.WriteByte(NetworkConstants.SERVER_RPC); // MessageType
                }
            }
            else
            {
                writer = rpcQueueContainer.BeginAddQueueItemToFrame(RpcQueueContainer.QueueItemType.ServerRpc, Time.realtimeSinceStartup, transportChannel,
                                                                    NetworkManager.Singleton.ServerClientId, null, RpcQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate);
                if (!isUsingBatching)
                {
                    writer.WriteByte(NetworkConstants.SERVER_RPC); // MessageType
                }
            }

            writer.WriteUInt64Packed(NetworkObjectId);                // NetworkObjectId
            writer.WriteUInt16Packed(NetworkBehaviourId);             // NetworkBehaviourId
            writer.WriteByte((byte)serverRpcParams.Send.UpdateStage); // NetworkUpdateStage

            return(writer.Serializer);
        }
Beispiel #2
0
 public void UpdateHPServerRpc(int HPDiff, ServerRpcParams rpcParams = default)
 {
     HP.Value += HPDiff;
     if (HP.Value > maxHp)
     {
         HP.Value = maxHp;
     }
 }
Beispiel #3
0
 void ShuffleSpawnsServerRpc(ServerRpcParams rpcParams = default)
 {
     if (!HasBeenShuffled.Value)
     {
         HasBeenShuffled.Value = true;
         spawnPositions        = spawnPositions.OrderBy(x => Random.value).ToList();
     }
     Readies.Value++;
 }
        private void PingMySelfServerRpc(int currentCount, ServerRpcParams parameters = default)
        {
            Debug.Log($"{nameof(PingMySelfServerRpc)}: [HostClient][ServerRpc][{currentCount}] invoked during the {parameters.Receive.UpdateStage} stage.");

            m_ClientParams.Send.UpdateStage = parameters.Receive.UpdateStage;
            m_ServerStagesReceived.Add(parameters.Receive.UpdateStage);

            PingMySelfClientRpc(currentCount, m_ClientParams);
        }
 private void OnSendCounterServerRpc(int counter, ServerRpcParams parameters = default)
 {
     //This is just for debug purposes so I can trap for "non-local" clients
     if (IsHost && parameters.Receive.SenderClientId == 0)
     {
         m_ClientSpecificCounters[parameters.Receive.SenderClientId] = counter;
     }
     else if (m_ClientSpecificCounters.ContainsKey(parameters.Receive.SenderClientId))
     {
         m_ClientSpecificCounters[parameters.Receive.SenderClientId] = counter;
     }
 }
Beispiel #6
0
 private void ToggleReadyServerRpc(ServerRpcParams serverRpcParams = default)
 {
     for (int i = 0; i < lobbyPlayers.Count; i++)
     {
         if (lobbyPlayers[i].ClientId == serverRpcParams.Receive.SenderClientId)
         {
             lobbyPlayers[i] = new LobbyPlayerState(
                 lobbyPlayers[i].ClientId,
                 lobbyPlayers[i].PlayerName,
                 !lobbyPlayers[i].IsReady
                 );
         }
     }
 }
Beispiel #7
0
        private void StartGameServerRpc(ServerRpcParams serverRpcParams = default)
        {
            if (serverRpcParams.Receive.SenderClientId != NetworkManager.Singleton.LocalClientId)
            {
                return;
            }

            if (!IsEveryoneReady())
            {
                return;
            }

            ServerGameNetPortal.Instance.StartGame();
        }
Beispiel #8
0
    private void TryGrabServerRpc(ServerRpcParams serverRpcParams = default)
    {
        if (!m_IsGrabbed.Value)
        {
            var senderClientId     = serverRpcParams.Receive.SenderClientId;
            var senderPlayerObject = NetworkManager.SpawnManager.GetPlayerNetworkObject(senderClientId);
            if (senderPlayerObject != null)
            {
                NetworkObject.ChangeOwnership(senderClientId);

                m_IsGrabbed.Value = true;

                UpdateParentClientRpc(NetworkObject.OwnerClientId, false);
            }
        }
    }
        public void __endSendServerRpc(NetworkSerializer serializer, ServerRpcParams serverRpcParams, RpcDelivery rpcDelivery)
#endif
        {
            if (serializer == null)
            {
                return;
            }

            var rpcQueueContainer = NetworkManager.Singleton.RpcQueueContainer;

            if (IsHost)
            {
                rpcQueueContainer.EndAddQueueItemToFrame(serializer.Writer, RpcQueueHistoryFrame.QueueFrameType.Inbound, serverRpcParams.Send.UpdateStage);
            }
            else
            {
                rpcQueueContainer.EndAddQueueItemToFrame(serializer.Writer, RpcQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate);
            }
        }
Beispiel #10
0
        public void __endSendServerRpc(NetworkSerializer serializer, ServerRpcParams serverRpcParams, RpcDelivery rpcDelivery)
#endif
#pragma warning restore IDE1006 // restore naming rule violation check
        {
            if (serializer == null)
            {
                return;
            }

            var rpcQueueContainer = NetworkManager.RpcQueueContainer;

            if (IsHost)
            {
                rpcQueueContainer.EndAddQueueItemToFrame(serializer.Writer, RpcQueueHistoryFrame.QueueFrameType.Inbound, serverRpcParams.Send.UpdateStage);
            }
            else
            {
                rpcQueueContainer.EndAddQueueItemToFrame(serializer.Writer, RpcQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate);
            }
        }
Beispiel #11
0
 void SubmitPositionRequestServerRpc(ServerRpcParams rpcParams = default)
 {
     Position.Value = GetRandomPositionOnPlane();
 }
 private void OnSendMultiParametersServerRpc(int count, float floatValue, long longValue, ServerRpcParams parameters = default)
 {
     m_ClientRpcParamsMultiParameter.Send.TargetClientIds[0] = parameters.Receive.SenderClientId;
     m_ClientRpcParamsMultiParameter.Send.UpdateStage        = NetworkUpdateStage.EarlyUpdate;
     OnSendMultiParametersClientRpc(count, floatValue, longValue, m_ClientRpcParamsMultiParameter);
 }
 private void OnSendNoParametersServerRpc(ServerRpcParams parameters = default)
 {
     m_ClientRpcParamsMultiParameter.Send.TargetClientIds[0] = parameters.Receive.SenderClientId;
     m_ClientRpcParamsMultiParameter.Send.UpdateStage        = NetworkUpdateStage.Update;
     OnSendNoParametersClientRpc(m_ClientRpcParamsMultiParameter);
 }
Beispiel #14
0
 public void SetPlayerSpeedServerRpc(float speed, ServerRpcParams rpcParams = default)
 {
     variableSpeed.Value = speed;
 }
Beispiel #15
0
 // RuntimeAccessModifiersILPP will make this `protected`
 internal NetworkSerializer __beginSendServerRpc(ServerRpcParams serverRpcParams, RpcDelivery rpcDelivery)
Beispiel #16
0
 void UpdatePositionServerRpc(Vector3 d, ServerRpcParams rpcParams = default)
 {
     Position.Value = d;
 }
Beispiel #17
0
 // RuntimeAccessModifiersILPP will make this `protected`
 internal void __endSendServerRpc(NetworkSerializer serializer, ServerRpcParams serverRpcParams, RpcDelivery rpcDelivery)
Beispiel #18
0
 void SetTargetAngleServerRpc(Vector2 direction, ServerRpcParams rpcParams = default)
 {
     direction.Normalize();
     TargetAngle.Value = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
 }
Beispiel #19
0
 public void SetPlayerAttackDelayServerRpc(float delay, ServerRpcParams rpcParams = default)
 {
     variableAttackDelay.Value = delay;
 }
Beispiel #20
0
 public void SetPlayerDamageServerRpc(int dmg, ServerRpcParams rpcParams = default)
 {
     variableDamage.Value = dmg;
 }
Beispiel #21
0
 void InitializeHPServerRpc(int InitialHP, ServerRpcParams rpcParams = default)
 {
     HP.Value           = InitialHP;
     HPHasBeenSet.Value = true;
 }
Beispiel #22
0
 void UpdateAttackServerRpc(Vector3 a, ServerRpcParams rpcParams = default)
 {
     AttackDir.Value = a;
     NAttacks.Value++;
 }
        private void SubmitTransformServerRpc(Vector3 position, Vector3 eulerAngles, ServerRpcParams rpcParams = default)
        {
            if (!enabled)
            {
                return;
            }

            if (IsMoveValidDelegate != null && !IsMoveValidDelegate(rpcParams.Receive.SenderClientId, m_LerpEndPos, position))
            {
                //Invalid move!
                //TODO: Add rubber band (just a message telling them to go back)
                return;
            }

            if (!IsClient)
            {
                // Dedicated server
                ApplyTransformInternal(position, Quaternion.Euler(eulerAngles));
            }

            if (EnableRange)
            {
                for (int i = 0; i < NetworkManager.Singleton.ConnectedClientsList.Count; i++)
                {
                    if (!m_ClientSendInfo.ContainsKey(NetworkManager.Singleton.ConnectedClientsList[i].ClientId))
                    {
                        m_ClientSendInfo.Add(NetworkManager.Singleton.ConnectedClientsList[i].ClientId, new ClientSendInfo()
                        {
                            LastMissedPosition = null,
                            LastMissedRotation = null,
                            LastSent           = 0
                        });
                    }

                    ClientSendInfo info             = m_ClientSendInfo[NetworkManager.Singleton.ConnectedClientsList[i].ClientId];
                    Vector3?       receiverPosition = NetworkManager.Singleton.ConnectedClientsList[i].PlayerObject == null ? null : new Vector3?(NetworkManager.Singleton.ConnectedClientsList[i].PlayerObject.transform.position);
                    Vector3?       senderPosition   = NetworkManager.Singleton.ConnectedClients[OwnerClientId].PlayerObject == null ? null : new Vector3?(NetworkManager.Singleton.ConnectedClients[OwnerClientId].PlayerObject.transform.position);

                    if ((receiverPosition == null || senderPosition == null && NetworkManager.Singleton.NetworkTime - info.LastSent >= (1f / FixedSendsPerSecond)) || NetworkManager.Singleton.NetworkTime - info.LastSent >= GetTimeForLerp(receiverPosition.Value, senderPosition.Value))
                    {
                        info.LastSent           = NetworkManager.Singleton.NetworkTime;
                        info.LastMissedPosition = null;
                        info.LastMissedRotation = null;

                        ApplyTransformClientRpc(position, eulerAngles,
                                                new ClientRpcParams {
                            Send = new ClientRpcSendParams {
                                TargetClientIds = new[] { NetworkManager.Singleton.ConnectedClientsList[i].ClientId }
                            }
                        });
                    }
                    else
                    {
                        info.LastMissedPosition = position;
                        info.LastMissedRotation = Quaternion.Euler(eulerAngles);
                    }
                }
            }
            else
            {
                ApplyTransformClientRpc(position, eulerAngles,
                                        new ClientRpcParams {
                    Send = new ClientRpcSendParams {
                        TargetClientIds = NetworkManager.Singleton.ConnectedClientsList.Where(c => c.ClientId != OwnerClientId).Select(c => c.ClientId).ToArray()
                    }
                });
            }
        }
Beispiel #24
0
 public void PingServerRPC(int pingId, ServerRpcParams serverParams = default)
 {
     PongClientRPC(pingId, m_PongClientParams);
 }
Beispiel #25
0
 public void SetPlayerNameServerRpc(string name, ServerRpcParams rpcParams = default)
 {
     PlayerName.Value = name;
 }
Beispiel #26
0
 void IAmReadyServerRpc(ServerRpcParams rpcParams = default)
 {
     Readies.Value++;
 }
Beispiel #27
0
 void SubmitPositionRequestServerRpc(Vector2 direction, ServerRpcParams rpcParams = default)
 {
     ChangeVelocity(direction);
 }