|
int ob_hit(object ob, object me, int damage)
{
object weapon, weapon1;
string msg, *limbs, limb;
int ap, dp, skill, j, i;
if( ob->query("env/invisibility") ) return 0;
if( !userp(me) && random(2) ) return 0;
weapon1 = me->query_temp("weapon");
if( me->query_skill("huifeng-jian", 1) < 150
|| me->query_skill_mapped("sword") != "huifeng-jian"
|| me->query_skill_mapped("parry") != "huifeng-jian" // 招架必须是回风拂柳剑
|| !weapon1
|| weapon1->query("skill_type") != "sword" ) return 0;
if( random(me->query_skill("parry")) > ob->query_skill("force")/3
|| random(me->query_con()) > ob->query_str()/3 )
me->add_temp("hfj/"+ob->query("id"), 1); // 添加反击参数
// 原来后发先至的判断,去除了反复判断
if( me->query("combat_exp") < ob->query("combat_exp")/2 || me->is_busy() || damage < 100 ) return 0;
skill = me->query_skill("huifeng-jian", 1);
weapon = ob->query_temp("weapon");
if( objectp(weapon) )
msg = weapon->query("skill_type");
else {
mapping prepare = ob->query_skill_prepare();
if( !sizeof(prepare) ) msg = "unarmed";
else msg = keys(prepare)[0];
}
if ( me->query("neili") < ob->query("neili")/5 ) return 0;
ap = COMBAT_D->skill_power(ob, msg, SKILL_USAGE_ATTACK) / 1000;
if ( weapon ) ap *= 2;
if ( ob->query("neili") > me->query("neili") * 2 ) ap += ap/2;
dp = COMBAT_D->skill_power(me, "parry", SKILL_USAGE_DEFENSE) / 1000;
if ( me->query("neili") > ob->query("neili") * 2 ) dp *= 2;
else if ( me->query("neili") > ob->query("neili") / 2 * 3 ) dp += dp/2;
ap = ABS(ap);
dp = ABS(dp);
if ( random(me->query("dex")) > ob->query("dex")/2) dp += random(dp/2);
if ( skill > 350 ) dp += random(dp);
if ( wizardp(me) ) tell_object(me, sprintf("ap: %d, dp: %d\n", ap ,dp ));
if ( random(dp + ap) > ap && !random(3) ) { // 概率降低点
limbs = ob->query("limbs");
limb = limbs[random(sizeof(limbs))];
msg = HIW+"只见$N后发先至,";
msg += query_action(me, weapon1)["action"];
msg = replace_string( msg, "$l", limb);
msg = replace_string( msg, "$w", weapon1->name()+HIW) + "!\n"NOR;
if( userp(ob) && !userp(me) && damage > 1500 )
damage = 1500 + (damage-1500)/10; // 修改了伤害的控制
// 伤害不能全部来自于对手
// ob->receive_damage("qi", damage/3*2 + ob->query("jiali")*2, me);
// ob->receive_wound("qi", damage/2, me);
j = damage/2 + me->query_skill("sword") + me->query("jiali");
if( wizardp(me) ) tell_object(me, "你的后发先至伤害为:"+j+"。\n"NOR);
ob->receive_damage("qi", j, me);
ob->receive_wound("qi", j/2, me);
msg += COMBAT_D->damage_msg(j, "刺伤");
msg = replace_string( msg, "$l", limb);
msg = replace_string( msg, "$w", weapon1->name());
message_vision(msg, me, ob);
COMBAT_D->report_status(ob, ob->query("qi") >= 0 || ob->query("eff_qi")+ob->query_temp("apply/qi") < 0);
return -6000;
}
// 峨嵋剑诀的效果 “后发制人”
else if( me->query_temp("hfj/"+ob->query("id")) > ( 1 + random(4) )
&& ( random(me->query_skill("parry")) > ob->query_skill("force")/2
|| random(me->query_con()) > ob->query_str()/2 ) ) {
me->delete_temp("hfj/"+ob->query("id"));
msg = HIW"$N摸透了$n的武功套路,"+weapon1->name()+HIW"微侧,便即抢攻,竟不挡格$n的来招!!"NOR;
message_vision(msg, me, ob);
i = ob->query("qi");
me->set_temp("jianjue", 1);
me->add_temp("apply/attack", me->query_skill("huifeng-jian", 1)/4);
COMBAT_D->do_attack(me, ob, me->query_temp("weapon"), random(3)?1:3);
me->add_temp("apply/attack", -me->query_skill("huifeng-jian", 1)/4);
me->delete_temp("jianjue");
if( i > ob->query("qi") ) return -damage/2;
else return -damage;
}
return 0;
} |
评分
-
1
查看全部评分
-
|