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); } }
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); } }
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); }