查看: 45|回复: 3

[Lua] 真人在线验证防挂机系统

[复制链接]

19

主题

14

回帖

666

积分

高级会员

积分
666
发表于 2026-7-7 19:21:10 | 显示全部楼层 |阅读模式
-- 全局防挂机检测 60秒检测一次
SetTimer(60,function()
    local plyList = GetAllPlayerList()
    for _,pid in pairs(plyList) do
        local p = GetPlayerObj(pid)
        if p and p:IsOnline() then
            -- 获取玩家无操作时长(秒)
            local AfkTime = tonumber(p:GetVar("AFK_TIME")) or 0
            AfkTime = AfkTime + 60
            p:SetVar("AFK_TIME",AfkTime)

            -- 5分钟无操作弹出验证
            if AfkTime >= 300 and p:GetVar("IS_CHECK_AFK") ~= "1" then
                p:SetVar("IS_CHECK_AFK","1")
                p:ShowDialog("真人验证", "检测到您长时间挂机,请点击确定完成验证!超时将被强制下线!","立即验证")
                -- 30秒超时踢人
                SetTimer(30,function()
                    if p:GetVar("IS_CHECK_AFK") == "1" then
                        p:KickPlayer()
                        SendAllMsg("【系统】玩家【"..p:GetName().."】挂机验证超时,已强制下线!")
                    end
                end)
            end
        end
    end
end)

-- 玩家操作重置挂机时间(移动/点击/交易触发)
function OnPlayerAction(Player)
    Player:SetVar("AFK_TIME",0)
    Player:SetVar("IS_CHECK_AFK","0")
end

-- 验证通过奖励
function OnClickAfkCheck(self)
    self:SetVar("AFK_TIME",0)
    self:SetVar("IS_CHECK_AFK","0")
    self:AddGold(200)
    self:SendMsg("真人验证通过!奖励200元宝,请勿长期挂机!")
end

2

主题

63

回帖

7069

积分

论坛元老

积分
7069
发表于 7 天前 | 显示全部楼层
感谢楼主分享

10

主题

85

回帖

954

积分

高级会员

积分
954
发表于 6 天前 | 显示全部楼层
感谢楼主分享

0

主题

12

回帖

325

积分

中级会员

积分
325
发表于 6 天前 | 显示全部楼层
牛dddddddddddddddddddddd
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表