Добавить значение переменной в таблицу в lua для скрипта ptokax

Недавно я обновил свой ptokax до 0.5.3, и с тех пор мой скрипт voicekick перестал работать, так как в моем скрипте входные данные других пользователей в сети равны 1 или 2, так как они принимают или запрещают пнуть пользователя или нет, но теперь, когда пользователь вводит 1 или 2 сценарий перестал принимать входные данные и вставлять их в таблицу, я подозреваю, что это возможно из-за некоторого изменения синтаксиса. пожалуйста, посмотрите на мой сценарий и предложите.

   data = " <Nick> 2" -- this is the way script takes input frm dc chat
                s,e,vote= string.find(data,"%b<>%s(.+)")

                if vote == "1" then
                    table.insert(votesPlus,user.sNick)
                    Core.SendToAll("*--"..user.sNick.." accepts--")
                    if #votesPlus == votes or # votesMinus == votes then
                        stop(nTimerId)
                    end
                return true
                elseif vote == "2" then
                    table.insert(votesMinus,user.sNick)
                    Core.SendToAll("*--"..user.sNick.." denies--")
                    if #votesPlus == votes or # votesMinus == votes then
                        stop(nTimerId)
                    end
                    return true
                else
                    -- the user is not voting even when poll active
                end

1 ответ

Решение
  1. Пожалуйста, укажите, используете ли вы PtokaX, выпущенный для Lua 5.3.0 или 5.1.5.
  2. Протоколы концентратора NMDC определяют, что сообщения чата отправляются в следующем формате:

    <Nick> the message|
    

    где | действует как разделитель.

Кроме того, я не вижу никаких проблем с вашим сценарием. Вы можете оптимизировать производительность:

local vote = data:match "%b<>%s(%d)"
-- since you only want a single digit to be matched
-- also, use local variable whenever possible

if vote == "1" then
    table.insert(votesPlus, user.sNick)
    Core.SendToAll( "*--"..user.sNick.." accepts--" )
    if #votesPlus == votes or #votesMinus == votes then
        stop( nTimerId )
    end
    return true
elseif vote == "2" then
    table.insert(votesMinus, user.sNick)
    Core.SendToAll( "*--"..user.sNick.." denies--" )
    if #votesPlus == votes or #votesMinus == votes then
        stop( nTimerId )
    end
    return true
else
    -- the user is not voting even when poll active
    -- return false so that further scripts might be able to process it
    return false
end

PS: я думаю, вам также следует проверить, голосует ли один и тот же пользователь дважды! Также вы можете поставить следующий код:

if #votesPlus == votes or #votesMinus == votes then
    stop( nTimerId )
end

в призыве к OnTimer функция.

Другие вопросы по тегам