北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 5690|回复: 18

如果把验证码换成这个如何?纯净的mud

[复制链接]
发表于 2009-11-14 18:57:23 | 显示全部楼层 |阅读模式
// judge.c
#include
#include
inherit NPC;
string *output = ({
" B"+
" B"+
" B"+
" B"+
" B"+
" B"+
" B"+
" B"+
" B"+
" B",
"B"+
"B"+
"B"+
"B"+
"B"+
"B"+
"B"+
"B"+
"B"+
"B"
});  
string *c_num= ({
"      ;'       B"+
" , ''';;'''' , B"+
",;';;';;';;';;'B"+
";' ,, ;; ,, ;' B"+
"    ,;',';,,   B"+
",,'',,,;;,,;';'B"+
"         ;'    B"+
"     ',,;'     B"+
"       ';'     B"+
"               B",
"               B"+
"               B"+
"               B"+
"               B"+
"               B"+
",,,,,,,,,,,;,  B"+
"               B"+
"               B"+
"               B"+
"               B",
"               B"+
"               B"+
"               B"+
"  ,,,,,,,,,;,  B"+
"               B"+
"             , B"+
"'''''''''''''''B"+
"               B"+
"               B"+
"               B",
"           ,   B"+
"  '''''''''''  B"+
"               B"+
"  ,,,,,,,,,;,  B"+
"               B"+
"             , B"+
"'''''''''''''''B"+
"               B"+
"               B"+
"               B",
",            , B"+
";;'';;'';;'';;'B"+
";;  ;;  ;;  ;; B"+
";;  ;;  ;;  ;; B"+
";; ;;   ;;,,;; B"+
";;,'     ''';; B"+
";;'''''''''';; B"+
"'           '  B"+
"               B"+
"               B",
" ,,,,,,,,,,,;, B"+
"     ;;        B"+
"     ;;   ,    B"+
" '''';;'';;'   B"+
"     ;;  ;;    B"+
"    ;;   ;;    B"+
"    ;;   ;;  , B"+
"'''''''''''''''B"+
"               B"+
"               B",
"     ',,       B"+
"      ';;      B"+
",,,,,,,;,,,,,;,B"+
"     ,  ,      B"+
"    ;;'  ;,    B"+
"   ,;'    ;,   B"+
"  ,;'      ;;  B"+
" ,'         ;' B"+
"               B"+
"               B",
"      ,        B"+
"      ;;       B"+
"      ;;     , B"+
"    ,,;;,,'''''B"+
"''''  ;;       B"+
"      ;;     , B"+
"      ;;,,,,,;,B"+
"       ''''''' B"+
"               B"+
"               B",
"    ,   ;,     B"+
"    ;;  ;;     B"+
"    ;;  ;;     B"+
"    ;;  ;;     B"+
"   ,;'   ;;    B"+
"  ,;'    ';,   B"+
" ,;'      ';;, B"+
",'          ';'B"+
"               B"+
"               B",
"     ;,        B"+
"     ;;   ,    B"+
" '''';;'';;'   B"+
"     ;;  ;;    B"+
"    ,;'  ;;    B"+
"   ,;'   ;;    B"+
"  ,;'    ;;  ; B"+
",''      ';;;;'B"+
"               B"+
"               B",
"      ;,       B"+
"      ;;       B"+
"      ;;       B"+
"'''''';;'''''' B"+
"      ;;       B"+
"      ;;       B"+
"      ;;       B"+
"      ;'       B"+
"               B"+
"               B"
});
string *c_digit = ({
"      ;'       B"+
" , ''';;'''' , B"+
",;';;';;';;';;'B"+
";' ,, ;; ,, ;' B"+
"    ,;',';,,   B"+
",,'',,,;;,,;';'B"+
"         ;'    B"+
"     ',,;'     B"+
"       ';'     B"+
"               B",
"      ;,       B"+
"      ;;       B"+
"      ;;       B"+
"'''''';;'''''' B"+
"      ;;       B"+
"      ;;       B"+
"      ;;       B"+
"      ;'       B"+
"               B"+
"               B",
",,,,,,,,,,,,,;,B"+
"     ,;'       B"+
"   ;,;,,,,,;,  B"+
"   ;;     ;;   B"+
"   ;;,,,,,;;   B"+
"   ;;     ;;   B"+
"   ;;     ;;   B"+
"   ;'''''';'   B"+
"               B"+
"               B",
"          ,;,  B"+
" ,,,,;;'''''   B"+
"      ;;       B"+
",,,,,,;;,,,,,;,B"+
"      ;;       B"+
"      ;;       B"+
"      ;;       B"+
"      ;'       B"+
"               B"+
"               B"
});
int in_ask, answer;
string my_number(int num);
string addcolor(string input);
void create()
{
        set_name("审判官", ({ "judge" }) );
        set("short", "专门对付机器人的" HIY "审判官"NOR "(judge)" );
        set("long",
                "这是一位审查玩家是否是机器人的审判官,你必须答对(answer)他三个问题才能\n"
                "脱离他的掌握。\n");
        set("gender", "男性");
        set("age", 40);
        set("str", 100);
        set("int", 100);
        set("cor", 100);
        set("combat_exp", 9000000);
        set("score", 0);
        set_temp("apply/attack", 200);
        set_temp("apply/damage", 500);
        setup();
   in_ask = 0;
}
void init()
{
        ::init();
        if( !query_heart_beat(this_object()) ) set_heart_beat(1);
        "/cmds/std/look"->look_room(this_player(),environment(this_object()));
        if(!wizardp(this_player()))
        add_action("do_nothing", "");
        add_action("do_answer", "answer");
}
int do_nothing()
{
return 1;
}
void chat()
{
        int a, b, c;
        string oper;
        
        if( in_ask || random(20) > 10 ) return;
        delete_temp("wrong");
        a = random(100000000);
        b = random(100) + 1;
        switch(random(1)) {
                case 0:
                        answer = a;
//                      oper = chinese_number(a) + "加上" + chinese_number(b)+ "等於多少?";
                        oper = my_number(answer);
                        break;
                case 1:
                        answer = a - b;
                        oper = chinese_number(a) + "减去" + chinese_number(b)+ "等於多少?";
                        break;
                case 2:
                        if( a * b < 200 ) {
                                answer = a * b;
                                oper = chinese_number(a) + "乘上" + chinese_number(b)+ "等於多少?";
                        } else {
                                answer = (a * b) % 10;
                           oper = chinese_number(a) + "乘上" + chinese_number(b)+ ",个位数等於多少?";
                        }
                        break;
                case 3:
                        answer = a % b;
                        oper = chinese_number(a) + "除以" + chinese_number(b)+ "馀於多少?";
                        break;
                case 4:
                        oper = chinese_number(a) + "和" + chinese_number(b)+ "的最大公因数是多少?";
                        if( b < a ) { c = b; b = a; a = c; }
                        while( a > 1 && b%a > 1 ) {
                                c = a;
                                a = b%a;
                                b = c;
                        }
                        answer = b%a == 1 ? 1 : a;
                        break;
        }
        message_vision(oper,this_object());
        command("say 以上中文数字是多少?请在二十秒内作答(answer)。");
        in_ask = 1;
        call_out("say_answer", 40);
}
void say_answer()
{
        command("say 这麽简单都不会?答案等於:" + sprintf("%d",answer) + "。");
        in_ask = 0;     
}
int do_answer(string arg)
{
        string s;
        int ans;
        if( !in_ask ) return notify_fail("你必须等下一题。\n");
        if( !arg ) return notify_fail("请你回答一个数字。\n");
        message_vision( CYN "$N答道:" + arg + "\n"NOR, this_player());
        
        if( sscanf(arg, "%d", ans)==1 ) {
                if( ans==answer ) {
                        this_player()->add_temp("robot_check", 1);
                        command("say 答对了!");
                   command("pat " + this_player()->query("id") );
                        in_ask = 1;
                        if( this_player()->query_temp("robot_check") >= 3 ) {
                                command("say 很好,你看起来不像机器人,你可以走了。\n");
                                if( stringp(s = this_player()->query_temp("old_startroom")) )
                                        this_player()->set("startroom", s);
                                this_player()->delete_temp("robot_check");
                                if( stringp(s = this_player()->query_temp("last_location")) )
                                        this_player()->move(s);
                                else
                                        this_player()->move(START_ROOM);
                        }
                } else {
                        command("say 错!");
                        add_temp("wrong/" + this_player()->query("id"), 1);
                        if( query_temp("wrong/" + this_player()->query("id")) > 3 ) {
                                command("say " + this_player()->name() + "你再给我乱猜啊,去死吧。\n");
                                this_player()->receive_damage("kee", 100, this_object());
                                this_player()->die();
                        }
                }
        }
        return 1;
}
string my_number(int num)
{
string outstring;
int out;
int orinum;
string *out8,*out7,*out6,*out5,*out4,*out3,*out2,*out1;
        orinum = num;
        switch(random(10)) {
        case 0: outstring = RED"\n"; break;
        case 1: outstring = HIR"\n"; break;
        case 2: outstring = GRN"\n"; break;
        case 3: outstring = HIG"\n"; break;
        case 4: outstring = YEL"\n"; break;
        case 5: outstring = HIY"\n"; break;
        case 6: outstring = BLU"\n"; break;
        case 7: outstring = HIB"\n"; break;
        case 8: outstring = HIM"\n"; break;
        case 9: outstring = HIC"\n"; break;
        }
        if(num>99999999) num =99999999;
        if(num >= 10000000)
        {
        out = num/10000000;
        out8 = explode(c_num[out],"B");
        num = num%10000000;
        }
        else
        if(orinum > num)        
        out8 = explode(c_num[0],"B");
        else
        out8 = explode(output[0],"B");
        if(num >= 1000000)
        {
        out = num/1000000;
        out7 = explode(c_num[out],"B");
        num = num%1000000;
        }
        else
        if(orinum > num)
        out7 = explode(c_num[0],"B");
        else
        out7 = explode(output[0],"B");  
        if(num >= 100000)
        {
        out = num/100000;
        out6= explode(c_num[out],"B");
        num = num%100000;
        }
        else
        if(orinum > num)
        out6 = explode(c_num[0],"B");
        else
        out6 = explode(output[0],"B");
        if(num >= 10000)
        {
        out = num/10000;
        out5 = explode(c_num[out],"B");
        num = num%10000;
        }
        else
        if(orinum > num)
        out5 = explode(c_num[0],"B");
        else
        out5 = explode(output[0],"B");  
        if(num >= 1000)
        {
        out = num/1000;
        out4 = explode(c_num[out],"B");
        num = num%1000;
        }
        else
        if(orinum > num)
        out4 = explode(c_num[0],"B");
        else
        out4 = explode(output[0],"B");
        if(num >= 100)
        {
        out = num/100;
        out3 = explode(c_num[out],"B");
        num = num%100;
        }
        else
        if(orinum > num)
        out3 = explode(c_num[0],"B");
        else
        out3 = explode(output[0],"B");  
        if(num >= 10)
        {
        out = num/10;
        out2 = explode(c_num[out],"B");
        num = num%10;
        }
        else
        if(orinum > num)
        out2 = explode(c_num[0],"B");
        else
        out2 = explode(output[0],"B");
        out1 = explode(c_num[num],"B");
        for(out=0;out                 outstring += addcolor(out8[out])+"  "+addcolor(out7[out])+"  "+
                                addcolor(out6[out])+"  "+addcolor(out5[out])+"\n";
        outstring += "\n";
        for(out=0;out                 outstring += addcolor(out4[out])+"  "+addcolor(out3[out])+"  "+
                        addcolor(out2[out])+"  "+addcolor(out1[out])+"\n";
return outstring+NOR;
}
string addcolor(string outstring)
{
        switch(random(10)) {
        case 0: outstring += RED; break;
        case 1: outstring += HIR; break;
        case 2: outstring += GRN; break;
        case 3: outstring += HIG; break;
        case 4: outstring += YEL; break;
        case 5: outstring += HIY; break;
        case 6: outstring += BLU; break;
        case 7: outstring += HIB; break;
        case 8: outstring += HIM; break;
        case 9: outstring += HIC; break;
        }
        return outstring;
}
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-11-14 19:01:13 | 显示全部楼层
貌似是西游记里的?早被破了吧?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-11-14 19:05:06 | 显示全部楼层
数学计算肯定不行
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-11-14 19:06:09 | 显示全部楼层
实在不行可以改成微积分,每次打开ie太麻烦了...
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-11-14 19:09:32 | 显示全部楼层
只要是机器可以算的东西,越复杂就越是考玩家而不是考机器人
话说回来,现在还有什么是服务器端算得出来而客户端算不出来的呢?除了图形验证码这种隐藏了具体生成参数的。如果图形验证码没有隐藏相关参数,那也早就被攻破了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-11-14 19:10:18 | 显示全部楼层
可以用ddid提供的插件放在zmud或者mush里,就不用打开ie直接显示在zmud或mush里了
等把这两个打个包放主页上提供下载
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-11-14 19:19:31 | 显示全部楼层
原帖由 icer 于 2009-11-14 07:10 PM 发表
可以用ddid提供的插件放在zmud或者mush里,就不用打开ie直接显示在zmud或mush里了
等把这两个打个包放主页上提供下载



55555 ddid的那个,对mush 4.18不支持。。。。
我代表汉化用户对此提出抗议
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-11-14 19:21:22 | 显示全部楼层
现在貌似图像识别技术也出现了........

大家群策群力,想想有没有更简洁更有效的方法
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-11-14 19:24:09 | 显示全部楼层

回复 1# 的帖子

看着怎么头晕呀
FAINT
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-11-14 19:36:26 | 显示全部楼层
哈哈,在现有的框架下,我写的那个版本是比较省事也比较快的了,如果非要4.18支持,用文件操作的方法也是可行的,之前“新手抄经口令”就是用的文件操作的方法,小刀可以参考。不过个人感觉,文件操作还是比较麻烦,关键是生成的图片文件在程序完成之后就没有用了。

但,其实,刚刚找到一种打破现有框架的方法,还在研究中……

哈哈哈~

[ 本帖最后由 ddid 于 2009-11-14 07:39 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-19 02:19 AM , Processed in 0.010004 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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