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 + -
显示快捷键?