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

92 lines
2.5 KiB
Lua

SB = {
cacheVeh = nil,
isRagdoll = false,
carArray = {0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 17, 18, 19, 20},
seatbelt = false,
vehSpeed = 0.0,
previousVelocity = vector3(0,0,0),
Reset = function(self)
self.cacheVeh = nil
self.carArray = {0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 17, 18, 19, 20}
self.seatbelt = false
self.vehSpeed = 0.0
self.isRagdoll = false
end,
EjectSeat = function(self)
local position = GetEntityCoords(Utils.ped)
SetEntityCoords(Utils.ped, position.x, position.y, position.z - 0.47, true, true, true, false)
SetEntityVelocity(Utils.ped, self.previousVelocity.x, self.previousVelocity.y, self.previousVelocity.z)
self:SetRagdoll()
Citizen.SetTimeout((Config.Seatbelt.RagdollTime or 1) * 1000, function()
self:Reset()
end)
end,
Logic = function(self)
local prevSpeed = self.vehSpeed
self.vehSpeed = GetEntitySpeed(self.cacheVeh)
SetPedConfigFlag(Utils.ped, 32, true)
if self.seatbelt then
return DisableControlAction(0, 75, false)
end
local isVehMovingFwd = GetEntitySpeedVector(self.cacheVeh, true).y > 1.0
local vehAcceleration = (prevSpeed - self.vehSpeed) / GetFrameTime()
local speedIsBiggerThanConfigMPH = prevSpeed > ((Config.Seatbelt.EjectCheckSpeed or 45)/2.237)
local reallyFast = vehAcceleration > (100*9.81)
if (isVehMovingFwd and speedIsBiggerThanConfigMPH and reallyFast) then
self:EjectSeat()
else
self.previousVelocity = GetEntityVelocity(self.cacheVeh)
end
end,
Thread = function(self)
CreateThread(function ()
while true do
if not Utils.vehicle then break end
if not self.cacheVeh or self.cacheVeh ~= Utils.vehicle then
local vehClass = GetVehicleClass(Utils.vehicle)
for i = 1, #self.carArray do
if self.carArray[i] == vehClass then
self.cacheVeh = Utils.vehicle
break
end
end
end
self:Logic()
Wait(200)
end
end)
end,
DisableExit = function(self)
CreateThread(function ()
while self.seatbelt do
DisableControlAction(0, 75, true)
Wait(0)
end
end)
end,
SetState = function(self, state)
if not Config.Seatbelt.Enable then return end
Utils:SetHudState(state, true)
if not state then
self:Reset()
return
end
self:DisableExit()
end,
SetRagdoll = function(self)
self.isRagdoll = true
CreateThread(function()
while self.isRagdoll do
Wait(0)
SetPedToRagdoll(Utils.ped, 1000, 1000, 0, false, false, false)
end
end)
end
}
exports('isSeatbeltOn', function()
return SB.seatbelt
end)