Files
CasperV1FiveM/resources/[esx_addons]/esx_cruisecontrol/client/cruisecontrol.lua
2026-07-07 21:08:52 +02:00

126 lines
3.9 KiB
Lua

CC = {
cruiseActive = false,
increasePressure = false,
lastEngineHealth = 0,
currentCCSpeed = 0,
lastIdealPedalPressure = 0.0,
speedDiffTolerance = (0.5 / 3.6),
Reset = function(self)
if not Utils:DriverCheck() then return end
if not self.cruiseActive then return end
self.cruiseActive = false
self.currentCCSpeed = 0
self.lastEngineHealth = 0
self.lastIdealPedalPressure = 0.0
Utils:SetHudState(false)
end,
ApplyIdealPedalPressure = function(self)
if not Utils:DriverCheck() then return end
if not self.cruiseActive then return end
if not self.increasePressure then
self.increasePressure = true
end
SetControlNormal(0, 71, self.lastIdealPedalPressure)
end,
ChangeSpeed = function(self, state)
if not Utils:DriverCheck() then return end
if not self.cruiseActive then return end
local currentSpeed = Utils:GetSpeed()
if state then
if currentSpeed >= 120 then return end
currentSpeed += 10
self.currentCCSpeed = currentSpeed
else
if currentSpeed == 0 then return end
currentSpeed += -10
if currentSpeed < 0 then currentSpeed = 0 end
self.currentCCSpeed = currentSpeed
end
end,
Enable = function(self)
if not Config.Cruise.Enable then return end
if not Utils:DriverCheck() then return end
self.cruiseActive = true
self.lastEngineHealth = GetVehicleEngineHealth(Utils.vehicle)
CreateThread(function()
self.currentCCSpeed = Utils:GetSpeed() or 0
if self.currentCCSpeed == 0 then self.cruiseActive = false return end
Utils:SetHudState(true)
while self.cruiseActive do
local engineHealth = GetVehicleEngineHealth(Utils.vehicle)
if IsControlJustPressed(0, 72) or IsControlJustPressed(0, 76) then
self:Reset()
end
if self.lastEngineHealth and ((self.lastEngineHealth - engineHealth) > 10) then
self:Reset()
else
self.lastEngineHealth = engineHealth
end
local curSpeed = Utils:GetSpeed() or 0
if curSpeed == 0 then self:Reset() return end
local diff = self.currentCCSpeed - curSpeed
if diff > self.speedDiffTolerance then
local pedalPressure = 0.8
if Utils:IsSteering() then
pedalPressure = 0.4
end
if self.increasePressure then
self.lastIdealPedalPressure = self.lastIdealPedalPressure + 0.025
self.increasePressure = false
end
SetControlNormal(0, 71, pedalPressure)
elseif diff > - (4 * self.speedDiffTolerance) then
self:ApplyIdealPedalPressure()
else
self.lastIdealPedalPressure = 0.2
end
Wait(0)
end
end)
end
}
--Handlers
AddEventHandler('esx:playerPedChanged', function(newPed)
Utils.ped = newPed
end)
RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded',function(xPlayer, isNew, skin)
Utils.ped = PlayerPedId()
end)
AddEventHandler('esx:enteredVehicle', function(vehicle, plate, seat, displayName, netId)
Utils.vehicle = vehicle
if not Config.Seatbelt.Enable then return end
SB:Thread()
end)
AddEventHandler('esx:exitedVehicle', function(vehicle, plate, seat, displayName, netId)
Utils.vehicle = nil
end)
AddEventHandler('onResourceStart', function(resourceName)
if (GetCurrentResourceName() ~= resourceName) then
return
end
Utils.ped = PlayerPedId()
end)