combatd.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 1,195 行 · 第 1/4 页
C
1,195 行
me->kill_ob(obj);}// This function is to announce the special events of the combat.// This should be moved to another daemon in the future.void announce(object ob, string event){// 比武现场转播 start// player=users();// 比武现场转播 end switch(event) { case "dead":message_vision( NOR"\n$N「啪」地一声倒在地上,嘴角溢出几丝鲜血,痛苦的挣扎了几下就死了。\n\n" NOR, ob);// 比武现场转播 start// if ((string)environment(ob)->query("short") == "擂台")// for (userno=0; userno<sizeof(player); userno++)// if ((player[userno])->query_temp("view_leitai"))// tell_object(player[userno], "\n"+ob->name()+"「啪」地一声倒在地上,嘴角溢出几丝鲜血,痛苦的挣扎了几下就死了。\n");// 比武现场转播 end break; case "unconcious": message_vision("\n$N脚下一个不稳,跌在地上一动也不动了。\n\n", ob);// 比武现场转播 start// if ((string)environment(ob)->query("short") == "擂台")// for (userno=0; userno<sizeof(player); userno++)// if ((player[userno])->query_temp("view_leitai"))// tell_object(player[userno], "\n"+ob->name()+"脚下一个不稳,跌在地上一动也不动了。\n\n");// 比武现场转播 end break; case "revive": if(ob->query("blind") || ob->query("race") != "人类") message_vision("\n$N身子一颤,扭动了几下,清醒了过来。\n\n", ob); else if(ob->query("mute")) message_vision("\n$N慢慢清醒了过来,睁开眼睛站起来摇了摇头。\n\n", ob); else message_vision("\n$N身子动了动,口中呻吟了几声,清醒过来。\n\n", ob);// 比武现场转播 start// if ((string)environment(ob)->query("short") == "擂台")// for (userno=0; userno<sizeof(player); userno++)// if ((player[userno])->query_temp("view_leitai"))// tell_object(player[userno], "\n"+ob->name()+"慢慢睁开眼睛,清醒了过来。\n\n");// 比武现场转播 end break; }}void winner_reward(object killer, object victim){ killer->defeated_enemy(victim);}void killer_reward(object killer, object victim){ int gain,gain1; int bls,zhenfa=0; object env; string vmark; string temp; string str,killerid; string msg="莫名其妙的死了。"; mapping quest, actions; int exp, pot, score, bonus,factor; int student_num; // Call the mudlib killer apply. killer->killed_enemy(victim); env = environment(victim); if(objectp(env)) if ( env->query("no_death_penalty")) { victim->set_temp("no_death_penalty",1); return; }if (env && environment(victim)->query("no_fight")&& killer){log_file("log", "在NF的ROOM发生死亡:" + base_name(environment(victim)) +"\n", 1);log_file("log", "造成人物" + killer->query("id") + killer->query("name")+"\n", 1);}if (killer){killer->remove_all_enemy(victim);killer->remove_all_killer(victim);if (killer->query("id")=="xun bu"){killer->remove_all_enemy();killer->remove_all_killer();}} if( userp(victim)) {/* if (userp(killer) && killer->query_condition("killer")){ killer->add("qiushi/times",1); killer->add("qiushi/totaltime",killer->query("qiushi/howlong")); killer->set("qiushi/inage",killer->query("mud_age")); killer->set("startroom","/d/death/qiushi"); killer->set("qiushi/howlong",180); killer->move("/d/death/qiushi"); killer->apply_condition("killer", 360 + killer->query_condition("killer")); CHANNEL_D->do_channel(this_object(), "rumor", sprintf("通缉犯%s被关进了囚室。", killer->name(1), killer->name()));}*/ if ( victim->query_condition("killer") && userp(killer)) zhenfa=1; else if(!victim->is_killing(killer->query("id"))) { killer->add("PKS", 1); if (userp(killer)){// killer->apply_condition("killer", 120 +// killer->query_condition("killer")); if (killer->query_temp("kill_other/"+victim->query("id"))) { CHANNEL_D->do_channel(this_object(), "rumor", sprintf("%s被%s杀害了。", victim->name(1), killer->name())); killer->apply_condition("killer", 120 + killer->query_condition("killer") * 3 / 2); } else if (victim->query_temp("kill_other/"+killer->query("id"))) CHANNEL_D->do_channel(this_object(), "rumor", sprintf("%s被%s正当防卫杀死了。", victim->name(1), killer->name())); else { CHANNEL_D->do_channel(this_object(), "rumor", sprintf("%s失手把%s杀死了。", killer->name(), victim->name(1))); killer->apply_condition("killer", 120 + killer->query_condition("killer")); } killer->delete_temp("kill_other/"+victim->query("id")); victim->delete_temp("kill_other/"+killer->query("id")); killer->delete_temp("other_kill/"+victim->query("id")); victim->delete_temp("other_kill/"+killer->query("id"));} }if (killer->query("id")=="xun bu"){killer->remove_all_enemy();killer->remove_all_killer();}victim->remove_all_enemy();victim->remove_all_killer();if (!victim->query_condition("killer")){ victim->clear_condition();} // CHANNEL_D->do_channel(this_object(), "rumor",str); victim->add("shen", -(int)victim->query("shen") / 10); if (victim->query("combat_exp")>1200000){ if (victim->query("max_neili")>1000) { victim->add("max_neili", -50); }} if (victim->query("combat_exp")>500000 || victim->query_condition("killer")){ victim->clear_condition(); victim->add("combat_exp", -(int)victim->query("combat_exp") / 200); if( (int)victim->query("potential") > (int)victim->query("learned_points")) victim->add("potential", ((int)victim->query("learned_points") - (int)victim->query("potential"))/5 ); victim->skill_death_penalty();} victim->delete("vendetta"); if( victim->query("thief") ) victim->set("thief", (int)victim->query("thief") / 2); victim->set("killbyname",killer->query("name")); victim->save(); bls = 10; if(objectp(killer)) { msg="被"+killer->name(1); actions = killer->query("actions"); switch(actions["damage_type"]) { case "擦伤": case "割伤": msg+="砍死了。"; break; case "刺伤": msg+="刺死了。"; break; case "瘀伤": msg+="击死了。"; break; case "内伤": msg+="震死了。"; break; default: msg+="杀死了。"; } } if (zhenfa==1){ victim->apply_condition("killer", 0); CHANNEL_D->do_channel(this_object(), "rumor", sprintf("通缉犯%s被%s就地正法了。", victim->name(1), killer->name())); if (victim->query("combat_exp") > 800000){ killer->add("score",300); CHANNEL_D->do_channel(this_object(), "rumor", sprintf("%s的江湖阅历提高了!!。", killer->name()));}} else { if ( victim->query_condition("killer")){ victim->apply_condition("killer", 0); } CHANNEL_D->do_channel(this_object(), "rumor",sprintf("%s"+msg, victim->name(1))); //官府开始通辑罪犯! write_file("/log/static/KILLRECORD",sprintf("%s 杀死了 %s on %s\n", killer->name(1),victim->name(1), ctime(time()) ));} } else { killer->add("MKS", 1); bls = 1; } if (userp(killer) && killer->query("combat_exp") < victim->query("combat_exp")) killer->add("shen", -(int)victim->query("shen") / 10); if( stringp(vmark = victim->query("vendetta_mark")) ) killer->add("vendetta/" + vmark, 1); if( ( (int)killer->query("combat_exp") < victim->query("combat_exp")) && (victim->query_condition("sexman"))) { tell_object(killer,"恭喜你!你为武林除了一害!\n"); exp = 100 + random(500); pot = 50 + random(100); score = 50 + random(100); killer->add("combat_exp",exp); killer->add("potential",pot); killer->add("score",score); killer->add("shen",50); tell_object(killer,HIW"你被奖励了:" + chinese_number(exp) + "点实战经验,"+ chinese_number(pot) + "点潜能," + chinese_number(score)+"点江湖阅历。\n" NOR); killer->set("quest", 0 ); }// 下面是杀人任务 if (userp(victim)) { return; } if( interactive(killer) && (quest = killer->query("quest")) && (quest["quest_type"]=="杀") && ( (int)killer->query("task_time") >= time()) &&(quest["quest"]==victim->query("name"))) { tell_object(killer,"恭喜你!你又完成了一项任务!\n"); exp = quest["exp_bonus"]/2 + random(quest["exp_bonus"]/2); pot = quest["pot_bonus"]/2 + random(quest["pot_bonus"]/2); score = quest["score"]/2 + random(quest["score"]/2); factor=victim->query("quest_factor"); if (factor) { exp=exp*factor/10; pot=pot*factor/10; score=score*factor/10; } bonus = (int) killer->query("combat_exp"); bonus += exp; killer->set("combat_exp", bonus); bonus = (int) killer->query("potential"); bonus = bonus - (int) killer->query("learned_points"); bonus = bonus + pot;// if( bonus > 100000) bonus = 100000; bonus += (int)killer->query("learned_points"); killer->set("potential", bonus ); bonus = (int)killer->query("shen"); if(bonus >= 0) bonus += score; else bonus -= score; killer->set("shen", bonus); killer->add("score",score); tell_object(killer,HIW"你被奖励了:" + chinese_number(exp) + "点实战经验,"+ chinese_number(pot) + "点潜能," + chinese_number(score)+"点江湖阅历。\n" NOR); killer->set("quest", 0 ); }}//杀坏人mapping query_action(){ return combat_action[random(sizeof(combat_action))];}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?