示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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);
            }
        }