铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 2260|回复: 2

[问题求助] 关于boss和部分npc的超高内力问题!

[复制链接]
发表于 2011-5-21 01:16 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
这个涉及到两个文件:combatd.c 和 hy3\inherit\skill\force.c
先来看看combatd.c
其中关于计算平招命中后计算伤害的一段:
。。。。。
cstra=me->query_str();
if ( me->query_skill("jiuyin-zhengong") && cstra > 500) cstra =500;
else if (cstra > 600) cstra =600;
   damage_bonus = cstra * 2;
   // Let force skill take effect.
   if( my["jiali"] && (my["neili"] > my["jiali"]) ) {
    if( force_skill = me->query_skill_mapped("force") ) {
     foo = SKILL_D(force_skill)->hit_ob(me, victim, damage_bonus, my["jiali"]);
     if( stringp(foo) ) result += foo;
     else if( intp(foo) ) damage_bonus += foo;
    }
   }
            damage_bonus += me->query_skill(attack_skill) * damage_bonus / 1000;
   if( weapon ) damage_bonus -= damage_bonus/3 ;
   if( martial_skill = me->query_skill_mapped(attack_skill) ) {
    foo = SKILL_D(martial_skill)->hit_ob(me, victim, damage_bonus);
    if( stringp(foo) ) result += foo;
    else if(intp(foo) ) damage_bonus += foo;
   }
。。。。。
先看第一段红色部分,当攻击者jiali后,就会检查内功的hit_ob函数,就是内功的攻击特效,如果攻击者的特殊内功有hit_ob函数,就是攻击特效,就按特殊内功的,如果特殊内功没有特效就按基本内功,force的hit_ob函数,基本内功的攻击特效。
基本内功force的攻击特效如下,就是force.c这个文件:
mixed hit_ob(object me, object victim, int damage_bonus, int factor)
{
int damage;
me->add("neili", - factor );
damage = (int)me->query("neili")/20 + 2*factor
  - (int)victim->query("neili")/25;

if( damage < 0 ) {
  if( !me->query_temp("weapon")
  && random(victim->query_skill("force")) > me->query_skill("force")/2 ) {
   damage = - damage;
   me->receive_damage( "qi", damage * 2 );
   me->receive_wound( "qi", damage );
   if( damage < 10 ) return "$N受到$n的内力反震,闷哼一声。\n";
   else if( damage < 20 ) return "$N被$n以内力反震,「嘿」地一声退了两步。\n";
   else if( damage < 40 ) return "$N被$N以内力一震,胸口有如受到一记重锤,连退了五六步!\n";
   else return "$N被$n的内力一震,眼前一黑,身子向后飞出丈许!!\n";
  }
  if( damage_bonus + damage < 0 ) return - damage_bonus;
  return damage;
}
//damage -= victim->query_temp("apply/armor_vs_force");
if( damage_bonus + damage < 0 ) return - damage_bonus;
//if( random(me->query_skill("force")) < damage )
  return damage;
}
再回到上面的combatd.c看,如果内功特效返回的是字符串,就添加到攻击描述里,如果内功特效返回的是数值,就增加到damage_bonus,再按攻击者的攻击武功的级数增强damage_bonus,当技能超过1000级,将有翻倍的效果,接着检查攻击
武功的hit_ob函数,就是攻击武功的攻击特效。。。

那么现在我们来估算一下那些内力超高的boss和npc的恐怖之处了:
假设boss有100万内力(算少的了,估计hxsd定了几百万的),jiali 1000(看过单机的,有的boss jiali 10000)
boss的特殊内功没有攻击特效,要按基本内功的攻击特效处理
玩家有10万内力(玩家似乎很难有这么多内力,除非用bug)

看看force.c里面的计算:红色部分
damage=100万/20+2*1000-10万/25=4万8千
返回4万8这个数值,令到damage_bonus起码有4万8,再经过攻击武功级数的增幅,后期的boss的级数估计都1000级左右了,
damage_bonus将变成9万6,如果boss用了兵器,damage_bonus就减少1/3,变成6万2,空手就还是9万6,
接下来检查boss攻击武功的特效,问题来了:
如果boss用的武功的攻击特效和damage_bonus无关,那还好,
如果boss用的武功的攻击特效是按照damage_bonus计算的,哈哈!差一点的对玩家造成直接伤害damage_bonus/2,
强力的直接伤害damage_bonus
就是说,普通一平招命中玩家,直接就能打起码几万的血,还没有计算combatd.c后面最终的伤害呢!

所以现在的迷宫里,遇上了超高内力的boss或者npc,刚好npc的特殊内功没有攻击特效,而攻击武功的特效是按照damage_bonus计算的,玩家就惨了!这样的npc的平招攻击,比boss们的大招(固定2万多,如果组队,队员平均分担伤害)强力多了

所以请hxsd好好设定npc和boss的内力数值!



【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-5-21 09:17 | 显示全部楼层
// force.c

inherit SKILL;

mixed hit_ob(object me, object victim, int damage_bonus, int factor)
{
        int damage;

        me->add("neili", - factor );
        damage = (int)me->query("neili")/20 + 2*factor
                - (int)victim->query("neili")/25;
        if (damage > 18000) damage=18000;
        if( damage < 0 ) {
                if( !me->query_temp("weapon")
                &&        random(victim->query_skill("force")) > me->query_skill("force")/2 ) {
                        damage = - damage;
                        me->receive_damage( "qi", damage * 2 );
                        me->receive_wound( "qi", damage );
                        if( damage < 20 ) return "$N受到$n的内力反震,闷哼一声。\n";
                        else if( damage < 60 ) return "$N被$n以内力反震,「嘿」地一声退了两步。\n";
                        else if( damage < 90 ) return "$N被$N以内力一震,胸口有如受到一记重锤,连退了五六步!\n";
                        else if( damage < 100 ) return "$N被$n的内力一震,眼前一黑,身子向后飞出丈许!!\n";
                        else return "$N被$n的内力一震,只觉浑身经脉欲断,气血倒流,几乎晕了过去。!!\n";
                }
               
               
               
                if( damage_bonus + damage < 0 ) return - damage_bonus;
                return damage;
        }

        //damage -= victim->query_temp("apply/armor_vs_force");
        if( damage_bonus + damage < 0 ) return - damage_bonus;
        //if( random(me->query_skill("force")) < damage )
                return damage;
}
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-5-21 09:18 | 显示全部楼层
加上上限了。最高18000
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-24 12:57

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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