2025-04-14 10:33:35 +00:00

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)