找回密码
 注册
搜索
查看: 408|回复: 3

关于天山杖法飞掷的 code

[复制链接]
门派:不明
发表于 2010-9-3 17:27:14 | 显示全部楼层 |阅读模式
大家 do job 遇到 飞掷就蒙,不是没道理的。。。。

//by caiji@SJ
//出处:天龙八部,第3册,975页1996年11月重印版/三联出版社出版
#include <ansi.h>
#include "/kungfu/skill/eff_msg.h";

inherit F_SSERVER;
string perform_name(){ return HIC"飞掷"NOR; }
int perform(object me, object target)
{
        object weapon;
        int damage,p;
        string msg,dodge_skill;

        if( !target ) target = offensive_target(me);

        if( !target
        ||  !target->is_character()
        ||  !me->is_fighting(target)
        ||  !living(target))
                return notify_fail("「飞掷」只能对战斗中的对手使用。\n");

        if( (int)me->query_skill("tianshan-zhang", 1) < 100 )
                return notify_fail("你的天山杖法功力太浅,别做梦了。\n");

        if( (int)me->query_skill("staff", 1) < 100 )
                return notify_fail("你的基本杖法功力太浅,别做梦了。\n");

        if( (int)me->query_skill("huagong-dafa", 1) < 100 )
                return notify_fail("你的内功功力太浅,别做梦了。\n");
               
        if( (int)me->query("max_neili") < 500 )
                return notify_fail("你的内力太浅,别做梦了。\n");
        if( (int)me->query("neili") < 200 )
                return notify_fail("你的真气不够,别做梦了。\n");
        if (me->query_skill_mapped("force") != "huagong-dafa")
                return notify_fail("你用什么为内功基础来使「飞掷」?\n");
        if (!objectp(weapon = me->query_temp("weapon")) || weapon->query("skill_type") != "staff"
            || me->query_skill_mapped("staff") != "tianshan-zhang")
                return notify_fail("你使得了「飞掷」么?\n");
                 
        me->set_temp("tsz/feizhi", 2);

        message_vision(BLU "\n$N大喝一声,紧接着「呼」的一声猛响,$N把手中的"+weapon->name()+"掷向$n"+BLU"。\n"NOR,me,target);

        if(   random(target->query_skill("dodge"))/2<me->query_skill("dodge")
           || random(me->query("combat_exp"))>target->query("combat_exp")/3){
           damage = 4 * (int)me->query_skill("tianshan-zhang", 1);
           damage = damage / 2 + random(damage / 2) + 5*me->query("jiali");

           me->add("neili", -damage/2);
           me->add("jingli",-100);
           if(damage>1500) damage=1300+random(200);
           target->receive_damage("qi", damage);
           target->receive_wound("qi", damage/4);
           msg = HIR"$n躲闪不及,被飞来的"+weapon->name()+"重重击中!\n"NOR;
           p = (int)target->query("qi")*100/(int)target->query("max_qi");
           target->set_temp("last_damage_from", me);
           msg += damage_msg(damage, "刺伤");
           msg += "( $n"+eff_status_msg(p)+" )\n";
           msg = replace_string( msg, "$l", "胸口" );
           msg = replace_string( msg, "$w", weapon->name());
                message_vision(msg, me, target);
           if (random(target->query("kar")) < 1)
                 target->die();
           weapon->move(environment(me));
        }
        else {
                string tmp;

              dodge_skill = target->query_skill_mapped("dodge");
              if( !dodge_skill ) dodge_skill = "dodge";
              if (stringp(tmp = SKILL_D(dodge_skill)->query_dodge_msg(target, 1)))
                      msg += tmp;
              me->add("neili", -100);
              me->start_busy(1);
                if( weapon->unequip())
                if( random(target->query("kar"))<10
                &&(int)target->query_encumbrance() *100 / (int)target->query_max_encumbrance()<85) {
                        weapon->move(target);
                        msg = HIY"$n伸手轻轻一接,便把飞来的"+weapon->name()+"接在手中!\n"NOR;
                }
                else if(random(target->query("kar"))<5){
                        weapon->move(environment(me));
                        msg = HIY"$n运内力于掌上,对着飞来的"+weapon->name()+"一砍,"+weapon->name()+"顿时断为两端!\n"NOR;
                        weapon->set("name", "断掉的" + weapon->name());
                        weapon->set("value", 0);
                        weapon->set("weapon_prop", 0);
                }
                else weapon->move(environment(me));
               
                message_vision(msg, me, target);
        }
        me->delete_temp("tsz/feizhi");
        me->start_perform(1, "「飞掷」");
        return 1;
}
有事出门,回来分析~
门派:不明
发表于 2010-9-3 17:28:22 | 显示全部楼层
晕,gm也有代码高手
你不会就是along吧?
门派:不明
 楼主| 发表于 2010-9-3 17:56:53 | 显示全部楼层
我就是我。。。。我不是along

先说命中

if(   random(target->query_skill("dodge"))/2<me->query_skill("dodge")
           || random(me->query("combat_exp"))>target->query("combat_exp")/3)
取对方的dodge随机数 除2 小于自己的dodge 或者 自己的随机exp 大于对方 exp 的1/3
同等级来说,飞掷可以说必中, 因为目标dodge /2 肯定小于自己dodge 更何况要给目标dodge取个随机数。。。
低于对方等级,也有很大几率命中对方,只要别差3倍经验。

如果master 没有修改过的话。。。。。
门派:不明
 楼主| 发表于 2010-9-3 22:08:16 | 显示全部楼层
damage = 4 * (int)me->query_skill("tianshan-zhang", 1);
           damage = damage / 2 + random(damage / 2) + 5*me->query("jiali");

基础伤害等于 天山杖等级*2 + 天山杖等级*2 的随机数 + 5* 加力数。
以100 天山杖来算, 伤害就是 200 + random(200) + 250 (jiali 50) = 450 - 650 的伤害。

if(damage>1500) damage=1300+random(200);

如果伤害大于 1500 ,伤害最低1300 ,最高 1500 ,打气上限 320+    气1500。

if (random(target->query("kar")) < 1)
                 target->die();
有几率秒杀。
飞掷应该可以用到1M 左右,除了命中高些,对于新手来说,伤害也忒高了点。。。

但没什么成长。也可以算成化学pfm
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-5-17 06:49 , Processed in 0.029527 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表