spattack.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 246 行
C
246 行
// spattack.c#include <ansi.h>inherit F_CLEAN_UP;mapping weapon_name = ([ "sword" : "剑", "blade" : "刀", "staff" : "杖", "whip" : "鞭", "club" : "棍",]);void do_remote_fight(object me, object couple, object target, int n);void do_here_fight(object me, object couple, object target, int n);int main(object me, string arg){ int same_place; string couple_id; string couple_name; object couple; object target; if (environment(me)->query("no_fight")) return notify_fail("这里不能战斗。\n"); if (! arg) { me->clean_up_enemy(); target = me->select_opponent(); } else target = present(arg, environment(me)); if (! target || ! me->is_fighting(target)) return notify_fail("会心一击只能对战斗中的对手使用。\n"); if (! stringp(couple_id = me->query("couple/couple_id"))) return notify_fail("你还没有伴侣,使什么会心一击?\n"); couple_name = me->query("couple/couple_name"); if (! objectp(couple = find_player(couple_id))) return notify_fail(couple_name + "不在这个世界上,无法给与你力量。\n"); if (couple->is_ghost()) return notify_fail(couple_name + "现在是鬼魂一个,无" "法穿越灵界给与你力量。\n"); if (! living(couple)) return notify_fail("你的心灵现在无法和" + couple_name + "沟通。\n"); if (target == couple) return notify_fail("你有病啊!\n"); same_place = (environment(couple) == environment(me)); if (! same_place) do_remote_fight(me, couple, target, me->query("sex/" + couple->name(1))); else do_here_fight(me, couple, target, me->query("sex/" + couple->name(1))); return 1;}void do_remote_fight(object me, object couple, object target, int n){ object weapon; string chinese_type; int need, cost; int enhance, count; string msg; if (n > 500) n = 500; need = 300 - n / 2; cost = 300 - n / 3; if (me->query("neili") < need) { write("你试图和你的伴侣进行心灵上的沟通,但是" "一时觉得内力不济,难以联系。\n"); return; } if (couple->query("neili") < need) { write("你隐隐约约的感觉到你伴侣" "的灵力,但是非常微弱,很难捕捉到。\n"); return; } if (me->is_busy()) { write("( 你上一个动作还没有完成,不能施展会心一击。)\n"); return; } if (random(2)) tell_object(me, HIM "你心中默默的念着" + couple->name(1) + HIM "的名字,隐隐感到那若即若离的" "灵觉,穿透了无尽的虚空,和你心心相连。\n\n" NOR); else tell_object(me, HIM "穿过了缥缈的虚空,你仿佛看到" + couple->name(1) + HIM ",给予你无上的鼓舞和无尽的力量。\n\n" NOR); if (random(2)) tell_object(couple, HIM "你似乎感觉到" + me->name(1) + HIM "在你心灵深处呼唤你的名字,两人之" "间有如心有灵犀,你默默的为" + gender_pronoun(me->query("gender")) + "祝福:去吧,我的爱人!\n" NOR); else tell_object(couple, HIM "冥冥你感到了" + me->name(1) + HIM "对你的呼唤,这一刹那,你们在心灵上" "全然相通,让你把无形的力量注入给对方,鼓舞着" + gender_pronoun(me->query("gender")) + "。\n" NOR); me->add("neili", -cost); couple->add("neili", -cost); weapon = me->query_temp("weapon"); if (weapon && (chinese_type = weapon_name[weapon->query("skill_type")])) { if (me->query("gender") == "女性") msg = HIG "$N" HIG "弹" + chinese_type + "轻吟,宛若黄莺出谷,飘身而进,手中的" + weapon->name() + HIG "化作流星夜雨,披向$n" HIG "。\n" NOR; else msg = HIC "$N持" + chinese_type + "而进,竟然视$n" HIC "有若无物,手中" + weapon->name() + HIC "挥洒自如,荡起层层" + chinese_type + "影,将$p" HIC "困在当中。\n" NOR; } else { if (me->query("gender") == "女性") msg = HIG "$N" HIG "轻声浅笑,飘然而进,身法惊艳" "绝伦,有若九天玄女踏足红尘,举手投足之间没有任何破绽。\n" NOR; else msg = HIC "$N" HIC "纵声长啸,一股杀气凛然而起,天" "地登时色变,$N" HIC "挟风雷万钧之势,压向$n" HIC "。\n" NOR; } message_combatd(msg, me, target); enhance = ((int)couple->query_skill("force") + n / 10) / 5; count = 1 + random(3 + n / 100); if (count > 3) count = 3; me->add_temp("apply/attack", enhance); me->add_temp("apply/damage", enhance); while (count--) { if (! me->is_fighting(target)) break; COMBAT_D->do_attack(me, target, me->query_temp("weapon"), 0); COMBAT_D->do_attack(me, target, me->query_temp("weapon"), 0); } me->add_temp("apply/attack", -enhance); me->add_temp("apply/damage", -enhance); me->start_busy(2); return;}void do_here_fight(object me, object couple, object target, int n){ int need, cost; int enhance1, enhance2, count; string msg; if (n > 500) n = 500; need = 300 - n / 2; cost = 300 - n / 3; if (me->is_busy()) { write("( 你上一个动作还没有完成,不能施展会心一击。)\n"); return; } if (couple->is_busy()) { write("你的伴侣现在正忙,无法配合你进行会心一击。\n"); return; } if (! couple->is_fighting(target)) couple->fight_ob(target); message_combatd(HIY "$N" HIY "和$n" HIY "两人眼神一交,心意已" "然相通,不由的会心一笑,只见二人身形一错,霎时\n" "已经向" + target->name() + "攻出数招!\n" NOR, me, couple); enhance1 = ((int)couple->query_skill("force") + n / 10) / 5; enhance2 = ((int)me->query_skill("force") + n / 10) / 5; count = 2 + random(5 + n / 50); if (count > 6) count = 6; me->add_temp("apply/attack", enhance1); couple->add_temp("apply/attack", enhance2); me->add_temp("apply/damage", enhance1); couple->add_temp("apply/damage", enhance2); while (count--) { if (me->is_fighting(target) && (count % 2) == 0){ COMBAT_D->do_attack(me, target, me->query_temp("weapon"), 0); COMBAT_D->do_attack(me, target, me->query_temp("weapon"), 0);} else if (couple->is_fighting(target)){ COMBAT_D->do_attack(couple, target, couple->query_temp("weapon"), 0); COMBAT_D->do_attack(couple, target, couple->query_temp("weapon"), 0);} else break; } me->start_busy(2); couple->start_busy(2); me->add_temp("apply/attack", -enhance1); couple->add_temp("apply/attack", -enhance2); me->add_temp("apply/damage", -enhance1); couple->add_temp("apply/damage", -enhance2); return;}int help (object me){ write(@HELP指令格式:spattack [<施用对象>]如果你结婚了,就可以使用会心一击,联手打击对你正在攻击的对手,即使你的伴侣不在你的身边,也可以运用灵力穿过遥远的时空给与你支持,当然这需要耗费内力,两个人灵肉结合的次数越多,耗费的内力就越少。如果你的伴侣就在你的身边,则可以一起施展招数攻击对手,不需要耗费内力,招数的威力与两的人灵肉结合的次数于伴侣的内功等级相关。HELP ); return 1;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?