forked from Simnation/Main
254 lines
10 KiB
Lua
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
|