找回密码
 注册
搜索
楼主: nortrom@ts

天山杖法pfm feizhi,增加一个set。

[复制链接]
门派:不明
发表于 2012-4-11 13:28:00 | 显示全部楼层
//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();
           if (me->query("env/feizhi") != "海底捞针" ) {
           msg+= HIG"\n$N身形一滞,动作无法连贯,眼看着"+weapon->name()+"脱手而去,掉落地上。\n"NOR;
           weapon->move(environment(me));     
           } else
           msg+= HIG"\n$N身如鬼魅,动若脱兔,一闪之间,已经将"+weapon->name()+"重新抓回手中!\n"NOR;
           message_vision(msg,me,target);
           return 1;
        }
       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 (me->query("env/feizhi") != "海底捞针" ) {
                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;
}
帮楼主将代码显示的贴出来,这样大家看的更加直观一些。
门派:不明
发表于 2012-4-11 13:34:20 | 显示全部楼层
简单解释一些这个code的功能,主要是通过set feizhi 海底捞针,避免perform feizhi所导致的武器丢失和可能被打断的问题。

原有pfm feizhi命中的时候,武器会掉在地上,这样就需要get再wield。而set了海底捞针,就不会出现这种情况。
另外原有pfm feizhi在非命中的时候,武器基于福缘会有三种可能丢失的方式:一被对手接住获得,二被对手打算(很惨),三武器掉在地上;

当然从feizhi的效果来看,这是一种平衡,虽然feizhi的伤害从code上看最高不过1500,但是有1/30的call die可能。
门派:天龙寺
发表于 2018-6-18 14:25:53 | 显示全部楼层
xx这么牛还要增加,到期后大家都去星宿了
门派:峨嵋派
发表于 2023-7-17 14:11:15 | 显示全部楼层
这个set有就会少一个回合get
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 23:09 , Processed in 0.038110 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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