newpro 发表于 2013-8-20 13:48:15

hit_ob函数没被调用?

mixed hit_ob(object me, object victim, int damage_bonus)
{
int lvl;
      int i, ap, dp;
lvl = me->query_skill("xiaoyao-zhang",1);
ap = me->query_skill("strike");
dp = me->query_skill("dodge");
switch(random(4)){
case 0:
   break;
case 1:
   break;
case 2:
   break;
case 3:
if(random(ap)>dp/2 && !me->is_busy() && !victim->is_busy()){   message_sort(HIC"\n$N突然领悟到了逍遥人间的意境,轻描淡写地连出三招,却将$n打得措手不及\n"NOR);
      COMBAT_D->do_attack(me, victim, 0, 0);
                COMBAT_D->do_attack(me, victim, 0, 0);
                COMBAT_D->do_attack(me, victim, 0, 0);
      victim->start_busy(ap/30);
      me->start_busy(1);
}
break;
}
}我在测试的时候,无论等级相差多大,打多少次都不会触发这个,请问这是为什么啊

北大侠客行MUD,中国最好的MUD

seagate 发表于 2013-8-20 13:56:11

说清楚放在哪儿的hit_ob以及你的combatd里面的触发机制

newpro 发表于 2013-8-20 13:58:12

我用的是nt3的lib,hit_ob是放在skill里面的,触发机制我也不太清楚

seagate 发表于 2013-8-20 14:07:18

一般来说skills的hit_ob会在你使用该skills并且计算damage的时候尝试调用,但是你的写法我没太看明白,
我建议你不要递归调用do_attack,因为你用了那个技能每次计算伤害都会调用到你的hit_ob,你可以看你的日志,估计递归死循环了。
一般来说技能本身的自动perform越简单越好,或者放大伤害,附加化学攻击,加debuff/buff之类都可以
如果你要连招最好做成perform而不是放在技能里面进行自动perform

newpro 发表于 2013-8-20 14:09:40

哦,因为我看到这里金蛇剑有一段代码                for (i = 0; i < 9; i++)
                {
                  if (! me->is_fighting(victim))
                            break;
                  
                  if (! victim->is_busy() && random(2) == 1)
                            victim->start_busy(1);

                  COMBAT_D->do_attack(me, victim, weapon, 0);
                }
难道不可以这样用吗?

seagate 发表于 2013-8-20 14:50:35

你如果一定要这么写,我觉得你要先busy对方和自己,然后调用do_attack,但是这样子命中判定会失效
我觉得你还是直接调用receive_damage/receive_wound更妥当,否则在do_attack里面递归调用do_attack总的来说不是一个好方法。

newpro 发表于 2013-8-20 15:35:44

哦,我明白了,谢谢哈。

zues 发表于 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看看

zues 发表于 2013-8-20 20:46:45

本帖最后由 zues 于 2013-8-20 09:04 PM 编辑

风怒了,编辑掉。。。

seagate 发表于 2013-8-20 20:56:07

case 3本身没问题只是没有定义default而已
他现在do_attack调用hit_ob,hit_ob里面又调用do_attack,里面又会触发hit_ob,我感觉这样子的做法不是特别妥当。
而且完全没有必要用switch,一个if (!random(4))就完事了
页: [1] 2
查看完整版本: hit_ob函数没被调用?