再讨论一下force里的hit_ob,不明白设计的指导思想是什么
// force.c
inherit SKILL;
mixed hit_ob(object me, object victim, int damage_bonus, int factor)
{
int damage;
int my_max_nl,victim_max_nl;
me->add("neili", - factor );
if (me->query("neili") < me->query("max_neili") * 2)
my_max_nl = me->query("neili");
else
my_max_nl = me->query("max_neili") * 2;
if (victim->query("neili") < victim->query("max_neili") * 2)
victim_max_nl = victim->query("neili");
else
victim_max_nl = victim->query("max_neili") * 2;
damage = my_max_nl/20 + factor
- victim_max_nl/25;
if( damage < 0 ) {
// 自己内力不如敌人时被反震
if( !me->query_temp("weapon") //为什么还要考虑自己是否带武器呢?
&&random(victim->query_skill("force")) > me->query_skill("force")/2 ) {
damage = - damage;
me->receive_damage( "qi", damage * 2 );
me->receive_wound( "qi", damage );
if( damage < 10 ) return "$N受到$n的内力反震,闷哼一声。\n";
else if( damage < 20 ) return "$N被$n以内力反震,「嘿」地一声退了两步。\n";
else if( damage < 40 ) return "$N被$N以内力一震,胸口有如受到一记重锤,连退了五六步!\n";
else return "$N被$n的内力一震,眼前一黑,身子向后飞出丈许!!\n";
}
if( damage_bonus + damage < 0 ) return - damage_bonus;
return damage;
}
damage -= victim->query_temp("apply/armor_vs_force");
if( damage_bonus + damage < 0 ) return - damage_bonus;
// 执行到这里 damage 通常大于0,damage_bonus + damage < 0 会成立吗??
if( random(me->query_skill("force")) < damage )
return damage;
//假定通常情况下,me->query_skill("force")=600 ,damage = 100
//这个判断很难成立,因此大多数情况,函数没有返回值
}
[ Last edited by notme on 2004-4-28 at 09:58 PM ]
Re:再讨论一下force里的hit_ob,不明白设计的指导思想是什么
就是形成一个内力(包括加力)差别造成的伤害,或者是伤害的反弹阿apply/armor_vs_force这个参数目前没有用,不过我考虑在gem系统里面用上
Re:再讨论一下force里的hit_ob,不明白设计的指导思想是什么
apply/armor_vs_force本来应该是有用的。它的作用就是看能否抗住空手之类偏重force的功夫。例如一件软甲(锁子甲),它可能在防护刀剑的时候很有用,但是对于空手就没有一件硬甲来得有效。
页:
[1]