Files
community_bridge/modules/target/_default/client.lua
T
MrNewb 444040dd39 This was crowleys commit and work - Refactor entity behaviors and improve particle handling
Refactored entity behavior triggers to simplify argument passing and added OnSet handler for particle behaviors. Improved particle effect management and event handling, updated locale and lib initialization in several modules, and fixed skill metadata access. Also streamlined point zone logic and menu/zone system initialization for better reliability.
2025-10-26 16:20:27 -04:00

185 lines
5.4 KiB
Lua

---@diagnostic disable: duplicate-set-field
Target = Target or {}
Ids = Ids or Require("lib/utility/shared/ids.lua")
local function warnUser()
print("Currently Only Targeting Is Supported By Community Bridge, You Are Using A Resource That Requires The Target Module To Be Used.")
end
local InteractIds = {}
Target.GetCanInteract = function(id)
return InteractIds[id]
end
Target.CreateCanInteract = function(cb)
if not cb then return end
local id = Ids.CreateUniqueId(InteractIds)
InteractIds[id] = {
id = id,
ableToInteract = -1,
onInteract = cb
}
return id
end
Target.CanInteract = function(id, ...)
local interactData = InteractIds[id]
if not interactData then return true end
if interactData.ableToInteract == -1 then
local cb = interactData.onInteract
local canInteractStatus = cb(...)
interactData.ableToInteract = canInteractStatus and 1 or 0
SetTimeout(1000, function()
interactData.ableToInteract = -1
end)
end
return interactData.ableToInteract > 0
end
Target.FixOptions = function(options)
for k, v in pairs(options) do
local action = v.onSelect or v.action
local select = function(entityOrData)
if type(entityOrData) == 'table' then
return action(entityOrData.entity)
end
return action(entityOrData)
end
options[k].onSelect = select
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
Target.AddGlobalPlayer = function(options)
warnUser()
end
Target.AddGlobalVehicle = function(options)
warnUser()
end
Target.RemoveGlobalVehicle = function(options)
warnUser()
end
Target.AddLocalEntity = function(entities, _options)
local fixedOptions = Target.FixOptions(_options)
if type(entities) == "string" or type(entities) == "number" then
entities = { entities }
end
for _, entity in pairs(entities) do
local id = Ids.RandomString()
local title = Language.Locale("target.title")
local menuData = { id = id, title = title, options = {} }
for k, v in pairs(fixedOptions) do
table.insert(menuData.options, {
title = title .. " " .. k,
description = Language.Locale("target.description"),
onSelect = function(selected, secondary, args)
if v.onSelect then
v.onSelect(selected, secondary, args)
end
end
})
end
Point.Register(id, entity, 5, nil, function()
local coords = GetEntityCoords(entity)
local sleep = 3000
local test = Language.Locale("target.interact")
CreateThread(function()
while DoesEntityExist(entity) do
Wait(sleep)
local distance = #(coords - GetEntityCoords(PlayerPedId()))
if distance < 2 then
sleep = 0
Utility.Draw3DHelpText(coords, test, 0.35)
if IsControlJustPressed(0, 38) then
Menu.Open(menuData, false)
end
else
sleep = 1000
end
end
end)
end,
function()
Point.Remove(id)
end, function()
--No need for this in this one
end)
end
end
Target.AddModel = function(models, options)
warnUser()
end
Target.AddBoxZone = function(name, coords, size, heading, options)
local fixedOptions = Target.FixOptions(options)
local id = Ids.RandomString()
local title = Bridge.Language.Locale("target.title")
local menuData = { id = id, title = title, options = {} }
for k, v in pairs(fixedOptions) do
table.insert(menuData.options, {
title = title .. " " .. k,
description = Bridge.Language.Locale("target.description"),
onSelect = function(selected, secondary, args)
if v.onSelect then
v.onSelect(selected, secondary, args)
end
end
})
end
local inZone = false
Point.Register(id, coords, 5, nil,
function()
local sleep = 3000
while inZone do
Wait(sleep)
local distance = #(coords - GetEntityCoords(PlayerPedId()))
if distance < 10 then
sleep = 0
Utility.Draw3DHelpText(coords, Bridge.Language.Locale("target.interact"), 0.35)
if IsControlJustPressed(0, 38) then
Menu.Open(menuData, false)
end
end
end
end,
function()
inZone = false
Point.Remove(id)
end,
function()
--No need for this in this one
end)
end
Target.RemoveGlobalPlayer = function()
warnUser()
end
Target.RemoveLocalEntity = function(entity)
warnUser()
end
Target.RemoveModel = function(model)
warnUser()
end
Target.RemoveZone = function(name)
warnUser()
end
Target.GetResourceName = function()
return "default"
end
return Target