/// <summary> /// Handle server event to update lock status /// </summary> /// <param name="id">gate key</param> /// <param name="isLocked"></param> private static void HandleToggleLock(int id, bool isLocked) { try { if (!LockableGates.TryGetValue(id, out var updatedGate)) { return; } LockableGates[id].IsLocked = isLocked; //Need refresh if entity is visble and foreign client toggles lock. if (_gateEntity == null || _currentGate != updatedGate) { return; } //Updated gate is in front of us var updatedPositionTarget = _currentGate.IsLocked ? _currentGate.ClosedPosition : GetGateOffsetPosition(_currentGate, _currentGate.ClosedPosition, _currentGate.GateLength, _currentGate.OpeningMovement); //Check if client is the one that unlocked if (_gateTarget == updatedPositionTarget) { return; } _gateTarget = updatedPositionTarget; _vehicleCheckPos = _currentGate.ClosedPosition; if (_currentGate != null) { _vehicleBlockingGate = VehicleInteraction.GetClosetVehicleAtPosition(_vehicleCheckPos, 100f); } } catch (Exception ex) { Log.Error(ex); } }
/// <summary> /// Periodically check for vehicles /// </summary> private static void PeriodicVehicleCheck() { try { if (DateTime.Now.CompareTo(_lastVehicleCheckTime) < 0) { return; } _lastVehicleCheckTime = DateTime.Now.AddMilliseconds(250); _vehicleBlockingGate = VehicleInteraction.GetClosetVehicleAtPosition(_vehicleCheckPos, 100f); } catch (Exception ex) { Log.Error(ex); } }
/// <summary> /// Toggle gate lock /// </summary> private static void ToggleGateLock() { try { if (_currentGate == null) { return; } _gateTarget = _currentGate.IsLocked ? GetGateOffsetPosition(_currentGate, _currentGate.ClosedPosition, _currentGate.GateLength, _currentGate.OpeningMovement) : _currentGate.ClosedPosition; _currentGate.IsLocked = !_currentGate.IsLocked; _vehicleCheckPos = _currentGate.ClosedPosition; _vehicleBlockingGate = VehicleInteraction.GetClosetVehicleAtPosition(_vehicleCheckPos, 100f); BaseScript.TriggerServerEvent("Gate.Toggle", _currentGateId, _currentGate.IsLocked); } catch (Exception ex) { Log.Error(ex); } }