pao.c

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

C
304
字号
//Cracked by Kafei//// sdong, 3/18/2000#include <ansi.h>#include <armor.h>#include <room.h>//inherit F_SSERVER;inherit ITEM;#define ORIGINAL "/d/bwdh/sjsz/room_28.c"int explode(object me, object ob);int do_fire(string arg);int do_aim(string arg);string look_room(object me, object env);int do_load(string arg);mapping default_dirs = ([	"north":	"北",	"south":	"南",	"east":		"东",	"west":		"西",	"northup":	"北边",	"southup":	"南边",	"eastup":	"东边",	"westup":	"西边",	"northdown":	"北边",	"southdown":	"南边",	"eastdown":	"东边",	"westdown":	"西边",	"northeast":	"东北",	"northwest":	"西北",	"southeast":	"东南",	"southwest":	"西南",	"up":		"上",	"down":		"下",	"out":		"外",	"enter":	"里",	"in":		"里",	"left":		"左",	"right":	"右",]);string day_event(){return NATURE_D->outdoor_room_event();}void create(){        set_name(HIY"青铜炮"NOR, ({"pao","qingtong pao","bombgun"}));        set_weight(1500000);        set("value",150000);        if( clonep() )                set_default_object(__FILE__);        else {                set("long", "一座青铜铸造的大炮,巨大的炮管昂然挺空,端的是威风八面。久闻试剑山庄主人收集天下奇门兵器,没想到连大炮都有,只是不知好用不好用。\n\n");                set("unit", "座");                set("material", "bronze");        }        set("bwdhpk",1);setup();}void init(){	add_action( "do_load", "load" );	add_action( "do_aim", "aim" );	add_action( "do_fire", "shoot" );}int do_load(string arg){	object ob = this_object(), huoyao, dantou;	object me = this_player();	int exp_time;	if ( !arg || (arg!="powder" && arg!="huo yao" && arg!="dan tou" ) )	   return notify_fail( "你想要加载什么?\n");	if( me->is_busy() ) return notify_fail("你还在忙着呢!\n") ;		if( arg=="powder" || arg =="huo yao" )	{		huoyao = present("huo yao");		if( !huoyao || !objectp(huoyao) )return notify_fail( "你想要加载什么?\n");		if( query_temp("yao_loaded") > 2 )return notify_fail("大炮已经装满火药了。\n");				if( huoyao && objectp(huoyao) && huoyao->query("load") > 0 )		{			message_vision("$N往炮筒里加入一些火药。\n",me);			huoyao->set("load",huoyao->query("load")-1 );			if( huoyao->query("load") <=0 ) destruct(huoyao);			add_temp("yao_loaded",1);			me->start_busy(1);		}	}	else if( arg =="dan tou" )	{		dantou = present("dan tou");		if( !dantou || !objectp(dantou) )return notify_fail( "你想要加载什么?\n");		if( query_temp("dan_loaded") > 0 )return notify_fail("大炮已经装有弹头了。\n");				message_vision("$N往炮筒里加入一枚弹头。\n",me);		destruct(dantou);		add_temp("dan_loaded",1);		me->start_busy(1);	}	return 1;}string look_room(object me, object env){		  int i;		  object *inv;		  mapping exits;		  string str, *dirs;		  if( !env ) {					 return "你的四周灰蒙蒙地一片,什么也没有。\n";		  }		  str = sprintf( "%s - %s\n    %s%s",					 env->query("short"),					 wizardp(me)? file_name(env): "",					 env->query("long"),					 env->query("outdoors")? NATURE_D->outdoor_room_description() : "" );		  if( mapp(exits = env->query("exits")) ) {					 dirs = keys(exits);					 for(i=0; i<sizeof(dirs); i++)                        if( (int)env->query_door(dirs[i], "status") & DOOR_CLOSED )										  dirs[i] = 0;					 dirs -= ({ 0 });					 if( sizeof(dirs)==0 )								str += "    这里没有任何明显的出路。\n";					 else if( sizeof(dirs)==1 )								str += "    这里唯一的出口是 " + BOLD + dirs[0] + NOR + "。\n";                else                        str += sprintf("    这里明显的出口是 " + BOLD + "%s" + NOR + " 和 " + BOLD + "%s" + NOR + "。\n",                                implode(dirs[0..sizeof(dirs)-2], "、"), dirs[sizeof(dirs)-1]);		  }//      str += env->door_description();        inv = all_inventory(env);        for(i=0; i<sizeof(inv); i++) {					 if( inv[i]==me ) continue;					 if( !me->visible(inv[i]) ) continue;					 if( objectp(inv[i]->query("rider")) ) continue;					 else inv[i]->delete("rider");					 if( objectp(inv[i]->query("rided")) ) {								str += "  " + inv[i]->short() + "骑在" +								(inv[i]->query("rided"))->name() + "上";					 if( stringp(inv[i]->query_temp("exit_blocked")))								str += "挡着往"+inv[i]->query_temp("exit_blocked")+								"去的路";								str += "\n";					 }					 else {								if (stringp(inv[i]->query_temp("exit_blocked")))								str += "  " + inv[i]->short() + "挡着往" + inv[i]->query_temp("exit_blocked")										  +"去的路\n";								else								str += "  " + inv[i]->short() + "\n";								inv[i]->delete("rided");					 }		  }		  return(str);}int do_aim(string arg){	object me = this_player();	object cur_target, target;	string str, dest;	mapping exit;	if( me->is_busy() ) return notify_fail("你还在忙着呢!\n") ;	cur_target = query_temp("target");	if( !cur_target ){		cur_target = find_object(ORIGINAL);		if( !cur_target )cur_target=load_object(ORIGINAL);		if (!objectp(cur_target))return notify_fail("找不到目标。\n");	}	if( arg=="down" || arg=="up" || arg=="out" || arg=="enter" )return notify_fail("这个方向没法打到。\n");		if( arg )	{		if( !mapp( exit = cur_target->query("exits") ) || undefinedp(exit[arg]) ) {			return notify_fail("这个方向没有出路。\n");		}		if( !cur_target->valid_leave(me, arg) ) notify_fail("这个方向太远了。\n");		dest = exit[arg];		if( !(target = load_object(dest)) )			return notify_fail("无法移动。\n");	}	else target = cur_target;	set_temp("target",target);	str = look_room(me, target);	tell_object(me, str+"\n");	if(arg)		message_vision(HIW"$N将炮口缓缓向"+ default_dirs[arg] + "转,瞄准了"+target->query("short")+"。\n"NOR,me);	me->start_busy(1);	return 1;}int do_fire(string arg){	object ob = this_object();	object me = this_player();	int exp_time;    if( ob->query_temp("fired") ) return notify_fail("你一拉才发现此炮已被引燃了,就快发射了!\n");	if( ob->query_temp( "dan_loaded" ) <=0 )return notify_fail("炮还没有上弹头呢!\n");	if( ob->query_temp( "yao_loaded" ) < 3 )return notify_fail("炮还没装满弹药呢!\n");	message_vision("$N伸手用力一拉,拉开了$n导火索。\n", me,ob);	ob->set_temp("fired", 1);	ob->set_temp("owner",me);	call_out("explode", 1 + random(5), me, ob);	return 1;}int explode(object me, object ob){	object *victims, env, owner;	int i,damage;	string str;		ob->delete_temp("fired");		ob->delete_temp("owner");		ob->delete_temp("dan_loaded");		ob->delete_temp("yao_loaded");	env = query_temp("target");	if( !env ){		env = find_object(ORIGINAL);		if( !env )env=load_object(ORIGINAL);		if (!objectp(env))return notify_fail("找不到目标。\n");	}	message_vision(HIY"只听的一声惊天动地的爆响,$N"+HIY"发射了,弹头带着一道火线飞向"+env->query("short")+HIY",四周一片硝烟祢漫。\n"NOR, ob);	owner = query_temp("owner");	if( !owner || !objectp(owner) )	{		if(me && objectp(me) )			owner=me;		else owner=ob;	}	tell_room(env,HIR"只听的一声惊天动地的爆响,一发炮弹落地,四周一切立刻被炸得灰飞烟灭!\n"NOR, me);	if( env->query("no_fight") ){		return 0;	}		victims = all_inventory(env);	for (i=0; i<sizeof(victims); i++) {	   	if (!living(victims[i]) || victims[i]==me ) continue;		damage= 4000+random(8000);        victims[i]->receive_damage("qi", damage,  owner);        victims[i]->receive_wound("qi", random(damage), owner);        str = COMBAT_D->status_msg((int)victims[i]->query("qi") * 100 /(int)victims[i]->query("max_qi"));		message_vision(HIR"$N被炸得人仰马翻!\n"NOR,victims[i]);		message_vision(HIR"你远远看到"+victims[i]->query("name")+"被炸得人仰马翻!\n"NOR,ob);        message_vision("($N"+str+")\n", victims[i]);		message_vision(HIR"你远远看到("+victims[i]->query("name")+str+")\n",ob);	}        if (!env->query("th_buzhen")) return 1;        env->set("long", env->query("org_desc"));        env->set("exits", env->query("org_exits"));        env->set("cost", env->query("org_cost"));        env->delete("org_desc");        env->delete("org_cost");        env->delete("org_exits");        env->delete("th_buzhen");        env->delete("th_pozhen");        env->delete("th_zhen_owner");	return 1;}

⌨️ 快捷键说明

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