RakSamp смс доступ

7 СМЕРТНЫХ ГРЕХОВ

Известный
Автор темы
515
159
Есть функа на проверку смс доступа -
LUA:
function isSmsDostup(nickname, lvl)
    local f = io.open(bot_name..'/smsdostup.ini', 'r')
    for line in io.lines(bot_name..'/smsdostup.ini') do
        if line:match(nickname .." %- (%d+)") or line:match("(%[.*%].*) %- (%d+)") then
            levelplayer = line:match(nickname .." %- (%d+)")
            nicks, levelplayer2 = line:match("(%[.*%].*) %- (%d+)")
            if tonumber(levelplayer) or tonumber(levelplayer2) >= tonumber(lvl) then
                return true
            end
        end
    end
    f:close()
    return false
end
Если в списке есть ник (например: [BOT]Artem) то доступ к смс есть у всех игроков хотя их нету даже в списке.

Пробовал сделать так -
LUA:
function isSmsDostup(nickname, lvl)
    local f = io.open(bot_name..'/smsdostup.ini', 'r')
    for line in io.lines(bot_name..'/smsdostup.ini') do
        if line:match(nickname .." %- (%d+)") or line:match("(%[.*%].*) %- (%d+)") then
            levelplayer = line:match(nickname .." %- (%d+)")
            nicks, levelplayer2 = line:match("(%[.*%].*) %- (%d+)")
            if tonumber(levelplayer) or tonumber(levelplayer2) >= tonumber(lvl) then
                if nickname == nicks then
                    return true
                end
            end
        end
    end
    f:close()
    return false
end

Теперь читает ники [BOT]Artem нормально и т.д
Но проблема теперь в другом обычные ники по типу botinok, не читает что они есть в списке понимаю что иза nickname == nicks
Кароч я даун помогите пж 😇

1678556395027.png
 
Решение
Почему не используешь cjson или inicfg? Зачем эти сложности с регулярками
А также. Использовать в качестве директории ник бота - плохая затея

Lua:
local bot_name = "test"

function isSmsDostup(nickname, lvl)
    local file = io.open(bot_name..'/smsdostup.ini', 'r')
    if not file then
        error("No such file or directory")
        -- return false
    end
   
    for line in file:lines() do
        local fnick, flvl = line:match("(.+) %- (%d+)$")
        if fnick and flvl and fnick:lower() == nickname:lower() then
            if tonumber(flvl) >= lvl then
                file:close()
                return true
            end
        end
    end
    file:close()
    return false
end

print(false == isSmsDostup("botinok", 5))...

The Spark

Известный
653
673
Почему не используешь cjson или inicfg? Зачем эти сложности с регулярками
А также. Использовать в качестве директории ник бота - плохая затея

Lua:
local bot_name = "test"

function isSmsDostup(nickname, lvl)
    local file = io.open(bot_name..'/smsdostup.ini', 'r')
    if not file then
        error("No such file or directory")
        -- return false
    end
   
    for line in file:lines() do
        local fnick, flvl = line:match("(.+) %- (%d+)$")
        if fnick and flvl and fnick:lower() == nickname:lower() then
            if tonumber(flvl) >= lvl then
                file:close()
                return true
            end
        end
    end
    file:close()
    return false
end

print(false == isSmsDostup("botinok", 5))
print(false == isSmsDostup("[BOT]Artem", 2))
print(false == isSmsDostup("false", 4))

print(true == isSmsDostup("botinok", 3))
print(true == isSmsDostup("[BOT]Artem", 0))
print(true == isSmsDostup("botinok", 4))
print(true == isSmsDostup("[BOT]Artem", 1))