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

CFX FiveM中Lua遍历Config.Skills插入菜单元素显示重复值求助

问题分析与解决方案

你的代码存在两个核心问题:

  1. 循环逻辑错误:在for type, value in pairs(Config.Skills)循环内部,你每次都手动插入stamina和strength两个固定按钮,并且每次循环都调用TMC.Functions.OpenMenu,导致菜单被重复打开,最终元素列表会包含重复项,显示值混乱。
  2. 硬编码按钮属性:按钮的name、label都是固定值,没有利用循环中的type和value动态生成,无法匹配每个技能的实际数据。

修正后的代码

function SkillMenu()
    FetchSkills()
    Wait(1000)
    RefreshSkills()
    local elements = {}
    -- 循环遍历每个技能,动态生成对应按钮
    for type, value in pairs(Config.Skills) do
        -- 根据技能类型设置对应的显示标签
        local skillLabel = type == "stamina" and "Stamina" or "Strength"
        table.insert(elements, {
            type = 'button',
            name = type, -- 动态使用技能类型作为name
            label = skillLabel, -- 动态设置显示标签
            description = type .. value["Current"] .. "%", -- 正确关联当前技能的Current值
            icon = 'fad fa-heartbeat',
            disabled = true
        })
    end
    -- 所有元素插入完成后,统一打开菜单
    TMC.Functions.OpenMenu({
        namespace = "skillmenu",
        type = 'openMenu',
        title = "Skill menu",
    }, elements, function(close, confirmed)
    end, function(selected)
    end, function(change)
        -- 简化判断,直接关闭菜单
        TMC.Functions.CloseMenu()
    end)
end

关键修正说明

  • 将TMC.Functions.OpenMenu移到循环外部,确保所有技能按钮都添加到elements后再打开菜单,避免重复打开和元素混乱。
  • 每个循环迭代只生成一个对应技能的按钮,利用循环变量type和value动态设置按钮的name、label和description,确保每个按钮对应正确的技能数据。
  • 简化了菜单变化事件的判断逻辑,因为两个按钮的行为都是关闭菜单,无需分别判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:33