北大侠客行MUD论坛

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

hit_ob函数没被调用?

[复制链接]
发表于 2013-8-20 13:48:15 | 显示全部楼层 |阅读模式
  1. mixed hit_ob(object me, object victim, int damage_bonus)
  2. {
  3. int lvl;
  4.       int i, ap, dp;
  5. lvl = me->query_skill("xiaoyao-zhang",1);
  6. ap = me->query_skill("strike");
  7. dp = me->query_skill("dodge");
  8. switch(random(4)){
  9.   case 0:
  10.    break;
  11.   case 1:
  12.    break;
  13.   case 2:
  14.    break;
  15.   case 3:
  16.   if(random(ap)>dp/2 && !me->is_busy() && !victim->is_busy()){   message_sort(HIC"\n$N突然领悟到了逍遥人间的意境,轻描淡写地连出三招,却将$n打得措手不及\n"NOR);
  17.       COMBAT_D->do_attack(me, victim, 0, 0);
  18.                 COMBAT_D->do_attack(me, victim, 0, 0);
  19.                 COMBAT_D->do_attack(me, victim, 0, 0);
  20.       victim->start_busy(ap/30);
  21.       me->start_busy(1);
  22.   }
  23.   break;
  24. }
  25. }
复制代码
我在测试的时候,无论等级相差多大,打多少次都不会触发这个,请问这是为什么啊

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-8-20 13:56:11 | 显示全部楼层
说清楚放在哪儿的hit_ob以及你的combatd里面的触发机制
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2013-8-20 13:58:12 | 显示全部楼层
我用的是nt3的lib,hit_ob是放在skill里面的,触发机制我也不太清楚
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-8-20 14:07:18 | 显示全部楼层
一般来说skills的hit_ob会在你使用该skills并且计算damage的时候尝试调用,但是你的写法我没太看明白,
我建议你不要递归调用do_attack,因为你用了那个技能每次计算伤害都会调用到你的hit_ob,你可以看你的日志,估计递归死循环了。
一般来说技能本身的自动perform越简单越好,或者放大伤害,附加化学攻击,加debuff/buff之类都可以
如果你要连招最好做成perform而不是放在技能里面进行自动perform
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2013-8-20 14:09:40 | 显示全部楼层
哦,因为我看到这里金蛇剑有一段代码
  1.                 for (i = 0; i < 9; i++)
  2.                 {
  3.                     if (! me->is_fighting(victim))
  4.                             break;
  5.                   
  6.                     if (! victim->is_busy() && random(2) == 1)
  7.                             victim->start_busy(1);

  8.                     COMBAT_D->do_attack(me, victim, weapon, 0);
  9.                 }
复制代码
难道不可以这样用吗?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-8-20 14:50:35 | 显示全部楼层
你如果一定要这么写,我觉得你要先busy对方和自己,然后调用do_attack,但是这样子命中判定会失效
我觉得你还是直接调用receive_damage/receive_wound更妥当,否则在do_attack里面递归调用do_attack总的来说不是一个好方法。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2013-8-20 15:35:44 | 显示全部楼层
哦,我明白了,谢谢哈。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-8-20 20:46:20 | 显示全部楼层
我觉得用hit_ob调用do_attack本身也没有问题。
hit_ob就是在do_attack中调用,自己可以随便定义,attack-skill,parry_skill,dodge_skill,force_skill
但是,楼主,你的swtich函数是不是有问题的,把case 3改成default看看
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-8-20 20:46:45 | 显示全部楼层
本帖最后由 zues 于 2013-8-20 09:04 PM 编辑

风怒了,编辑掉。。。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-8-20 20:56:07 | 显示全部楼层
case 3本身没问题只是没有定义default而已
他现在do_attack调用hit_ob,hit_ob里面又调用do_attack,里面又会触发hit_ob,我感觉这样子的做法不是特别妥当。
而且完全没有必要用switch,一个if (!random(4))就完事了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 03:44 AM , Processed in 0.010238 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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