Files
community_bridge/modules/target/_default/client.lua
T
MrNewb 3dfbaa8573 Localize target menu and interaction prompts
Replaced hardcoded target menu titles, descriptions, and interaction prompts with localized strings from en.json. Updated client.lua to use Language.Locale for menu and help text, improving internationalization and consistency.
2025-09-10 21:47:58 -04:00

187 lines
5.5 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 = 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
local inZone = false
local test = Language.Locale("target.interact")
Point.Register(id, coords, 5, nil, function()
local sleep = 3000
CreateThread(function()
while inZone 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
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