在ptokax脚本中使用Lua向表格中添加变量的值

最近我将我的ptokax更新到了0.5.3版本,从此我的投票踢人脚本就停止工作了。我的脚本会从其他在线用户那里输入1或2来接受或拒绝踢人的操作,但现在无论用户输入1还是2,脚本都停止了输入和插入表格。我怀疑这可能是由于某些语法变化引起的,请查看我的脚本并提供建议。

   data = " <Nick> 2" -- 这是脚本从dc聊天中接受输入的方式
                s,e,vote= string.find(data,"%b<>%s(.+)")

                if vote == "1" then
                    table.insert(votesPlus,user.sNick)
                    Core.SendToAll("*--"..user.sNick.." 同意--")
                    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.." 拒绝--")
                    if #votesPlus == votes or # votesMinus == votes then
                        stop(nTimerId)
                    end
                    return true
                else
                    -- 用户没有投票,即使投票仍在进行
                end
点赞
用户1190388
用户1190388
  1. 请说明您使用的是用于 Lua 5.3.0 还是 5.1.5 的 PtokaX 发布版本。

  2. NMDC 中央服务器协议 规定聊天消息的格式如下:

    <Nick> the message|
    

其中 | 是分隔符。

除此之外,我没有看到您的脚本有什么问题。然而,您可以优化性能:

local vote = data:match "%b<>%s(%d)"
--由于只需要匹配一个数字,因此使用 local 变量
-- 在可能的情况下使用 local 变量

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
    -- 即使投票活动正在进行中,用户也没有进行投票
    -- 返回 false,以便其他脚本可以处理它
    return false
end

PS:我认为您还应该检查同一用户是否有重复投票!此外,您可以将以下代码:

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

放在对 OnTimer 函数的调用中。

2015-04-29 20:53:49