damage.c

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

C
474
字号
// damage.c// 98-9-11 netplay@CCTX//fix by tlt at 1999/6/29#include <ansi.h>#include <dbase.h>#include <login.h>#include <move.h>int ghost = 0;int is_ghost() { return ghost; }varargs int receive_damage(string type, int damage, object who){	int val;	if( damage < 0 ) error("F_DAMAGE: 伤害值为负值。\n");	if( type!="jing" && type!="qi" )		error("F_DAMAGE: 伤害种类错误( 只能是 jing, qi 其中之一 )。\n");	if( objectp(who) ) set_temp("last_damage_from", who);	val = (int)query(type) - damage;	if( val >= 0 ) set(type, val);	else set( type, -1 );	set_heart_beat(1);	return damage;}varargs int receive_wound(string type, int damage, object who){	int val;	if( damage < 0 ) error("F_DAMAGE: 伤害值为负值。\n");	if( type!="jing" && type!="qi" )		error("F_DAMAGE: 伤害种类错误( 只能是 jing, qi 其中之一 )。\n");	if( objectp(who) ) set_temp("last_damage_from", who);	val = (int)query("eff_" + type) - damage;	if( val >= 0 ) set("eff_" + type, val);	else {		set( "eff_" + type, -1 );		val = -1;	}	if( (int)query(type) > val ) set(type, val);	set_heart_beat(1);	return damage;}int receive_heal(string type, int heal){	int val;	if( heal < 0 ) error("F_DAMAGE: 恢复值为负值。\n");	if( type!="jing" && type!="qi" )		error("F_DAMAGE: 恢复种类错误( 只能是 jing, qi 其中之一 )。\n");	val = (int)query(type) + heal;	if( val > (int)query("eff_" + type) ) set(type, (int)query("eff_" + type));	else set( type, val );	return heal;}int receive_curing(string type, int heal){	int max, val;	if( heal < 0 ) error("F_DAMAGE: 恢复值为负值。\n");	if( type!="jing" && type!="qi" )		error("F_DAMAGE: 恢复种类错误( 只能是 jing, qi 其中之一 )。\n");	val = (int)query("eff_" + type);	max = (int)query("max_" + type);	if( val + heal > max ) {		set("eff_" + type, max);		return max - val;	} else {		set( "eff_" + type, val + heal);		return heal;	}}void unconcious(){	object defeater,killer;        object me;        object riding;        me = this_object();	if( !living(this_object()) ) return;	if( wizardp(this_object()) && query("env/immortal") ) return;		//特殊房间改动晕倒 idea	if (environment() && environment()->query("alternative_unc")) {		environment()->alternative_unc(this_object());		return;	}	        if (userp(this_object())&& environment(this_object())->query("bwdhpk"))        {                message_vision(HIR "比武之地,只分胜负,不分生死。$N被打败了但却偷得一命。\n" NOR, this_object());                message_vision(HIR "$N被抬了下去。\n" NOR, this_object());	if( objectp(killer = query_temp("last_damage_from")) ){	killer->add_temp("bwdhpk",1);message("channel:chat", HIC"【屠人战况】"HIR + " "+this_object()->query("name")+"被"+killer->query("name")+"打出了屠人大会!\n"NOR,users() );}	  this_object()->set("eff_jing", (int)this_object()->query("max_jing"));	  this_object()->set("jing", (int)this_object()->query("max_jing"));	  this_object()->set("eff_qi", (int)this_object()->query("max_qi"));	  this_object()->set("qi", (int)this_object()->query("max_qi"));	  this_object()->set("jingli", (int)this_object()->query("max_jingli"));	  this_object()->set("neili", (int)this_object()->query("max_neili"));	  this_object()->set("food", (int)this_object()->max_food_capacity());	  this_object()->set("water", (int)this_object()->max_water_capacity());	  this_object()->remove_all_killer();	  this_object()->clear_condition();          this_object()->move("/d/pk/pk/ready");          return;}	//平安城不昏//        if (environment(this_object())->query("pingan"))//        {//		message_vision(HIW "$N眼看就要昏倒,但是平安城的圣灵之气使$N一下子就清醒了过来。\n" NOR, this_object());//		this_object()->set("eff_jing",this_object()->query("max_jing"));//		this_object()->set("jing",1);//		this_object()->set("eff_qi",this_object()->query("max_qi"));//		this_object()->set("qi",1);//		return;//	}	if( objectp(defeater = query_temp("last_damage_from")) )		COMBAT_D->winner_reward(defeater, this_object());	if( objectp(defeater = query_temp("last_damage_from")) ){	set_temp("hunby",defeater->query("id"));}//        if (objectp(riding = me->query_temp("is_riding")))//        {//                message_vision("$N一头从$n上面栽了下来!\n",//                              me, riding);//                me->delete_temp("is_riding");//                riding->delete_temp("is_rided_by");//                riding->move(environment(me));//        }	this_object()->remove_all_enemy();	set("hunmi",1);        this_object()->delete_temp("fight/dodge");	message("system", HIR "\n你的眼前一黑,接著什么也不知道了....\n\n" NOR,		this_object());	this_object()->disable_player("<昏迷不醒!人事不知!>");        this_object()->delete_temp("fight/dodge");	set("jing", 0);	set("qi", 0);	set_temp("block_msg/all", 1);	COMBAT_D->announce(this_object(), "unconcious");	call_out("revive", random(100 - query("con")) + 30);}void revive(int quiet){        int i;	object me;	object env;	me = this_object();	remove_call_out("revive");	env = environment();	if (env)	{		while (env->is_character() && environment(env))			env = environment(env);		if (env != environment())                	this_object()->move(env);	}        delete("disable_type");        set_temp("block_msg/all", 0);        this_object()->enable_player();	// write the prompt	me->write_prompt();	if( !quiet ) {		COMBAT_D->announce(this_object(), "revive");		set_temp("block_msg/all", 0);		set("hunmi",0);				message("system", HIY "\n慢慢地你终于又有了知觉....\n\n" NOR,			this_object());	} else		{set_temp("block_msg/all", 0);set("hunmi",0);}}void die(){	object corpse, killer;	int i;	if( !living(this_object()) ) revive(1);	if( wizardp(this_object()) && query("env/immortal") ) return;		//特殊房间改动死亡 idea	if (environment() && environment()->query("alternative_die")) {		environment()->alternative_die(this_object());		return;	}	//擂台比武不死	if ( userp(this_object()) && file_name(environment(this_object())) == "/d/city/leitai")	{		message_vision(HIR "公平子道:“已分胜负,不决生死。”\n" NOR, this_object());		this_object()->set("eff_jing",this_object()->query("max_jing"));		this_object()->set("jing",this_object()->query("max_jing"));		this_object()->set("eff_qi",this_object()->query("max_qi"));		this_object()->set("qi",this_object()->query("max_qi"));		return;	}	//平安城不死//    if((int)obj->query("age") <= 17 && userp(obj) && !obj->query_condition("killer"))//        return notify_fail("为了世界更美好,放过小孩子吧.\n");        if (userp(this_object())&& environment(this_object())->query("pingan") && (int)this_object()->query("age") <= 17)        {		message_vision(HIR "$N本来死定了,但$N突然大叫了一声“平安之城,永远不死。”竟又活了回了。\n" NOR, this_object());

⌨️ 快捷键说明

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