这个涉及到两个文件: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的内力数值!
|