1
0
Fork 0
forked from Simnation/Main
Main/resources/[tools]/Codem-BlackHUDV2/client/seatbelt.lua
2025-06-07 08:51:21 +02:00

254 lines
10 KiB
Lua

seatbeltOn = false
if Config.EnableSeatbelt then
lastSpeed = 0
function CheckVehicleHasSeatbelt(vehicle)
if DoesEntityExist(vehicle) then
local model = GetEntityModel(vehicle)
local modelName = GetDisplayNameFromVehicleModel(model):lower()
-- Liste der Polizeimotorräder, die ausgeschlossen werden sollen
local policeBikes = {
"policeb",
"policeb2",
"sheriff2",
"mbu3rb",
"mbu2rb",
"mbu1flagrb",
"bomberbike"
-- Fügen Sie hier weitere Polizeimotorrad-Spawnnames hinzu, falls nötig
}
-- Prüfe, ob das Fahrzeug ein Polizeimotorrad ist
for _, bikeName in ipairs(policeBikes) do
if modelName == bikeName then
return false
end
end
local class = GetVehicleClass(vehicle)
-- Exclude motorcycles (8)
if class == 8 then return false end
-- Cars (0-7), Industrial vehicles (9), SUVs (2), Service vehicles (17),
-- Military vehicles (19), Commercial vehicles (20)
return class >= 0 and class <= 7 or class == 9 or class == 17 or class == 18 or class == 19 or class == 20
end
return false
end
if Config.SeatbeltSound then
CreateThread(function()
while true do
local ped = playerPed
local car = GetVehiclePedIsIn(ped)
if DoesEntityExist(car) and CheckVehicleHasSeatbelt(car) then
if not seatbeltOn then
local speed = GetEntitySpeed(car) * 3.6
if speed > 100.0 then -- Alarm nur über 100 km/h
SendNUIMessage({
type="PLAY_SEATBELT_SOUND",
})
end
end
end
Wait(2800)
end
end)
end
local seatbeltSpam = 0
function playSound(action)
local ped = playerPed
local car = GetVehiclePedIsIn(ped)
local seatPlayerId = {}
if IsCar(car) then
for i=1, GetVehicleModelNumberOfSeats(GetEntityModel(car)) do
if not IsVehicleSeatFree(car, i-2) then
local otherPlayerId = GetPedInVehicleSeat(car, i-2)
local playerHandle = NetworkGetPlayerIndexFromPed(otherPlayerId)
local playerServerId = GetPlayerServerId(playerHandle)
table.insert(seatPlayerId, playerServerId)
end
end
if #seatPlayerId > 0 then TriggerServerEvent("seatbelt:server:PlaySound", action, seatPlayerId) end
end
end
RegisterNetEvent('seatbelt:client:PlaySound')
AddEventHandler('seatbelt:client:PlaySound', function(action, volume)
SendNUIMessage({type = action, volume = volume})
end)
RegisterKeyMapping('seatbelt', 'Toggle Seatbelt', 'keyboard', Config.DefaultSeatbeltControlKey)
Citizen.CreateThread(function()
while true do
Citizen.Wait(1500)
if seatbeltSpam > 0 then
Citizen.Wait(3500)
seatbeltSpam = 0
end
end
end)
RegisterNetEvent('codem-blackhudv2:seatbelt:toggle')
AddEventHandler('codem-blackhudv2:seatbelt:toggle', function(toggle)
local car = GetVehiclePedIsIn(playerPed)
if car ~= 0 and IsCar(car) then
if seatbeltSpam >= 3 then
if Config.EnableSpamNotification then
Config.Notification(Config.Notifications["spam"]["message"], Config.Notifications["spam"]["type"])
end
return
end
seatbeltOn = toggle
if seatbeltOn then
SendNUIMessage({
type="update_seatbelt",
toggle = true
})
playSound("buckle")
Config.Notification(Config.Notifications["took_seatbelt"]["message"], Config.Notifications["took_seatbelt"]["type"])
else
SendNUIMessage({
type="update_seatbelt",
toggle = false
})
playSound("unbuckle")
Config.Notification(Config.Notifications["took_off_seatbelt"]["message"], Config.Notifications["took_off_seatbelt"]["type"])
end
end
end)
RegisterCommand('seatbelt', function()
if IsPedHangingOnToVehicle(playerPed) then
return
end
local car = GetVehiclePedIsIn(playerPed)
if car ~= 0 and IsCar(car) then
if seatbeltSpam >= 3 then
if Config.EnableSpamNotification then
Config.Notification(Config.Notifications["spam"]["message"], Config.Notifications["spam"]["type"])
end
return
end
seatbeltOn = not seatbeltOn
if seatbeltOn then
SendNUIMessage({
type="update_seatbelt",
toggle = true
})
playSound("buckle")
Config.Notification(Config.Notifications["took_seatbelt"]["message"], Config.Notifications["took_seatbelt"]["type"])
else
SendNUIMessage({
type="update_seatbelt",
toggle = false
})
playSound("unbuckle")
Config.Notification(Config.Notifications["took_off_seatbelt"]["message"], Config.Notifications["took_off_seatbelt"]["type"])
end
end
end, false)
function Fwv(entity)
local hr = GetEntityHeading(entity) + 90.0
if hr < 0.0 then hr = 360.0 + hr end
hr = hr * 0.0174533
return { x = math.cos(hr) * 2.0, y = math.sin(hr) * 2.0 }
end
function IsCar(veh)
if DoesEntityExist(veh) then
local model = GetEntityModel(veh)
local modelName = GetDisplayNameFromVehicleModel(model):lower()
-- Liste der Polizeimotorräder
local policeBikes = {
"policeb",
"policeb2",
"sheriff2",
"mbu3rb",
"mbu2rb",
"mbu1flagrb",
"bomberbike"
-- Fügen Sie hier weitere Polizeimotorrad-Spawnnames hinzu, falls nötig
}
-- Prüfe, ob das Fahrzeug ein Polizeimotorrad ist
for _, bikeName in ipairs(policeBikes) do
if modelName == bikeName then
return false
end
end
local vc = GetVehicleClass(veh)
if vc == 8 then return false end
return (vc >= 0 and vc <= 7) or vc == 9 or vc == 17 or vc == 18 or vc == 19 or vc == 20
end
return false
end
RegisterNetEvent('codem-blackhud-v2:client:EjectPlayer')
AddEventHandler('codem-blackhud-v2:client:EjectPlayer', function(velocity)
print("Ejecting player")
if not seatbeltOn then
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
local fw = Fwv(ped)
lastSpeed = 0
SetEntityCoords(ped, coords.x + fw.x, coords.y + fw.y, coords.z - .47, true, true, true)
SetEntityVelocity(ped, lastVelocity.x, lastVelocity.y, lastVelocity.z)
Wait(500)
ApplyDamageToPed(ped, math.random(10, 30), false)
SetPedToRagdoll(ped, 1000, 1000, 0, 0, 0, 0)
seatbeltOn = false
SendNUIMessage({
type="update_seatbelt",
toggle = false
})
end
end)
CreateThread(function()
while true do
local ped = PlayerPedId()
local Vehicle = GetVehiclePedIsIn(ped)
if IsPedInAnyVehicle(ped) and CheckVehicleHasSeatbelt(Vehicle) then
local vehicle = Vehicle
local speed = GetEntitySpeed(vehicle) * 3.6
if lastSpeed > (Config.SeatBeltFlySpeed) and (lastSpeed - speed) > (speed * 1.7) then
if not seatbeltOn then
print("Ejecting player", lastSpeed, speed)
local seatPlayerId = {}
for i=1, GetVehicleModelNumberOfSeats(GetEntityModel(vehicle)) do
if not IsVehicleSeatFree(vehicle, i-2) then
local otherPlayerId = GetPedInVehicleSeat(vehicle, i-2)
local playerHandle = NetworkGetPlayerIndexFromPed(otherPlayerId)
local playerServerId = GetPlayerServerId(playerHandle)
table.insert(seatPlayerId, playerServerId)
end
end
seatbeltOn = false
SendNUIMessage({
type="update_seatbelt",
toggle = false
})
if #seatPlayerId > 0 then TriggerServerEvent("codem-blackhud-v2:server:EjectPlayer", seatPlayerId) end
end
end
lastSpeed = speed
lastVelocity = GetEntityVelocity(vehicle)
else
if seatbeltOn then
seatbeltOn = false
SendNUIMessage({
type="update_seatbelt",
toggle = false
})
lastSpeed = 0
end
Wait(2000)
end
Wait(150)
end
end)
end