diff --git a/client/main.lua b/client/main.lua index 8f88e52..5a4c32c 100644 --- a/client/main.lua +++ b/client/main.lua @@ -1,9 +1,9 @@ local config = require 'config.client' local sharedConfig = require 'config.shared' +local VEHICLES = exports.qbx_core:GetVehiclesByName() local testDriveVeh = 0 local inTestDrive = false local insideShop = nil -local coreVehicles = exports.qbx_core:GetVehiclesByName() ---@class VehicleFinanceClient ---@field vehiclePlate string @@ -75,7 +75,7 @@ local function showFinancedVehiclesMenu() if vehicles == nil or #vehicles == 0 then return exports.qbx_core:Notify(Lang:t('error.nofinanced'), 'error') end for _, v in pairs(vehicles) do if v.balance ~= 0 then - local name = coreVehicles[v.vehicle].name + local name = VEHICLES[v.vehicle].name local plate = v.plate:upper() ownedVehicles[#ownedVehicles + 1] = { title = name, @@ -126,21 +126,21 @@ end) ---@param closestVehicle integer ---@return string local function getVehName(closestVehicle) - return coreVehicles[config.shops[insideShop].showroomVehicles[closestVehicle].chosenVehicle].name + return VEHICLES[config.shops[insideShop].showroomVehicles[closestVehicle].chosenVehicle].name end --- Fetches the price of a vehicle from QB Shared then it formats it into a text ---@param closestVehicle integer ---@return string local function getVehPrice(closestVehicle) - return CommaValue(coreVehicles[config.shops[insideShop].showroomVehicles[closestVehicle].chosenVehicle].price) + return CommaValue(VEHICLES[config.shops[insideShop].showroomVehicles[closestVehicle].chosenVehicle].price) end --- Fetches the brand of a vehicle from QB Shared ---@param closestVehicle integer ---@return string local function getVehBrand(closestVehicle) - return coreVehicles[config.shops[insideShop].showroomVehicles[closestVehicle].chosenVehicle].brand + return VEHICLES[config.shops[insideShop].showroomVehicles[closestVehicle].chosenVehicle].brand end --- based on which vehicleshop player is in @@ -164,7 +164,7 @@ end ---@param closestShowroomVehicle integer vehicleName ---@param buyVehicle string model local function openFinance(closestShowroomVehicle, buyVehicle) - local dialog = lib.inputDialog(coreVehicles[buyVehicle].name:upper()..' '..buyVehicle:upper()..' - $'..getVehPrice(closestShowroomVehicle), { + local dialog = lib.inputDialog(VEHICLES[buyVehicle].name:upper()..' '..buyVehicle:upper()..' - $'..getVehPrice(closestShowroomVehicle), { { type = 'number', label = Lang:t('menus.financesubmit_downpayment')..sharedConfig.finance.minimumDown..'%', @@ -191,8 +191,8 @@ local function openVehCatsMenu(category) local vehMenu = {} local closestVehicle = getClosestShowroomVehicle() - for k, v in pairs(coreVehicles) do - if coreVehicles[k].category == category then + for k, v in pairs(VEHICLES) do + if VEHICLES[k].category == category then if type(config.vehicles[k].shop) == 'table' then for _, shop in pairs(config.vehicles[k].shop) do if shop == insideShop then @@ -285,15 +285,14 @@ local function openCustomFinance(closestVehicle) if not downPayment or not paymentAmount or not playerid then return end exports.scully_emotemenu:cancelEmote() - TriggerServerEvent('qbx_vehicleshop:server:sellfinanceVehicle', downPayment, paymentAmount, - vehicle, playerid) + TriggerServerEvent('qbx_vehicleshop:server:sellfinanceVehicle', downPayment, paymentAmount, vehicle, playerid) end ---prompt client for playerId of another player ---@param vehModel string ---@return number? playerId local function getPlayerIdInput(vehModel) - local dialog = lib.inputDialog(coreVehicles[vehModel].name, { + local dialog = lib.inputDialog(VEHICLES[vehModel].name, { { type = 'number', label = Lang:t('menus.submit_ID'), @@ -428,26 +427,6 @@ local function startTestDriveTimer(time, shop) end) end ---- Zoning function. Happens upon entering any of the sell zone. -local function enteringVehicleSellZone() - local job = config.shops[insideShop].job - if not QBX.PlayerData or not QBX.PlayerData.job or (QBX.PlayerData.job.name ~= job and job ~= 'none') then - return - end - - lib.showTextUI(Lang:t('menus.keypress_vehicleViewMenu')) -end - ---- Zoning function. Happens once the player is inside of the zone -local function insideVehicleSellZone() - local job = config.shops[insideShop].job - if not IsControlJustPressed(0, 38) or not QBX.PlayerData or not QBX.PlayerData.job or (QBX.PlayerData.job.name ~= job and job ~= 'none') then - return - end - - openVehicleSellMenu() -end - ---@param shopName string ---@param entity number vehicle local function createVehicleTarget(shopName, entity) @@ -473,26 +452,23 @@ local function createVehicleZone(shopName, coords) coords = coords.xyz, size = shop.zone.size, rotation = coords.w, - debug = shop.zone.debug, - onEnter = enteringVehicleSellZone, - inside = insideVehicleSellZone, + debug = config.debugPoly, + onEnter = function() + local job = config.shops[insideShop].job + if not QBX.PlayerData or not QBX.PlayerData.job or (QBX.PlayerData.job.name ~= job and job ~= 'none') then return end + lib.showTextUI(Lang:t('menus.keypress_vehicleViewMenu')) + end, + inside = function() + local job = config.shops[insideShop].job + if not IsControlJustPressed(0, 38) or not QBX.PlayerData or not QBX.PlayerData.job or (QBX.PlayerData.job.name ~= job and job ~= 'none') then return end + openVehicleSellMenu() + end, onExit = function() lib.hideTextUI() end }) end ---- Entering a vehicleshop zone ----@param self table -local function enterShop(self) - insideShop = self.name -end - ---- Exiting a vehicleshop zone -local function exitShop() - insideShop = nil -end - --- Creates a shop ---@param shopShape vector3[] ---@param name string @@ -501,24 +477,16 @@ local function createShop(shopShape, name) name = name, points = shopShape, thickness = 5, - debug = config.shops[name].zone.debug, - onEnter = enterShop, - onExit = exitShop + debug = config.debugPoly, + onEnter = function(self) + insideShop = self.name + end, + onExit = function() + insideShop = nil + end, }) end ---- Entering Financing zone -local function enteringFinancingZone() - lib.showTextUI(Lang:t('menus.keypress_showFinanceMenu')) -end - ---- Runs once a player inside the Financing zone. It does a key press check to open the Financing menu -local function insideFinancingZone() - if IsControlJustPressed(0, 38) then - lib.showContext('fin_header_menu') - end -end - ---@param model string ---@param coords vector4 ---@return number vehicleEntity @@ -550,9 +518,15 @@ local function init() coords = config.finance.zone, size = vec3(2, 2, 4), rotation = 0, - debug = false, - onEnter = enteringFinancingZone, - inside = insideFinancingZone, + debug = config.debugPoly, + onEnter = function() + lib.showTextUI(Lang:t('menus.keypress_showFinanceMenu')) + end, + inside = function() + if IsControlJustPressed(0, 38) then + lib.showContext('fin_header_menu') + end + end, onExit = function() lib.hideTextUI() end @@ -646,15 +620,15 @@ end) --- Thread to create blips CreateThread(function() for _, v in pairs(config.shops) do - if v.showBlip then - local dealer = AddBlipForCoord(v.location.x, v.location.y, v.location.z) - SetBlipSprite(dealer, v.blipSprite) + if v.blip.show then + local dealer = AddBlipForCoord(v.blip.coords.x, v.blip.coords.y, v.blip.coords.z) + SetBlipSprite(dealer, v.blip.sprite) SetBlipDisplay(dealer, 4) SetBlipScale(dealer, 0.70) SetBlipAsShortRange(dealer, true) - SetBlipColour(dealer, v.blipColor) + SetBlipColour(dealer, v.blip.color) BeginTextCommandSetBlipName('STRING') - AddTextComponentSubstringPlayerName(v.shopLabel) + AddTextComponentSubstringPlayerName(v.blip.label) EndTextCommandSetBlipName(dealer) end end diff --git a/config/client.lua b/config/client.lua index 5814b3f..8c5e47b 100644 --- a/config/client.lua +++ b/config/client.lua @@ -1,35 +1,40 @@ return { useTarget = false, + debugPoly = false, enableFreeUseBuy = true, -- Allows players to buy from NPC shops + finance = { enable = true, -- Enables the financing system. Turning this off does not affect already financed vehicles commissionRate = 0.05, -- Percent that goes to sales person from a finance sale 5% - zone = vector3(-29.53, -1103.67, 26.42), -- Where the finance menu is located + zone = vec3(-29.53, -1103.67, 26.42), -- Where the finance menu is located }, + shops = { pdm = { type = 'free-use', -- no player interaction is required to purchase a car + job = 'none', -- Name of job or none zone = { - shape = {--polygon that surrounds the shop - vector3(-56.727394104004, -1086.2325439453, 26.0), - vector3(-60.612808227539, -1096.7795410156, 26.0), - vector3(-58.26834487915, -1100.572265625, 26.0), - vector3(-35.927803039551, -1109.0034179688, 26.0), - vector3(-34.427627563477, -1108.5111083984, 26.0), - vector3(-32.02657699585, -1101.5877685547, 26.0), - vector3(-33.342102050781, -1101.0377197266, 26.0), - vector3(-31.292987823486, -1095.3717041016, 26.0) + shape = { --polygon that surrounds the shop + vec3(-56.727394104004, -1086.2325439453, 26.0), + vec3(-60.612808227539, -1096.7795410156, 26.0), + vec3(-58.26834487915, -1100.572265625, 26.0), + vec3(-35.927803039551, -1109.0034179688, 26.0), + vec3(-34.427627563477, -1108.5111083984, 26.0), + vec3(-32.02657699585, -1101.5877685547, 26.0), + vec3(-33.342102050781, -1101.0377197266, 26.0), + vec3(-31.292987823486, -1095.3717041016, 26.0) }, - size = vector3(3, 3, 4), -- size of the vehicles zones (x, y, z) + size = vec3(3, 3, 4), -- size of the vehicles zones (x, y, z) targetDistance = 1, -- Defines targeting distance. Only works if targeting is enabled - debug = false }, - job = 'none', -- Name of job or none - shopLabel = 'Premium Deluxe Motorsport', -- Blip name - showBlip = true, -- true or false - blipSprite = 326, -- Blip sprite - blipColor = 3, -- Blip color - categories = {-- Categories available to browse + blip = { + label = 'Premium Deluxe Motorsport', + coords = vec3(-45.67, -1098.34, 26.42), + show = true, + sprite = 326, + color = 3, + }, + categories = { -- Categories available to browse sportsclassics = 'Sports Classics', sedans = 'Sedans', coupes = 'Coupes', @@ -42,222 +47,228 @@ return { cycles = 'Bicycles' }, testDriveTimeLimit = 0.5, -- Time in minutes until the vehicle gets deleted - testDriveReturnLocation = vector4(-24.84, -1086.55, 26.57, 70.5), -- Return position once test drive is finished - location = vector3(-45.67, -1098.34, 26.42), -- Blip location - returnLocation = vector3(-44.74, -1082.58, 26.68), -- location to return vehicle, only enables if the vehicleshop has a job owned - vehicleSpawn = vector4(-31.69, -1090.78, 26.42, 328.79), -- Spawn location when vehicle is bought - testDriveSpawn = vector4(-7.84, -1081.35, 26.67, 121.83), -- Spawn location for test drive + testDriveReturnLocation = vec4(-24.84, -1086.55, 26.57, 70.5), -- Return position once test drive is finished + returnLocation = vec3(-44.74, -1082.58, 26.68), -- location to return vehicle, only enables if the vehicleshop has a job owned + vehicleSpawn = vec4(-31.69, -1090.78, 26.42, 328.79), -- Spawn location when vehicle is bought + testDriveSpawn = vec4(-7.84, -1081.35, 26.67, 121.83), -- Spawn location for test drive showroomVehicles = { [1] = { - coords = vector4(-45.65, -1093.66, 25.44, 69.5), -- where the vehicle will spawn on display + coords = vec4(-45.65, -1093.66, 25.44, 69.5), -- where the vehicle will spawn on display defaultVehicle = 'adder', -- Default display vehicle chosenVehicle = 'adder', -- Same as default but is dynamically changed when swapping vehicles }, [2] = { - coords = vector4(-48.27, -1101.86, 25.44, 294.5), + coords = vec4(-48.27, -1101.86, 25.44, 294.5), defaultVehicle = 'schafter2', chosenVehicle = 'schafter2' }, [3] = { - coords = vector4(-39.6, -1096.01, 25.44, 66.5), + coords = vec4(-39.6, -1096.01, 25.44, 66.5), defaultVehicle = 'comet2', chosenVehicle = 'comet2' }, [4] = { - coords = vector4(-51.21, -1096.77, 25.44, 254.5), + coords = vec4(-51.21, -1096.77, 25.44, 254.5), defaultVehicle = 'vigero', chosenVehicle = 'vigero' }, [5] = { - coords = vector4(-40.18, -1104.13, 25.44, 338.5), + coords = vec4(-40.18, -1104.13, 25.44, 338.5), defaultVehicle = 't20', chosenVehicle = 't20' }, [6] = { - coords = vector4(-43.31, -1099.02, 25.44, 52.5), + coords = vec4(-43.31, -1099.02, 25.44, 52.5), defaultVehicle = 'bati', chosenVehicle = 'bati' }, [7] = { - coords = vector4(-50.66, -1093.05, 25.44, 222.5), + coords = vec4(-50.66, -1093.05, 25.44, 222.5), defaultVehicle = 'bati', chosenVehicle = 'bati' }, [8] = { - coords = vector4(-44.28, -1102.47, 25.44, 298.5), + coords = vec4(-44.28, -1102.47, 25.44, 298.5), defaultVehicle = 'bati', chosenVehicle = 'bati' } }, }, + luxury = { type = 'managed', -- meaning a real player has to sell the car + job = 'cardealer', -- Name of job or none zone = { shape = { - vector3(-1260.6973876953, -349.21334838867, 36.91), - vector3(-1268.6248779297, -352.87365722656, 36.91), - vector3(-1274.1533203125, -358.29794311523, 36.91), - vector3(-1273.8425292969, -362.73715209961, 36.91), - vector3(-1270.5701904297, -368.6716003418, 36.91), - vector3(-1266.0561523438, -375.14080810547, 36.91), - vector3(-1244.3684082031, -362.70278930664, 36.91), - vector3(-1249.8704833984, -352.03326416016, 36.91), - vector3(-1252.9503173828, -345.85726928711, 36.91) + vec3(-1260.6973876953, -349.21334838867, 36.91), + vec3(-1268.6248779297, -352.87365722656, 36.91), + vec3(-1274.1533203125, -358.29794311523, 36.91), + vec3(-1273.8425292969, -362.73715209961, 36.91), + vec3(-1270.5701904297, -368.6716003418, 36.91), + vec3(-1266.0561523438, -375.14080810547, 36.91), + vec3(-1244.3684082031, -362.70278930664, 36.91), + vec3(-1249.8704833984, -352.03326416016, 36.91), + vec3(-1252.9503173828, -345.85726928711, 36.91) }, - size = vector3(3, 3, 4), -- size of the vehicles zones (x, y, z) + size = vec3(3, 3, 4), -- size of the vehicles zones (x, y, z) targetDistance = 1, -- Defines targeting distance. Only works if targeting is enabled - debug = false }, - job = 'cardealer', -- Name of job or none - shopLabel = 'Luxury Vehicle Shop', - showBlip = true, -- true or false - blipSprite = 326, -- Blip sprite - blipColor = 3, -- Blip color + blip = { + label = 'Luxury Vehicle Shop', + coords = vec3(-1255.6, -361.16, 36.91), + show = true, + sprite = 326, + color = 3, + }, categories = { super = 'Super', sports = 'Sports' }, testDriveTimeLimit = 0.5, - testDriveReturnLocation = vector4(-1261.56, -347.54, 36.83, 216.22), -- Return position once test drive is finished. Set to front of the shop by default - location = vector3(-1255.6, -361.16, 36.91), - returnLocation = vector3(-1231.46, -349.86, 37.33), - vehicleSpawn = vector4(-1231.46, -349.86, 37.33, 26.61), - testDriveSpawn = vector4(-1232.81, -347.99, 37.33, 23.28), -- Spawn location for test drive + testDriveReturnLocation = vec4(-1261.56, -347.54, 36.83, 216.22), -- Return position once test drive is finished. Set to front of the shop by default + returnLocation = vec3(-1231.46, -349.86, 37.33), + vehicleSpawn = vec4(-1231.46, -349.86, 37.33, 26.61), + testDriveSpawn = vec4(-1232.81, -347.99, 37.33, 23.28), -- Spawn location for test drive showroomVehicles = { [1] = { - coords = vector4(-1265.31, -354.44, 35.91, 205.08), + coords = vec4(-1265.31, -354.44, 35.91, 205.08), defaultVehicle = 'italirsx', chosenVehicle = 'italirsx' }, [2] = { - coords = vector4(-1270.06, -358.55, 35.91, 247.08), + coords = vec4(-1270.06, -358.55, 35.91, 247.08), defaultVehicle = 'italigtb', chosenVehicle = 'italigtb' }, [3] = { - coords = vector4(-1269.21, -365.03, 35.91, 297.12), + coords = vec4(-1269.21, -365.03, 35.91, 297.12), defaultVehicle = 'nero', chosenVehicle = 'nero' }, [4] = { - coords = vector4(-1252.07, -364.2, 35.91, 56.44), + coords = vec4(-1252.07, -364.2, 35.91, 56.44), defaultVehicle = 'bati', chosenVehicle = 'bati' }, [5] = { - coords = vector4(-1255.49, -365.91, 35.91, 55.63), + coords = vec4(-1255.49, -365.91, 35.91, 55.63), defaultVehicle = 'carbonrs', chosenVehicle = 'carbonrs' }, [6] = { - coords = vector4(-1249.21, -362.97, 35.91, 53.24), + coords = vec4(-1249.21, -362.97, 35.91, 53.24), defaultVehicle = 'hexer', chosenVehicle = 'hexer' }, } - }, -- Add your next table under this comma + }, + boats = { type = 'free-use', -- no player interaction is required to purchase a vehicle + job = 'none', -- Name of job or none zone = { shape = {--polygon that surrounds the shop - vector3(-729.39, -1315.84, 0), - vector3(-766.81, -1360.11, 0), - vector3(-754.21, -1371.49, 0), - vector3(-716.94, -1326.88, 0) + vec3(-729.39, -1315.84, 0), + vec3(-766.81, -1360.11, 0), + vec3(-754.21, -1371.49, 0), + vec3(-716.94, -1326.88, 0) }, - size = vector3(8, 8, 6), -- size of the vehicles zones (x, y, z) + size = vec3(8, 8, 6), -- size of the vehicles zones (x, y, z) targetDistance = 5, -- Defines targeting distance. Only works if targeting is enabled - debug = false }, - job = 'none', -- Name of job or none - shopLabel = 'Marina Shop', -- Blip name - showBlip = true, -- true or false - blipSprite = 410, -- Blip sprite - blipColor = 3, -- Blip color + blip = { + label = 'Marina Shop', + coords = vec3(-738.25, -1334.38, 1.6), + show = true, + sprite = 410, + color = 3, + }, categories = {-- Categories available to browse boats = 'Boats' }, testDriveTimeLimit = 1.5, -- Time in minutes until the vehicle gets deleted - testDriveReturnLocation = vector4(-733.19, -1313.45, 5.0, 226.37), -- Return position once test drive is finished. Set to front of the shop by default - location = vector3(-738.25, -1334.38, 1.6), -- Blip location - returnLocation = vector3(-714.34, -1343.31, 0.0), -- location to return vehicle, only enables if the vehicleshop has a job owned - vehicleSpawn = vector4(-727.87, -1353.1, -0.17, 137.09), -- Spawn location when vehicle is bought - testDriveSpawn = vector4(-722.23, -1351.98, 0.14, 135.33), -- Spawn location for test drive + testDriveReturnLocation = vec4(-733.19, -1313.45, 5.0, 226.37), -- Return position once test drive is finished. Set to front of the shop by default + returnLocation = vec3(-714.34, -1343.31, 0.0), -- location to return vehicle, only enables if the vehicleshop has a job owned + vehicleSpawn = vec4(-727.87, -1353.1, -0.17, 137.09), -- Spawn location when vehicle is bought + testDriveSpawn = vec4(-722.23, -1351.98, 0.14, 135.33), -- Spawn location for test drive showroomVehicles = { [1] = { - coords = vector4(-727.05, -1326.59, -0.50, 229.5), -- where the vehicle will spawn on display + coords = vec4(-727.05, -1326.59, -0.50, 229.5), -- where the vehicle will spawn on display defaultVehicle = 'seashark', -- Default display vehicle chosenVehicle = 'seashark' -- Same as default but is dynamically changed when swapping vehicles }, [2] = { - coords = vector4(-732.84, -1333.5, -0.50, 229.5), + coords = vec4(-732.84, -1333.5, -0.50, 229.5), defaultVehicle = 'dinghy', chosenVehicle = 'dinghy' }, [3] = { - coords = vector4(-737.84, -1340.83, -0.50, 229.5), + coords = vec4(-737.84, -1340.83, -0.50, 229.5), defaultVehicle = 'speeder', chosenVehicle = 'speeder' }, [4] = { - coords = vector4(-741.53, -1349.7, -0.50, 229.5), + coords = vec4(-741.53, -1349.7, -0.50, 229.5), defaultVehicle = 'marquis', chosenVehicle = 'marquis' }, }, }, + air = { type = 'free-use', -- no player interaction is required to purchase a vehicle + job = 'none', -- Name of job or none zone = { shape = {--polygon that surrounds the shop - vector3(-1607.58, -3141.7, 12.99), - vector3(-1672.54, -3103.87, 12.99), - vector3(-1703.49, -3158.02, 12.99), - vector3(-1646.03, -3190.84, 12.99) + vec3(-1607.58, -3141.7, 12.99), + vec3(-1672.54, -3103.87, 12.99), + vec3(-1703.49, -3158.02, 12.99), + vec3(-1646.03, -3190.84, 12.99) }, - size = vector3(10, 10, 8), -- size of the vehicles zones (x, y, z) + size = vec3(10, 10, 8), -- size of the vehicles zones (x, y, z) targetDistance = 5, -- Defines targeting distance. Only works if targeting is enabled - debug = false }, - job = 'none', -- Name of job or none - shopLabel = 'Air Shop', -- Blip name - showBlip = true, -- true or false - blipSprite = 251, -- Blip sprite - blipColor = 3, -- Blip color + blip = { + label = 'Air Shop', + coords = vec3(-1652.76, -3143.4, 13.99), + show = true, + sprite = 251, + color = 3, + }, categories = {-- Categories available to browse helicopters = 'Helicopters', planes = 'Planes' }, testDriveTimeLimit = 1.5, -- Time in minutes until the vehicle gets deleted - testDriveReturnLocation = vector4(-1639.39, -3120.24, 13.94, 148.31), -- Return position once test drive is finished. Set to front of the shop by default - location = vector3(-1652.76, -3143.4, 13.99), -- Blip location - returnLocation = vector3(-1628.44, -3104.7, 13.94), -- location to return vehicle, only enables if the vehicleshop has a job owned - vehicleSpawn = vector4(-1617.49, -3086.17, 13.94, 329.2), -- Spawn location when vehicle is bought - testDriveSpawn = vector4(-1625.19, -3103.47, 13.94, 330.28), -- Spawn location for test drive + testDriveReturnLocation = vec4(-1639.39, -3120.24, 13.94, 148.31), -- Return position once test drive is finished. Set to front of the shop by default + returnLocation = vec3(-1628.44, -3104.7, 13.94), -- location to return vehicle, only enables if the vehicleshop has a job owned + vehicleSpawn = vec4(-1617.49, -3086.17, 13.94, 329.2), -- Spawn location when vehicle is bought + testDriveSpawn = vec4(-1625.19, -3103.47, 13.94, 330.28), -- Spawn location for test drive showroomVehicles = { [1] = { - coords = vector4(-1651.36, -3162.66, 12.99, 346.89), -- where the vehicle will spawn on display + coords = vec4(-1651.36, -3162.66, 12.99, 346.89), -- where the vehicle will spawn on display defaultVehicle = 'volatus', -- Default display vehicle chosenVehicle = 'volatus' -- Same as default but is dynamically changed when swapping vehicles }, [2] = { - coords = vector4(-1668.53, -3152.56, 12.99, 303.22), + coords = vec4(-1668.53, -3152.56, 12.99, 303.22), defaultVehicle = 'luxor2', chosenVehicle = 'luxor2' }, [3] = { - coords = vector4(-1632.02, -3144.48, 12.99, 31.08), + coords = vec4(-1632.02, -3144.48, 12.99, 31.08), defaultVehicle = 'nimbus', chosenVehicle = 'nimbus' }, [4] = { - coords = vector4(-1663.74, -3126.32, 12.99, 275.03), + coords = vec4(-1663.74, -3126.32, 12.99, 275.03), defaultVehicle = 'frogger', chosenVehicle = 'frogger' }, }, }, }, + vehicles = { asbo = { shop = 'pdm', diff --git a/fxmanifest.lua b/fxmanifest.lua index 1778895..66d3858 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -1,7 +1,7 @@ fx_version 'cerulean' game 'gta5' -description 'Vehicleshop for Qbox' +description 'qbx_vehicleshop' repository 'https://github.com/Qbox-project/qbx_vehicleshop' version '1.0.0'