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

📄 meng-zhu.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
//版本:武林争霸6.0 (98/12)//开发者:徐竞// meng-zhu.c 武林盟主// colored the title of 武林盟主(player) ,   ReyGod, 1/15/1997#include <ansi.h>#ifndef NPCDATA#define NPCDATA "/data/npc/"#endif#define MENGZHU NPCDATA + "meng-zhu"inherit NPC;inherit F_MASTER;//inherit F_CLEAN_UP;inherit F_UNIQUE;inherit F_SAVE;string query_save_file(){	return MENGZHU;}void create(){	seteuid(getuid());	if (!restore()) {	set_name("魏无双", ({ "wulin mengzhu", "mengzhu", "zhu" }) );	set("title", "武林盟主" );	set("gender", "男性" );	set("age", 40);        set("long","他就是雄踞武林,号召天下,威风赫赫的当今武林盟主。\n");	set("attitude", "heroism");	set("generation",0);	set("winner","none");        set("no_xi", 1);	set("str", 25);	set("con", 25);	set("int", 25);	set("dex", 25);	set("max_qi", 500);	set("eff_qi", 500);	set("qi", 500);	set("max_jing", 300);	set("jing", 300);	set("neili", 500);	set("max_neili", 500);	set("jiali", 40);	set("shen_type", 0);	set("no_clean_up",1);	set("combat_exp", 500000);	set_skill("force",  100); 	set_skill("unarmed",100);	set_skill("sword",  100);	set_skill("dodge",  100);	set_skill("parry",  100);	set("weapon", "/d/shaolin/obj/changjian");	set("armor", "/d/city/obj/cloth");	setup();	carry_object("/d/shaolin/obj/changjian")->wield();	carry_object("/d/city/obj/cloth")->wear();        	}	else {		set("id", "mengzhu");		set_name(query("name"), ({ query("id") }));		setup();//		if( this_object()->query("weapon") ) carry_object(this_object()->query("weapon"))->wield();//		if( this_object()->query("armor") )  carry_object(this_object()->query("armor"))->wear();        	}}void init(){	object me = this_object();	add_action("do_recopy",  "recopy");	add_action("do_recover", "recover");//	add_action("do_kill", "kill");}int do_kill(){	object ob;	int i;	command("say 你想谋害本盟主,当真是吃了熊心豹子胆了!!");	command("say 座下白衣武士何在!");		message_vision("四周的白衣武士群起对$N发动攻击!\n", this_player());	for(i=0; i<4; i++) {		if( objectp( ob = present("wei shi " + (i+1), environment(this_object())) ) )				 ob->kill_ob(this_player());			else	this_object()->kill_ob(this_player());			}	return 1;}int accept_fight(object ob){	object me  = this_object();			if ( me->query("winner") == ob->query("id") ) {//                remove_call_out("do_copy");//                call_out("do_copy", 1, me, ob);		return notify_fail("你跟你自己打什么架?!\n");}	if (wizardp(this_player()))		return notify_fail("巫师不能抢盟主之位!\n");	if ( me->is_fighting() ) 		return notify_fail("已经有人正在挑战武林盟主!\n");	me->set("eff_qi", me->query("max_qi"));	me->set("qi",     me->query("max_qi"));	me->set("jing",   me->query("max_jing"));	me->set("neili",  me->query("max_neili"));	remove_call_out("checking");	call_out("checking", 1, me, ob);		return 1;}void die(){	object me;	me = this_object();	me->set("eff_qi", me->query("max_qi"));	me->set("qi",     me->query("max_qi"));	me->set("eff_jing", me->query("max_jing"));	me->set("jing",   me->query("max_jing"));	me->set("neili",  me->query("max_neili"));	message_vision(HIR"\n$N死掉了。\n"NOR, me);	message_vision(HIB"\n可是在此同时$N口中默念"HIC"『还魂咒』"HIB"四周妖风阵阵,慢慢的$N又站了起来。\n"NOR, me);}int checking(object me, object ob){	object obj;	int my_max_qi, his_max_qi;	my_max_qi  = me->query("max_qi");	his_max_qi = ob->query("max_qi");	if (me->is_fighting()) {		if ( (me->query("qi")*100 / my_max_qi) <= 80 )			command("exert recover");		call_out("checking", 1, me, ob);		return 1;	}	if ( !present(ob, environment()) ) return 1; 	if (( (int)me->query("qi")*100 / my_max_qi) <= 50 ) {		command("say 果然厉害,恭喜你成为当今武林盟主!\n");		command("chat 哈哈哈,到底是长江後浪推前浪,一代新人换旧人!\n");		command("chat 恭喜" + ob->query("name") + "被推举为当今武林盟主!\n");		remove_call_out("do_copy");		call_out("do_copy", 1, me, ob);		return 1;	}	if (( (int)ob->query("qi")*100 / his_max_qi) < 50 ) {		command("say 看来" + RANK_D->query_respect(ob) + 			"还得多加练习,方能在当今武林中出人头地 !\n");		return 1;	}	return 1;  }int do_copy(object me, object ob){	object ob1, ob2;	string mengzhu, shangshan, fae;	seteuid(getuid());	me->set("winner", ob->query("id"));	me->add("generation", 1);		me->set("name",  ob->query("name") );		me->set("title", "第" + chinese_number(me->query("generation")) + "代武林盟主");	me->set("short", HIR + me->query("title") + NOR + " " + me->query("name") + "(" + capitalize(ob->query("id")) + ")");	me->delete("title");	ob->delete_temp("apply/short");	ob->set_temp("apply/short", ({me->short()}));// --record which mengzhu generataion this player got-------by ReyGod// = better to place this checking when players login.//	ob->set("mengzhu_gen",me->query("generation"));		me->set("title", "第" + chinese_number(me->query("generation")) + "代武林盟主");	me->set("short", me->query("title") + " " + me->query("name") + "(Wulin mengzhu)");	me->delete("title");	if(!( ob1 = find_living("shangshan")) )	ob1 = load_object("/clone/npc/shang-shan");	shangshan = ob1->query("winner");	if(!( ob2 = find_living("fae")) )	ob2 = load_object("/clone/npc/fa-e");	fae = ob1->query("winner");	if( ob->query("id") == shangshan ) {		rm( ob1->query_save_file() + __SAVE_EXTENSION__ );		destruct(ob1);	}	else  if( ob->query("id") == fae ) {		rm( ob2->query_save_file() + __SAVE_EXTENSION__ );		destruct(ob2);	}	remove_call_out("do_clone");	call_out("do_clone", 0, me, ob);	return 1;}int do_recopy(object me, object ob){	me = this_object();	ob = this_player();	if ( me->query("winner") != ob->query("id") ) 		return notify_fail("你不是现任武林盟主!\n");;	me->set("name",  ob->query("name") );	me->set("title", "第" + chinese_number(me->query("generation")) + "代武林盟主");	me->set("short", HIR + me->query("title") + NOR + " " + me->query("name") + "(" + capitalize(ob->query("id")) + ")");	me->delete("title");	ob->delete_temp("apply/short");	ob->set_temp("apply/short", ({me->short()}));// --record which mengzhu generataion this player got-------by ReyGod// = better to place this checking when players login.	//	ob->set("mengzhu_gen",me->query("generation"));	me->set("title", "第" + chinese_number(me->query("generation")) + "代武林盟主");	me->set("short", me->query("title") + " " + me->query("name") + "(Wulin mengzhu)");	me->delete("title");	remove_call_out("do_clone");	call_out("do_clone", 0, me, ob);	return 1;}int do_clone(object me, object ob){	object *inv, new1;	mapping hp_status, skill_status, map_status, prepare_status;	string *sname, *mname, *pname;	int i, temp;	seteuid( geteuid(me) );/* delete and copy skills */	if ( mapp(skill_status = me->query_skills()) ) {		skill_status = me->query_skills();		sname  = keys(skill_status);		temp = sizeof(skill_status);		for(i=0; i<temp; i++) {			me->delete_skill(sname[i]);		}	}	if ( mapp(skill_status = ob->query_skills()) ) {		skill_status = ob->query_skills();		sname  = keys(skill_status);		for(i=0; i<sizeof(skill_status); i++) {			me->set_skill(sname[i], skill_status[sname[i]]);		}	}	/* delete and copy skill maps */	if ( mapp(map_status = me->query_skill_map()) ) {		mname  = keys(map_status);		temp = sizeof(map_status);		for(i=0; i<temp; i++) {			me->map_skill(mname[i]);		}	}	if ( mapp(map_status = ob->query_skill_map()) ) {		mname  = keys(map_status);		for(i=0; i<sizeof(map_status); i++) {			me->map_skill(mname[i], map_status[mname[i]]);		}	}	/* delete and copy skill prepares */	if ( mapp(prepare_status = me->query_skill_prepare()) ) {		pname  = keys(prepare_status);		temp = sizeof(prepare_status);		for(i=0; i<temp; i++) {			me->prepare_skill(pname[i]);		}	}	if ( mapp(prepare_status = ob->query_skill_prepare()) ) {		pname  = keys(prepare_status);		for(i=0; i<sizeof(prepare_status); i++) {			me->prepare_skill(pname[i], prepare_status[pname[i]]);		}	}/* unwield and remove weapon & armor */	inv = all_inventory(me);	for(i=0; i<sizeof(inv); i++) {		destruct(inv[i]);	}	set("weapon", 0);	set("armor", 0);/* wield and wear weapon & armor */	inv = all_inventory(ob);	for(i=0; i<sizeof(inv); i++) {		if( inv[i]->query("weapon_prop/damage") > 100 		||  inv[i]->query("armor_prop/armor") > 100 ) continue;		if( inv[i]->query("weapon_prop") &&  inv[i]->query("equipped") ) {			carry_object(base_name(inv[i]))->wield();			me->set("weapon", base_name(inv[i]));		}		else if( inv[i]->query("armor_prop") &&  inv[i]->query("equipped") ) {			carry_object(base_name(inv[i]))->wear();			me->set("armor", base_name(inv[i]));		}	}/* copy entire dbase values */	hp_status = ob->query_entire_dbase();		me->set("str", hp_status["str"]);		me->set("int", hp_status["int"]);		me->set("con", hp_status["con"]);		me->set("dex", hp_status["dex"]);		me->set("age", hp_status["age"]);		me->set("max_qi",    hp_status["max_qi"]);		me->set("eff_qi",    hp_status["eff_qi"]);		me->set("qi",        hp_status["qi"]);		me->set("max_jing",  hp_status["max_jing"]);		me->set("eff_jing",  hp_status["eff_jing"]);		me->set("jing",      hp_status["jing"]);		me->set("max_neili", hp_status["max_neili"]);		me->set("neili",     hp_status["neili"]);		me->set("jiali",     hp_status["jiali"]);		me->set("gender",    hp_status["gender"]);		me->set("combat_exp",hp_status["combat_exp"]);	save();	tell_object(ob, "状态储存完毕。\n");	new1 = new("/clone/npc/meng-zhu");	new1->move("/d/taishan/fengchan");	destruct(me);	return 1;}int do_recover(){    object me, ob;    mapping skill_status, map_status, prepare_status;    string *sname, *mname, *pname;    int i;    me = this_object();    ob = this_player();    if (me->is_fighting() || ob->is_fighting() || me->query("fighting"))        return notify_fail("现在这里正打的不亦乐乎!等会吧!\n");    if ( me->query("winner") != ob->query("id") || me->query("age")>ob->query("age") )         return notify_fail("你不是现任武林盟主!\n");;    if (time()-me->query("recover")<60)        return notify_fail("状态复元完毕。\n");   ob->set("qi",ob->query("max_qi"));   ob->set("jing",ob->query("max_jing"));   ob->set("eff_qi",ob->query("max_qi"));   ob->set("eff_jing",ob->query("max_jing"));   ob->set("neili",ob->query("max_neili"));    write("状态复元完毕。\n");    me->set("recover",time());    return 1;}

⌨️ 快捷键说明

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