2015-02-24 170 views
0

我一直在嘗試爲我的Garry的Mod服務器編寫白名單加載項。我對LUA相當陌生,因此非常感謝任何幫助。我有一個想法,但我不知道如何搜索它。說我有一張桌子在lua(白名單)中搜索表格

local Table = { Player1, Player2, Player3 } 
hook.Add("PlayerConect", "Connect", function(ply) 
     if ply:Nick() != Table then 
     ply:Kick("Reason here") 
    end 
end) 

這是據我已經能夠理解如何做。感謝您的時間。

+1

注:暱稱可以改變。如果未經授權的用戶發現服務器上允許的人的暱稱,他們可以將其名稱更改爲該名稱。你應該根據SteamIDs進行白名單。 – 2015-02-24 14:12:07

回答

1

我不熟悉蓋瑞模組,但如果你只是需要檢查,如果玩家的缺口是在表中,你可以這樣做:如果你使用一個稍微不同的表來保存

local Table = { "Player1", "Player2", "Player3" } 
hook.Add("PlayerConect", "Connect", function(ply) 
    local notfound = true 
    -- iterate through all elements in the table 
    for index, nick in ipairs(Table) do 
     if ply:Nick() == nick then 
     notfound = false 
     break 
     end 
    end 
    if notfound then ply:Kick("Reason here") end 
end) 

球員的缺口,那麼檢查將變得更簡單(Table現在用作hash table):

local Table = { Player1 = true, Player2 = true, Player3 = true } 
hook.Add("PlayerConect", "Connect", function(ply) 
    -- check if the nick is present in the table 
    if not Table[ply:Nick()] then ply:Kick("Reason here") end 
end) 
+0

出於某種原因,我從控制檯得到這個錯誤,說「字符串索引的錯誤鍵(期望的數字,得到的字符串)」我已經看了:Nick()命令給出了什麼。它提供了一個字符串,並且表格被格式化爲一個字符串表格,所以我不知道該從哪裏去。我也修復了播放器連接沒有PlayerConnect – Firefox52 2015-02-25 00:39:00

0

讓列入白名單的SteamIDs的表(不要使用名字,他們不是唯一的!)

local WhitelistedIDs = { 
    ["STEAM_0:0:52031589"] = true, 
    ["STEAM_0:0:109379505"] = true, 
    ["STEAM_0:0:115441745"] = true 
} 

然後編寫代碼應該是這樣的,我沒有使用PlayerConnect

hook.Add("PlayerInitialSpawn", "MyAwesomeWhitelist", function(--[[ Player ]] player) 
if (~WhitelistedIDs[player::SteamID()]) then 
    player:Kick("Sorry! You are not Whitelisted!") 
end) 

注意。我沒有使用它,因爲我們只有玩家的名字,但我們需要一個完整的玩家對象。

SOURE:我的經驗和GMOD維基

注:例如,在使用SteamIDs都是我自己的有效賬戶 | 代碼不testest,請注意,如果事情沒有按預期工作