北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 8951|回复: 6

讨论一下combatd里的damage计算

[复制链接]
发表于 2004-4-28 21:37:09 | 显示全部楼层 |阅读模式
攻击时的damage主要计算流程(命中以后):

  1. //只有装备武器才有效,否则 apply/damage=0
  2. //不过perform可能设 apply/damage
  3. //玄铁剑 apply/damage = 150 my_str = 70 my_jiali = 100
  4. //按剑法 damage=100,force=300
  5. damage = me->query_temp("apply/damage");
  6. damage = (damage + random(damage)) / 2;
  7. if( action["damage"] )
  8. damage += action["damage"] * damage / 100;
  9. // 此时damage=75~150

  10. damage_bonus = me->query_str();
  11. if( my["jiali"] && (my["neili"] > my["jiali"]) ) {
  12.     if( force_skill = me->query_skill_mapped("force") ) {
  13.         foo = SKILL_D(force_skill)->hit_ob(me, victim, damage_bonus, my["jiali"]);
  14.         // force 里的 hit_ob() 写的好难懂,谁给解释一下?
  15.         if( stringp(foo) ) result += foo;
  16.         else if( intp(foo) ) damage_bonus += foo;
  17.     }
  18. }
  19. // 加力是不是经常不起作用? damage_bonus = 70 不变
  20. // 起作用时 damage_bonus = 170 左右

  21. if( action["force"] )
  22. damage_bonus += action["force"] * damage_bonus / 100;
  23. // damage_bonus = 210

  24. if( martial_skill = me->query_skill_mapped(attack_skill) ) {
  25.     foo = SKILL_D(martial_skill)->hit_ob(me, victim, damage_bonus);
  26.     if( stringp(foo) ) result += foo;
  27.     else if(intp(foo) ) damage_bonus += foo;
  28. }
  29. // 一般skill里没有 hit_ob() 函数,因此damage_bonus 不变

  30. if( damage_bonus > 0 )
  31.     damage += (damage_bonus + random(damage_bonus))/2;
  32.     //damage = 75~150 + 105~210 = 180~360
  33.      
  34. // 经验和挪移,铁布衫等的影响,略去
  35. defense_factor = your["combat_exp"];
  36. while( random(defense_factor) > my["combat_exp"] ) {
  37.     damage -= damage / 3;
  38.     defense_factor /= 2;    // 好象这句是废话,没有任何作用
  39. }

  40. damage = victim->receive_damage("qi", damage, me );

  41. if( random(damage) > (int)victim->query_temp("apply/armor")
  42.         && ( (me->is_killing(victim->query("id")))
  43.         // 只有kill时才会受伤吗???
  44.         && ((!weapon) && !random(4) || weapon && !random(2) )
  45.         || ((!weapon) && !random(7) || weapon && !random(4) ) ))
  46.         //搞这么复杂意义何在???
  47. {
  48.     // We are sure that damage is greater than victim's armor here.
  49.     victim->receive_wound("qi",damage - (int)victim->query_temp("apply/armor"), me);
  50.     wounded = 1;
  51. }

  52. 因此带一把剑伤害在 180~360,两把剑为 255~510,空手 105~210
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2004-4-30 16:24:04 | 显示全部楼层

Re:讨论一下combatd里的damage计算

一般功夫都没有hit_ob函数
但是如果想做出一个很特别的功夫,就可以考虑自己写一个hit_ob函数,赫赫
受伤的判断比较复杂,我想是作者这样考虑的:  
1.叫杀时, 拿了凶器很容易打伤对手,不拿武器打伤对手的几率也比较大,因为这是性命相博;
2.没有叫杀,拿了武器有一定的几率打伤对手,没拿武器几率就比较小,因为这是切磋武功,但是也要考虑到失手伤人,呵呵

另外,经验的高低影响了damage,个人认为不太合理

说到这里,我提一下武功的编写
一般的武功都有 damage,parry,dodge,force这四个参数
对于兵器类功夫,damage很重要
空手功夫的force是主要参数
空手功夫的damage无效,所以要在dodge上做一个补偿,
(parry目前所有功夫都无效,但是可以考虑让其发挥作用)
所以某些功夫这几个参数调节不合理,就显得bt了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2004-5-2 02:12:36 | 显示全部楼层

Re:讨论一下combatd里的damage计算

相当一部分的功夫在编写时根本没有考虑具体的damage,parry,dodge,force参数,因为编写功夫的人可能自己也不了解这些参数的含义。所以一般是找一个相近的(甚至不相近的功夫)来改改名字、描述,最多再凭感觉改一下这些参数。导致这些参数与功夫性质不合,或者过于bt。所以我觉得在平衡功夫中也应该考虑调整这些参数,让平招也真正发挥其应有的作用。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2004-5-9 13:19:24 | 显示全部楼层

哇莱,好酷哦

讨论很精彩,看到的有些晚了
还有一个问题就是,如果一个不会内功的npc,如果设置才能达到与他同经验,
功夫等级差不多的其他npc的相对水平,似乎内功的影响起的作用非常大
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2004-5-20 17:09:58 | 显示全部楼层

Re:讨论一下combatd里的damage计算

有没有apply/force,apply/dodge,apply/damage,apply/attack之类的属性?
我有些忘了:(
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2004-5-20 21:24:59 | 显示全部楼层

Re:讨论一下combatd里的damage计算

apply/一般都是武器或者装备来改变的
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-3-12 04:45:50 | 显示全部楼层
//按剑法 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....
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-30 11:36 PM , Processed in 0.013545 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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