2015-02-24 2 views
0

Я пытался кодировать добавление белого списка для моего сервера мод Garry. Я довольно новичок в 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

Примечание: Псевдонимы могут быть изменены. Если неавторизованный пользователь обнаруживает псевдоним кого-либо, разрешенного на сервере, он может просто изменить свое имя на это. Вы должны использовать белый список на основе SteamID. –

ответ

1

Я не знаком с Mod Garry, но если вам просто нужно проверить, если ник игрока находится в таблице, вы можете сделать это:

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

По какой-то причине я получаю эту ошибку с консоли, говоря «bad key to string index (number expected, got string)». Я посмотрел, что дает команда Nick(). Он дает строку, и таблица отформатирована как строка таблицы, поэтому я не знаю, куда идти отсюда. Также я исправил Player Conect, не имея PlayerConnect – Firefox52

0

Сделать таблицу в Whitelisted Steamids (не используйте имена Они не уникальны!)

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

Затем введите код это должно быть что-то вроде этого

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

Обратите внимание, что я не использовал PlayerConnect Hook. Я не использовал его, потому что у нас просто есть имя игроков, но нам нужен полный объект игрока.

Soure: Мой опыт и GMod Wiki

Примечания: Используемые Steamids в примере все мои действительные счета | Код не тестируется, комментарий PLS, если что-то не работает, как ожидалось

Смежные вопросы