Main/resources/[carscripts]/mh_Parking/client.lua

211 lines
6.1 KiB
Lua
Raw Normal View History

2025-06-07 08:51:21 +02:00
local enabled = true
Citizen.CreateThread(function()
while (true) do
local playerPed = PlayerPedId()
if (DoesEntityExist(playerPed)) then
TriggerServerEvent("mh_Parking:syncPlayerPosition", GetEntityCoords(playerPed))
end
Citizen.Wait(3000)
end
end)
Citizen.CreateThread(function()
while (true) do
Citizen.Wait(5 * 60 * 1000)
local vehicle = GetVehiclePedIsIn(PlayerPedId())
if (DoesEntityExist(vehicle)) then
TriggerEvent("mh_Parking:updateVehicle", vehicle)
end
end
end)
Citizen.CreateThread(function()
Citizen.Wait(3000)
local isInVehicle = false
local currentVehiclePlate = nil
local wasDead = false
while (true) do
Citizen.Wait(50)
local playerPed = PlayerPedId()
if (not isInVehicle and IsPedInAnyVehicle(playerPed)) then
-- entered vehicle
isInVehicle = true
if (enabled) then
local vehicle = GetVehiclePedIsIn(playerPed, false)
if (NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
SetNetworkIdCanMigrate(netId, true)
local modifications = GetVehicleModifications(vehicle)
currentVehiclePlate = GetVehicleNumberPlateText(vehicle)
TriggerServerEvent("mh_Parking:enteredVehicle", networkId, currentVehiclePlate, modifications)
Log("Vehicle " .. currentVehiclePlate .. " entered")
end
end
elseif (isInVehicle and not IsPedInAnyVehicle(playerPed, false)) then
-- left vehicle
isInVehicle = false
if (enabled and not wasDead) then
local vehicle = GetVehiclePedIsIn(playerPed, true)
if (vehicle ~= 0) then
if (NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
SetNetworkIdCanMigrate(netId, true)
local modifications = GetVehicleModifications(vehicle)
TriggerServerEvent("mh_Parking:leftVehicle", networkId, modifications)
Log("Vehicle " .. GetVehicleNumberPlateText(vehicle) .. " left")
-- if vehicle is deleted soon after
Citizen.CreateThread(function()
local veh = vehicle
local plate = GetVehicleNumberPlateText(veh)
local startTime = GetGameTimer()
local playerPed = PlayerPedId()
local playerPos
while (true) do
Citizen.Wait(0)
if (GetGameTimer() - startTime >= 1000) then
break
end
if (not DoesEntityExist(veh)) then
TriggerServerEvent("mh_Parking:deleteVehicle", plate, false)
Log("Vehicle " .. currentVehiclePlate .. " left and deleted after exit")
currentVehiclePlate = nil
break
end
playerPed = PlayerPedId()
playerPos = GetEntityCoords(playerPed)
vehPos = GetEntityCoords(veh)
if (Vdist(playerPos.x, playerPos.y, playerPos.z, vehPos.x, vehPos.y, vehPos.z) > 50.0) then
currentVehiclePlate = nil
break
end
end
currentVehiclePlate = nil
end)
end
elseif (currentVehiclePlate) then
TriggerServerEvent("mh_Parking:deleteVehicle", currentVehiclePlate, false)
Log("Vehicle " .. currentVehiclePlate .. " left and deleted")
currentVehiclePlate = nil
end
end
end
if (not wasDead and IsPlayerDead(PlayerId())) then
wasDead = true
elseif (wasDead and not IsPlayerDead(PlayerId())) then
Citizen.CreateThread(function()
Citizen.Wait(1000)
wasDead = false
end)
end
end
end)
RegisterNetEvent("mh_Parking:setVehicleMods")
AddEventHandler("mh_Parking:setVehicleMods", function(netId, plate, modifications)
if (not IsModelInCdimage(modifications[1])) then
Log("Setting mods for " .. plate .. " failed. The model does NOT exist.")
TriggerServerEvent("mh_Parking:modelDoesNotExist", plate)
return
end
local timer = GetGameTimer()
while (not NetworkDoesEntityExistWithNetworkId(netId)) do
Citizen.Wait(0)
if (GetGameTimer() - 10000 > timer) then
Log("Setting mods for " .. plate .. " failed after 10s")
TriggerServerEvent("mh_Parking:setVehicleModsFailed", plate)
return
end
end
local vehicle = NetworkGetEntityFromNetworkId(netId)
if (DoesEntityExist(vehicle) and NetworkHasControlOfEntity(vehicle)) then
Log("Setting modifications for vehicle " .. plate)
SetVehicleModifications(vehicle, plate, modifications)
TriggerServerEvent("mh_Parking:setVehicleModsSuccess", plate)
else
Log("Setting mods failed for vehicle " .. plate .. ". Vehicle does not exist")
TriggerServerEvent("mh_Parking:setVehicleModsFailed", plate)
end
end)
AddEventHandler("mh_Parking:updateVehicle", function(vehicle)
if (vehicle == nil) then
Log("^1[ERROR] \"vehicle\" was nil while trying to update a vehicle!")
return
end
if (DoesEntityExist(vehicle) and NetworkGetEntityIsNetworked(vehicle) and not IsVehicleBlacklisted(vehicle)) then
Log("Triggering manual update of vehicle")
local networkId = NetworkGetNetworkIdFromEntity(vehicle)
local modifications = GetVehicleModifications(vehicle)
TriggerServerEvent("mh_Parking:updateVehicle", networkId, modifications)
end
end)
RegisterNetEvent("mh_Parking:enable")
AddEventHandler("mh_Parking:enable", function(enable)
if (enable == nil) then
Log("^1[ERROR] \"enable\" was nil while trying to enable/disable script!")
return
end
enabled = enable
if (enabled) then
Log("AdvancedParking enabled")
else
Log("AdvancedParking disabled")
end
end)
RegisterNetEvent("mh_Parking:notification")
AddEventHandler("mh_Parking:notification", function(msg)
SetNotificationTextEntry('STRING')
AddTextComponentSubstringPlayerName(msg)
DrawNotification(false, true)
end)
RegisterNetEvent("mh_Parking:renderScorched")
AddEventHandler("mh_Parking:renderScorched", function(vehicleNetId, scorched)
local vehicle = NetworkGetEntityFromNetworkId(vehicleNetId)
if (DoesEntityExist(vehicle)) then
SetEntityRenderScorched(vehicle, scorched)
end
end)