Beispiel #1
0
        private static void OnReserveAreaRequest(ref ReserveAreaMsg msg, MyNetworkClient sender)
        {
            if (!Sync.IsServer)
            {
                return;
            }

            if (!m_reservedAreas.ContainsKey(msg.ReservationName))
            {
                m_reservedAreas.Add(msg.ReservationName, new Dictionary <long, ReservedAreaData>());
            }

            var  reservations      = m_reservedAreas[msg.ReservationName];
            bool reservedBySomeone = false;

            MyPlayer.PlayerId requestId = new MyPlayer.PlayerId(sender.SteamUserId, msg.SenderSerialId);

            foreach (var r in reservations)
            {
                var  currentReservation = r.Value;
                var  sqDist             = (currentReservation.WorldPosition - msg.Position).LengthSquared();
                bool inRadius           = sqDist <= currentReservation.Radius * currentReservation.Radius;

                if (inRadius)
                {
                    reservedBySomeone = true;
                    break;
                }
            }

            if (!reservedBySomeone)
            {
                reservations[AreaReservationCounter++] = new ReservedAreaData()
                {
                    WorldPosition    = msg.Position,
                    Radius           = msg.Radius,
                    ReservationTimer = MySandboxGame.Static.UpdateTime + MyTimeSpan.FromMiliseconds(msg.ReservationTimeMs),
                    ReserverId       = requestId,
                };

                var allMsg = new ReserveAreaAllMsg()
                {
                    Id              = AreaReservationCounter,
                    Position        = msg.Position,
                    Radius          = msg.Radius,
                    ReservationName = msg.ReservationName,
                };

                Sync.Layer.SendMessageToAll(ref allMsg, MyTransportMessageEnum.Success);
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Success);
            }
            else
            {
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Failure);
            }
        }
Beispiel #2
0
 private static void OnReserveAreaFailure(ref ReserveAreaMsg msg, MyNetworkClient sender)
 {
     if (OnAreaReservationResult != null)
     {
         var reservationData = new ReservedAreaData()
         {
             WorldPosition = msg.Position,
             Radius        = msg.Radius,
             ReserverId    = new MyPlayer.PlayerId(0, msg.SenderSerialId)
         };
         OnAreaReservationResult(ref reservationData, false);
     }
 }
Beispiel #3
0
        public void RequestAreaReservation(string reservationName, Vector3D position, float radius, long reservationTimeMs, int senderSerialId)
        {
            var msg = new ReserveAreaMsg()
            {
                ReservationName   = reservationName,
                Position          = position,
                Radius            = radius,
                ReservationTimeMs = reservationTimeMs,
                SenderSerialId    = senderSerialId,
            };

            Sync.Layer.SendMessageToServer(ref msg, MyTransportMessageEnum.Request);
        }
 private static void OnReserveAreaFailure(ref ReserveAreaMsg msg, MyNetworkClient sender)
 {
     if (OnAreaReservationResult != null)
     {
         var reservationData = new ReservedAreaData()
         {
             WorldPosition = msg.Position,
             Radius = msg.Radius,
             ReserverId = new MyPlayer.PlayerId(0, msg.SenderSerialId)
         };
         OnAreaReservationResult(ref reservationData, false);
     }
 }
        private static void OnReserveAreaRequest(ref ReserveAreaMsg msg, MyNetworkClient sender)
        {
            if (!Sync.IsServer)
                return;

            if (!m_reservedAreas.ContainsKey(msg.ReservationName))
                m_reservedAreas.Add(msg.ReservationName, new Dictionary<long, ReservedAreaData>());

            var reservations = m_reservedAreas[msg.ReservationName];
            bool reservedBySomeone = false;
            MyPlayer.PlayerId requestId = new MyPlayer.PlayerId(sender.SteamUserId, msg.SenderSerialId);

            foreach (var r in reservations)
            {
                var currentReservation = r.Value;
                var sqDist = (currentReservation.WorldPosition - msg.Position).LengthSquared();
                bool inRadius = sqDist <= currentReservation.Radius * currentReservation.Radius; 
                
                if (inRadius)
                {
                    reservedBySomeone = true;
                    break;
                }
            }

            if (!reservedBySomeone)
            {
                reservations[AreaReservationCounter++] = new ReservedAreaData()
                {
                    WorldPosition = msg.Position,
                    Radius = msg.Radius,
                    ReservationTimer = MySandboxGame.Static.UpdateTime + MyTimeSpan.FromMiliseconds(msg.ReservationTimeMs),
                    ReserverId = requestId,
                };

                var allMsg = new ReserveAreaAllMsg()
                {
                    Id = AreaReservationCounter,
                    Position = msg.Position,
                    Radius = msg.Radius,
                    ReservationName = msg.ReservationName,
                };

                Sync.Layer.SendMessageToAll(ref allMsg, MyTransportMessageEnum.Success);
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Success);
            }
            else
            {
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Failure);
            }

            
        }
 public void RequestAreaReservation(string reservationName, Vector3D position, float radius, long reservationTimeMs, int senderSerialId)
 {
     var msg = new ReserveAreaMsg()
     {
         ReservationName = reservationName,
         Position = position,
         Radius = radius,
         ReservationTimeMs = reservationTimeMs,
         SenderSerialId = senderSerialId,
     };
     Sync.Layer.SendMessageToServer(ref msg, MyTransportMessageEnum.Request);
 }