gulong.c

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

C
213
字号
// gulong.c
inherit NPC;
#include <ansi.h>;

int do_bihua(string arg);
int do_setname(string arg);
int do_setcan(string arg);
int clear_title(string arg);
void add_title(object me,string arg);
void clear();
string ask_home();
string ask_me(string arg);
string ask_candidate();
string ask_nowcan();
int do_halt();

void create()
{
        set_name("古龙", ({ "gu long"}) );
        set("gender", "男性");
        set("nickname", HIR"至公无私"NOR);
        set("title", HIY"天外飞龙"NOR);
        set("age", 65);
        set("long",
            "这是一位不修边幅的狂放中年人,一张胖胖的脸,十分惹人亲近。\n");
        set("combat_exp",1);
        set("class","scholar");
        set("shen_type", 1);
        set("attitude", "friendly");

        set("apply/attack", 200);
        set("apply/defense", 200);

        set("max_qi", 2800);
        set("max_neili", 1800);
        set("neili", 1800);
        set("max_jing", 800);

        set("win_times", 0);

        set_skill("force", 80);
        set_skill("unarmed", 80);
        set_skill("sword",80);
        set_skill("parry",80);
        set_skill("dodge", 80);
        set("inquiry", ([
                "比武大会"     : (: ask_me :),
                "候选人"       : (: ask_candidate :),
                "当前候选人"   : (: ask_nowcan:),
                "回家"         : (: ask_home:),
        ]));

        setup();
        set("candidate",this_object());
        carry_object("/clone/misc/cloth")->wear();
        carry_object("/d/city/obj/changjian")->wield();
}

void init()
{
        ::init();
        add_action("ask_me", "start");
        add_action("ask_candidate", "can");
        add_action("ask_nowcan", "nowcan");
        add_action("do_setname", "setname");
        add_action("do_setcan", "setcan");
        add_action("do_clearname", "clear");

        add_action("do_bihua", "fight");
        add_action("do_bihua", "hit");
        add_action("do_bihua", "kill");
        add_action("do_bihua", "bihua");
        add_action("do_bihua", "bi");
        add_action("do_halt", "halt");
}

int ask_me(string arg)
{
        string faction;
        object* ob;
        int i;
        ob = users();

        if ( !wizardp(this_player()) )
        {
            write("你无权召开比武大会!! \n");
            return 1;
        }
        switch (arg)
        {
            case "bt": 
                 faction="白驼山派";
                 break; 
            case "em": 
                 faction="峨嵋派";
                 break; 
            case "gb": 
                 faction="丐帮";
                 break; 
            case "hs": 
                 faction="华山派";
                 break; 
            case "lj": 
                 faction="灵鹫宫";
                 break; 
            case "mj": 
                 faction="明教";
                 break; 
            case "sl": 
                 faction="少林派";
                 break; 
            case "th": 
                 faction="桃花岛";
                 break; 
            case "wd": 
                 faction="武当派";
                 break; 
            case "xx": 
                 faction="星宿派";
                 break; 
            case "xs": 
                 faction="雪山寺";
                 break; 
            case "xy": 
                 faction="逍遥派";
                 break; 
            case "yl": 
                 faction="云龙门";
                 break; 
            default: 
                 return 1;
        }
        command("chat 好,现在四海擂台开擂,"+faction+"全体集合! \n");
        for ( i=0;i<sizeof(ob); i++ )
            if((!wizardp(ob[i])) && (ob[i]->query("family/family_name")==faction))
            {
                this_object()->set("candidate",ob[i]);
                break;
            }
        for ( i=sizeof(ob); i>0; i-- )
        {
            if (ob[i-1]->query("family/family_name")==faction)
            {
                ob[i-1]->move("/d/city/wudao2");
                if(!wizardp(ob[i-1]))
                   if(ob[i-1]->query("combat_exp")>this_object()->query("candidate")->query("combat_exp"))
                     set("candidate",ob[i-1]);
            }
        }
        command("chat 现在, 本门第一的候选人是"+this_object()->query("candidate")->query("name")+"!\n");
        command("chat 大家可以自由挑战。任何人连胜五场或者无人再向其挑战即可获得本门第一的称号。\n");
        command("chat 任何战败或中途弃权者均只能争夺下一称号。\n");
        tell_object(this_player(),"古龙告诉你: 可以用setname somebody 指定某人为当前胜者。\n"+
               "也可以用setcan somebody 指定某人为当前候选人。\n");
        return 1;
}

int do_clearname()
{
        object* ob;
        int i;
        ob = users();

        if ( !wizardp(this_player()) )
        {
             write("你无权取消称号!! \n");
             return 1;
        }
        for ( i=0;i<sizeof(ob); i++ )
             add_title(ob[i],"");
        write("已取消所有称号!! \n");
        return 1;
}

string ask_home()
{
        this_player()->move("/d/city/guangchang");
        return("好的,我送你回扬州吧。\n");
}

int do_bihua(string arg)
{
        object ob1, ob2;
        object old_target;

        ob1 = this_player();

        if( !arg || arg=="" ) return 0;

        if ( arg == "gu long" )
        {
             command("say " + "你不能跟我比划!\n");
             return 1;
        }
        if (strsrch(ob1->query("title"), "本派") >= 0)
                return notify_fail("你想包揽啊!给别人也留点。\n");

        if ( this_object()->query_temp("busy") )
                return notify_fail("每次只能有两人参加比武。\n");

        if (!ob2 = present(arg,environment(ob1)) )
                return notify_fail("你想跟谁比划?\n");

        if(wizardp(ob1)) return notify_fail("巫师瞎掺合个什么劲啊? \n");

        if (ob1 == ob2)  return notify_fail("你不能攻击自己。\n");

        if (ob1->query("name")!=query("candidate")->query("name"))
        if (ob2->query("name")!=query("candidate")->query("name"))
                return notify_fail("你只能向候选人挑战。\n");

        if (ob2->query("family/family_name")!=ob1->query("family/family_name"))
                return notify_fail("又不是你门派的

⌨️ 快捷键说明

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