152 lines
7.2 KiB
Lua
152 lines
7.2 KiB
Lua
|
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
|
||
|
-- Functions
|
||
|
|
||
|
local function generateOID()
|
||
|
local num = math.random(1, 10) .. math.random(111, 999)
|
||
|
|
||
|
return "OC" .. num
|
||
|
end
|
||
|
|
||
|
-- Callbacks
|
||
|
|
||
|
QBCore.Functions.CreateCallback('qb-occasions:server:getVehicles', function(_, cb)
|
||
|
local result = MySQL.query.await('SELECT * FROM occasion_vehicles', {})
|
||
|
if result[1] then
|
||
|
cb(result)
|
||
|
else
|
||
|
cb(nil)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
--Call from qb-vehiclesales
|
||
|
QBCore.Functions.CreateCallback("qb-garage:server:checkVehicleOwner", function(source, cb, plate)
|
||
|
local src = source
|
||
|
local pData = QBCore.Functions.GetPlayer(src)
|
||
|
MySQL.query('SELECT * FROM player_vehicles WHERE plate = ? AND citizenid = ?',{plate, pData.PlayerData.citizenid}, function(result)
|
||
|
if result[1] then
|
||
|
cb(true, result[1].balance)
|
||
|
else
|
||
|
cb(false)
|
||
|
end
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback("qb-occasions:server:getSellerInformation", function(_, cb, citizenid)
|
||
|
MySQL.query('SELECT * FROM players WHERE citizenid = ?', {citizenid}, function(result)
|
||
|
if result[1] then
|
||
|
cb(result[1])
|
||
|
else
|
||
|
cb(nil)
|
||
|
end
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback("qb-vehiclesales:server:CheckModelName", function(_, cb, plate)
|
||
|
if plate then
|
||
|
local ReturnData = MySQL.scalar.await("SELECT vehicle FROM player_vehicles WHERE plate = ?", {plate})
|
||
|
cb(ReturnData)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
-- Events
|
||
|
|
||
|
RegisterNetEvent('qb-occasions:server:ReturnVehicle', function(vehicleData)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
local result = MySQL.query.await('SELECT * FROM occasion_vehicles WHERE plate = ? AND occasionid = ?', {vehicleData['plate'], vehicleData["oid"]})
|
||
|
if result[1] then
|
||
|
if result[1].seller == Player.PlayerData.citizenid then
|
||
|
MySQL.insert('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, state) VALUES (?, ?, ?, ?, ?, ?, ?)', {Player.PlayerData.license, Player.PlayerData.citizenid, vehicleData["model"], joaat(vehicleData["model"]), vehicleData["mods"], vehicleData["plate"], 0})
|
||
|
MySQL.query('DELETE FROM occasion_vehicles WHERE occasionid = ? AND plate = ?', {vehicleData["oid"], vehicleData['plate']})
|
||
|
TriggerClientEvent("qb-occasions:client:ReturnOwnedVehicle", src, result[1])
|
||
|
TriggerClientEvent('qb-occasion:client:refreshVehicles', -1)
|
||
|
else
|
||
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.not_your_vehicle'), 'error', 3500)
|
||
|
end
|
||
|
else
|
||
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.vehicle_does_not_exist'), 'error', 3500)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-occasions:server:sellVehicle', function(vehiclePrice, vehicleData)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
MySQL.query('DELETE FROM player_vehicles WHERE plate = ? AND vehicle = ?',{vehicleData.plate, vehicleData.model})
|
||
|
MySQL.insert('INSERT INTO occasion_vehicles (seller, price, description, plate, model, mods, occasionid) VALUES (?, ?, ?, ?, ?, ?, ?)',{Player.PlayerData.citizenid, vehiclePrice, vehicleData.desc, vehicleData.plate, vehicleData.model,json.encode(vehicleData.mods), generateOID()})
|
||
|
TriggerEvent("qb-log:server:CreateLog", "vehicleshop", "Vehicle for Sale", "red","**" .. GetPlayerName(src) .. "** has a " .. vehicleData.model .. " priced at " .. vehiclePrice)
|
||
|
TriggerClientEvent('qb-occasion:client:refreshVehicles', -1)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-occasions:server:sellVehicleBack', function(vehData)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
local price = 0
|
||
|
local plate = vehData.plate
|
||
|
for _, v in pairs(QBCore.Shared.Vehicles) do
|
||
|
if v["hash"] == vehData.model then
|
||
|
price = tonumber(v["price"])
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
local payout = math.floor(tonumber(price * 0.5)) -- This will give you half of the cars value
|
||
|
Player.Functions.AddMoney('bank', payout)
|
||
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('success.sold_car_for_price', { value = payout }), 'success', 5500)
|
||
|
MySQL.query('DELETE FROM player_vehicles WHERE plate = ?', {plate})
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-occasions:server:buyVehicle', function(vehicleData)
|
||
|
local src = source
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
local result = MySQL.query.await('SELECT * FROM occasion_vehicles WHERE plate = ? AND occasionid = ?',{vehicleData['plate'], vehicleData["oid"]})
|
||
|
if result[1] and next(result[1]) then
|
||
|
if Player.PlayerData.money.bank >= result[1].price then
|
||
|
local SellerCitizenId = result[1].seller
|
||
|
local SellerData = QBCore.Functions.GetPlayerByCitizenId(SellerCitizenId)
|
||
|
local NewPrice = math.ceil((result[1].price / 100) * 77)
|
||
|
Player.Functions.RemoveMoney('bank', result[1].price)
|
||
|
MySQL.insert(
|
||
|
'INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, state) VALUES (?, ?, ?, ?, ?, ?, ?)', {
|
||
|
Player.PlayerData.license,
|
||
|
Player.PlayerData.citizenid, result[1]["model"],
|
||
|
GetHashKey(result[1]["model"]),
|
||
|
result[1]["mods"],
|
||
|
result[1]["plate"],
|
||
|
0
|
||
|
})
|
||
|
if SellerData then
|
||
|
SellerData.Functions.AddMoney('bank', NewPrice)
|
||
|
else
|
||
|
local BuyerData = MySQL.query.await('SELECT * FROM players WHERE citizenid = ?',{SellerCitizenId})
|
||
|
if BuyerData[1] then
|
||
|
local BuyerMoney = json.decode(BuyerData[1].money)
|
||
|
BuyerMoney.bank = BuyerMoney.bank + NewPrice
|
||
|
MySQL.update('UPDATE players SET money = ? WHERE citizenid = ?', {json.encode(BuyerMoney), SellerCitizenId})
|
||
|
end
|
||
|
end
|
||
|
TriggerEvent("qb-log:server:CreateLog", "vehicleshop", "bought", "green", "**" .. GetPlayerName(src) .. "** has bought for " .. result[1].price .. " (" .. result[1].plate ..") from **" .. SellerCitizenId .. "**")
|
||
|
TriggerClientEvent("qb-occasions:client:BuyFinished", src, result[1])
|
||
|
TriggerClientEvent('qb-occasion:client:refreshVehicles', -1)
|
||
|
MySQL.query('DELETE FROM occasion_vehicles WHERE plate = ? AND occasionid = ?',{result[1].plate, result[1].occasionid})
|
||
|
exports['qb-phone']:sendNewMailToOffline(SellerCitizenId, {
|
||
|
sender = Lang:t('mail.sender'),
|
||
|
subject = Lang:t('mail.subject'),
|
||
|
message = Lang:t('mail.message', { value = NewPrice, value2 = QBCore.Shared.Vehicles[result[1].model].name})
|
||
|
})
|
||
|
else
|
||
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.not_enough_money'), 'error', 3500)
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback("qb-garage:server:checkVehicleOwner", function(source, cb, plate)
|
||
|
local src = source
|
||
|
local pData = QBCore.Functions.GetPlayer(src)
|
||
|
MySQL.query('SELECT * FROM player_vehicles WHERE plate = ? AND citizenid = ?',{plate, pData.PlayerData.citizenid}, function(result)
|
||
|
if result[1] then
|
||
|
cb(true, result[1].balance)
|
||
|
else
|
||
|
cb(false)
|
||
|
end
|
||
|
end)
|
||
|
end)
|