forked from Simnation/Main
142 lines
4.3 KiB
Lua
142 lines
4.3 KiB
Lua
|
|
---
|
|
|
|
Citizen.CreateThread(function()
|
|
while GetResourceState('kq_link') == 'stopped' do
|
|
print('^6[KQ_LINK MISSING] ^1kq_link is required but not running! Make sure that you\'ve got it installed and started before ' .. GetCurrentResourceName())
|
|
print('^6 View the INSTALLATION.md file to find kq_link^0')
|
|
Citizen.Wait(1000)
|
|
end
|
|
|
|
local function OnItemUse(player, item)
|
|
TriggerClientEvent('kq_roofboxes:client:place', player, item)
|
|
end
|
|
|
|
for type, item in pairs(Config.items) do
|
|
exports.kq_link:RegisterUsableItem(item, function(source)
|
|
OnItemUse(source, item)
|
|
end)
|
|
end
|
|
|
|
-- OX Inventory solution
|
|
exports('UseRoofbox', function(event, item, inventory)
|
|
if event == 'usingItem' then
|
|
local player = inventory.id
|
|
OnItemUse(player, item.name)
|
|
return true
|
|
end
|
|
end)
|
|
end)
|
|
|
|
---
|
|
|
|
function GetVehicleIdentifier(vehicle)
|
|
if not DoesEntityExist(vehicle) then
|
|
return nil
|
|
end
|
|
-- You could replace this with your custom solution for getting the vehicles
|
|
return GetVehicleNumberPlateText(vehicle) .. '-' .. GetEntityModel(vehicle)
|
|
end
|
|
|
|
function GetVehicleStashId(vehicle)
|
|
return GetVehicleIdentifier(vehicle) .. '-roofbox'
|
|
end
|
|
|
|
function CanPlayerModifyRoofboxForVehicle(player, vehicle)
|
|
local distance = #(GetEntityCoords(GetPlayerPed(player)) - GetEntityCoords(vehicle))
|
|
if distance > 6 then
|
|
return false -- Players can not modify the roofbox from more than 6 meters away from the vehicle
|
|
end
|
|
|
|
-- You may add your own logic in this function to define who can modify(add or delete) the roofboxes
|
|
|
|
return true
|
|
end
|
|
|
|
function CanPlayerRemoveVehicleRoofbox(player, vehicle)
|
|
local stashId = GetVehicleStashId(vehicle)
|
|
local stashItems = exports.kq_link:GetStashItems(stashId)
|
|
|
|
if (stashItems and table.length(stashItems or {}) > 0) then
|
|
TriggerClientEvent('kq_link:client:notify', player, L('The roofbox is not empty'), 'error')
|
|
return false
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
function CanPlayerOpenVehicleRoofbox(player, vehicle)
|
|
local distance = #(GetEntityCoords(GetPlayerPed(player)) - GetEntityCoords(vehicle))
|
|
if distance > 5 then
|
|
return false -- Players can not open the roofbox from more than 5 meters away from the vehicle
|
|
end
|
|
|
|
-- You may add your own logic in this function to define who can modify(add or delete) the roofboxes
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
--- SQL Stuff
|
|
local SQL_DRIVER = Config.sql.driver
|
|
local function SqlQuery(query, data)
|
|
if SQL_DRIVER == 'mysql' then
|
|
return MySQL.Sync.fetchAll(query, data or {})
|
|
end
|
|
|
|
if SQL_DRIVER == 'oxmysql' then
|
|
if Config.sql.newOxMysql then
|
|
return exports[SQL_DRIVER]:fetchSync(query, data or {})
|
|
end
|
|
return exports[SQL_DRIVER]:query_async(query, data or {})
|
|
else
|
|
return exports[SQL_DRIVER]:executeSync(query, data or {})
|
|
end
|
|
end
|
|
|
|
local function SqlMutate(query, data)
|
|
if SQL_DRIVER == 'mysql' then
|
|
MySQL.Sync.insert(query, data)
|
|
return
|
|
end
|
|
|
|
if SQL_DRIVER == 'oxmysql' then
|
|
exports[SQL_DRIVER]:insertSync(query, data)
|
|
else
|
|
exports[SQL_DRIVER]:executeSync(query, data)
|
|
end
|
|
end
|
|
|
|
|
|
DB = {
|
|
FetchRoofboxesFromDatabase = function()
|
|
local query = 'SELECT * FROM kq_roofboxes'
|
|
|
|
return SqlQuery(query)
|
|
end,
|
|
|
|
SaveVehicleRoofbox = function(vehicle, roofboxData)
|
|
local identifier = GetVehicleIdentifier(vehicle)
|
|
|
|
local mutation = 'INSERT INTO kq_roofboxes (`identifier`, `data`) VALUES(@identifier, @data);'
|
|
local data = {
|
|
['@identifier'] = identifier,
|
|
['@data'] = json.encode(roofboxData),
|
|
}
|
|
|
|
SqlMutate(mutation, data)
|
|
end,
|
|
|
|
DeleteVehicleRoofbox = function(vehicle)
|
|
local identifier = GetVehicleIdentifier(vehicle)
|
|
|
|
local mutation = 'DELETE FROM kq_roofboxes WHERE `identifier` = @identifier;'
|
|
local data = {
|
|
['@identifier'] = identifier,
|
|
}
|
|
|
|
SqlMutate(mutation, data)
|
|
end,
|
|
}
|
|
DB.SqlMutate = SqlMutate
|
|
DB.SqlQuery = SqlQuery
|