damage.c

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

C
298
字号
//Cracked by Kafei// damage.c#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, mixed who){	int val;	if( damage < 0 ) error("F_DAMAGE: 伤害值为负值。\n");	if( type!="jing" && type!="qi" && type!="jingli")		error("F_DAMAGE: 伤害种类错误( 只能是 jing, qi, jingli 其中之一 )。\n");	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, mixed who){	int val;	if( damage < 0 ) error("F_DAMAGE: 伤害值为负值。\n");	if( type!="jing" && type!="qi" )		error("F_DAMAGE: 伤害种类错误( 只能是 jing, qi 其中之一 )。\n");	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" && type!="jingli")		error("F_DAMAGE: 恢复种类错误( 只能是 jing, qi 其中之一 )。\n");	val = (int)query(type) + heal;	if( val > (int)query("eff_" + type) && type!="jingli" ) set(type, (int)query("eff_" + type));	else if( val > (int)query("max_" + type) && type=="jingli" ) set(type, (int)query("max_" + 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;	if( !living(this_object()) ) return;	if( wizardp(this_object()) && query("env/immortal") ) return;	if( objectp(defeater = query_temp("last_damage_from")) )		COMBAT_D->winner_reward(defeater, this_object());	this_object()->remove_all_enemy();// xuy, interrupt all dazuo, jingzuo etc.	this_object()->interrupt_me();	this_object()->dismiss_team();	message("system", HIR "\n你的眼前一黑,接著什么也不知道了....\n\n" NOR,		this_object());	this_object()->disable_player(" <昏迷不醒>");	set("jing", 0);	set("qi", 0);	set("jingli", 0);	set_temp("block_msg/all", 1);	COMBAT_D->announce(this_object(), "unconcious");	call_out("revive", random(100 - query("con")) + 30);}varargs void revive(int quiet){	remove_call_out("revive");	while( environment()->is_character() )		this_object()->move(environment(environment()));	this_object()->enable_player();	if( !quiet ) {		COMBAT_D->announce(this_object(), "revive");		set_temp("block_msg/all", 0);		message("system", HIY "\n慢慢地你终于又有了知觉....\n\n" NOR,			this_object());	} else		set_temp("block_msg/all", 0);}void die(){	object corpse, rum_ob;	mixed killer;	int i;	if( environment()->query("no_death") && userp(this_object()) )		{//			if ( !objectp(rum_ob = find_object("/d/huashan/npc/referee")) )//				rum_ob = load_object("/d/huashan/npc/referee");//			killer = query_temp("last_damage_from");//			if ( stringp(killer) )//				CHANNEL_D->do_channel(rum_ob, "chat",//					sprintf("%s被" + killer + "干掉了。", this_object()->name(1)));//			else//				CHANNEL_D->do_channel(rum_ob, "rumor",//					sprintf("%s被干掉了。", this_object()->name(1)));			unconcious();			remove_call_out("revive");			return;		}	if( !living(this_object()) ) revive(1);	if( wizardp(this_object()) && query("env/immortal") ) return;	// Clear all the conditions by death.	this_object()->clear_condition();	this_object()->delete("poisoner");	COMBAT_D->announce(this_object(), "dead");	if ( userp(this_object()) && !environment(this_object())->query("no_death"))		COMBAT_D->death_penalty(this_object());	if( objectp(killer = query_temp("last_damage_from"))){		set_temp("my_killer", killer->query("id"));		COMBAT_D->killer_reward(killer, this_object());	} else  if (userp(this_object()))	{	if ( !objectp(rum_ob = find_object("/d/city/npc/aqingsao")) )		rum_ob = load_object("/d/city/npc/aqingsao");	if ( stringp(killer) )		CHANNEL_D->do_channel(rum_ob, "rumor",			sprintf("%s" + killer + "。", this_object()->name(1)));	else		CHANNEL_D->do_channel(rum_ob, "rumor",			sprintf("%s莫名其妙地死了。", this_object()->name(1)));	}	if( ( !environment()->query("no_death") || !userp(this_object()) ) 	 && objectp(corpse = CHAR_D->make_corpse(this_object(), killer)) )		corpse->move(environment());	this_object()->remove_all_killer();	all_inventory(environment())->remove_killer(this_object());	if( userp(this_object()) ) {		if (this_object()->is_busy())			this_object()->interrupt_me();		set("jing", 1);	set("eff_jing", 1);		set("qi", 1);	set("eff_qi", 1);		set("jingli", 1);		if (environment(this_object())->query("no_death")) {			set("eff_jing", query("max_jing"));			set("eff_qi", query("max_qi"));			return;		}		this_object()->dismiss_team();		this_object()->save();		ghost = 1;		this_object()->move(DEATH_ROOM);		DEATH_ROOM->start_death(this_object());//		MARRY_D->break_marriage(this_object()); // added by Zhuang@XKX		if( this_object()->query("family/master_id")=="feng qingyang" ) 							CHAR_D->break_relation(this_object()); //added by Qfy	} else		destruct(this_object());}void reincarnate(){	ghost = 0;	set("jing", query("max_jing"));	set("qi", query("max_qi"));	set("eff_jing", query("max_jing"));	set("eff_qi", query("max_qi"));	set("jingli", query("max_jingli"));	set("neili", query("max_neili"));}int max_food_capacity() { return query_weight() / 200; }int max_water_capacity() { return query_weight() / 200; }int heal_up(){	int update_flag, i;	mapping my;//	if( this_object()->is_fighting() ) return -1;	update_flag = 0;	my = query_entire_dbase();	if( my["water"] > 0 ) { my["water"] -= 1; update_flag++; }	if( my["food"] > 0 ) { my["food"] -= 1; update_flag++; }	if( my["water"] < 1 && userp(this_object()) ) return update_flag;	if( my["food"] < 1 && userp(this_object()) ) return update_flag;		if( this_object()->is_fighting() )		my["jing"] += my["con"] / 9 + my["max_jingli"] / 30;	else		my["jing"] += my["con"] / 3 + my["max_jingli"] / 10;	if( my["jing"] >= my["eff_jing"] ) {		my["jing"] = my["eff_jing"];		if( my["eff_jing"] < my["max_jing"] ) { my["eff_jing"] ++; update_flag++; }	} else update_flag++;	if( this_object()->is_fighting() )		my["qi"] += my["con"] / 9 + my["max_neili"] / 30;	else		my["qi"] += my["con"] / 3 + my["max_neili"] / 10;	if( my["qi"] >= my["eff_qi"] ) {		my["qi"] = my["eff_qi"];		if( my["eff_qi"] < my["max_qi"] ) { my["eff_qi"] ++; update_flag++; }	} else update_flag++;	if( my["max_jingli"] && my["jingli"] < my["max_jingli"] ) {		if( this_object()->is_fighting() )			my["jingli"] +=  (my["str"] + my["dex"]) / 12;		else			my["jingli"] +=  (my["str"] + my["dex"]) / 4;		if( my["jingli"] > my["max_jingli"]*2 ) my["jingli"] = my["max_jingli"]*2;		update_flag++;	}	if( my["max_neili"] && my["neili"] < my["max_neili"] ) {		if( this_object()->is_fighting() )			my["neili"] += (int)this_object()->query_skill("force", 1) / 6;		else			my["neili"] += (int)this_object()->query_skill("force", 1) / 2;		if( my["neili"] > my["max_neili"] ) my["neili"] = my["max_neili"];		update_flag++;	}	return update_flag;}

⌨️ 快捷键说明

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