Lua 将不同表格中的三个项目放在一行上
所以我试图为一个游戏创建一个控制台命令列表,为了让它稍微好一点,我希望在一行上有三个命令 例如:Lua 将不同表格中的三个项目放在一行上,lua,lua-table,Lua,Lua Table,所以我试图为一个游戏创建一个控制台命令列表,为了让它稍微好一点,我希望在一行上有三个命令 例如: Commands.afk.Args.Name = "!afk"; Commands.transfer.Args.Name = "!transfer"; Commands.jump.Args.Name = "!jump"; 将是: [!afk][!跳转][!转移] 我想我知道如何做到这一点(通过使用table.concat),但这段代码还需要验证我们转发的命令是否属于用户的访问组(例如,如果它们只是
Commands.afk.Args.Name = "!afk";
Commands.transfer.Args.Name = "!transfer";
Commands.jump.Args.Name = "!jump";
将是:
[!afk][!跳转][!转移]
我想我知道如何做到这一点(通过使用table.concat
),但这段代码还需要验证我们转发的命令是否属于用户的访问组(例如,如果它们只是来宾,我们不想向它们发送管理员命令)
命令。[commandname].Args.Access
返回一个介于1和6之间的数字,该数字对应于用户所属的成员级别。函数Core:GetAccess(player)
(其中player
是用户的唯一实体表)返回用户所属的成员组-命令。[commandname]。Args.Access和Core:GetAccess(player)
需要匹配才能列出命令
我现在对格式不是太在意,我只是更关心我的特定用例是否实际可行。
如果可能,是否可以使用简单的table.concat
我已经在互联网上找到了解决方案,但没有任何东西与我的特定用例相匹配。
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)
您可以迭代所有命令并将其设置在循环内
for i,v in pairs(Commands) do
v.Args=v.Args or {};
v.Args["name"]=i;
end
加载所有聊天命令后立即调用这个小循环。不必为每个条目执行两个串联,您可以将它们简单地分配给数组并执行以下操作:
local display_string='[!'…table.concat(可用的_命令,'][!')…]'
这当然假定至少有一个命令,但这是一个简洁的快捷方式。