Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float hit_power = HDS.power * m_fRankImmunity;
- if(m_boneHitProtection && HDS.hit_type == ALife::eHitTypeFireWound)
- {
- float BoneArmor = m_boneHitProtection->getBoneArmor(HDS.bone());
- float ap = HDS.armor_piercing;
- if(!fis_zero(BoneArmor, EPS))
- {
- if(ap > BoneArmor)
- {
- float d_hit_power = (ap - BoneArmor) / ap;
- if(d_hit_power < m_boneHitProtection->m_fHitFracNpc)
- d_hit_power = m_boneHitProtection->m_fHitFracNpc;
- hit_power *= d_hit_power;
- VERIFY(hit_power>=0.0f);
- }
- else
- {
- hit_power *= m_boneHitProtection->m_fHitFracNpc;
- HDS.add_wound = false;
- }
- }
- if ( wounded() ) //уже лежит => добивание
- {
- hit_power = 1000.f;
- }
- }
- HDS.power = hit_power;
- --------------------------------------
- void CDamageManager::HitScale (const int element, float& hit_scale, float& wound_scale, bool aim_bullet)
- {
- if(BI_NONE == u16(element))
- {
- //считаем что параметры для BI_NONE заданы как 1.f
- hit_scale = 1.f * m_default_hit_factor;
- wound_scale = 1.f * m_default_wound_factor;
- return;
- }
- IKinematics* V = smart_cast<IKinematics*>(m_object->Visual()); VERIFY(V);
- // get hit scale
- float scale = 0.f;
- if ( aim_bullet )
- {
- scale = V->LL_GetBoneInstance(u16(element)).get_param(3);
- }
- // in case when not 1st bullet or 1st bullet has scale unset (== 0)
- if ( !aim_bullet || !scale )
- {
- scale = V->LL_GetBoneInstance(u16(element)).get_param(0);
- }
- hit_scale = scale;
- // get wound scale
- scale = V->LL_GetBoneInstance(u16(element)).get_param(2);
- wound_scale = scale;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement