Code:
void LAi_ApplyCharacterBladeDamage(aref attack, aref enemy, float attackDmg, float hitDmg, bool isBlocked)
{
//Если неубиваемый, то нетрогаем его
if(LAi_IsImmortal(enemy)) return;
//Применяем абилити
float pBreak = 0.0;
if(IsCharacterPerkOn(attack, "SwordplayProfessional"))
{
pBreak = pBreak + 0.25;
}
// Baste - critical hit check moved down
float kDmg = 1.0;
if(IsCharacterPerkOn(attack, "Rush"))
{
kDmg = 1.5;
pBreak = pBreak + 0.5;
}
if(IsCharacterPerkOn(enemy, "Rush"))
{
pBreak = pBreak + 0.9;
}
isBlocked = isBlocked && CheckAttribute(enemy,"equip.blade") && GetCharacterEquipByGroup(enemy,BLADE_ITEM_TYPE) != "bladeX4";
// PB: Disable blocking for enemies with either no sword or their fists equiped
if(isBlocked)
{
//Вероятность пробивки
float p = LAi_BladeFindPiercingProbability(attack, enemy, hitDmg);
p = p + pBreak;
//Если шансов пробить нет, то ненаносим провреждения
// if(p < 0.0) return; // LDH removed 06Apr09
//Если шансов пробить нет, то ненаносим провреждения
if(rand(10000) > p*10000) // if block is NOT pierced
{
// LDH rewrite 06Apr09
if(GetCharacterEquipByGroup(attack, BLADE_ITEM_TYPE) == "bladeX4") // if attacker uses fists, he gets damaged instead
{
if(!LAi_IsImmortal(attack))
{
LAi_ApplyCharacterDamage(attack, 2*rand(makeint(attack.skill.Fencing))); // LDH 0..20
LAi_CheckKillCharacter(attack);
}
// return; // LDH so blocked fists don't damage defender - 11Apr09
}
return;
}
}
So I sugest moving those checks within the checking function which then clamps it below 1.0 so you will never have a higher then 100% chance of blocking.