|
楼主 |
发表于 2008-5-28 20:34:02
|
显示全部楼层
- #include <ansi.h>
- inherit F_SSERVER;
- void remove_effect(object me, int damage, int attack, int level,int busytime);
- void check2(object me, int o_att, int o_dam, int o_spd);
- int perform(object me, object target)
- {
- object weapon;
- int busytime,larger;
- int acc_damage = 0;
- int acc_attack = 0;
- int i, level, attack, damage, o_att, o_dam, o_spd;
- weapon = me->query_temp("weapon");
- if( !objectp(weapon) || weapon->query("skill_type") != "sword" )
- weapon = me->query_temp("secondary_weapon");
- if( !target && me->is_fighting() ) target = offensive_target(me);
- if( me->query_skill("taiji-jian", 1) < 150 )
- return notify_fail("你的太极剑法修为还不够,还未领悟「神门十三剑」!\n");
- if( me->query_skill("yinyun-ziqi", 1) < 150 )
- return notify_fail("你的内功修为火候未到,施展「神门十三剑」只会伤及自身!\n");
- if( !target || !target->is_character() || !me->is_fighting(target) )
- return notify_fail("「神门十三剑」只能对战斗中的对手使用。\n");
- if( !objectp(weapon) || weapon->query("skill_type") != "sword" )
- return notify_fail("你手中无剑,怎能运用「神门十三剑」?!\n");
- if( me->query_skill_mapped("force") != "yinyun-ziqi" )
- return notify_fail("你所用的内功与「神门十三剑」心法相悖!\n");
- level = me->query_skill("sword") / 30;
- busytime = 1+level/4+random(level/3);
- if( me->query("max_neili") <= level*20 )
- return notify_fail("你的内力修为不足,劲力不足以施展「神门十三剑」!\n");
- if( me->query("neili") <= level*20 )
- return notify_fail("你的内力不够,劲力不足以施展「神门十三剑」!\n");
- if( me->query("jingli") <= level*20 )
- return notify_fail("你的精力有限,不足以施展「神门十三剑」!\n");
- if(me->is_busy())
- return notify_fail("你正忙着呢,没办法施展「神门十三剑」心法!\n");
- o_att = me->query_temp("apply/attack");
- o_dam = me->query_temp("apply/damage");
- o_spd = me->query_temp("apply/speed");
- damage = ( me->query_skill("force") + me->query("neili")/20 + me->query("max_neili")/5 )/20;
- attack = ( me->query_skill("dodge") + me->query("jingli")/20 + me->query("max_jingli")/5 )/20
- + me->query_dex()/5 + weapon->query("apply/damage")/2;
- me->add_temp("apply/speed", level*5);
- me->add_temp("apply/damage", damage);
- me->add_temp("apply/attack", attack);
-
- if (busytime <= 4) {
- larger = 4;
- } else {larger = busytime;}
- me->start_call_out((:call_other, __FILE__, "check2", me, o_att, o_dam, o_spd:),larger);
- /*if( wizardp(me) ) tell_object( me,
- sprintf("old damage: %d, old attack: %d, old speed: %d \n",o_att,o_dam,o_spd));*/
-
- me->add_temp("perform/juejian", 1);
- for( i=0; i < level; i++ )
- {
- if( wizardp(me) ) tell_object( me,
- sprintf("damage: %d, attack: %d, speed: %d\n",
- me->query_temp("apply/damage"), me->query_temp("apply/attack"),
- me->query_temp("apply/speed")));
- COMBAT_D->do_attack(me, target, weapon);
- me->add_temp("apply/damage", -damage/level);
- me->add_temp("apply/attack", -attack/level);
- if ((int)me->query_temp("apply/damage") < 0)
- {
- me->set_temp("apply/damage",0);
- }
- if ((int)me->query_temp("apply/attack") < 0)
- {
- me->set_temp("apply/attack",0);
- }
- acc_damage += damage/level;
- acc_attack += attack/level;
- }
- message_vision(HIY"\n这几下交手,当真是显示出太极剑的威力,迅捷无伦,一刹那间$N连攻了"+
- chinese_number(level) +"下快招,招招是致命的凌厉毒招!!\n"NOR, me);
- me->add("neili", -level*70);
- me->add("jingli", -level*50);
- remove_effect(me,(damage-acc_damage),(attack-acc_attack),level,busytime);
- return 1;
- }
- void remove_effect(object me, int damage, int attack, int level,int busytime)
- {
- if (!me) return;
- me->add_temp("apply/attack",-attack);
- me->add_temp("apply/damage",-damage);
- me->add_temp("apply/speed", -level*5);
- /*if( wizardp(me) ) tell_object( me,
- sprintf("after fight,damage: %d, attack: %d, speed: %d\n",damage,attack,level));*/
- me->delete_temp("perform/juejian");
- me->start_busy(busytime);
- }
- void check2(object me, int o_att, int o_dam, int o_spd)
- {
-
- /*if( wizardp(me) ) tell_object( me,
- sprintf("begin to check apply stuff,now.\n"));*/
- if((int)me->query_temp("apply/attack",1) != o_att)
- {
- me->set_temp("apply/attack",o_att);
- }
- if((int)me->query_temp("apply/damage",1) != o_dam)
- {
- me->set_temp("apply/damage",o_dam);
- }
- if((int)me->query_temp("apply/speed", 1) != o_spd)
- {
- me->set_temp("apply/speed", o_spd);
- }
- }
复制代码 |
|