kurong.c

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

C
462
字号
// kurong.c
inherit NPC;
inherit F_MASTER;
#include <ansi.h>;
int ask_me();
string ask_six();
string ask_join();
int accept_fight(object ob);
int checking(object me, object ob);
string* names = ({
	"ben yin",
	"ben can",
	"ben chen",
	"ben guan",
	"ben xiang",
	"ku rong",
});
void create()
{
	set_name("枯荣大师", ({ "ku rong","ku"}) );
	set("gender", "男性" );
	set("title", "天龙寺第十六代僧人");
	set("class", "bonze");
	set("long", 
"他的面容奇特之极,左边的一半脸色红润,皮光肉滑,有如婴儿,
右边的一半却如枯骨,除了一张焦黄的面皮之外全无肌肉,骨头突
了出来,宛然便是半个骷髅骨头。这是他修习枯荣禅功所致。\n");
	set("age", 100);
	set("shen_type", 1);
	set("str", 40);
	set("int", 40);
	set("con", 40);
	set("dex", 40);

	set("qi", 4000);
	set("max_qi", 4000);
	set("jing", 1000);
	set("max_jing", 1000);
	set("neili", 5000);
	set("max_neili", 5000);
	set("jiali", 50);
	set("combat_exp", 2500000);
	set("score", 1000000);
	set("book_count", 1);

	set_skill("force", 200);
	set_skill("dodge", 200);
	set_skill("parry", 200);
	set_skill("finger", 250);
	set_skill("sword", 200);
	set_skill("tiannan-step", 250);
	set_skill("kurong-changong", 300);
	set_skill("duanjia-sword", 250);
	set_skill("six-finger", 300);
	set_skill("sun-finger", 300);
	set_skill("buddhism", 300);
	set_skill("literate", 100);
	set("book_give", 1);
	map_skill("force", "kurong-changong");
	map_skill("dodge", "tiannan-step");
	map_skill("parry", "six-finger");
	map_skill("finger", "six-finger");
	map_skill("sword", "duanjia-sword");
	prepare_skill("finger","six-finger");

	set("inquiry" ,([
	"剃度"	: (: ask_join :),
	"出家"	: (: ask_join :),
	"六脉剑阵" : (: ask_six :),
	"六脉神剑阵" : (: ask_six :),
	"六脉神剑" : (: ask_me :),
	"六脉神剑谱" : (: ask_me :),
	"六脉神剑剑谱" : (: ask_me :),
	]));
	create_family("大理段家",16,"高僧");

	setup();
	carry_object("/d/shaolin/obj/cheng-cloth")->wear();
}

void init()
{
	add_action("do_kneel", "kneel");
}

int ask_me()
{
	if (query("book_give") < 1)
        {
		command("say 你来晚了,那本《六脉神剑谱》我已经赠送给别入了。");   
        return 1;
        }
        if ((int)this_player()->query_temp("marks/find_temp")&&this_player()->query_temp("marks/ask_temp3")) 
		{
        	say(
"枯荣看了" + this_player()->name() + "一眼,说道:\n"
"这位施主果然聪明,施主若能胜过老衲就可得到六脉神剑谱。\n");
       		return 1;
        }
}

int accept_fight(object ob)
{
        object me;

        me = this_object();
      
        if( ob->query_temp("marks/find_temp")&&ob->query_temp("marks/ask_temp3") ) {
           say(ob->name() + "对枯荣说:好吧,那" 
             "我就同你切搓几招吧,点到为止。\n");
	  remove_call_out("checking");
          call_out("checking", 1, me, ob);
          return 1;
        }
        else
    	  return 0;
}

int checking(object me, object ob)
{

        object obj;
        int my_max_qi, his_max_qi;
        my_max_qi  = (int)me->query("max_qi");
        his_max_qi = (int)ob->query("max_qi");

        if (me->is_fighting()) 
        {
                call_out("checking",2, me, ob);
                return 1;
        }

        if ( !present(ob, environment()) ) return 1; 


        if (( (int)me->query("qi")*100 / my_max_qi) <= 50 ) 
        {
                say(
                  "枯荣说:施主身手果然不凡,老衲佩服。\n"
                  "六脉神剑谱是没有的了,这本一阳指诀你先拿去吧。\n"
                );
                obj= new("/clone/book/sun_book"); 
                obj->move(ob);
message("channel:rumor", MAG"【谣言】某人:"+this_player()->query("name")+"获得了一阳指诀啦。\n"NOR, users());
                message_vision("$N交给$n一本书。\n", me, ob);
                add("book_give", -1);                  
                return 1;
        }
        if (( (int)ob->query("qi")*100 / his_max_qi) < 50 ) 
        {
                say(
                   "枯荣双手合十道:尘缘一切自心起,施主请回吧。\n"
                );
                message_vision("$N对枯荣大师恭恭敬敬地磕了一个头,离开牟尼堂。\n", ob);
                ob->move("/d/tianlongsi/banruotai");
                return 1;
        }
        return 1;
}

string ask_six()
{
	mapping skl; 
        object fighter, me, room, monk;
	string *sname;
	int i,j;

	fighter = this_player();
	me = this_object();

	skl = fighter->query_skills();
	if (query("book_give") < 1)
        return"say 你来晚了,那本《六脉神剑谱》我已经赠送给别入了。";   
        
	if (sizeof(skl) <= 1)
		return RANK_D->query_respect(fighter) + 
		"功力不够,不够资格闯六脉剑阵。";
	sname  = keys(skl);
	for(i=0; i<sizeof(skl); i++) {
		if ((skl[sname[i]] < 80) || (sizeof(skl) == 0))
		return RANK_D->query_respect(fighter) + 
		",你这点本事也想闯六脉剑阵。";
	}

	if ( me->query("assigned_fighter") )
		return RANK_D->query_respect(fighter) + 
		",今日已有人挑战六脉剑阵,你过一段时间再来吧。";

	say("\n枯荣大师道:好吧,你一会来般若台找我吧。\n");

	me->set("assigned_fighter", fighter->query("id")); 		
	
	message_vision("\n枯荣大师往北离开。\n\n", fighter);

	if(!( room = find_object("/d/tianlongsi/baodian")) )
		room = load_object("/d/tianlongsi/baodian");
	me->move(room);

	if( !objectp(monk = present("ben yin", room) ))
	{
		move("/d/tianlongsi/munitang");
		message_vision("\n枯荣大师走了过来。\n\n", fighter);
			return "真是对不起,本因方丈不在,无法举行六脉剑阵。\n";	
	}

	message("vision", "\n枯荣大师走了过来,跟" + monk->query("name") + "俯耳轻声说了几句。\n", room, monk);
	message("vision", monk->query("name") + "点了点头,快步走了出去。\n", room, monk);
	monk->move("/d/tianlongsi/munitang");
	me->move("/d/tianlongsi/munitang");
	message("vision", monk->query("name") + "快步走了过来。\n", room, monk);

	for(j=2; j<6; j++) 
	{
		if(!( room = find_object("/d/tianlongsi/munitang")) )
                room = load_object("/d/tianlongsi/munitang");
  		me->move(room);

		if( !objectp(monk = present(names[j-1], room) ))
		{
	        	me->move("/d/tianlongsi/munitang");
        	        message_vision("\n枯荣大师走了过来。\n\n", fighter);
			return "真是对不起,"+monk->query("name")+"不在,无法举行六脉剑阵。\n";	
		}
	}

	me->move("/d/tianlongsi/banruotai");
        call_out("waiting", 1, me);
	return "好!大家都出来了。\n";
}

int waiting(object me)
{
	object fighter;
	int wait_time;

	if( wait_time == 300 )
	{
		say( "枯荣大师说道:看来他不会来了,我们回去罢!\n\n");
		call_out("do_back", 0, me);		
	}

	if( !objectp( fighter = present( me->query("assigned_fighter"), environment(me) ) ) )
	{
		wait_time++;
		call_out("waiting", 1, me);
	}
	call_out("preparing", 1, me, fighter);

	return 1;
}

int preparing(object me, object fighter)
{
	object monk, room, ob;
        if (! fighter) return 0;
	if(!( room = find_object("/d/tianlongsi/banruotai")) )
	room = load_object("/d/tianlongsi/banruotai");

	message("vision", HIY "\n枯荣大师大声宣布:六脉剑阵合围!\n" NOR, room);
	message("vision", "\n只听四周声声佛号,天龙寺高僧们个个神情肃杀,\n"
		"慢慢地从摩尼堂中鱼贯步出,围住了通路。\n\n", room);
	room->delete("exits");

	say( "枯荣又道:准备,六脉剑阵即刻发动!\n\n");

	fighter->delete_temp("beat_count");
	fighter->set_temp("fighting", 1);

	call_out("fighting",  10, me, fighter, 0);

	return 1;
}

int fighting(object me, object fighter, int count)
{
	object monk1, monk2, room1, room2;

	if(!( room1 = find_object("/d/tianlongsi/munitang")) )
	room1 = load_object("/d/tianlongsi/munitang");

	if(!( room2 = find_object("/d/tianlongsi/banruotai")) )
	room2 = load_object("/d/tianlongsi/banruotai");

        if (! fighter) return 0;
	if( count <= 4 ) {
		message("vision", "\n六脉剑阵剑气纵横,紫蕴斜飞!\n" NOR, room2);

		monk1 = present(names[count], room1);
		monk1->move(room2);
	}
		
	if( count >= 1 && count <= 5 ) {
		monk2 = present(names[count-1], room2);
		monk2->move(room1);
	}

	if( !find_player(me->query("assigned_fighter")) ||
	!living(fighter) || fighter->query("qi") <= 1 )
	{
		if( objectp(present(me->query("assigned_fighter"), environment(me)) )) {
			fighter->delete_temp("fighting");
			fighter->delete_temp("beat_count");
		}
		monk1->move(room1);

		say( "枯荣大师摇了摇头,说道:火候还差 ... 唉!\n\n");
		fighter->delete_temp("fighting");
		command("sigh");
		call_out("do_back", 5, me );
	}
	else if( count >= 5 )
	{
		if( (int)fighter->query_temp("beat_count") >= 5 )	
			call_out("do_recruit", 5, me, fighter);
		else
			call_out("do_back", 5, me );
	}
	else
	{
		count++;
		call_out("fighting", 2, me, fighter, count);
	}
 
	return 1;
}

int do_recruit(object me, object fighter)
{
	object book;
	mapping ft_fam, my_fam;

        if (! fighter) return 0;
	fighter->delete_temp("beat_count");
	fighter->delete_temp("fighting");
	command("say 再接我三招! \n");
	COMBAT_D->do_attack(this_object(), fighter, query_temp("weapon") );
	if( !living(fighter) || fighter->query("qi") <= 1 )
{
		say("\n枯荣大师说道:还是不行! \n");
return 1;
}
	COMBAT_D->do_attack(this_object(), fighter, query_temp("weapon") );
	if( !living(fighter) || fighter->query("qi") <= 1 )
{
		say("\n枯荣大师说道:还是不行! \n");
return 1;
}

	COMBAT_D->do_attack(this_object(), fighter, query_temp("weapon") );

	if( !living(fighter) || fighter->query("qi") <= 1 )
		say("\n枯荣大师说道:还是不行! \n");
	else
	{
		say("\n枯荣大师说道:恭喜你闯过了六脉剑阵! \n");
		if (query("book_count") > 0)
			add("book_count", -1);
		book = new("/clone/book/six_book");
		book->move(this_player());
		command("rumor "+this_player()->query("name")+"拿到六脉神剑谱啦。\n");
		command("好吧,这本「六脉神剑谱」你就拿去吧。说着惨然一笑。\n");
                add("book_give", -1);                  
	}
	call_out("do_back", 5, me );
		
	return 1;
}

int do_back(object me)
{
        object monk, room1, room2;
	int i;

	message("vision", "\n枯荣大师挥了挥手,回身步入摩尼堂。\n", environment(me) );

	if(!( room1 = find_object("/d/tianlongsi/banruotai")) )
	room1 = load_object("/d/tianlongsi/banruotai");
	room1->set("exits/north", "/d/tianlongsi/doushuai" );
	room1->set("exits/south", "/d/tianlongsi/munitang");

	if(!( room1 = find_object("/d/tianlongsi/baodian")) )
	room1 = load_object("/d/tianlongsi/baodian");

	if(!( room2 = find_object("/d/tianlongsi/munitang")) )
		room2 = load_object("/d/tianlongsi/munitang");

	if( objectp( monk = present("ben yin", room2) ));
		monk->move(room1);

	me->delete("assigned_fighter");
	this_object()->move("/d/tianlongsi/munitang");
	return 1;
}

string ask_join()
{
	object me;

	me = this_player();

	if( (string)me->query("class")=="bonze" )
		return "阿弥陀佛!你我同是出家人,何故跟贫僧开这等玩笑?\n";

	if( (string)me->query("gender") != "男性" )
		return "阿弥陀佛!善哉!善哉!女施主若真心皈依我佛,可去后山庵里受戒。\n";

	me->set_temp("pending/join_bonze", 1);
	return "阿弥陀佛!善哉!善哉!施主若真心皈依我佛,请跪下(kneel)受戒。\n";
}

int do_kneel()
{
	object me = this_player();

	string name, new_name;

	if( !me->query_temp("pending/join_bonze") )
		return 0;

	message_vision(
		"$N双手合十,恭恭敬敬地跪了下来。\n\n"
		"$n说偈道:
        “一微尘中入三昧,成就一切微尘定,
          而彼微尘亦不增,于一普现难思刹。”
手掌提起,$N满头乌发尽数落下,头顶光秃秃地更无一根头发,便是
用剃刀来剃亦无这等干净。\n\n",
		me, this_object() );
	name = me->query("name");
	new_name = "本" + name[0..1];
	command("say 从今以后你的法名叫做" + new_name + "。");
	command("smile");
	me->delete_temp("pending/join_bonze");
	me->set("name", new_name);
	me->set("class", "bonze");
	me->set("K_record", me->query("PKS") + me->query("MKS"));
	me->set("shen_record", me->query("shen"));
        me->set("shen", 0);

	return 1;
}

void attempt_apprentice(object ob)
{
	if( (string)ob->query("gender") != "男性" )
	{
		command ("say 阿弥陀佛!女施主呀,贫僧可不敢开这等玩笑啊。");
		return;
	}
	if( (string)ob->query("class")!="bonze" )
	{
		command ("say 阿弥陀佛!贫僧不收『俗家弟子』。");
		return;
	}
        if ((int)ob->query_skill("kurong-changong", 1) < 150) {
                command("say 你内功修为还不到火候,进天龙寺也是徒劳。\n");
                return;
        }
	command("say 阿弥陀佛,善哉!善哉!");
	command("recruit " + ob->query("id"));
}

⌨️ 快捷键说明

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