将来自不同表格的三个项目放在一行上

时间:2014-01-09 20:10:20

标签: lua lua-table

所以我正在尝试为游戏创建一个控制台命令列表,并且为了让它更好一点,我想在一行上有三个命令。

示例:

Commands.afk.Args.Name = "!afk";
Commands.transfer.Args.Name = "!transfer";
Commands.jump.Args.Name = "!jump";

将是:

[!afk] [!jump] [!transfer]

认为我知道如何做到这一点(使用table.concat),但此代码还要求验证我们转发的命令属于用户的访问组(我们如果他们只是一个客人,他们不想发送管理员命令。

Commands.[commandname].Args.Access返回1到6之间的数字,对应于用户所属的成员资格等级。函数Core:GetAccess(player)(其中player是用户的唯一实体表)返回用户所属的成员资格组 - Commands.[commandname].Args.AccessCore:GetAccess(player)需要匹配才能允许要列出的命令。

我现在对格式化并不太感兴趣,我只关心我的具体使用案例是否真的可行。 如果可能,可以使用简单的table.concat吗?

我在互联网上寻找解决方案,但似乎没有任何东西符合我的特定用法。

2 个答案:

答案 0 :(得分:2)

table.concat仅从类似数组的表中格式化纯字符串项。

如果您需要做更复杂的工作,那么您需要自己编写一些代码。

以下内容可能有效:

local available_commands = {}
for cmd, tab in pairs(Commands) do
    if cmd.Args.Access == Core:GetAccess(player) then
        available_commands[#available_commands + 1] = "[!"..cmd.Args.Name.."]"
    end
end
local display_string = table.concat(available_commands)
print(display_string)

答案 1 :(得分:1)

您可以遍历所有命令并将其设置在循环内。

for i,v in pairs(Commands) do
    v.Args=v.Args or {};
    v.Args["name"]=i;
end

在加载所有聊天命令后立即调用此小循环。