本帖最后由 protoss 于 2012-4-13 21:55 编辑
一、if (userp(victim))系列
代表skill:梅庄pomopima-jian、jiangjun-zhang、shigu-bifa,红花会benlei-shou、baihua-cuocuff 问题代码:
mixed hit_ob(object me, object victim,intdamage_bonus)
{
………………….
if( random(12)==1 || random(level) > 190)
{
if (userp(victim))
victim->start_busy(2);
return HIY "「泼墨披麻!!」!$N连出3个剑花!! $n不知所措!!!\n" NOR;
}
if (damage_bonus <60) damage_bonus=60;
if( random(12)==1 || random(level) >80)
{
victim->receive_wound("qi",damage_bonus );
return HIY "一字电剑!!一股鲜血从$n的身子喷出!\n" NOR;
}
} 主要问题:
从代码的本意推断,应该想设计成如果目标是玩家则主要起到busy效果,而如果目标是NPC则主要输出伤害。而实际上代码红色部分的if( random(12)==1 || random(level) > 190)条件满足后,判断目标是否为玩家(if (userp(victim)))如果满足则目标busy 2个tick,同时返回特殊效果描述(return HIY "「泼墨披麻!!」!$N连出3个剑花!! $n不知所措!!!\n" NOR;)。问题在于如果目标是npc,则虽然目标未busy 2个tick,但函数直接返回特殊效果描述后就结束了(虽然看起来有特殊效果,其实并未出现),代码蓝色部分完全没有执行。
当你的skill等级越高,只要目标不是玩家,你就越不可能出现特殊攻击效果T_T。
可能原因:
红色代码部分少了“{}”,应改为
if(random(12)==1 || random(level) > 190)
{
if (userp(victim)) {
victim->start_busy(2);
return HIY "「泼墨披麻!!」!$N连出3个剑花!! $n不知所措!!!\n" NOR;
}
}
因为C语言中if语句后如果不加{},则只有if语句之后第一行有效。 同样,代码蓝色部分也缺少{}。
二、伤害性pfm却给目标加血类
代表skill:丐帮yuejia-qiang(perform zhtx) 问题代码:
if(random((int)target->query("combat_exp"))< (int)me->query("combat_exp"))
{
target->add("qi",extra*3);
target->add("eff_qi",extra*3);
target->add("eff_jing",extra);
target->start_busy(3);
message_vision(HIG"$N豪气干云,吟道:「笑谈渴饮匈奴血」满天枪影化做漫天残照!\n"NOR,me,target); message_vision(RED"$n身中数枪,目瞪口呆,不知如何招架!!\n"NOR,me,target); }
主要问题:
这个问题比较明显,应该是少加了负号。
三、xxxxxx系列(未完待续)
|