CFX FiveM中Lua遍历Config.Skills插入菜单元素显示重复值求助
问题分析与解决方案
你的代码存在两个核心问题:
- 循环逻辑错误:在
for type, value in pairs(Config.Skills)循环内部,你每次都手动插入stamina和strength两个固定按钮,并且每次循环都调用TMC.Functions.OpenMenu,导致菜单被重复打开,最终元素列表会包含重复项,显示值混乱。 - 硬编码按钮属性:按钮的
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
相关产品推荐
相关产品推荐

