Scripts/resources/[ps]/ps-adminmenu/client/vehicles.lua

209 lines
6.7 KiB
Lua
Raw Permalink Normal View History

2024-12-29 20:11:16 +00:00
local function GetVehicleName(hash)
for _, v in pairs(QBCore.Shared.Vehicles) do
if hash == v.hash then
return v.model
end
end
end
-- Own Vehicle
RegisterNetEvent('ps-adminmenu:client:Admincar', function(data)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
if not cache.vehicle then return end
local props = lib.getVehicleProperties(cache.vehicle)
local name = GetVehicleName(props.model)
local sharedVehicles = QBCore.Shared.Vehicles[name]
local hash = GetHashKey(cache.vehicle)
if sharedVehicles then
TriggerServerEvent('ps-adminmenu:server:SaveCar', props, sharedVehicles, hash, props.plate)
else
QBCore.Functions.Notify(locale("cannot_store_veh"), 'error')
end
end)
-- Spawn Vehicle
RegisterNetEvent('ps-adminmenu:client:SpawnVehicle', function(data, selectedData)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
local selectedVehicle = selectedData["Vehicle"].value
local hash = GetHashKey(selectedVehicle)
if not IsModelValid(hash) then return end
lib.requestModel(hash)
if cache.vehicle then
DeleteVehicle(cache.vehicle)
end
local vehicle = CreateVehicle(hash, GetEntityCoords(cache.ped), GetEntityHeading(cache.ped), true, false)
TaskWarpPedIntoVehicle(cache.ped, vehicle, -1)
exports[Config.Fuel]:SetFuel(vehicle, 100.0)
TriggerEvent("vehiclekeys:client:SetOwner", QBCore.Functions.GetPlate(vehicle))
end)
-- Refuel Vehicle
RegisterNetEvent('ps-adminmenu:client:RefuelVehicle', function(data)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
if cache.vehicle then
exports[Config.Fuel]:SetFuel(cache.vehicle, 100.0)
QBCore.Functions.Notify(locale("refueled_vehicle"), 'success')
else
QBCore.Functions.Notify(locale("not_in_vehicle"), 'error')
end
end)
-- Change plate
RegisterNetEvent('ps-adminmenu:client:ChangePlate', function(data, selectedData)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
local plate = selectedData["Plate"].value
if string.len(plate) > 8 then
return QBCore.Functions.Notify(locale("plate_max"), "error", 5000)
end
if cache.vehicle then
local AlreadyPlate = lib.callback.await("ps-adminmenu:callback:CheckAlreadyPlate", false, plate)
if AlreadyPlate then
QBCore.Functions.Notify(locale("already_plate"), "error", 5000)
return
end
local currentPlate = GetVehicleNumberPlateText(cache.vehicle)
TriggerServerEvent('ps-adminmenu:server:ChangePlate', plate, currentPlate)
Wait(100)
SetVehicleNumberPlateText(cache.vehicle, plate)
Wait(100)
TriggerServerEvent('qb-vehiclekeys:server:AcquireVehicleKeys', QBCore.Functions.GetPlate(cache.vehicle))
else
QBCore.Functions.Notify(locale("not_in_vehicle"), 'error')
end
end)
-- Toggle Vehicle Dev mode
local VEHICLE_DEV_MODE = false
local function UpdateVehicleMenu()
while VEHICLE_DEV_MODE do
Wait(1000)
local vehicle = lib.getVehicleProperties(cache.vehicle)
local name = GetVehicleName(vehicle.model)
local netID = VehToNet(cache.vehicle)
SendNUIMessage({
action = "showVehicleMenu",
data = {
show = VEHICLE_DEV_MODE,
name = name,
model = vehicle.model,
netID = netID,
engine_health = vehicle.engineHealth,
body_health = vehicle.bodyHealth,
plate = vehicle.plate,
fuel = vehicle.fuelLevel,
}
})
end
end
RegisterNetEvent('ps-adminmenu:client:ToggleVehDevMenu', function(data)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
if not cache.vehicle then return end
VEHICLE_DEV_MODE = not VEHICLE_DEV_MODE
if VEHICLE_DEV_MODE then
CreateThread(UpdateVehicleMenu)
end
end)
-- Max Mods
local PERFORMANCE_MOD_INDICES = { 11, 12, 13, 15, 16 }
local function UpgradePerformance(vehicle)
SetVehicleModKit(vehicle, 0)
ToggleVehicleMod(vehicle, 18, true)
SetVehicleFixed(vehicle)
for _, modType in ipairs(PERFORMANCE_MOD_INDICES) do
local maxMod = GetNumVehicleMods(vehicle, modType) - 1
SetVehicleMod(vehicle, modType, maxMod, customWheels)
end
QBCore.Functions.Notify(locale("vehicle_max_modded"), 'success', 7500)
end
RegisterNetEvent('ps-adminmenu:client:maxmodVehicle', function(data)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
if cache.vehicle then
UpgradePerformance(cache.vehicle)
else
QBCore.Functions.Notify(locale("vehicle_not_driver"), 'error', 7500)
end
end)
-- Spawn Personal vehicles
RegisterNetEvent("ps-adminmenu:client:SpawnPersonalVehicle", function(data, selectedData)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
local plate = selectedData['VehiclePlate'].value
local ped = PlayerPedId()
local coords = QBCore.Functions.GetCoords(ped)
local cid = QBCore.Functions.GetPlayerData().citizenid
lib.callback('ps-adminmenu:server:GetVehicleByPlate', false, function(vehModel)
vehicle = vehModel
end, plate)
Wait(100)
QBCore.Functions.TriggerCallback('QBCore:Server:SpawnVehicle', function(vehicle)
local veh = NetToVeh(vehicle)
local props = QBCore.Functions.GetVehicleProperties(veh)
SetEntityHeading(veh, coords.w)
TaskWarpPedIntoVehicle(ped, veh, -1)
SetVehicleModKit(veh, 0)
Wait(100)
QBCore.Functions.SetVehicleProperties(veh, props)
SetVehicleNumberPlateText(veh, plate)
exports[Config.Fuel]:SetFuel(veh, 100.0)
TriggerEvent("vehiclekeys:client:SetOwner", plate)
TriggerEvent('iens:repaira', ped)
TriggerEvent('vehiclemod:client:fixEverything', ped)
end, vehicle, coords, true)
end)
-- Get Vehicle Data
lib.callback.register("ps-adminmenu:client:getvehData", function(vehicle)
lib.requestModel(vehicle)
local coords = vec(GetOffsetFromEntityInWorldCoords(cache.ped, 0.0, 2.0, 0.5), GetEntityHeading(cache.ped) + 90)
local veh = CreateVehicle(vehicle, coords, false, false)
local prop = {}
if DoesEntityExist(veh) then
SetEntityCollision(veh, false, false)
FreezeEntityPosition(veh, true)
prop = QBCore.Functions.GetVehicleProperties(veh)
Wait(500)
DeleteVehicle(veh)
end
return prop
end)