You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Lua(FiveM QBcore)中创建动态径向菜单遇索引问题求助

FiveM QBcore 动态径向菜单异常索引问题解决

我是Lua编程新手,在FiveM的QBcore框架下开发动态径向菜单时遇到了问题:生成的数组出现异常索引,导致游戏内菜单完全失效。尝试用table.insert动态添加菜单项时直接触发错误,只有重复编写完整的菜单硬编码代码才能让菜单正常工作,但这种方式完全满足不了动态化的需求。

经过排查,最终通过封装函数构建菜单对象的方式解决了问题,排查过程如下:

  • 初始错误代码:创建菜单时错误地使用table.insert往嵌套的空对象中添加项,导致出现异常索引
  • 二次尝试问题:直接修改已经添加到菜单中的对象时触发了nil引用错误
  • 最终可行方案:编写createRadialJobExtrasMenu函数,根据角色的执勤状态动态生成完整的菜单对象,再将该对象传入AddOption方法完成菜单构建

示例代码

-- 封装的动态菜单生成函数
local function createRadialJobExtrasMenu(isOnDuty)
    local menuOptions = {}
    -- 根据执勤状态添加不同选项
    if isOnDuty then
        table.insert(menuOptions, {
            id = 'job_off_duty',
            title = '结束执勤',
            icon = 'power-off',
            type = 'client',
            event = 'qb-job:client:ToggleDuty',
        })
        table.insert(menuOptions, {
            id = 'job_vehicle',
            title = '调用执勤车辆',
            icon = 'car',
            type = 'client',
            event = 'qb-job:client:SpawnJobVehicle',
        })
    else
        table.insert(menuOptions, {
            id = 'job_on_duty',
            title = '开始执勤',
            icon = 'check-circle',
            type = 'client',
            event = 'qb-job:client:ToggleDuty',
        })
    end
    return menuOptions
end

-- 使用示例
local isOnDuty = QB.Functions.GetPlayerData().job.onduty
local dynamicMenu = createRadialJobExtrasMenu(isOnDuty)
for _, option in pairs(dynamicMenu) do
    exports['qb-radialmenu']:AddOption(option)
end

内容的提问来源于stack exchange,提问作者C Kolkman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:00:16