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 说清楚放在哪儿的hit_ob以及你的combatd里面的触发机制 我用的是nt3的lib,hit_ob是放在skill里面的,触发机制我也不太清楚 一般来说skills的hit_ob会在你使用该skills并且计算damage的时候尝试调用,但是你的写法我没太看明白,
我建议你不要递归调用do_attack,因为你用了那个技能每次计算伤害都会调用到你的hit_ob,你可以看你的日志,估计递归死循环了。
一般来说技能本身的自动perform越简单越好,或者放大伤害,附加化学攻击,加debuff/buff之类都可以
如果你要连招最好做成perform而不是放在技能里面进行自动perform 哦,因为我看到这里金蛇剑有一段代码 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);
}
难道不可以这样用吗? 你如果一定要这么写,我觉得你要先busy对方和自己,然后调用do_attack,但是这样子命中判定会失效
我觉得你还是直接调用receive_damage/receive_wound更妥当,否则在do_attack里面递归调用do_attack总的来说不是一个好方法。 哦,我明白了,谢谢哈。 我觉得用hit_ob调用do_attack本身也没有问题。
hit_ob就是在do_attack中调用,自己可以随便定义,attack-skill,parry_skill,dodge_skill,force_skill
但是,楼主,你的swtich函数是不是有问题的,把case 3改成default看看 本帖最后由 zues 于 2013-8-20 09:04 PM 编辑
风怒了,编辑掉。。。 case 3本身没问题只是没有定义default而已
他现在do_attack调用hit_ob,hit_ob里面又调用do_attack,里面又会触发hit_ob,我感觉这样子的做法不是特别妥当。
而且完全没有必要用switch,一个if (!random(4))就完事了
页:
[1]
2