libai.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 191 行

C
191
字号
inherit NPC;void create(){        set_name("李白", ({ "li bai", "li" }));        set("long", "太白居士,他看起来满腹经纶。\n");        set("gender", "男性");        set("age", 65);        set_skill("literate", 300);        set("max_jing",220);        set_skill("taoism", 300);        set_skill("unarmed", 280);        set_skill("dodge", 280);        set_skill("parry", 280);        set_temp("apply/attack", 280);        set_temp("apply/defense", 280);        set_temp("apply/damage", 200);        set("combat_exp", 1000000);        set("shen_type", 1);        setup();        carry_object("/clone/misc/cloth")->wear();}void init(){        ::init();        add_action("do_learn","learn");        add_action("do_learn","xue");}int recognize_apprentice(object ob){        if (!(int)ob->query_temp("mark/朱"))                return 0;        ob->add_temp("mark/朱", -1);        return 1;}int accept_object(object who, object ob){        int learn;        learn=who->query_skill("literate",1);        learn= learn?learn*10:500;        if( !who->query_temp("mark/朱") ) {                if( ob->value() >= learn ) {                        say(this_object()->name()+"点了点头,说道:很好,从今天起你随时可以来问我有关读书识\n"                                "                      字(literate)的任何问题。\n");                        who->add_temp("mark/朱", ob->value()/10);                        return 1;                } else {                        say(this_object()->name()+"说道:你的诚意不够,这钱还是拿回去吧。\n");                        return 0;                }        } else if(ob->value()){                say(this_object()->name()+"点了点头,说道:哦,向你这麽有心的学生还真是不多见,好好努力\n"                        "                      将来必定前途无量,谢了。\n");                        who->add_temp("mark/朱", ob->value()/10);        }        return 1;}int do_learn(string arg){        string skill, teacher;        object me,ob,room;        int learn;        int master_skill, my_skill, gin_cost, my_combat_exp,grade;        me=this_player();        ob=this_object();        if (me->is_busy())                return notify_fail("你现在正忙着呢。\n");        if(!arg || arg=="?" || arg=="/?")                return notify_fail("指令格式:learn <某人> <技能>\tlearn <技能> from <某人>\n");        if ((sscanf(arg, "%s from %s", skill,teacher)!=2 ))                if ((sscanf(arg, "%s %s", teacher, skill)!=2 ))                        return notify_fail("指令格式:learn <某人> <技能>\tlearn <技能> from <某人>\n");        if (!ob->id(teacher))   return 0;        if( me->is_fighting() )                return notify_fail("临阵磨枪?来不及啦。\n");        if (me->query_skill("literate",1)<199)               return notify_fail("你还是先到其他地方学吧。\n");        if( !living(ob) )                return notify_fail("嗯....你得先把" + ob->name() + "弄醒再说。\n");        learn=me->query_skill("literate",1);        if( !me->query_temp("mark/朱") || me->query_temp("mark/朱")<learn){                command("say 咦?"+me->name()+",我不记得收过你这个学生啊....\n");                return 0;        }        if (!learn)     learn=10;        if (skill!="literate")                return notify_fail("这项技能你恐怕必须找别人学了。\n");        if (! room=find_object(ob->query("startroom")))                room=load_object(ob->query("startroom"));        if (room!=environment()){                command("say 我出来办点事,等我回去再说吧!");                return 1;        }        if (ob->query("env/no_teach")){                command("say 我今天累了,我要去休息了!");                return 1;        }        my_skill = me->query_skill(skill, 1);        master_skill = ob->query_skill(skill, 1);        if( my_skill >= master_skill )                return notify_fail("这项技能你的程度已经不输你师父了。\n");        gin_cost = 150 / (int)me->query_int() + 1;        if( !my_skill ) {                gin_cost *= 2;                me->set_skill(skill,0);        }        printf("你向%s请教有关「%s」的疑问。\n", ob->name(), to_chinese(skill));        if( (int)ob->query("jing") > gin_cost/10 + 1 )        {                ob->receive_damage("jing", gin_cost/10+1);        }        else        {                write("但是" + ob->name() + "显然太累了,没有办法教你什麽。\n");                ob->set("env/no_teach",1);                call_out("do_sleep",1,ob);                return 1;        }                        my_combat_exp = (int)me->query("combat_exp");        if(my_combat_exp < 50000)                grade = 1;        else if(my_combat_exp < 100000)                grade = 3;        else if(my_combat_exp < 500000)                grade = 7;        else                grade = 13;        if ( grade < 1 )                grade = 1;        if((int)me->query("jing") > gin_cost+20 )        {                printf("你听了%s的指导,似乎有些心得。\n", ob->name());                me->improve_skill(skill, grade * (10 + random((int)me->query_int() - 9)));        }        else        {                write("你今天太累了,结果什么也没有学到。\n");                return 1;        }      if (gin_cost<1) gin_cost=1;        me->receive_damage("jing", gin_cost );        me->add_temp("mark/朱", -learn);        return 1;}int do_sleep(object ob){        object room;        if (!ob)        return  0;        message("vision",ob->name()+"打了个哈欠,揉揉眼睛,回房睡觉去了。\n",environment(ob));        if (!room=find_object("/d/changan/shuyan2"))                room=load_object("/d/changan/shuyuan2");        ob->move(room);        command("sleep");        call_out("do_back",20,ob);        return 1;}int do_back(object ob){        object room;        if (!ob)        return 0;        if (!living(ob)){                remove_call_out("do_back");                call_out("do_back",10,ob);        }        ob->delete("short");        ob->delete("env");        if (!room=find_object(ob->query("startroom")))                room=load_object(ob->query("startroom"));        ob->move(room);        message("vision",ob->name()+"伸了伸懒腰,微笑地走了过来。\n",room);        return 1;}int return_home(object home){        if( !environment()        ||      environment()==home )                return 1;        // Are we able to leave?        if( !living(this_object())        ||      is_fighting()        ||      !mapp(environment()->query("exits")) ){           call_out("return_home",10,home);           return 1;         }        // Leave for home now.        message("vision", this_object()->name() + "急急忙忙地离开了。\n",                environment(), this_object());        return move(home);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?