讨论一下combatd里的damage计算
攻击时的damage主要计算流程(命中以后)://只有装备武器才有效,否则 apply/damage=0
//不过perform可能设 apply/damage
//玄铁剑 apply/damage = 150 my_str = 70 my_jiali = 100
//按剑法 damage=100,force=300
damage = me->query_temp("apply/damage");
damage = (damage + random(damage)) / 2;
if( action["damage"] )
damage += action["damage"] * damage / 100;
// 此时damage=75~150
damage_bonus = me->query_str();
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"]);
// force 里的 hit_ob() 写的好难懂,谁给解释一下?
if( stringp(foo) ) result += foo;
else if( intp(foo) ) damage_bonus += foo;
}
}
// 加力是不是经常不起作用? damage_bonus = 70 不变
// 起作用时 damage_bonus = 170 左右
if( action["force"] )
damage_bonus += action["force"] * damage_bonus / 100;
// damage_bonus = 210
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;
}
// 一般skill里没有 hit_ob() 函数,因此damage_bonus 不变
if( damage_bonus > 0 )
damage += (damage_bonus + random(damage_bonus))/2;
//damage = 75~150 + 105~210 = 180~360
// 经验和挪移,铁布衫等的影响,略去
defense_factor = your["combat_exp"];
while( random(defense_factor) > my["combat_exp"] ) {
damage -= damage / 3;
defense_factor /= 2; // 好象这句是废话,没有任何作用
}
damage = victim->receive_damage("qi", damage, me );
if( random(damage) > (int)victim->query_temp("apply/armor")
&& ( (me->is_killing(victim->query("id")))
// 只有kill时才会受伤吗???
&& ((!weapon) && !random(4) || weapon && !random(2) )
|| ((!weapon) && !random(7) || weapon && !random(4) ) ))
//搞这么复杂意义何在???
{
// We are sure that damage is greater than victim's armor here.
victim->receive_wound("qi",damage - (int)victim->query_temp("apply/armor"), me);
wounded = 1;
}
因此带一把剑伤害在 180~360,两把剑为 255~510,空手 105~210
Re:讨论一下combatd里的damage计算
一般功夫都没有hit_ob函数但是如果想做出一个很特别的功夫,就可以考虑自己写一个hit_ob函数,赫赫
受伤的判断比较复杂,我想是作者这样考虑的:
1.叫杀时, 拿了凶器很容易打伤对手,不拿武器打伤对手的几率也比较大,因为这是性命相博;
2.没有叫杀,拿了武器有一定的几率打伤对手,没拿武器几率就比较小,因为这是切磋武功,但是也要考虑到失手伤人,呵呵
另外,经验的高低影响了damage,个人认为不太合理
说到这里,我提一下武功的编写
一般的武功都有 damage,parry,dodge,force这四个参数
对于兵器类功夫,damage很重要
空手功夫的force是主要参数
空手功夫的damage无效,所以要在dodge上做一个补偿,
(parry目前所有功夫都无效,但是可以考虑让其发挥作用)
所以某些功夫这几个参数调节不合理,就显得bt了
Re:讨论一下combatd里的damage计算
相当一部分的功夫在编写时根本没有考虑具体的damage,parry,dodge,force参数,因为编写功夫的人可能自己也不了解这些参数的含义。所以一般是找一个相近的(甚至不相近的功夫)来改改名字、描述,最多再凭感觉改一下这些参数。导致这些参数与功夫性质不合,或者过于bt。所以我觉得在平衡功夫中也应该考虑调整这些参数,让平招也真正发挥其应有的作用。哇莱,好酷哦
讨论很精彩,看到的有些晚了还有一个问题就是,如果一个不会内功的npc,如果设置才能达到与他同经验,
功夫等级差不多的其他npc的相对水平,似乎内功的影响起的作用非常大
Re:讨论一下combatd里的damage计算
有没有apply/force,apply/dodge,apply/damage,apply/attack之类的属性?我有些忘了:(
Re:讨论一下combatd里的damage计算
apply/一般都是武器或者装备来改变的 //按剑法 damage=100,force=300....
by default 兵器武功不应该有action["force"]
理由2个
1.靠武器传递内力的效果显然不如肢体接触
2.兵器武功已经享受了武器的apply_dmg,不应该再享受force的加成
特别是考虑到现在武器动不动apply_dmg>150....
我觉得action["force"]设定的初衷就是为了平衡武器普功和空手普功的
如果给兵器普功action["force"]那就太overpower了
ps:
if( stringp(foo) ) result += foo;
else if( intp(foo) ) damage_bonus += foo;
这个是不是应该先判intp再判stringp?
不知道lpc里面intp是不是valid stringp....
页:
[1]