Files
community_bridge/modules/target/qb-target/client.lua
T
MrNewb 48f8122197 Remove cache and batch event libraries, update locales
Deleted the cache and batch event libraries from the codebase, including all related client, server, and shared files. Removed server-side particle library and associated client event handlers. Updated utility and clothing modules to remove cache dependencies. Improved utility logging and deprecated point functions with notices. Updated all locales to use a consistent 'PurchasedItem' message format and added Bulgarian (bg) translation. Bumped version to 0.13.1 in fxmanifest.
2025-12-23 19:27:27 -05:00

230 lines
7.4 KiB
Lua

---@diagnostic disable: duplicate-set-field
local resourceName = "qb-target"
if GetResourceState(resourceName) == 'missing' then return end
if GetResourceState("ox_target") ~= 'missing' then return end
Target = Target or {}
local targetDebug = BridgeSharedConfig and BridgeSharedConfig.DebugLevel == 2 or false
local targetZones = {}
local qb_target = exports['qb-target']
function Target.GetResourceName()
return "qb-target"
end
local function getLargestDistance(data)
local largestDistance = -1
for _, v in pairs(data) do
if v.distance and v.distance > largestDistance then
largestDistance = v.distance
end
end
return largestDistance ~= -1 and largestDistance or 2.0
end
---This is an internal function that is used to fix the options passed to fit alternative target systems, for example qb-ox or ox-qb etc.
---@param options table
---@return table
function Target.FixOptions(options)
for k, v in pairs(options) do
local action = v.onSelect or v.action
local select = action and function(entityOrData)
if type(entityOrData) == 'table' then
return action(entityOrData.entity)
end
return action(entityOrData)
end
if v.serverEvent then
v.type = "server"
v.event = v.serverEvent
elseif v.event then
v.type = "client"
v.event = v.event
end
options[k].action = select
options[k].job = v.job or v.groups
options[k].jobType = v.jobType
local optionsCanInteract = v.canInteract
if optionsCanInteract then
local id = Target.CreateCanInteract(optionsCanInteract)
v.canInteract = function(...)
return Target.CanInteract(id, ...)
end
end
end
return options
end
---This will toggle the targeting system on or off. This is useful for when you want to disable the targeting system for a specific player entirely.
---@param bool boolean
function Target.DisableTargeting(bool)
qb_target:AllowTargeting(not bool)
end
---This will add target options to players.
---@param options table
function Target.AddGlobalPlayer(options)
options = Target.FixOptions(options)
qb_target:AddGlobalPlayer({
options = options,
distance = getLargestDistance(options)
})
end
---This will remove target options from all players.
function Target.RemoveGlobalPlayer()
qb_target:RemoveGlobalPlayer()
end
---This will add target options to all specified models. This is useful for when you want to add target options to all models of a specific type.
---@param options table
function Target.AddGlobalPed(options)
options = Target.FixOptions(options)
qb_target:AddGlobalPed({
options = options,
distance = getLargestDistance(options)
})
end
---This will remove target options from all peds. This is useful for when you want to remove target options from all peds.
---@param options any
function Target.RemoveGlobalPed(options)
qb_target:RemoveGlobalPed(options)
end
---This will add taget options to all vehicles.
---@param options table
function Target.AddGlobalVehicle(options)
options = Target.FixOptions(options)
qb_target:AddGlobalVehicle({
options = options,
distance = getLargestDistance(options)
})
end
---This will add a networked entity to the target system.
---@param netids table | number
---@param options table
function Target.AddNetworkedEntity(netids, options)
options = Target.FixOptions(options)
qb_target:AddTargetEntity(netids, options)
end
---This will remove a networked entity from the target system.
---@param netids table | number
---@param optionNames string
function Target.RemoveNetworkedEntity(netids, optionNames)
qb_target:RemoveTargetEntity(netids, optionNames)
end
---This will remove target options from all vehicles.
---@param options table
function Target.RemoveGlobalVehicle(options)
local assembledLables = {}
for k, v in pairs(options) do
table.insert(assembledLables, v.label)
end
qb_target:RemoveGlobalVehicle(assembledLables)
end
---This will generate targets on non networked entites with the passed options.
---@param entities number | table
---@param options table
function Target.AddLocalEntity(entities, options)
options = Target.FixOptions(options)
qb_target:AddTargetEntity(entities, {
options = options,
distance = getLargestDistance(options)
})
end
---This will remove the target options from a local entity. This is useful for when you want to remove target options from a specific entity.
---@param entity number | table
---@param labels string | table | nil
function Target.RemoveLocalEntity(entity, labels)
qb_target:RemoveTargetEntity(entity, labels)
end
---This will add target options to all specified models. This is useful for when you want to add target options to all models of a specific type.
---@param models number | table
---@param options table
function Target.AddModel(models, options, distance)
options = Target.FixOptions(options)
qb_target:AddTargetModel(models, {
options = options,
distance = getLargestDistance(options),
})
end
---This will remove target options from all specified models.
---@param model number
function Target.RemoveModel(model)
qb_target:RemoveTargetModel(model)
end
---This will add a box zone to the target system. This is useful for when you want to add target options to a specific area.
---@param name string
---@param coords table
---@param size table
---@param heading number
---@param options table
function Target.AddBoxZone(name, coords, size, heading, options, debug)
options = Target.FixOptions(options)
if not next(options) then return end
qb_target:AddBoxZone(name, coords, size.x, size.y, {
name = name,
debugPoly = debug or targetDebug,
heading = heading,
minZ = coords.z - (size.z * 0.5),
maxZ = coords.z + (size.z * 0.5),
}, {
options = options,
distance = getLargestDistance(options),
})
table.insert(targetZones, { name = name, creator = GetInvokingResource() })
return name
end
---This will add a circle zone to the target system. This is useful for when you want to add target options to a specific area.
---@param name string
---@param coords table
---@param radius number
---@param options table
function Target.AddSphereZone(name, coords, radius, options, debug)
options = Target.FixOptions(options)
qb_target:AddCircleZone(name, coords, radius, {
name = name,
debugPoly = targetDebug or debug,
}, {
options = options,
distance = getLargestDistance(options),
})
table.insert(targetZones, { name = name, creator = GetInvokingResource() })
return name
end
---This will remove target options from a specific zone.
---@param name string
function Target.RemoveZone(name)
if not name then return end
for _, data in pairs(targetZones) do
if data.name == name then
qb_target:RemoveZone(name)
table.remove(targetZones, _)
break
end
end
end
AddEventHandler('onResourceStop', function(resource)
if resource ~= GetCurrentResourceName() then return end
for _, target in pairs(targetZones) do
if target.creator == resource then
qb_target:RemoveZone(target.name)
end
end
targetZones = {}
end)
return Target