所以我正在尝试为游戏创建一个控制台命令列表,并且为了让它更好一点,我想在一行上有三个命令。
示例:
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.Access
和Core:GetAccess(player)
需要匹配才能允许要列出的命令。
我现在对格式化并不太感兴趣,我只关心我的具体使用案例是否真的可行。
如果可能,可以使用简单的table.concat
吗?
我在互联网上寻找解决方案,但似乎没有任何东西符合我的特定用法。
答案 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
在加载所有聊天命令后立即调用此小循环。