⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 meipo.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
// mei_po.c
#include <ansi.h>

inherit NPC;

string marry();
string unmarry();

void create()
{
        set_name("媒婆", ({ "mei po","mei" }) );
        set("title", "红娘庄");
        set("gender", "女性" );
        set("age", 43);
        set("long",
                "一位精明能干的老媒婆\n");
        set("max_qi",800);
        set("max_jing",800);
        set("combat_exp", 10000);
        set("attitude", "friendly");
        set("inquiry", ([
                "婚约" : "是啊……这里就可以缔结和解除婚约",
        ]) );
        set_skill("literate", 70);
        set_skill("dodge", 200);
        set_skill("unarmed", 100);
        setup();
        add_money("gold", 10);
        carry_object("/clone/misc/cloth")->wear();
}

void init()
{
        object ob;

        ::init();
        add_action("do_marry", "marry");
        add_action("do_unmarry", "unmarry");
}

int do_marry(string arg) {
        object marry_card1,marry_card2, obj, me;
        object *list,ob;
        int i, have_marry;
        me = this_player();
        list = all_inventory(me);
        i = sizeof(list);
        have_marry = 0;
        if((string)me->query("gender")=="无性"){
              say("既然你已经自宫了,就不能结婚了,请回吧!\n");
              return 1;
            }
        if ( (string)me->query("class")=="bonze")
             return notify_fail("你是出家人,怎么能结婚!嗨!现在的和尚……\n");
        if ( (int)me->query("age")<17)
             return notify_fail("你年龄还小,等到十七岁再来吧.\n");
        while (i--) {
              if (((string)list[i]->query("id")) == "marrycard")
                return notify_fail(
                "你已经和别人有婚约了吧?这里不允许重婚的。\n");
        }

        if(!arg || !objectp(obj = present(arg, environment(me)))
                || !find_player(arg)|| !find_living(arg))
        return notify_fail("你想和谁缔结良缘?\n");
        if( !environment()
        ||      base_name(environment()) != query("startroom") )
             return notify_fail(
                "真是抱歉,请您等一下到红娘庄来找我吧。\n");

        if( !living(obj) )
                return notify_fail(obj->name() +
                "已经无法和你缔结良缘了。\n");

        if((string)obj->query("gender")== (string)me->query("gender"))
                return notify_fail("难道你不怕" + RED"AIDS"NOR + "吗?\n");

        if(obj==me)     return notify_fail("你不能和自己缔结婚约。\n");

        if( userp(obj) && !((object)obj->query("marks/"+me->name(1)))){
                message_vision(MAG "\n$N对著$n说道:"
                    + RANK_D->query_self(me)
                    + me->name() + ",愿意和"
               + RANK_D->query_respect(obj) +
                "结为夫妇\n\n"NOR, me,obj);
                 me->set("marks/"+obj->name(1), 1);
           tell_object(obj, MAG "如果你愿意和对方结为夫妇,请你也对"
                        +me->name() + "("+(string)me->query("id")+
                        ")"+ "下一次 marry 指令。\n" NOR);
                write(MAG
                        "现在你急切盼望着你的心上人说同意……\n" NOR);
                return 1;
        }


        marry_card1 = new("/obj/marry_card");
        marry_card1->set("name","你和"+obj->query("id")+"的婚约");
        marry_card1->move(me);
        marry_card2 = new("/obj/marry_card");
        marry_card2->set("name","你和"+me->query("id")+"的婚约");
        marry_card2->move(obj);

     message_vision(MAG "恭喜 $N 和 $n ,一对璧人终于喜结良缘。\n" NOR,obj,me);
        CHANNEL_D->do_channel(this_object(), "chat",
        sprintf( "%s 和 %s 现在开始是夫妇啦! \n",
        me->name(1), obj->name(1)));
        return 1;
}

int do_unmarry(string arg)
{
        object marry_card1,marry_card2,  me;
        object *list,ob, couple_ob;
        int i, have_marry;
        string target, tmpstr1, tmpstr2,str1,str2;
        string cardname;

        me = this_player();
        list = all_inventory(me);
        i = sizeof(list);
        have_marry = 0;
        while (i--) {
         if (((string)list[i]->query("id")) == "marrycard") {
                        marry_card1 = list[i];
                        cardname = list[i]->query("name");
                        have_marry = 1;
                }
        }

        if (have_marry == 0)
                return notify_fail("你还未有婚约啊。\n");
        if( !environment()
        ||      base_name(environment()) != query("startroom") )
           return notify_fail("真是抱歉,请您等一下到红娘庄来找我吧。\n");
        if (sscanf(cardname,"你和%s的婚约" ,target)!=1)
                return notify_fail("你没有伴侣.\n");
         if(!objectp(couple_ob = present(target, environment(me)))
                || !find_player(target) )
                return notify_fail("你的伴侣现在不在场.\n");

        if ((string)couple_ob->query("gender") != "女性") {
                tmpstr1 = "老婆"; tmpstr2 = "老公";
                str1 = "她"; str2 = "他";
        } else {
                tmpstr1 = "老公"; tmpstr2 = "老婆";
                str1 = "他"; str2 = "她";
        }

        list = all_inventory(couple_ob);
        i = sizeof(list);
        have_marry = 0;
        while (i--) {
              if (((string)list[i]->query("id")) == "marrycard") {
                        marry_card2 = list[i];
                        have_marry = 1;
                }
        }
        if (have_marry = 0) {
                destruct(marry_card1);
        message_vision(MAG " $N 和 $n 从现在开始解除婚约,互不相干!\n" NOR,
        couple_ob, me);
        CHANNEL_D->do_channel(this_object(), "chat",
        sprintf( "%s 和 %s 从现在开始解除婚约,互不相干! \n",
        me->name(1), couple_ob->name(1)));

                return 1;
        }

        if( userp(couple_ob) && !((object)couple_ob->query("marks/"
                + "unmarry" +me->name(1))) ) {
                message_vision(MAG "\n$N对著$n说道:"
                        + RANK_D->query_self(me)
                        + me->name() + ",咱们解除婚约吧!好吗?\n\n"
                        NOR, me, couple_ob);
                 me->set("marks/"+"unmarry"+couple_ob->name(1), 1);
           tell_object(couple_ob, MAG "如果你愿意解除婚约,请你也"
                + "下一次 unmarry 指令。\n" NOR);
                write(MAG
                "现在你只有等着" +str2 +" 同意啦...\n" NOR);
                return 1;
        }
        destruct(marry_card1);
        destruct(marry_card2);

        message_vision(MAG " $N 和 $n 从现在开始解除婚约,互不相干!\n" NOR,
        couple_ob, me);
        CHANNEL_D->do_channel(this_object(), "chat",
        sprintf( "%s 和 %s 从现在开始解除婚约,互不相干! \n",
        me->name(1), couple_ob->name(1)));

        return 1;
}

⌨️ 快捷键说明

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