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 OnReserveAreaAllSuccess(ref ReserveAreaAllMsg msg, MyNetworkClient sender) { if (!m_reservedAreas.ContainsKey(msg.ReservationName)) { m_reservedAreas[msg.ReservationName] = new Dictionary <long, ReservedAreaData>(); } var reservations = m_reservedAreas[msg.ReservationName]; reservations.Add(msg.Id, new ReservedAreaData() { WorldPosition = msg.Position, Radius = msg.Radius }); }
private static void OnReserveAreaAllSuccess(ref ReserveAreaAllMsg msg, MyNetworkClient sender) { if (!m_reservedAreas.ContainsKey(msg.ReservationName)) m_reservedAreas[msg.ReservationName] = new Dictionary<long, ReservedAreaData>(); var reservations = m_reservedAreas[msg.ReservationName]; reservations.Add(msg.Id, new ReservedAreaData() { WorldPosition = msg.Position, Radius = msg.Radius }); }
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); } }