Scripts/resources/[ss]/ss-garage/server/sv_main.lua
2024-12-30 11:15:34 +01:00

163 lines
7.1 KiB
Lua

local QBCore = exports['qb-core']:GetCoreObject()
OutsideVehicles = {}
QBCore.Functions.CreateCallback('ss-garage:server:SpawnVehicle', function(source, cb, plate, model, coords)
local player = QBCore.Functions.GetPlayer(source)
local vehicle = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE citizenid = ? AND plate = ? AND vehicle = ?', {player.PlayerData.citizenid, plate, model})
if not vehicle[1] then
TriggerClientEvent('QBCore:Notify', source, 'Du ejer ikke dette køretøj', 'error')
cb(false)
return
end
if vehicle[1].fakeplate ~= nil and string.len(vehicle[1].fakeplate) > 0 then
plate = vehicle[1].fakeplate
end
if OutsideVehicles[plate] and DoesEntityExist(OutsideVehicles[plate].entity) or vehicle[1].state == 0 then
TriggerClientEvent('QBCore:Notify', source, 'Køretøj er allerede ude', 'error')
cb(false)
return
end
local veh = QBCore.Functions.SpawnVehicle(source, model, coords, Config.ShouldTeleport)
SetVehicleNumberPlateText(veh, plate)
OutsideVehicles[plate] = { netID = NetworkGetNetworkIdFromEntity(veh), entity = veh }
exports['oxmysql']:execute('UPDATE player_vehicles SET state = ?, depotprice = ? WHERE (plate = ? OR fakeplate = ?)', { 0, 0, plate, plate })
cb(true, NetworkGetNetworkIdFromEntity(veh), json.decode(vehicle[1].mods), plate, vehicle[1].fuel, vehicle[1].engine, vehicle[1].body)
end)
QBCore.Functions.CreateCallback('qb-garages:server:GetPlayerVehicles', function(source, cb)
local Player = QBCore.Functions.GetPlayer(source)
local result = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE citizenid = ?', {Player.PlayerData.citizenid})
if result[1] then
local vehs = FormatVehicles(result)
cb(vehs)
else
cb(nil)
end
end)
RegisterNetEvent('ss-garage:server:setHouseGarages', function(data)
Config.Garages = data
end)
QBCore.Functions.CreateCallback('qb-garages:server:canDeposit', function(source, cb, plate, type, garage, state)
local Player = QBCore.Functions.GetPlayer(source)
local isOwned = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE citizenid = ? AND (plate = ? OR fakeplate = ?)', {Player.PlayerData.citizenid, plate})
if not isOwned[1] then
cb(false)
return
end
if type == 'house' and not exports['ps-housing']:IsOwner(source, garage) then
cb(false)
return
end
if state == 1 then
exports['oxmysql']:execute('UPDATE player_vehicles SET state = ?, garage = ? WHERE plate = ?', { state, garage, plate })
cb(true)
else
cb(false)
end
end)
QBCore.Functions.CreateCallback('ss-garage:server:GetVehicles', function(source, cb, garage, type, category)
local Player = QBCore.Functions.GetPlayer(source)
local result
if type == 'depot' then
result = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE citizenid = ? AND depotprice > 0', {Player.PlayerData.citizenid})
elseif Config.realisticGarage then
result = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE citizenid = ? AND garage = ?', {Player.PlayerData.citizenid, garage})
else
result = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE citizenid = ?', {Player.PlayerData.citizenid})
end
if result[1] then
local vehs = FormatVehicles(result)
cb(vehs)
else
cb(nil)
end
end)
RegisterNetEvent('qb-garages:server:updateVehicleStats', function(plate, fuel, engine, body)
exports['oxmysql']:execute('UPDATE player_vehicles SET fuel = ?, engine = ?, body = ? WHERE plate = ?', { fuel, engine, body, plate })
end)
RegisterNetEvent('qb-garages:server:UpdateOutsideVehicle', function(plate, vehicleNetID)
OutsideVehicles[plate] = {
netID = vehicleNetID,
entity = NetworkGetEntityFromNetworkId(vehicleNetID)
}
end)
RegisterNetEvent('ss-garage:server:SwapVehicle', function(data)
local source = source
local Player = QBCore.Functions.GetPlayer(source)
local vehicle = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE citizenid = ? AND plate = ? AND garage = ?', { Player.PlayerData.citizenid, data.vehicle.plate, data.vehicle.garageindex })
if not Config.Garages[data.garage] then
TriggerClientEvent('QBCore:Notify', source, 'Garage eksisterer ikke', 'error')
return
end
if not vehicle[1] then
TriggerClientEvent('QBCore:Notify', source, 'Du ejer ikke dette køretøj', 'error')
return
end
if OutsideVehicles[vehicle[1].plate] and DoesEntityExist(OutsideVehicles[vehicle[1].plate].entity) then
TriggerClientEvent('QBCore:Notify', source, 'Køretøj er allerede ude', 'error')
return
end
TriggerClientEvent('QBCore:Notify', source, 'Du rykkede dit køretøj til '..data.garage, 'success')
exports['oxmysql']:execute('UPDATE player_vehicles SET garage = ? WHERE plate = ?', { data.garage, data.vehicle.plate })
end)
RegisterNetEvent('ss-garage:server:TransferVehicle', function(data)
local source = source
local Player = QBCore.Functions.GetPlayer(source)
local vehicle = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE citizenid = ? AND plate = ? AND garage = ?', { Player.PlayerData.citizenid, data.vehicle.plate, data.vehicle.garageindex })
if not vehicle[1] then
TriggerClientEvent('QBCore:Notify', source, 'Du ejer ikke dette køretøj', 'error')
return
end
if OutsideVehicles[vehicle[1].plate] and DoesEntityExist(OutsideVehicles[vehicle[1].plate].entity) then
TriggerClientEvent('QBCore:Notify', source, 'Dette køretøj er allerede ude', 'error')
return
end
local target = QBCore.Functions.GetPlayer(tonumber(data.id))
if not target then
TriggerClientEvent('QBCore:Notify', source, 'Spilleren er ikke online', 'error')
return
end
TriggerClientEvent('QBCore:Notify', Player.PlayerData.source, 'Du gav dit køretøj til '..target.PlayerData.charinfo.firstname..' '..target.PlayerData.charinfo.lastname, 'success')
TriggerClientEvent('QBCore:Notify', target.PlayerData.source, 'Du modtog et køretøj fra '..Player.PlayerData.charinfo.firstname..' '..Player.PlayerData.charinfo.lastname, 'success')
exports['oxmysql']:execute('UPDATE player_vehicles SET citizenid = ?, license = ? WHERE plate = ?', { target.PlayerData.citizenid, target.PlayerData.license, data.vehicle.plate })
end)
AddEventHandler('onResourceStop', function(resource)
if resource == GetCurrentResourceName() then
for k, v in pairs(OutsideVehicles) do
if DoesEntityExist(v.entity) then
DeleteEntity(v.entity)
end
end
end
end)
AddEventHandler('onResourceStart', function(resource)
if resource == GetCurrentResourceName() then
local vehicles = exports['oxmysql']:fetchSync('SELECT * FROM player_vehicles WHERE state = 0')
for k, v in pairs(vehicles) do
exports['oxmysql']:execute('UPDATE player_vehicles SET state = ? WHERE plate = ?', { 1 , v.plate })
end
end
end)