forked from Simnation/Main
166 lines
5.7 KiB
Lua
166 lines
5.7 KiB
Lua
![]() |
-----------------------
|
||
|
---- Variables ----
|
||
|
-----------------------
|
||
|
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
local VehicleList = {}
|
||
|
|
||
|
-----------------------
|
||
|
---- Threads ----
|
||
|
-----------------------
|
||
|
|
||
|
-----------------------
|
||
|
---- Server Events ----
|
||
|
-----------------------
|
||
|
|
||
|
-- Event to give keys. receiver can either be a single id, or a table of ids.
|
||
|
-- Must already have keys to the vehicle, trigger the event from the server, or pass forcegive paramter as true.
|
||
|
RegisterNetEvent('qb-vehiclekeys:server:GiveVehicleKeys', function(receiver, plate)
|
||
|
local giver = source
|
||
|
|
||
|
if HasKeys(giver, plate) then
|
||
|
TriggerClientEvent('QBCore:Notify', giver, Lang:t('notify.vgkeys'), 'success')
|
||
|
if type(receiver) == 'table' then
|
||
|
for _, r in ipairs(receiver) do
|
||
|
GiveKeys(receiver[r], plate)
|
||
|
end
|
||
|
else
|
||
|
GiveKeys(receiver, plate)
|
||
|
end
|
||
|
else
|
||
|
TriggerClientEvent('QBCore:Notify', giver, Lang:t('notify.ydhk'), 'error')
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-vehiclekeys:server:AcquireVehicleKeys', function(plate)
|
||
|
local src = source
|
||
|
GiveKeys(src, plate)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-vehiclekeys:server:breakLockpick', function(itemName)
|
||
|
local Player = QBCore.Functions.GetPlayer(source)
|
||
|
if not Player then return end
|
||
|
if not (itemName == 'lockpick' or itemName == 'advancedlockpick') then return end
|
||
|
if exports['qb-inventory']:RemoveItem(source, itemName, 1, false, 'qb-vehiclekeys:server:breakLockpick') then
|
||
|
TriggerClientEvent('qb-inventory:client:ItemBox', source, QBCore.Shared.Items[itemName], 'remove')
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-vehiclekeys:server:setVehLockState', function(vehNetId, state)
|
||
|
SetVehicleDoorsLocked(NetworkGetEntityFromNetworkId(vehNetId), state)
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback('qb-vehiclekeys:server:GetVehicleKeys', function(source, cb)
|
||
|
local Player = QBCore.Functions.GetPlayer(source)
|
||
|
if not Player then return cb({}) end
|
||
|
local citizenid = Player.PlayerData.citizenid
|
||
|
local keysList = {}
|
||
|
for plate, citizenids in pairs(VehicleList) do
|
||
|
if citizenids[citizenid] then
|
||
|
keysList[plate] = true
|
||
|
end
|
||
|
end
|
||
|
if Player.PlayerData.metadata["vehicleKeys"] and Config.PersistentKeys then
|
||
|
for plate in pairs(Player.PlayerData.metadata["vehicleKeys"]) do
|
||
|
keysList[plate] = true
|
||
|
end
|
||
|
end
|
||
|
cb(keysList)
|
||
|
end)
|
||
|
|
||
|
QBCore.Functions.CreateCallback('qb-vehiclekeys:server:checkPlayerOwned', function(_, cb, plate)
|
||
|
local playerOwned = false
|
||
|
if VehicleList[plate] then
|
||
|
playerOwned = true
|
||
|
end
|
||
|
cb(playerOwned)
|
||
|
end)
|
||
|
|
||
|
-----------------------
|
||
|
---- Functions ----
|
||
|
-----------------------
|
||
|
|
||
|
function GiveKeys(id, plate)
|
||
|
local Player = QBCore.Functions.GetPlayer(id)
|
||
|
if not Player then return end
|
||
|
local citizenid = Player.PlayerData.citizenid
|
||
|
|
||
|
if not plate then
|
||
|
if GetVehiclePedIsIn(GetPlayerPed(id), false) ~= 0 then
|
||
|
plate = QBCore.Shared.Trim(GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(id), false)))
|
||
|
else
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if not VehicleList[plate] then VehicleList[plate] = {} end
|
||
|
VehicleList[plate][citizenid] = true
|
||
|
|
||
|
local oldKeys = Player.PlayerData.metadata["vehicleKeys"] or {}
|
||
|
oldKeys[plate] = true
|
||
|
Player.Functions.SetMetaData("vehicleKeys", oldKeys)
|
||
|
|
||
|
TriggerClientEvent('QBCore:Notify', id, Lang:t('notify.vgetkeys'))
|
||
|
TriggerClientEvent('qb-vehiclekeys:client:AddKeys', id, plate)
|
||
|
end
|
||
|
|
||
|
exports('GiveKeys', GiveKeys)
|
||
|
|
||
|
function RemoveKeys(id, plate)
|
||
|
local Player = QBCore.Functions.GetPlayer(id)
|
||
|
if not Player then return end
|
||
|
local citizenid = Player.PlayerData.citizenid
|
||
|
|
||
|
if VehicleList[plate] and VehicleList[plate][citizenid] then
|
||
|
VehicleList[plate][citizenid] = nil
|
||
|
end
|
||
|
|
||
|
local oldKeys = Player.PlayerData.metadata["vehicleKeys"] or {}
|
||
|
oldKeys[plate] = nil
|
||
|
Player.Functions.SetMetaData("vehicleKeys", oldKeys)
|
||
|
|
||
|
TriggerClientEvent('qb-vehiclekeys:client:RemoveKeys', id, plate)
|
||
|
end
|
||
|
|
||
|
exports('RemoveKeys', RemoveKeys)
|
||
|
|
||
|
function HasKeys(id, plate)
|
||
|
local Player = QBCore.Functions.GetPlayer(id)
|
||
|
if not Player then return false end
|
||
|
local citizenid = Player.PlayerData.citizenid
|
||
|
|
||
|
if VehicleList[plate] and VehicleList[plate][citizenid] then
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
if Player.PlayerData.metadata["vehicleKeys"] and Config.PersistentKeys and Player.PlayerData.metadata["vehicleKeys"][plate] then
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
exports('HasKeys', HasKeys)
|
||
|
|
||
|
QBCore.Commands.Add('givekeys', Lang:t('addcom.givekeys'), { { name = Lang:t('addcom.givekeys_id'), help = Lang:t('addcom.givekeys_id_help') } }, false, function(source, args)
|
||
|
local src = source
|
||
|
TriggerClientEvent('qb-vehiclekeys:client:GiveKeys', src, tonumber(args[1]))
|
||
|
end)
|
||
|
|
||
|
QBCore.Commands.Add('addkeys', Lang:t('addcom.addkeys'), { { name = Lang:t('addcom.addkeys_id'), help = Lang:t('addcom.addkeys_id_help') }, { name = Lang:t('addcom.addkeys_plate'), help = Lang:t('addcom.addkeys_plate_help') } }, true, function(source, args)
|
||
|
local src = source
|
||
|
if not args[1] or not args[2] then
|
||
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('notify.fpid'))
|
||
|
return
|
||
|
end
|
||
|
GiveKeys(tonumber(args[1]), args[2])
|
||
|
end, 'admin')
|
||
|
|
||
|
QBCore.Commands.Add('removekeys', Lang:t('addcom.rkeys'), { { name = Lang:t('addcom.rkeys_id'), help = Lang:t('addcom.rkeys_id_help') }, { name = Lang:t('addcom.rkeys_plate'), help = Lang:t('addcom.rkeys_plate_help') } }, true, function(source, args)
|
||
|
local src = source
|
||
|
if not args[1] or not args[2] then
|
||
|
TriggerClientEvent('QBCore:Notify', src, Lang:t('notify.fpid'))
|
||
|
return
|
||
|
end
|
||
|
RemoveKeys(tonumber(args[1]), args[2])
|
||
|
end, 'admin')
|