请选择 进入手机版 | 继续访问电脑版
查看: 53|回复: 3

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

[复制链接]

38

主题

24

回帖

1199

积分

金牌会员

积分
1199
发表于 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

11

主题

66

回帖

7354

积分

论坛元老

积分
7354
发表于 2026-7-8 00:20:42 | 显示全部楼层
感谢楼主分享

21

主题

97

回帖

1305

积分

金牌会员

积分
1305
发表于 2026-7-9 07:35:05 | 显示全部楼层
感谢楼主分享

0

主题

13

回帖

343

积分

中级会员

积分
343
发表于 2026-7-9 16:56:51 | 显示全部楼层
牛dddddddddddddddddddddd
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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