ban.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 158 行
C
158 行
//ban.c 打狗棒法「绊」字诀// fear 12/99#include <ansi.h>inherit F_DBASE;inherit F_SSERVER;int perform(object me, object target){ string* msgsuccess; string* msgfail; string* msgloop, msg; int random_text; int duration; int dodge; int speed; string weapon; int skill, att; int nskill; int ndamage; int hits; int i; int ban_count=0; if( !target ) target = offensive_target(me); if( !target || !target->is_character() || !me->is_fighting(target) ) return notify_fail("绊字诀只能对战斗中的对手使用。\n"); if( target->is_busy() ) { return notify_fail(target->name() + "目前正自顾不暇,放胆攻击吧ⅵ\n"); } if( me->query_temp("ban",1) ) return notify_fail("你已在使用绊字诀!\n"); if( me->query_skill_mapped("force") != "huntian-qigong" ) return notify_fail("你所用的并非混天气功,无法施展绊字诀!\n"); if( me->query_skill("force") < 199 ) return notify_fail("你的混天气功火候未到,无法施展绊字诀!\n"); if( (int)me->query("neili") < 400 ) return notify_fail("你的内力不够。\n"); if (me->query_skill("huntian-qigong", 1)<70) return notify_fail("你的本门内功火候未到,!\n"); if (!objectp(weapon = me->query_temp("weapon")) || (string)weapon->query("skill_type") != "staff") return notify_fail("你使用的武器不对。\n"); if( me->query_skill("staff") < 199 ) return notify_fail("你的打狗棒法修为不足,还不会使用绊字诀!\n"); skill = ( me->query_skill("dagou-bang") + me->query_skill("force") ) / 5; nskill = ( me->query_skill("dagou-bang") ) /4; me->set_temp("apply/speed", me->query_temp("apply/speed",1)+skill*3/2); speed = target->query_temp("apply/speed",1); dodge = target->query_temp("apply/dodge",1); if( me->query("neili") <= skill*3 ) return notify_fail("你的内力不够使用绊字诀!\n"); weapon = me->query_temp("weapon"); if( me->query_skill("dagou-bang") < 300 ) { hits=3; } else if( me->query_skill("dagou-bang") < 400 ) { hits=4; } else if( me->query_skill("dagou-bang") < 500 ) { hits=5; } else { hits=6; } if( random(2)) { message_vision(HIG "突然$N"+ weapon->name()+HIG"挥出,以打狗棒的「绊」字诀着地扫去,有如长江大河,绵绵而至。\n\n" NOR, me, target); } else { message_vision(HIG "$N"+ weapon->name()+HIG"伸出,施展打狗棒法的「绊」字诀,连环钩盘,虽只一个「绊」字,中间却蕴藏着千变万化。\n\n" NOR, me, target);} for(i=0;i<=hits;i++) { if (random(me->query("combat_exp")) > random((int)target->query("combat_exp")) ) { msgsuccess = ({ "$n纵身稍慢,被"+ weapon->name()+HIY"在左胫上一拨,右踝上一钩,扑地倒了。", "$n立足不住,被"+ weapon->name()+HIY"绊了一交,仰天摔倒。", weapon->name()+HIY"腾的一下,$n登时措手不及,被绊得一交摔倒。", weapon->name()+HIY"猛然翻转,击中$n的脚胫。$p立足不稳,一个踉跄,扑地跌倒。" }); msg = HIY"\n"+ msgsuccess[random(sizeof(msgsuccess))] +"\n" NOR; message_vision(msg, me, target); if(nskill > 100) { ndamage=100;} else { ndamage = nskill; } ban_count++; me->start_busy(2); target->start_busy(1 + random(3)); target->add("qi",-ban_count * ndamage); target->add("qi",-me->query_skill("dagou-bang")/2+random(300)); target->add("eff_qi",-me->query_skill("dagou-bang")/2+random(300)); target->add_temp("apply/dodge", -skill/10 ); target->add_temp("apply/attack", -skill/10 ); } else { msgfail = ({ "$n微感劲风袭向下盘,急忙涌身跃起,总算躲过了一招。", "$n轻跃相避,立时躲开了这一招。" , "$n纵身跃起,避过了这惊险的一棒。", "$n凌空窜起,将跌势变为跃势,再稳稳落下。" }); msg = CYN"\n"+ msgfail[random(sizeof(msgfail))] +"\n" NOR; message_vision(msg, me, target); me->start_busy(2); } if (i < hits) { msgloop = ({ "$n刚跃起,尚未落地,那"+ weapon->name()+HIG"又是一挑一打。", "$p越跃越快,但见地下一片绿竹化成的碧光盘旋飞舞。", "那「绊」字诀乃是一棒快似一棒,$N一绊不中,二绊续至,决不容$n有丝毫喘息时机。", "$n纵身上跃,但觉得脚下犹如陷入了泥沼,又似缠在无数藤枝之中。" }); msg = HIG"\n"+ msgloop[random(sizeof(msgloop))] +"\n" NOR; message_vision(msg, me, target); } me->add("neili", -150 ); me->add("qi", -55 ); } me->set_temp("ban",1); duration = 15 - me->query_skill("dagou-bang") / 50; if (duration < 5) { duration = 5; } call_out("remove_effect",duration,me,target,speed , dodge); return 1;}void remove_effect(object me, object victim, int speed, int dodge){ if (objectp(victim)) { victim->set_temp("apply/attack", speed); victim->set_temp("apply/dodge", dodge); } if (objectp(me)) { me->set_temp("apply/speed",0); me->delete_temp("ban"); } if( objectp(me) && objectp(victim) && victim->is_fighting(me) ) message_vision(HIG "\n$N吸了一口气,将内力收回丹田,棒招也恢复正常!\n\n" NOR, me); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?