From 5a9cdc19f6feb5fc22c04c0550dc2411a7904909 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:10:48 +0100 Subject: [PATCH 01/18] feat: extract financing to it's own table --- vehshop.sql | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/vehshop.sql b/vehshop.sql index 7e8f6eb..110ec69 100644 --- a/vehshop.sql +++ b/vehshop.sql @@ -16,23 +16,20 @@ CREATE TABLE IF NOT EXISTS `player_vehicles` ( `drivingdistance` int(50) DEFAULT NULL, `status` text DEFAULT NULL, PRIMARY KEY (`id`), - KEY `plate` (`plate`), - KEY `citizenid` (`citizenid`), - KEY `license` (`license`) -) ENGINE=InnoDB AUTO_INCREMENT=1; + UNIQUE KEY `plate` (`plate`), + FOREIGN KEY (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY (`license`) REFERENCES `players` (`license`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -ALTER TABLE `player_vehicles` -ADD UNIQUE INDEX UK_playervehicles_plate (plate); - -ALTER TABLE `player_vehicles` -ADD CONSTRAINT FK_playervehicles_players FOREIGN KEY (citizenid) -REFERENCES `players` (citizenid) ON DELETE CASCADE ON UPDATE CASCADE; - -ALTER TABLE `player_vehicles` -ADD COLUMN `balance` int(11) NOT NULL DEFAULT 0; -ALTER TABLE `player_vehicles` -ADD COLUMN `paymentamount` int(11) NOT NULL DEFAULT 0; -ALTER TABLE `player_vehicles` -ADD COLUMN `paymentsleft` int(11) NOT NULL DEFAULT 0; -ALTER TABLE `player_vehicles` -ADD COLUMN `financetime` int(11) NOT NULL DEFAULT 0; +CREATE TABLE IF NOT EXISTS `vehicle_financing` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `citizenid` varchar(50) DEFAULT NULL, + `plate` varchar(15) NOT NULL, + `balance` int(11) NOT NULL DEFAULT 0, + `paymentamount` int(11) NOT NULL DEFAULT 0, + `paymentsleft` int(11) NOT NULL DEFAULT 0, + `financetime` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file From 2bfa4785e94795dfb44883cf2bf3766c596b5fcc Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:11:24 +0100 Subject: [PATCH 02/18] refactor: update storage functions to use the vehicle_financing table --- server/storage.lua | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/server/storage.lua b/server/storage.lua index 38b2785..cbb1d86 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -30,15 +30,15 @@ end ---@param request InsertVehicleEntityWithFinanceRequest function InsertVehicleEntityWithFinance(request) - MySQL.insert('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state, balance, paymentamount, paymentsleft, financetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', { - request.insertVehicleEntityRequest.license, + InsertVehicleEntity({ + license = request.insertVehicleEntityRequest.license, + citizenId = request.insertVehicleEntityRequest.citizenId, + model = request.insertVehicleEntityRequest.model, + plate = request.insertVehicleEntityRequest.plate + }) + MySQL.insert('INSERT INTO vehicle_financing (citizenid, plate, balance, paymentamount, paymentsleft, financetime) VALUES (?, ?, ?, ?, ?, ?)', { request.insertVehicleEntityRequest.citizenId, - request.insertVehicleEntityRequest.model, - joaat(request.insertVehicleEntityRequest.model), - '{}', request.insertVehicleEntityRequest.plate, - 'pillboxgarage', - 0, request.vehicleFinance.balance, request.vehicleFinance.payment, request.vehicleFinance.paymentsLeft, @@ -76,13 +76,13 @@ end ---@param time number ---@param plate string function UpdateVehicleEntityFinanceTime(time, plate) - MySQL.update('UPDATE player_vehicles SET financetime = ? WHERE plate = ?', {time, plate}) + MySQL.update('UPDATE vehicle_financing SET financetime = ? WHERE plate = ?', {time, plate}) end ---@param vehicleFinance VehicleFinanceServer ---@param plate string function UpdateVehicleFinance(vehicleFinance, plate) - MySQL.update('UPDATE player_vehicles SET balance = ?, paymentamount = ?, paymentsleft = ?, financetime = ? WHERE plate = ?', { + MySQL.update('UPDATE vehicle_financing SET balance = ?, paymentamount = ?, paymentsleft = ?, financetime = ? WHERE plate = ?', { vehicleFinance.balance, vehicleFinance.payment, vehicleFinance.paymentsLeft, @@ -96,15 +96,22 @@ end ---@param plate string function UpdateVehicleEntityOwner(citizenId, license, plate) MySQL.update('UPDATE player_vehicles SET citizenid = ?, license = ? WHERE plate = ?', {citizenId, license, plate}) + MySQL.update('UPDATE vehicle_financing SET citizenid = ? WHERE plate = ?', {citizenId, plate}) end ---@param citizenId string ---@return VehicleEntity[] function FetchFinancedVehicleEntitiesByCitizenId(citizenId) - return MySQL.query.await('SELECT * FROM player_vehicles WHERE citizenid = ? AND balance > 0 AND financetime < 1', {citizenId}) + return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid = ? AND balance > 0 AND financetime < 1', {citizenId}) +end + +---@param license string +---@return VehicleEntity[] +function FetchFinancedVehicleEntitiesByLicense(license) + return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid = (SELECT citizenid FROM players WHERE license = ?) AND balance > 0 AND financetime < 1', {citizenId}) end ---@param plate string function DeleteVehicleEntity(plate) MySQL.query('DELETE FROM player_vehicles WHERE plate = ?', {plate}) -end +end \ No newline at end of file From 3bb2ed3c27a8d9add4f1a8be9bdf8365e5127527 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:11:53 +0100 Subject: [PATCH 03/18] refactor: use the finance function --- server/main.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/main.lua b/server/main.lua index 287c887..660d3b8 100644 --- a/server/main.lua +++ b/server/main.lua @@ -16,8 +16,8 @@ RegisterNetEvent('qbx_vehicleshop:server:removePlayer', function(citizenid) if not financeTimer[citizenid] then return end local playTime = financeTimer[citizenid] - local financetime = FetchVehicleEntitiesByCitizenId(citizenid) - for _, v in pairs(financetime) do + local vehicles = FetchFinancedVehicleEntitiesByCitizenId(citizenid) + for _, v in pairs(vehicles) do if v.balance >= 1 then local newTime = math.floor(v.financetime - (((os.time() - playTime) / 1000) / 60)) if newTime < 0 then newTime = 0 end From fa65735d7b045dc1118775c504008fc551c5e90c Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:26:39 +0100 Subject: [PATCH 04/18] feat: migration file --- migrate.sql | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 migrate.sql diff --git a/migrate.sql b/migrate.sql new file mode 100644 index 0000000..b555c75 --- /dev/null +++ b/migrate.sql @@ -0,0 +1,23 @@ +CREATE TABLE IF NOT EXISTS `vehicle_financing` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `citizenid` varchar(50) DEFAULT NULL, + `plate` varchar(15) NOT NULL, + `balance` int(11) NOT NULL DEFAULT 0, + `paymentamount` int(11) NOT NULL DEFAULT 0, + `paymentsleft` int(11) NOT NULL DEFAULT 0, + `financetime` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (citizenid) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +INSERT INTO vehicle_financing (citizenid, plate, balance, paymentamount, paymentsleft, financetime) +SELECT citizenid, plate, balance, paymentamount, paymentsleft, financetime +FROM player_vehicles +WHERE balance > 0 OR paymentamount > 0 OR paymentsleft > 0 OR financetime > 0; + +ALTER TABLE player_vehicles +DROP COLUMN balance, +DROP COLUMN paymentamount, +DROP COLUMN paymentsleft, +DROP COLUMN financetime; \ No newline at end of file From ee5cdecdd40b3ef124a001a3c0e0d52a8690db24 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:33:58 +0100 Subject: [PATCH 05/18] feat: get financed by plate & transfer check --- server/main.lua | 11 +++++++---- server/storage.lua | 6 ++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/server/main.lua b/server/main.lua index 660d3b8..4bb50be 100644 --- a/server/main.lua +++ b/server/main.lua @@ -32,7 +32,7 @@ AddEventHandler('playerDropped', function() local src = source local license = GetPlayerIdentifierByType(src, 'license2') or GetPlayerIdentifierByType(src, 'license') if not license then return end - local vehicles = FetchVehicleEntitiesByLicense(license) + local vehicles = FetchFinancedVehicleEntitiesByLicense(license) if not vehicles then return end for _, v in pairs(vehicles) do local playTime = financeTimer[v.citizenid] @@ -457,8 +457,11 @@ lib.addCommand('transfervehicle', {help = locale('general.command_transfervehicl local player = exports.qbx_core:GetPlayer(src) local target = exports.qbx_core:GetPlayer(buyerId) local row = FetchVehicleEntityByPlate(plate) - if config.finance.preventSelling and row.balance > 0 then - return exports.qbx_core:Notify(src, locale('error.financed'), 'error') + if config.finance.preventSelling then + local financeRow = FetchFinancedVehicleEntityByPlate(plate) + if financeRow.balance > 0 then + return exports.qbx_core:Notify(src, locale('error.financed'), 'error') + end end if row.citizenid ~= player.PlayerData.citizenid then return exports.qbx_core:Notify(src, locale('error.notown'), 'error') @@ -498,4 +501,4 @@ lib.addCommand('transfervehicle', {help = locale('general.command_transfervehicl exports.qbx_core:Notify(src, sellerMessage, 'success') exports.qbx_core:Notify(buyerId, buyerMessage, 'success') end, GetEntityModel(vehicle), sellAmount) -end) +end) \ No newline at end of file diff --git a/server/storage.lua b/server/storage.lua index cbb1d86..4c3b706 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -99,6 +99,12 @@ function UpdateVehicleEntityOwner(citizenId, license, plate) MySQL.update('UPDATE vehicle_financing SET citizenid = ? WHERE plate = ?', {citizenId, plate}) end +---@param citizenId string +---@return VehicleEntity[] +function FetchFinancedVehicleEntityByPlate(plate) + return MySQL.single.await('SELECT * FROM vehicle_financing WHERE plate = ? AND balance > 0 AND financetime < 1', {plate}) +end + ---@param citizenId string ---@return VehicleEntity[] function FetchFinancedVehicleEntitiesByCitizenId(citizenId) From 2d411622952c099394033dc94a2b2e30d4541248 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:35:08 +0100 Subject: [PATCH 06/18] fix: passing the wrong argument --- server/storage.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/storage.lua b/server/storage.lua index 4c3b706..67f70d9 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -114,7 +114,7 @@ end ---@param license string ---@return VehicleEntity[] function FetchFinancedVehicleEntitiesByLicense(license) - return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid = (SELECT citizenid FROM players WHERE license = ?) AND balance > 0 AND financetime < 1', {citizenId}) + return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid = (SELECT citizenid FROM players WHERE license = ?) AND balance > 0 AND financetime < 1', {license}) end ---@param plate string From 9ecddd71fd1e51fb31a8557f2b9934dce3f323b7 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:37:28 +0100 Subject: [PATCH 07/18] feat: remove unused function --- server/storage.lua | 6 ------ 1 file changed, 6 deletions(-) diff --git a/server/storage.lua b/server/storage.lua index 67f70d9..cf7435e 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -54,12 +54,6 @@ function FetchVehicleEntitiesByCitizenId(citizenId) return MySQL.query.await('SELECT * FROM player_vehicles WHERE citizenid = ?', {citizenId}) end ----@param license string ----@return VehicleEntity[] -function FetchVehicleEntitiesByLicense(license) - return MySQL.query.await('SELECT * FROM player_vehicles WHERE license = ?', {license}) -end - ---@param plate string ---@return VehicleEntity function FetchVehicleEntityByPlate(plate) From 0c998404f9d17ed5eda080405519acd6cd08cc05 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Wed, 28 Feb 2024 23:07:35 +0100 Subject: [PATCH 08/18] feat: player_vehicles should be in qbx_vehicles, DEFAULT NULL & id as FK --- vehshop.sql | 37 +++++++------------------------------ 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/vehshop.sql b/vehshop.sql index 110ec69..0b7c76c 100644 --- a/vehshop.sql +++ b/vehshop.sql @@ -1,35 +1,12 @@ -CREATE TABLE IF NOT EXISTS `player_vehicles` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `license` varchar(50) DEFAULT NULL, - `citizenid` varchar(50) DEFAULT NULL, - `vehicle` varchar(50) DEFAULT NULL, - `hash` varchar(50) DEFAULT NULL, - `mods` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, - `plate` varchar(15) NOT NULL, - `fakeplate` varchar(50) DEFAULT NULL, - `garage` varchar(50) DEFAULT 'pillboxgarage', - `fuel` int(11) DEFAULT 100, - `engine` float DEFAULT 1000, - `body` float DEFAULT 1000, - `state` int(11) DEFAULT 1, - `depotprice` int(11) NOT NULL DEFAULT 0, - `drivingdistance` int(50) DEFAULT NULL, - `status` text DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `plate` (`plate`), - FOREIGN KEY (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE, - FOREIGN KEY (`license`) REFERENCES `players` (`license`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - CREATE TABLE IF NOT EXISTS `vehicle_financing` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `citizenid` varchar(50) DEFAULT NULL, + `vehicleId` int(11) NOT NULL, + `citizenid` varchar(50) NOT NULL, `plate` varchar(15) NOT NULL, - `balance` int(11) NOT NULL DEFAULT 0, - `paymentamount` int(11) NOT NULL DEFAULT 0, - `paymentsleft` int(11) NOT NULL DEFAULT 0, - `financetime` int(11) NOT NULL DEFAULT 0, - PRIMARY KEY (`id`), + `balance` int(11) DEFAULT NULL, + `paymentamount` int(11) DEFAULT NULL, + `paymentsleft` int(11) DEFAULT NULL, + `financetime` int(11) DEFAULT NULL, + FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file From 656c6a68ae474645b44f8015edb97b204014e1db Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Fri, 1 Mar 2024 00:28:55 +0100 Subject: [PATCH 09/18] vehicleId as a primary key --- vehshop.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vehshop.sql b/vehshop.sql index 0b7c76c..95f28ca 100644 --- a/vehshop.sql +++ b/vehshop.sql @@ -6,7 +6,8 @@ CREATE TABLE IF NOT EXISTS `vehicle_financing` ( `paymentamount` int(11) DEFAULT NULL, `paymentsleft` int(11) DEFAULT NULL, `financetime` int(11) DEFAULT NULL, + PRIMARY KEY (`vehicleId`), FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; From e8fd980fa337d604707f4e7299f547aaf3d1b526 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Fri, 1 Mar 2024 00:33:58 +0100 Subject: [PATCH 10/18] Update migrate.sql --- migrate.sql | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/migrate.sql b/migrate.sql index b555c75..80bdf9a 100644 --- a/migrate.sql +++ b/migrate.sql @@ -1,14 +1,15 @@ CREATE TABLE IF NOT EXISTS `vehicle_financing` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `citizenid` varchar(50) DEFAULT NULL, + `vehicleId` int(11) NOT NULL, + `citizenid` varchar(50) NOT NULL, `plate` varchar(15) NOT NULL, - `balance` int(11) NOT NULL DEFAULT 0, - `paymentamount` int(11) NOT NULL DEFAULT 0, - `paymentsleft` int(11) NOT NULL DEFAULT 0, - `financetime` int(11) NOT NULL DEFAULT 0, - PRIMARY KEY (`id`), + `balance` int(11) DEFAULT NULL, + `paymentamount` int(11) DEFAULT NULL, + `paymentsleft` int(11) DEFAULT NULL, + `financetime` int(11) DEFAULT NULL, + PRIMARY KEY (`vehicleId`), + FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE, - FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (citizenid) ON DELETE CASCADE ON UPDATE CASCADE + FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO vehicle_financing (citizenid, plate, balance, paymentamount, paymentsleft, financetime) @@ -20,4 +21,4 @@ ALTER TABLE player_vehicles DROP COLUMN balance, DROP COLUMN paymentamount, DROP COLUMN paymentsleft, -DROP COLUMN financetime; \ No newline at end of file +DROP COLUMN financetime; From 201a0fed0bfe4e34265dd6f96cba46b171b798a8 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Fri, 1 Mar 2024 03:04:44 +0100 Subject: [PATCH 11/18] fix: a license can have multiple citizenid --- server/storage.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/storage.lua b/server/storage.lua index cf7435e..1403a91 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -108,10 +108,10 @@ end ---@param license string ---@return VehicleEntity[] function FetchFinancedVehicleEntitiesByLicense(license) - return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid = (SELECT citizenid FROM players WHERE license = ?) AND balance > 0 AND financetime < 1', {license}) + return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid IN (SELECT citizenid FROM players WHERE license = ?) AND balance > 0 AND financetime < 1', {license}) end ---@param plate string function DeleteVehicleEntity(plate) MySQL.query('DELETE FROM player_vehicles WHERE plate = ?', {plate}) -end \ No newline at end of file +end From e915a95d0f27bfd8c6b0c5f5529ee48ae7959014 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Fri, 1 Mar 2024 21:36:26 +0100 Subject: [PATCH 12/18] fix: finance input & finance menu --- client/main.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/main.lua b/client/main.lua index 54a1ba3..2a7916f 100644 --- a/client/main.lua +++ b/client/main.lua @@ -87,7 +87,7 @@ local function showFinancedVehiclesMenu() if vehicles == nil or #vehicles == 0 then return exports.qbx_core:Notify(locale('error.nofinanced'), 'error') end for _, v in pairs(vehicles) do - if v.balance ~= 0 then + if v.balance and v.balance > 0 then local name = VEHICLES[v.vehicle].name local plate = v.plate:upper() ownedVehicles[#ownedVehicles + 1] = { @@ -152,14 +152,18 @@ end ---@param targetShowroomVehicle integer vehicleName ---@param buyVehicle string model local function openFinance(targetShowroomVehicle, buyVehicle) - local dialog = lib.inputDialog(VEHICLES[buyVehicle].name:upper()..' '..buyVehicle:upper()..' - $'..getVehPrice(targetShowroomVehicle), { + local dialog = lib.inputDialog(VEHICLES[buyVehicle].brand:upper()..' '..VEHICLES[buyVehicle].name:upper()..' - $'..getVehPrice(targetShowroomVehicle), { { type = 'number', label = locale('menus.financesubmit_downpayment')..sharedConfig.finance.minimumDown..'%', + min = VEHICLES[buyVehicle].price * sharedConfig.finance.minimumDown / 100, + max = VEHICLES[buyVehicle].price }, { type = 'number', label = locale('menus.financesubmit_totalpayment')..sharedConfig.finance.maximumPayments, + min = 2, + max = sharedConfig.finance.maximumPayments } }) From 4050726959b010735ea51077cd83a9414bc728d0 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Fri, 1 Mar 2024 21:36:43 +0100 Subject: [PATCH 13/18] Remove citizenId & plate from vehicle_financing --- migrate.sql | 10 +++------ server/main.lua | 21 +++++++++++------ server/storage.lua | 56 +++++++++++++++++++++++++--------------------- vehshop.sql | 6 +---- 4 files changed, 49 insertions(+), 44 deletions(-) diff --git a/migrate.sql b/migrate.sql index 80bdf9a..c39fb58 100644 --- a/migrate.sql +++ b/migrate.sql @@ -1,19 +1,15 @@ CREATE TABLE IF NOT EXISTS `vehicle_financing` ( `vehicleId` int(11) NOT NULL, - `citizenid` varchar(50) NOT NULL, - `plate` varchar(15) NOT NULL, `balance` int(11) DEFAULT NULL, `paymentamount` int(11) DEFAULT NULL, `paymentsleft` int(11) DEFAULT NULL, `financetime` int(11) DEFAULT NULL, PRIMARY KEY (`vehicleId`), FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, - FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE, - FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -INSERT INTO vehicle_financing (citizenid, plate, balance, paymentamount, paymentsleft, financetime) -SELECT citizenid, plate, balance, paymentamount, paymentsleft, financetime +INSERT INTO vehicle_financing (vehicleId, balance, paymentamount, paymentsleft, financetime) +SELECT id, balance, paymentamount, paymentsleft, financetime FROM player_vehicles WHERE balance > 0 OR paymentamount > 0 OR paymentsleft > 0 OR financetime > 0; @@ -21,4 +17,4 @@ ALTER TABLE player_vehicles DROP COLUMN balance, DROP COLUMN paymentamount, DROP COLUMN paymentsleft, -DROP COLUMN financetime; +DROP COLUMN financetime; \ No newline at end of file diff --git a/server/main.lua b/server/main.lua index 4bb50be..ef0db3c 100644 --- a/server/main.lua +++ b/server/main.lua @@ -21,7 +21,7 @@ RegisterNetEvent('qbx_vehicleshop:server:removePlayer', function(citizenid) if v.balance >= 1 then local newTime = math.floor(v.financetime - (((os.time() - playTime) / 1000) / 60)) if newTime < 0 then newTime = 0 end - UpdateVehicleEntityFinanceTime(newTime, v.plate) + UpdateVehicleEntityFinanceTime(newTime, v.vehicleId) end end financeTimer[citizenid] = nil @@ -39,7 +39,7 @@ AddEventHandler('playerDropped', function() if v.balance >= 1 and playTime then local newTime = math.floor(v.financetime - (((os.time() - playTime) / 1000) / 60)) if newTime < 0 then newTime = 0 end - UpdateVehicleEntityFinanceTime(newTime, v.plate) + UpdateVehicleEntityFinanceTime(newTime, v.vehicleId) end end if vehicles[1] and financeTimer[vehicles[1].citizenid] then @@ -94,6 +94,13 @@ lib.callback.register('qbx_vehicleshop:server:GetVehiclesByName', function(sourc local player = exports.qbx_core:GetPlayer(src) if not player then return end local vehicles = FetchVehicleEntitiesByCitizenId(player.PlayerData.citizenid) + local financeVehicles = FetchFinancedVehicleEntitiesByCitizenId(player.PlayerData.citizenid) + for _, v in pairs(financeVehicles) do + vehicles[v.vehicleId].balance = v.balance + vehicles[v.vehicleId].paymentamount = v.paymentamount + vehicles[v.vehicleId].paymentsleft = v.paymentsleft + vehicles[v.vehicleId].financetime = v.financetime + end if vehicles[1] then return vehicles end @@ -318,7 +325,7 @@ local function sellShowroomVehicleTransact(src, target, price, downPayment) player.Functions.AddMoney('bank', price * config.commissionRate) exports.qbx_core:Notify(src, locale('success.earned_commission', lib.math.groupdigits(commission)), 'success') - exports['Renewed-Banking']:addAccountMoney(player.PlayerData.job.name, price) + exports.qbx_management:AddMoney(player.PlayerData.job.name, price) exports.qbx_core:Notify(target.PlayerData.source, locale('success.purchased'), 'success') return true end @@ -418,8 +425,8 @@ RegisterNetEvent('qbx_vehicleshop:server:checkFinance', function() local vehicles = FetchFinancedVehicleEntitiesByCitizenId(player.PlayerData.citizenid) for _, v in pairs(vehicles) do local plate = v.plate - DeleteVehicleEntity(plate) - --MySQL.update('UPDATE player_vehicles SET citizenid = ? WHERE plate = ?', {'REPO-'..v.citizenid, plate}) -- Use this if you don't want them to be deleted + DeleteVehicleEntity(v.id) + --MySQL.update('UPDATE player_vehicles SET citizenid = ? WHERE id = ?', {'REPO-'..v.citizenid, v.id}) -- Use this if you don't want them to be deleted exports.qbx_core:Notify(src, locale('error.repossessed', plate), 'error') end end) @@ -458,7 +465,7 @@ lib.addCommand('transfervehicle', {help = locale('general.command_transfervehicl local target = exports.qbx_core:GetPlayer(buyerId) local row = FetchVehicleEntityByPlate(plate) if config.finance.preventSelling then - local financeRow = FetchFinancedVehicleEntityByPlate(plate) + local financeRow = FetchFinancedVehicleEntityById(row.id) if financeRow.balance > 0 then return exports.qbx_core:Notify(src, locale('error.financed'), 'error') end @@ -494,7 +501,7 @@ lib.addCommand('transfervehicle', {help = locale('general.command_transfervehicl player.Functions.AddMoney(currencyType, sellAmount) target.Functions.RemoveMoney(currencyType, sellAmount) end - UpdateVehicleEntityOwner(targetcid, targetlicense, plate) + UpdateVehicleEntityOwner(targetcid, targetlicense, row.id) TriggerClientEvent('vehiclekeys:client:SetOwner', buyerId, plate) local sellerMessage = sellAmount > 0 and locale('success.soldfor') .. lib.math.groupdigits(sellAmount) or locale('success.gifted') local buyerMessage = sellAmount > 0 and locale('success.boughtfor') .. lib.math.groupdigits(sellAmount) or locale('success.received_gift') diff --git a/server/storage.lua b/server/storage.lua index 1403a91..c891251 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -6,7 +6,7 @@ ---@param request InsertVehicleEntityRequest function InsertVehicleEntity(request) - MySQL.insert('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', { + local vehicleId = MySQL.insert.await('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', { request.license, request.citizenId, request.model, @@ -16,6 +16,7 @@ function InsertVehicleEntity(request) 'pillboxgarage', 0 }) + return vehicleId end ---@class VehicleFinanceServer @@ -30,15 +31,14 @@ end ---@param request InsertVehicleEntityWithFinanceRequest function InsertVehicleEntityWithFinance(request) - InsertVehicleEntity({ + local vehicleId = InsertVehicleEntity({ license = request.insertVehicleEntityRequest.license, citizenId = request.insertVehicleEntityRequest.citizenId, model = request.insertVehicleEntityRequest.model, plate = request.insertVehicleEntityRequest.plate }) - MySQL.insert('INSERT INTO vehicle_financing (citizenid, plate, balance, paymentamount, paymentsleft, financetime) VALUES (?, ?, ?, ?, ?, ?)', { - request.insertVehicleEntityRequest.citizenId, - request.insertVehicleEntityRequest.plate, + MySQL.insert('INSERT INTO vehicle_financing (vehicleId, balance, paymentamount, paymentsleft, financetime) VALUES (?, ?, ?, ?, ?)', { + vehicleId, request.vehicleFinance.balance, request.vehicleFinance.payment, request.vehicleFinance.paymentsLeft, @@ -48,6 +48,13 @@ end ---@alias VehicleEntity table +---@class VehicleFinancingEntity +---@field vehicleId integer +---@field balance number +---@field paymentamount number +---@field paymentsleft integer +---@field financetime number + ---@param citizenId string ---@return VehicleEntity[] function FetchVehicleEntitiesByCitizenId(citizenId) @@ -68,15 +75,15 @@ function DoesVehicleEntityExist(plate) end ---@param time number ----@param plate string -function UpdateVehicleEntityFinanceTime(time, plate) - MySQL.update('UPDATE vehicle_financing SET financetime = ? WHERE plate = ?', {time, plate}) +---@param vehicleId integer +function UpdateVehicleEntityFinanceTime(time, vehicleId) + MySQL.update('UPDATE vehicle_financing SET financetime = ? WHERE vehicleId = ?', {time, vehicleId}) end ---@param vehicleFinance VehicleFinanceServer ---@param plate string function UpdateVehicleFinance(vehicleFinance, plate) - MySQL.update('UPDATE vehicle_financing SET balance = ?, paymentamount = ?, paymentsleft = ?, financetime = ? WHERE plate = ?', { + MySQL.update('UPDATE vehicle_financing AS vf INNER JOIN player_vehicles AS pv ON vf.vehicleId = pv.id SET vf.balance = ?, vf.paymentamount = ?, vf.paymentsleft = ?, vf.financetime = ? WHERE pv.plate = ?', { vehicleFinance.balance, vehicleFinance.payment, vehicleFinance.paymentsLeft, @@ -87,31 +94,30 @@ end ---@param citizenId string ---@param license string ----@param plate string -function UpdateVehicleEntityOwner(citizenId, license, plate) - MySQL.update('UPDATE player_vehicles SET citizenid = ?, license = ? WHERE plate = ?', {citizenId, license, plate}) - MySQL.update('UPDATE vehicle_financing SET citizenid = ? WHERE plate = ?', {citizenId, plate}) +---@param vehicleId integer +function UpdateVehicleEntityOwner(citizenId, license, vehicleId) + MySQL.update('UPDATE player_vehicles SET citizenid = ?, license = ? WHERE id = ?', {citizenId, license, vehicleId}) end ----@param citizenId string ----@return VehicleEntity[] -function FetchFinancedVehicleEntityByPlate(plate) - return MySQL.single.await('SELECT * FROM vehicle_financing WHERE plate = ? AND balance > 0 AND financetime < 1', {plate}) +---@param id integer +---@return VehicleFinancingEntity +function FetchFinancedVehicleEntityById(id) + return MySQL.single.await('SELECT * FROM vehicle_financing WHERE vehicleId = ? AND balance > 0 AND financetime < 1', {id}) end ---@param citizenId string ----@return VehicleEntity[] +---@return VehicleFinancingEntity function FetchFinancedVehicleEntitiesByCitizenId(citizenId) - return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid = ? AND balance > 0 AND financetime < 1', {citizenId}) + return MySQL.query.await('SELECT vehicle_financing.* FROM vehicle_financing INNER JOIN player_vehicles ON player_vehicles.citizenid = "KLH31301" WHERE vehicle_financing.vehicleId = player_vehicles.id AND vehicle_financing.balance > 0 AND vehicle_financing.financetime > 1', {citizenId}) end ---@param license string ----@return VehicleEntity[] +---@return VehicleFinancingEntity function FetchFinancedVehicleEntitiesByLicense(license) - return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid IN (SELECT citizenid FROM players WHERE license = ?) AND balance > 0 AND financetime < 1', {license}) + return MySQL.query.await('SELECT * FROM vehicle_financing AS vf INNER JOIN players AS p ON p.citizenid = ? INNER JOIN player_vehicles AS pv ON pv.citizenid = p.citizenid AND vf.balance > 0 AND vf.financetime < 1', {license}) end ----@param plate string -function DeleteVehicleEntity(plate) - MySQL.query('DELETE FROM player_vehicles WHERE plate = ?', {plate}) -end +---@param vehicleId integer +function DeleteVehicleEntity(vehicleId) + MySQL.query('DELETE FROM player_vehicles WHERE id = ?', {vehicleId}) +end \ No newline at end of file diff --git a/vehshop.sql b/vehshop.sql index 95f28ca..9aba9b7 100644 --- a/vehshop.sql +++ b/vehshop.sql @@ -1,13 +1,9 @@ CREATE TABLE IF NOT EXISTS `vehicle_financing` ( `vehicleId` int(11) NOT NULL, - `citizenid` varchar(50) NOT NULL, - `plate` varchar(15) NOT NULL, `balance` int(11) DEFAULT NULL, `paymentamount` int(11) DEFAULT NULL, `paymentsleft` int(11) DEFAULT NULL, `financetime` int(11) DEFAULT NULL, PRIMARY KEY (`vehicleId`), FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, - FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE, - FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file From 08d4b95d312ecffeb7c5d8ef5bc5b64366c8a45c Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Sat, 2 Mar 2024 18:55:18 +0100 Subject: [PATCH 14/18] revert old export --- server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/main.lua b/server/main.lua index ef0db3c..5461605 100644 --- a/server/main.lua +++ b/server/main.lua @@ -325,7 +325,7 @@ local function sellShowroomVehicleTransact(src, target, price, downPayment) player.Functions.AddMoney('bank', price * config.commissionRate) exports.qbx_core:Notify(src, locale('success.earned_commission', lib.math.groupdigits(commission)), 'success') - exports.qbx_management:AddMoney(player.PlayerData.job.name, price) + exports['Renewed-Banking']:addAccountMoney(player.PlayerData.job.name, price) exports.qbx_core:Notify(target.PlayerData.source, locale('success.purchased'), 'success') return true end From 2710300eb06639866c2f318129bf26e7200f1d25 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Sat, 2 Mar 2024 19:20:13 +0100 Subject: [PATCH 15/18] use qbx_vehicles API & fix queries --- fxmanifest.lua | 4 +++- server/storage.lua | 20 ++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/fxmanifest.lua b/fxmanifest.lua index 4073aed..976da56 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -29,6 +29,8 @@ files { 'locales/*.json' } +dependency 'qbx_vehicles' + provide 'qb-vehicleshop' lua54 'yes' -use_experimental_fxv2_oal 'yes' +use_experimental_fxv2_oal 'yes' \ No newline at end of file diff --git a/server/storage.lua b/server/storage.lua index c891251..2b3a71a 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -6,15 +6,11 @@ ---@param request InsertVehicleEntityRequest function InsertVehicleEntity(request) - local vehicleId = MySQL.insert.await('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', { - request.license, - request.citizenId, - request.model, - joaat(request.model), - '{}', - request.plate, - 'pillboxgarage', - 0 + exports.qbx_vehicles:CreateVehicleEntity({ + citizenId = request.citizenId, + model = request.model, + plate = request.plate, + state = 0 }) return vehicleId end @@ -108,16 +104,16 @@ end ---@param citizenId string ---@return VehicleFinancingEntity function FetchFinancedVehicleEntitiesByCitizenId(citizenId) - return MySQL.query.await('SELECT vehicle_financing.* FROM vehicle_financing INNER JOIN player_vehicles ON player_vehicles.citizenid = "KLH31301" WHERE vehicle_financing.vehicleId = player_vehicles.id AND vehicle_financing.balance > 0 AND vehicle_financing.financetime > 1', {citizenId}) + return MySQL.query.await('SELECT vehicle_financing.* FROM vehicle_financing INNER JOIN player_vehicles ON player_vehicles.citizenid = ? WHERE vehicle_financing.vehicleId = player_vehicles.id AND vehicle_financing.balance > 0 AND vehicle_financing.financetime > 1', {citizenId}) end ---@param license string ---@return VehicleFinancingEntity function FetchFinancedVehicleEntitiesByLicense(license) - return MySQL.query.await('SELECT * FROM vehicle_financing AS vf INNER JOIN players AS p ON p.citizenid = ? INNER JOIN player_vehicles AS pv ON pv.citizenid = p.citizenid AND vf.balance > 0 AND vf.financetime < 1', {license}) + return MySQL.query.await('SELECT vf.*, p.citizenid FROM vehicle_financing AS vf INNER JOIN players AS p ON p.citizenid = ? INNER JOIN player_vehicles AS pv ON pv.citizenid = p.citizenid AND vf.balance > 0 AND vf.financetime < 1', {license}) end ---@param vehicleId integer function DeleteVehicleEntity(vehicleId) - MySQL.query('DELETE FROM player_vehicles WHERE id = ?', {vehicleId}) + exports.qbx_vehicles:DeleteEntityById(vehicleId) end \ No newline at end of file From 52ab6cc0253ac210cf7899f59ee00a620bbde842 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Sun, 3 Mar 2024 12:17:30 +0100 Subject: [PATCH 16/18] Update storage.lua --- server/storage.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/storage.lua b/server/storage.lua index 2b3a71a..c94de85 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -5,14 +5,14 @@ ---@field plate string ---@param request InsertVehicleEntityRequest +---@return integer vehicleId function InsertVehicleEntity(request) - exports.qbx_vehicles:CreateVehicleEntity({ + return exports.qbx_vehicles:CreateVehicleEntity({ citizenId = request.citizenId, model = request.model, plate = request.plate, state = 0 }) - return vehicleId end ---@class VehicleFinanceServer @@ -116,4 +116,4 @@ end ---@param vehicleId integer function DeleteVehicleEntity(vehicleId) exports.qbx_vehicles:DeleteEntityById(vehicleId) -end \ No newline at end of file +end From 71ada2ba31ce314526111249282163c329b7d7df Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Mon, 4 Mar 2024 00:37:51 +0100 Subject: [PATCH 17/18] use TinyInt --- migrate.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/migrate.sql b/migrate.sql index c39fb58..8018e1b 100644 --- a/migrate.sql +++ b/migrate.sql @@ -2,10 +2,10 @@ CREATE TABLE IF NOT EXISTS `vehicle_financing` ( `vehicleId` int(11) NOT NULL, `balance` int(11) DEFAULT NULL, `paymentamount` int(11) DEFAULT NULL, - `paymentsleft` int(11) DEFAULT NULL, + `paymentsleft` tinyint(4) DEFAULT NULL, `financetime` int(11) DEFAULT NULL, PRIMARY KEY (`vehicleId`), - FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO vehicle_financing (vehicleId, balance, paymentamount, paymentsleft, financetime) @@ -17,4 +17,4 @@ ALTER TABLE player_vehicles DROP COLUMN balance, DROP COLUMN paymentamount, DROP COLUMN paymentsleft, -DROP COLUMN financetime; \ No newline at end of file +DROP COLUMN financetime; From a2c58ac59914a329fb68e8e01702fb63e210d1a2 Mon Sep 17 00:00:00 2001 From: Antony <97451137+TonybynMp4@users.noreply.github.com> Date: Fri, 8 Mar 2024 17:02:13 +0100 Subject: [PATCH 18/18] feat: remove storage function in favor of qbx_vehicles export --- server/main.lua | 11 +++-------- server/storage.lua | 15 +-------------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/server/main.lua b/server/main.lua index 5461605..79aec26 100644 --- a/server/main.lua +++ b/server/main.lua @@ -244,11 +244,9 @@ RegisterNetEvent('qbx_vehicleshop:server:buyShowroomVehicle', function(vehicle) return end - local cid = player.PlayerData.citizenid local plate = generatePlate() - InsertVehicleEntity({ - license = player.PlayerData.license, - citizenId = cid, + exports.qbx_vehicles:CreateVehicleEntity({ + citizenId = player.PlayerData.citizenid, model = vehicle, plate = plate, }) @@ -289,7 +287,6 @@ RegisterNetEvent('qbx_vehicleshop:server:financeVehicle', function(downPayment, InsertVehicleEntityWithFinance({ insertVehicleEntityRequest = { - license = player.PlayerData.license, citizenId = cid, model = vehicle, plate = plate, @@ -350,8 +347,7 @@ RegisterNetEvent('qbx_vehicleshop:server:sellShowroomVehicle', function(data, pl if not sellShowroomVehicleTransact(src, target, vehiclePrice, vehiclePrice) then return end - InsertVehicleEntity({ - license = target.PlayerData.license, + exports.qbx_vehicles:CreateVehicleEntity({ citizenId = cid, model = vehicle, plate = plate @@ -397,7 +393,6 @@ RegisterNetEvent('qbx_vehicleshop:server:sellfinanceVehicle', function(downPayme InsertVehicleEntityWithFinance({ insertVehicleEntityRequest = { - license = target.PlayerData.license, citizenId = cid, model = vehicle, plate = plate, diff --git a/server/storage.lua b/server/storage.lua index c94de85..7dceafc 100644 --- a/server/storage.lua +++ b/server/storage.lua @@ -1,20 +1,8 @@ ---@class InsertVehicleEntityRequest ----@field license string ---@field citizenId string ---@field model string ---@field plate string ----@param request InsertVehicleEntityRequest ----@return integer vehicleId -function InsertVehicleEntity(request) - return exports.qbx_vehicles:CreateVehicleEntity({ - citizenId = request.citizenId, - model = request.model, - plate = request.plate, - state = 0 - }) -end - ---@class VehicleFinanceServer ---@field balance number ---@field payment number @@ -27,8 +15,7 @@ end ---@param request InsertVehicleEntityWithFinanceRequest function InsertVehicleEntityWithFinance(request) - local vehicleId = InsertVehicleEntity({ - license = request.insertVehicleEntityRequest.license, + local vehicleId = exports.qbx_vehicles:CreateVehicleEntity({ citizenId = request.insertVehicleEntityRequest.citizenId, model = request.insertVehicleEntityRequest.model, plate = request.insertVehicleEntityRequest.plate