ggg.c

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

C
239
字号
// go.cinherit F_CLEAN_UP;mapping default_dirs = ([	"north":	"北方",	"south":	"南方",	"east":		"东方",	"west":		"西方",	"northup":	"北边",	"southup":	"南边",	"eastup":	"东边",	"westup":	"西边",	"northdown":	"北边",	"southdown":	"南边",	"eastdown":	"东边",	"westdown":	"西边",	"northeast":	"东北",	"northwest":	"西北",	"southeast":	"东南",	"southwest":	"西南",	"up":		"上面",	"down":		"下面",	"enter":	"里面",	"out":		"外面",	"leitai":	"擂台上面",]);void create() { seteuid(getuid()); }int main(object me, string arg){	string dest, mout, min, dir, blk, gud, skill, face, weapon_name;	object env, obj, blocker, weapon;	mapping block;	mixed old_target;	int result;	int sen_cost;	mapping exit;	object *f_obs, *ob;//for 太挤	int i, my_dex, count = 0;	if( !arg ) return notify_fail("你要往哪个方向走?\n");	if( me->over_encumbranced() )		return notify_fail("你的负荷过重,动弹不得。\n");	if( me->is_busy() )		return notify_fail("你的动作还没有完成,不能移动。\n");	env = environment(me);	if(!env) return notify_fail("你哪里也去不了。\n");	if (me->is_fighting()) {		f_obs = me->query_enemy();		if (objectp(f_obs[0]))		if (5 + random((int)me->query("dex")) <= 			random((int)f_obs[0]->query("dex"))) {			me->start_busy(1);                        message_vision("$N见势不好,转身要走,被$n一把拦在面前。想走?可没那么容易!\n", me, f_obs[0]);			return notify_fail("你逃跑失败。\n");		}	}// 守卫的问题	result = env->valid_leave(me, arg);	if ( result < 0 ) return 1;	else if ( !result ) return 0;	if( !mapp(exit = env->query("exits")) || undefinedp(exit[arg]) ) {		if( query_verb()=="go")			return notify_fail("这个方向没有出路。\n");		else			return 0;	}/*	if ( mapp(block = env->query("blocks")) && ( blk = block[arg] ) )	{		if ( objectp(blocker = present(blk, env)) &&  living(blocker) )			{			if ( !env->query("block_msg") )				return notify_fail("你正打算移动,却被"				+ blocker->name() + "挡住了去路 。\n");			return notify_fail( env->query("block_msg") );             		}	}*/	if ( old_target = me->query_temp("guardfor") )	{		if(objectp(old_target))		{			if( living(old_target) )			tell_object(me,"你放弃保护"+old_target->name()+"。\n");			else        		tell_object(me,"你不再理会"+old_target->name()+",径直走了。\n");		}		else 		tell_object( me, "你不再守住这里往"+default_dirs[old_target]+"的方向,离开了这里。\n" );		me->delete_temp("guardfor");	}	dest = exit[ arg ];	if ( !(obj = find_object(dest)) )	    	call_other( dest, "???" );	if ( !(obj = find_object(dest)) )	    	return notify_fail( sprintf( "无法向 %s 移动。\n", dest ) );	if ( me->query_temp("is_riding") &&	    (arg=="up" || arg=="down" || arg=="leitai" || arg=="enter" || arg=="out"))		return notify_fail("这个方向没法骑在座骑上过去。\n");// 移动前方是否太挤? 擂台上不超出2人	if ( arg == "leitai")	{		return notify_fail("非比武时间,暂停开放擂台。\n");		ob = all_inventory(obj);		for(i=0; i<sizeof(ob); i++)//			if( living(ob[i]) && ob[i] != me )				count++;	if (count>2)		return notify_fail("擂台上人太多了,你上去找扁去?\n");/*	my_dex = (int)me->query_dex();	if (!wizardp(me) &&	    (((my_dex < 15) && (count > 6)) ||	    ((my_dex < 20) && (count > 8)) ||	    ((my_dex < 30) && (count > 10)) ||	    ((my_dex < 40) && (count > 12))))		return notify_fail("前面人太多了,你怎么挤也挤不过去。\n");*/	}	if( !env->valid_leave(me, arg) ) return 0;	if( !undefinedp(default_dirs[arg]) )		dir = default_dirs[arg];	else		dir = arg;	if( me->is_fighting() ) {		mout = me->name() + "往" + dir + "落荒而逃了。\n";		min = me->name() + "跌跌撞撞地跑了过来,模样有些狼狈。\n";	}	else if( wizardp(me) && me->query("env/invisibility") && (wiz_level(me) >= wiz_level(env)))		{			mout = "";			min = "";		}		else		{			face="的";			if (me->query("gender")=="女性")			{				if (me->query("per") >= 30) face ="娇艳绝伦" + face;				if ((me->query("per") >= 28) && (me->query("per") < 30)) face= "清丽绝俗" + face;				if ((me->query("per") >= 26) && (me->query("per") < 28)) face= "风情万种" + face;				if ((me->query("per") >= 24) && (me->query("per") < 26)) face= "容色秀丽" + face;				if ((me->query("per") >= 21) && (me->query("per") < 24)) face= "面目姣好" + face;				if (me->query("str") <= 16) face = "亭亭玉立" + face;				if ((me->query("str") <= 20) && (me->query("str") > 16)) face= "体态轻盈"+ face;				if ((me->query("per")<21) && (me->query("str")>20) || !userp(me)) face = "";			}			else			{				if (me->query("per") >= 30) face= "玉树临风般" + face;				if ((me->query("per") >= 26) && (me->query("per") < 30)) face="英俊潇洒" + face;				if ((me->query("per") >= 22) && (me->query("per") < 26)) face="仪表堂堂" + face;				if (me->query("str") >=23) face = "身材壮硕" + face;				if ((me->query("str") >= 20) && (me->query("str") < 23)) face= "膀大腰圆"+ face;				if ((me->query("per")<22) && (me->query("str")<20) || !userp(me)) face = "";			}		        if (objectp(weapon = me->query_temp("weapon")))				weapon_name = "手执" + weapon->query("name");			else				weapon_name = "";			if ( me->query("race") == "野兽")			{				mout = me->name() + "呼地往" + dir + "一窜就消失了。\n";				min = me->name() + "呼地窜了出来,警惕地四周张望着。\n";			}			else			{			if ( me->query_temp("is_riding"))			{				mout = me->name()+"骑着"+me->query_temp("is_riding")+"向" + dir + "疾驰而去。\n";				min = face + me->name()+"骑着"+me->query_temp("is_riding")+"一路疾驰而来。\n";			}			else			if ( arg == "leitai")			{				mout = me->name()+"双腿力蹬,纵起身形,轻轻跃上擂台。\n";				min = me->name()+"从擂台下一跃而起,稳稳地落在台上。\n";			}			else			{				mout = me->name() + "往" + dir + "离开。\n";				min = face + me->name() + weapon_name + "走了过来。\n";			}			}		}	message( "vision", mout, environment(me), ({me}) );	if( me->move(obj) ) {		me->remove_all_enemy();		message( "vision", min, environment(me), ({me}) );		me->set_temp("pending", 0);		all_inventory(env)->follow_me(me, arg);		return 1;	}	return 0;}void do_flee(object me){	mapping exits;	string *directions;	if( !environment(me) || !living(me) ) return;	exits = environment(me)->query("exits");	if( !mapp(exits) || !sizeof(exits) ) return;	directions = keys(exits);	tell_object(me, "看来该找机会逃跑了...\n");	main(me, directions[random(sizeof(directions))]);}int help(object me){	write(@HELP指令格式 : go <方向> 让你往指定的方向移动。 HELP    );    return 1;}

⌨️ 快捷键说明

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