91 lines
3.1 KiB
Lua
91 lines
3.1 KiB
Lua
local config = require 'config.server'
|
|
|
|
---@param src number
|
|
---@return number?
|
|
local function getClosestPlayer(src)
|
|
local playerCoords = GetEntityCoords(GetPlayerPed(src))
|
|
local nearbyPlayers = lib.getNearbyPlayers(playerCoords, config.distanceToHandKeys)
|
|
local closestPlayer
|
|
local closestDistance = config.distanceToHandKeys
|
|
for i = 1, #nearbyPlayers do
|
|
local nearbyPlayer = nearbyPlayers[i]
|
|
if nearbyPlayer.id ~= src then
|
|
local distance = #(nearbyPlayer.coords - playerCoords)
|
|
if not distance or distance <= closestDistance then
|
|
closestPlayer = nearbyPlayer
|
|
closestDistance = distance
|
|
end
|
|
end
|
|
end
|
|
return closestPlayer?.id
|
|
end
|
|
|
|
---@param source number
|
|
---@param target? number
|
|
---@param enforceSrcHasKeys boolean if true, source must have keys to transfer
|
|
local function transferKeys(source, target, enforceSrcHasKeys)
|
|
local playerPed = GetPlayerPed(source)
|
|
local playerCoords = GetEntityCoords(playerPed)
|
|
local vehicle = lib.getClosestVehicle(playerCoords, 5.0)
|
|
if not vehicle then
|
|
exports.qbx_core:Notify(source, locale('notify.vehicle_not_near'), 'error')
|
|
return
|
|
end
|
|
if enforceSrcHasKeys and not HasKeys(source, vehicle) then
|
|
exports.qbx_core:Notify(source, locale('notify.no_keys'), 'error')
|
|
return
|
|
end
|
|
if target and type(target) == 'number' then
|
|
GiveKeys(target, vehicle)
|
|
elseif GetVehiclePedIsIn(playerPed, false) == vehicle then -- Give keys to everyone in vehicle
|
|
for i = -1, 7 do
|
|
local ped = GetPedInVehicleSeat(vehicle, i)
|
|
local serverId = ped and NetworkGetEntityOwner(ped)
|
|
if serverId and serverId ~= source then
|
|
GiveKeys(serverId, vehicle)
|
|
end
|
|
end
|
|
|
|
exports.qbx_core:Notify(source, locale('notify.gave_keys'))
|
|
else -- Give keys to closest player
|
|
local closestPlayer = getClosestPlayer(source)
|
|
if closestPlayer then
|
|
GiveKeys(closestPlayer, vehicle)
|
|
exports.qbx_core:Notify(source, locale('notify.gave_keys'))
|
|
else
|
|
exports.qbx_core:Notify(source, locale('notify.not_near'), 'error')
|
|
end
|
|
end
|
|
end
|
|
|
|
lib.addCommand(locale('addcom.givekeys'), {
|
|
help = locale('addcom.givekeys_help'),
|
|
params = {
|
|
{
|
|
name = locale('addcom.givekeys_id'),
|
|
type = 'playerId',
|
|
help = locale('addcom.givekeys_id_help'),
|
|
optional = true
|
|
},
|
|
},
|
|
restricted = false,
|
|
}, function (source, args)
|
|
transferKeys(source, args[locale('addcom.givekeys_id')], true)
|
|
end)
|
|
|
|
lib.addCommand(locale('addcom.addkeys'), {
|
|
help = locale('addcom.addkeys_help'),
|
|
params = {
|
|
{
|
|
name = locale('addcom.addkeys_id'),
|
|
type = 'playerId',
|
|
help = locale('addcom.addkeys_id_help'),
|
|
optional = true,
|
|
},
|
|
},
|
|
restricted = 'group.admin',
|
|
}, function (source, args)
|
|
local playerId = args[locale('addcom.addkeys_id')]
|
|
transferKeys(source, playerId, false)
|
|
end)
|