champion_xy.c

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

C
221
字号
// this npc will duplicate anyone who he/she lost his fight to....#include <ansi.h>#define CHAMPION_FILE "/data/npc/champion_xy.o"inherit NPC;inherit F_MASTER;void loadall(object me);string id1;void find(string id);void changeshape(object winner);void create(){	string info,name,id,file;        set_name( "大弟子" , ({ "dizi" }) );        set_temp("no_kill",1);	set("pubmaster",1);	setup();	info = read_file(CHAMPION_FILE);	if( info && sscanf(info,"%s %s %s",file,id,name) == 3)	{		restore_object(file);        set_name( name , ({ id }) );        set("pubmaster",1);        create_family("逍遥派", 40, "弟子");	 delete("env");        set("attitude", "aggressive");        reset_action();        delete_temp("already_loaded");        loadall(this_object());        set("title", HIY "逍遥派掌门大弟子" NOR);	 set_temp("no_kill",1);	carry_object("clone/weapon/gangjian")->wield();	carry_object("clone/misc/cloth")->wear();}			}void lose_enemy(object winner){	remove_call_out("changeshape");	call_out("changeshape",2,winner);	return;}void changeshape( object winner){	string winner_file;	object zheng;	string name,id,nick;        if (!userp(winner))        return notify_fail("你不是玩家,是机器人.\n");	if( (string)winner->query("family/family_name") != "逍遥派" ) 	return notify_fail("只有逍遥派弟子才能争夺大弟子之位!\n");	winner_file = winner->query_save_file();        CHANNEL_D->do_channel(this_object(), "party",        sprintf( "%s从现在开始是逍遥派新的掌门大弟子了!! \n",        winner->name(1)));	write_file(CHAMPION_FILE,sprintf("%s %s %s",	winner_file,winner->query("id"),winner->query("name")),1);	restore_object(winner_file);	name = winner->query("name");	id = winner->query("id");	set_name( name , ({ id }) );	nick = winner->query("nickname");	delete("env");	set("attitude", "aggressive");	reset_action();	delete_temp("already_loaded");	loadall(this_object());		set("title", HIY "逍遥派掌门大弟子" NOR);		set("nickname",nick);	zheng = new(__DIR__"ling_xy");	find(id);	zheng->move(winner);	message_vision("掌门大弟子给了$N一块逍遥派的令牌。\n",winner);			   return;}void loadall(object me){        int MAX = 3;        string name,id, *created;        int i,j;        object thing, *inv;	inv = all_inventory(me);                for(i=0; i<sizeof(inv); i++)                {                        destruct(inv[i]);                }        id = me->query("id");        created = get_dir(DATA_DIR + "login/" + id[0..0] + "/" + id + "/");        for(j=0; (j<sizeof(created) && j < (MAX+1) ); j++)        if( sscanf(created[j], "%s.c", name) == 1 )                {	thing = new( DATA_DIR + "login/" + id[0..0] + "/" + id + 	"/" + name + ".c");                        if(thing->move(me)) 			{			thing->wield();			thing->wear();			}                 }	me->reset_action();        me->set_temp("already_loaded",1);	return;}void init(){	if(!query_temp("already_loaded"))		loadall(this_object());	return;}int accept_fight(object me){object ob;ob=this_object();	if( (string)this_player()->query("family/family_name") != "逍遥派" ) 	return notify_fail("只有逍遥派弟子才能争夺大弟子之位!\n");       if (this_player()->query("combat_exp") < 100000 || this_player()->query("age") <= 18)        return notify_fail("你的能力不足以成为大弟子.\n");       command("say 好,你打败我就可以成为掌门大弟子!"); if (!ob->query_skill_mapped("unarmed")){ob->set_skill("gedoushu",this_player()->query_skill("force"));ob->map_skill("unarmed", "gedoushu");ob->map_skill("parry", "gedoushu");} if (!ob->query_skill_mapped("parry")){ob->set_skill("gedoushu",this_player()->query_skill("force"));ob->map_skill("unarmed", "gedoushu");ob->map_skill("parry", "gedoushu");}	return 1;	  }void die(){        object ob;        if( !ob = query_temp("last_damage_from") )                ob = this_player(1);        if( !ob ) return;	changeshape(ob);	return;}void find(string id){object *ulist,*ilist;object ob;int i,j;ulist  =  users();	i  =  sizeof(ulist);while (i--) {	if  (present  ("xyling",ulist[i]))	{	ilist  =  all_inventory(ulist[i]);	j=sizeof(ilist);	while (j--) {	ob = ilist[j];	if(ob->query("id")=="xyling" && !userp(ob))	{	destruct(ob);			}	}message_vision(HIY"$N身上的逍遥派令牌不翼而飞了。\n"NOR,ulist[i]);	}}}int accept_object(object who, object ob){	int i;	if (!(int)who->query_temp("learn_timem"))      		who->set_temp("learn_timem", 0);	if( !ob->query("money_id") )		return 0;			if( (string)this_player()->query("family/family_name") != query("family/family_name")) 	return notify_fail("只有本派弟子才能到我这学功夫!\n");	if(who->query_skill("force",1)<30)		i=ob->value() / 50;	else	{		if(who->query_skill("force",1)<60)			i=ob->value() / 80;		else		{			if(who->query_skill("force",1)<100)				i=ob->value() / 150;			else				i=ob->value() / 300;		}	}	who->add_temp("learn_timem",i);command("say 看在你为本派尽心尽力,我就指定你两手功夫吧!");//      message_vision("左冷禅对$N说道:既然你诚心想学我的武功,我就成全成全你吧。\n",who);	return 1;}int recognize_apprentice(object ob){	if( (string)ob->query("family/family_name") != this_object()->query("family/family_name")) 	return notify_fail("只有本派弟子才能到我这学功夫!\n");	if( ob->query_temp("learn_timem") <= 0) return 0;else         ob->add_temp("learn_timem",-1);return 1;}

⌨️ 快捷键说明

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