2014-01-09 42 views
2

所以我試圖創建一個遊戲控制檯命令列表,並使其稍微好一些,我希望在一行中有三個命令。在一條線上放置三個不同表格的項目

例子:

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

是:

[轉!]

認爲我知道如何做到這一點(通過使用table.concat [AFK!] [跳!] ),但是這段代碼還需要驗證我們轉發的命令是否屬於用戶的訪問組(如果他們只是一個客戶,我們不希望向他們發送管理員命令)。

Commands.[commandname].Args.Access返回一個介於1和6之間的數字,它對應於用戶所屬的成員等級。功能Core:GetAccess(player)(其中player是用戶的唯一實體表)返回用戶所屬的成員資格組 - Commands.[commandname].Args.AccessCore:GetAccess(player)需要匹配才能允許列出該命令。

我現在對格式不太感興趣,我只關心我的具體使用情況是否可行。 如果有可能,可以使用簡單的table.concat

我已經在網上尋找解決這個問題的方法,但是沒有任何東西看起來符合我的特定用法。

回答

1

你可以只通過所有的命令進行迭代,並設置它的內部循環。

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

在加載所有聊天命令後立即調用這個小循環。

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) 
+0

而不是每個條目執行兩個連接,你可以將它們明確地分配給數組,並執行此操作:'local display_string ='[!' .. table.concat(available_commands,'] [!')..']''這當然假設至少有一個命令,但它是一個簡潔的捷徑。 –

相關問題