魔力宝贝

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

[GA] Captcha.lua--自动加点

[复制链接]
发表于 前天 02:01 | 显示全部楼层 |阅读模式
Delegate.RegInit("Captcha_Init");

function Init_Captcha(_index)
        return 1;
end

function Code_new_tbl()
        local _tbl_Codeinfo =
        {
                Code = "";
                State = 1;
                Time = 0;
        }
        return _tbl_Codeinfo;
end

local codeTab = {
                                ["1"] = {
                                                {0,0,1,0,0},
                                                {0,1,1,0,0},
                                                {0,0,1,0,0},
                                                {0,0,1,0,0},
                                                {0,0,1,0,0},
                                                {0,0,1,0,0},
                                                {1,1,1,1,1}
                                                },
                                ["2"] = {
                                                {0,0,0,0,0},
                                                {0,1,1,1,0},
                                                {1,0,0,0,1},
                                                {0,0,0,1,0},
                                                {0,0,1,0,0},
                                                {0,1,0,0,0},
                                                {1,1,1,1,1}
                                                },
                                ["3"] = {
                                                {1,1,1,1,0},
                                                {0,0,0,0,1},
                                                {0,0,0,0,1},
                                                {1,1,1,1,1},
                                                {0,0,0,0,1},
                                                {0,0,0,0,1},
                                                {1,1,1,1,0}
                                                },
                                ["4"]= {
                                                {1,0,1,0,0},
                                                {1,0,1,0,0},
                                                {1,0,1,0,0},
                                                {1,0,1,0,0},
                                                {1,1,1,1,1},
                                                {0,0,1,0,0},
                                                {0,0,1,0,0}
                                                },
                                ["5"] = {
                                                {1,1,1,1,1},
                                                {1,0,0,0,0},
                                                {1,0,0,0,0},
                                                {1,1,1,1,1},
                                                {0,0,0,0,1},
                                                {0,0,0,1,0},
                                                {0,0,1,0,0}
                                                },
                                ["6"] = {
                                                {1,1,1,1,1},
                                                {1,0,0,0,0},
                                                {1,0,0,0,0},
                                                {1,1,1,1,1},
                                                {1,0,0,0,1},
                                                {1,0,0,0,1},
                                                {0,1,1,1,0}
                                                },
                                ["7"] = {
                                                {1,1,1,1,1},
                                                {0,0,0,0,1},
                                                {0,0,0,1,0},
                                                {0,0,1,0,0},
                                                {0,0,1,0,0},
                                                {0,0,1,0,0},
                                                {0,0,1,0,0}
                                                },
                                ["8"] = {
                                                {1,1,1,1,1},
                                                {1,0,0,0,1},
                                                {1,0,0,0,1},
                                                {1,1,1,1,1},
                                                {1,0,0,0,1},
                                                {1,0,0,0,1},
                                                {1,1,1,1,1}
                                                },
                                ["9"] = {
                                                {0,1,1,1,0},
                                                {1,0,0,0,1},
                                                {1,0,0,0,1},
                                                {0,1,1,1,0},
                                                {0,0,0,0,1},
                                                {0,0,0,0,1},
                                                {0,0,1,1,0}
                                                },
                                ["0"] = {
                                                {0,1,1,1,0},
                                                {1,0,0,0,1},
                                                {1,0,0,0,1},
                                                {1,0,0,0,1},
                                                {1,0,0,0,1},
                                                {1,0,0,0,1},
                                                {0,1,1,1,0}
                                                },
                                };
                               
local codeRandom = {
                                        "1","2","3","4","5",
                                        "6","7","8","9","0",
}

local useCode = {"●","●","●","●","●"};
local unuseCode = {" "};

