forked from Simnation/Main
122 lines
3.2 KiB
Lua
122 lines
3.2 KiB
Lua
local lastVehicle
|
|
local modLivery
|
|
local menu = {
|
|
id = 'ox_commands:carMenu',
|
|
title = 'Vehicle Mods',
|
|
options = {}
|
|
}
|
|
|
|
-- Client-side group check
|
|
local function hasAdminPermission()
|
|
local playerGroups = exports.ox_core:GetPlayerData().groups
|
|
return playerGroups and playerGroups.admin
|
|
end
|
|
|
|
function menu.onSideScroll(selected, scrollIndex)
|
|
local option = menu.options[selected]
|
|
|
|
if scrollIndex ~= option.defaultIndex then
|
|
print('onSideScroll', selected, scrollIndex, option.modIndex)
|
|
option.defaultIndex = scrollIndex
|
|
lib.setMenuOptions(menu.id, option, selected)
|
|
|
|
if option.modIndex == 48 and not modLivery then
|
|
return SetVehicleLivery(lastVehicle, scrollIndex - 2)
|
|
end
|
|
|
|
SetVehicleMod(lastVehicle, option.modIndex, scrollIndex - 2, false)
|
|
end
|
|
end
|
|
|
|
-- Vehicle mod type mapping (same as original)
|
|
local vehicleModType = {
|
|
[0] = 'VMT_SPOILER',
|
|
[1] = 'VMT_BUMPER_F',
|
|
-- ... rest of your existing vehicleModType table ...
|
|
[49] = 'VMT_LIGHTBAR'
|
|
}
|
|
|
|
local GetLiveryName = GetLiveryName
|
|
local GetModTextLabel = GetModTextLabel
|
|
local GetLabelText = GetLabelText
|
|
|
|
local function createModEntry(index, vehicle, modCount)
|
|
local entries = table.create(modCount, 0)
|
|
|
|
for j = -1, modCount - 1 do
|
|
local label = (index == 48 and not modLivery) and GetLiveryName(vehicle, j) or GetModTextLabel(vehicle, index, j)
|
|
local j2 = j + 2
|
|
entries[j2] = label and GetLabelText(label) or (j == -1 and 'Stock') or j2
|
|
end
|
|
|
|
local modType = vehicleModType[index]
|
|
|
|
return {
|
|
label = modType,
|
|
description = ('Change the current %s'):format(modType),
|
|
values = entries,
|
|
modIndex = index,
|
|
defaultIndex = GetVehicleMod(vehicle, index) + 1
|
|
}
|
|
end
|
|
|
|
local SetVehicleModKit = SetVehicleModKit
|
|
local GetNumVehicleMods = GetNumVehicleMods
|
|
local GetVehicleLiveryCount = GetVehicleLiveryCount
|
|
|
|
local function setupVehicleMods(vehicle)
|
|
if vehicle == lastVehicle then return menu end
|
|
SetVehicleModKit(vehicle, 0)
|
|
|
|
modLivery = true
|
|
local options = {}
|
|
local count = 0
|
|
|
|
for i = 0, 49 do
|
|
local modCount = GetNumVehicleMods(vehicle, i)
|
|
|
|
if i == 48 and modCount == 0 then
|
|
modCount = GetVehicleLiveryCount(vehicle)
|
|
if modCount ~= 0 then
|
|
modLivery = false
|
|
end
|
|
end
|
|
|
|
if modCount > 0 then
|
|
count += 1
|
|
options[count] = createModEntry(i, vehicle, modCount)
|
|
end
|
|
end
|
|
|
|
menu.options = options
|
|
lib.registerMenu(menu)
|
|
lastVehicle = vehicle
|
|
|
|
return true
|
|
end
|
|
|
|
RegisterCommand('carmenu', function()
|
|
-- Admin restriction check
|
|
if not hasAdminPermission() then
|
|
lib.notify({
|
|
title = 'Permission Denied',
|
|
description = 'This command is restricted to administrators',
|
|
type = 'error'
|
|
})
|
|
return
|
|
end
|
|
|
|
if not cache.vehicle then
|
|
lib.notify({
|
|
title = 'Error',
|
|
description = 'You must be in a vehicle to use this command',
|
|
type = 'error'
|
|
})
|
|
return
|
|
end
|
|
|
|
if setupVehicleMods(cache.vehicle) then
|
|
lib.showMenu('ox_commands:carMenu')
|
|
end
|
|
end, false)
|
|
|