209 lines
6.7 KiB
Lua
209 lines
6.7 KiB
Lua
|
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)
|