function makeCod()
        local strTab = {codeRandom[math.random(1,#(codeRandom))],
                                        codeRandom[math.random(1,#(codeRandom))],
                                        codeRandom[math.random(1,#(codeRandom))],
                                        codeRandom[math.random(1,#(codeRandom))]};
        return strTab;
end

function makeVerifyCod(tab)
        local num = {2};
        local enter = {3};
        local rTab = {};
        local tTab = {codeTab[tab[1]][1],num,codeTab[tab[2]][1],num,codeTab[tab[3]][1],num,codeTab[tab[4]][1],enter,
                                        codeTab[tab[1]][2],num,codeTab[tab[2]][2],num,codeTab[tab[3]][2],num,codeTab[tab[4]][2],enter,
                                        codeTab[tab[1]][3],num,codeTab[tab[2]][3],num,codeTab[tab[3]][3],num,codeTab[tab[4]][3],enter,
                                        codeTab[tab[1]][4],num,codeTab[tab[2]][4],num,codeTab[tab[3]][4],num,codeTab[tab[4]][4],enter,
                                        codeTab[tab[1]][5],num,codeTab[tab[2]][5],num,codeTab[tab[3]][5],num,codeTab[tab[4]][5],enter,
                                        codeTab[tab[1]][6],num,codeTab[tab[2]][6],num,codeTab[tab[3]][6],num,codeTab[tab[4]][6],enter,
                                        codeTab[tab[1]][7],num,codeTab[tab[2]][7],num,codeTab[tab[3]][7],num,codeTab[tab[4]][7],enter};
        rTab = makeTabAdd(tTab);
        --print(TableList(rTab, "rTab"));
        return rTab;
end

function makeStr(stab)
        local str = "";
        for k,v in pairs(stab) do
                if(v == 0)then
                        str = str..unuseCode[math.random(1,#(unuseCode))];
                elseif(v == 1) then
                        str = str..useCode[math.random(1,#(useCode))];
                elseif(v == 2) then
                        str = str.."‖";
                elseif(v == 3) then
                        --str = str.."\n";
                end
        end

        return str;
end

function makeTabAdd(tab)
        local rsTab = {} ;
        for k,v in pairs(tab) do
                for _k,_v in pairs(v) do
                        table.insert(rsTab,_v);
                end
               
        end
        return rsTab;
end
--验证码生成部分结束

function Captcha_WindowEvent( _index_me, _index_tome, _sequence, _select, _data)
        local _Player = Playerkey(_index_tome);
        if(tbl_Codeinfo[_Player] == nil) then
                tbl_Codeinfo[_Player] = Code_new_tbl();
        end
        if( _sequence == 500 )then
                if(_select == %按钮_确定%) then
                        if(_data == tbl_Codeinfo[_Player].Code) then
                                tbl_Codeinfo[_Player].Time = os.time();
                                tbl_Codeinfo[_Player].State = 0;
                                NLG.SystemMessage(_index_tome,"[验证码系统]验证码输入正确!您在未来的60分钟内将不再需要输入验证码。现在请您重新跟NPC对话!")
                                --NLG.ShowWindowTalked( _index_tome, _index_me, %窗口_信息框%, %按钮_关闭%, 600, NLG.c("\\n\\n验证码输入正确!\\n\\n您在未来的60分钟内将不再需要输入验证码。\\n\\n现在请您重新跟NPC对话!"));
                        else
                                NLG.ShowWindowTalked( _index_tome, _index_me, %窗口_信息框%, %按钮_关闭%, 601, NLG.c("\\n\\n验证码输入错误,请重新输入!"));
                        end
                end
        end
end

function Captcha_Init()
        if (Captcha_index == nil) then
                Captcha_index = NL.CreateNpc("lua/Module/Captcha.lua", "Init_Captcha");
                Char.SetData(Captcha_index,%对象_形象%,10414);
                Char.SetData(Captcha_index,%对象_原形%,10414);
                Char.SetData(Captcha_index,%对象_X%,78);
                Char.SetData(Captcha_index,%对象_Y%,77);
                Char.SetData(Captcha_index,%对象_地图%,777);
                Char.SetData(Captcha_index,%对象_方向%,4);
                Char.SetData(Captcha_index,%对象_名字%,"验证码");
                NLG.UpChar(Captcha_index);
                --Char.SetTalkedEvent("lua/Module/Captcha.lua", "Captcha_Talk", Captcha_index);
                Char.SetWindowTalkedEvent("lua/Module/Captcha.lua", "Captcha_WindowEvent", Captcha_index);
        end
        Protocol.OnRecv("lua/Module/Captcha.lua", "Captcha_Recv", %RECV_WN%)
end

function Captcha_Recv(fd,head,packet)
        local player = Protocol.GetCharByFd(fd);
        local _Player = Playerkey(player);
        if(tbl_Codeinfo[_Player] == nil) then
                tbl_Codeinfo[_Player] = Code_new_tbl();
        end
        --验证间隔是3600秒,既1小时
        if(os.time() - tbl_Codeinfo[_Player].Time > 3600) then
                tbl_Codeinfo[_Player].State = 1;
                local SplitArray = Split(packet,":");
                if(SplitArray[3] == "5n" or SplitArray[3] == "5i" or SplitArray[3] == "5S") then
                        local verifyCode = makeCod();
                        tbl_Codeinfo[_Player].Code = verifyCode[1]..verifyCode[2]..verifyCode[3]..verifyCode[4];
                        local checkTab = makeVerifyCod(verifyCode);
                        local checkStr = "";
                        checkStr = makeStr(checkTab);
                        local window_info=""..checkStr.."\\n请输入上面显示的验证码(均为数字):"
                        NLG.ShowWindowTalked( player, Captcha_index, %窗口_输入框%, %按钮_确定关闭%, 500, window_info);
                        return 1;
                end
        end

end

回复

使用道具 举报

Archiver|魔力研究社

GMT+8, 2025-5-12 19:25 , Processed in 0.144806 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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