modded class ZombieBas { override bool FightLogic(int pCurrentCommandID, DayZInfectedInputController pInputController, float pDt) { if ( pCurrentCommandID == DayZInfectedConstants.COMMANDID_MOVE ) { // we attack only in chase & fight state int mindState = pInputController.GetMindState(); if ( mindState == DayZInfectedConstants.MINDSTATE_CHASE ) { return ChaseAttackLogic(pCurrentCommandID, pInputController, pDt); } else if ( mindState == DayZInfectedConstants.MINDSTATE_FIGHT ) { return FightAttackLogic(pCurrentCommandID, pInputController, pDt); } } else if ( pCurrentCommandID == DayZInfectedConstants.COMMANDID_ATTACK ) { DayZInfectedCommandAttack attackCommand = GetCommand_Attack(); if ( attackCommand && attackCommand.WasHit() ) { if ( m_ActualTarget != NULL ) { if (m_ActualTarget.GetMeleeTargetType() == EMeleeTargetType.NONALIGNABLE ) { return false; } bool playerInBlockStance = false; vector targetPos = m_ActualTarget.GetPosition(); vector hitPosWS = targetPos; vector zombiePos = GetPosition(); PlayerBase playerTarget = PlayerBase.Cast(m_ActualTarget); if ( playerTarget ) { playerInBlockStance = playerTarget.GetMeleeFightLogic() && playerTarget.GetMeleeFightLogic().IsInBlock(); } ///MODIFIED/// Control m_ActualAttackType added if ( m_ActualAttackType == NULL || vector.DistanceSq(targetPos, zombiePos) <= m_ActualAttackType.m_Distance * m_ActualAttackType.m_Distance ) { //! player is in block stance and facing the infected if ( playerInBlockStance && (Math.RAD2DEG * Math.AbsFloat(Math3D.AngleFromPosition(targetPos, MiscGameplayFunctions.GetHeadingVector(playerTarget), zombiePos))) <= GameConstants.AI_MAX_BLOCKABLE_ANGLE ) { //! infected is playing heavy attack - decrease the dmg to light ///MODIFIED/// Control m_ActualAttackType added if ( m_ActualAttackType && m_ActualAttackType.m_IsHeavy != 0 ) { hitPosWS = m_ActualTarget.ModelToWorld(m_ActualTarget.GetDefaultHitPosition()); //! override hit pos by pos defined in type DamageSystem.CloseCombatDamageName(this, m_ActualTarget, m_ActualTarget.GetHitComponentForAI(), "MeleeZombie", hitPosWS); } else { //! infected is playing light attack - do not send damage, play animation instead if ( GetGame().IsServer() ) { hitPosWS = m_ActualTarget.GetDefaultHitPosition(); //! override hit pos by pos defined in type m_ActualTarget.EEHitBy(null, 0, this, -1, m_ActualTarget.GetDefaultHitComponent(), "Dummy_Light", hitPosWS, 1.0); } } } else { hitPosWS = m_ActualTarget.ModelToWorld(m_ActualTarget.GetDefaultHitPosition()); //! override hit pos by pos defined in type ///MODIFIED/// Control m_ActualAttackType added if (m_ActualAttackType) DamageSystem.CloseCombatDamageName(this, m_ActualTarget, m_ActualTarget.GetHitComponentForAI(), m_ActualAttackType.m_AmmoType, hitPosWS); else ///MODIFIED/// if no m_ActualAttackType case added DamageSystem.CloseCombatDamageName(this, m_ActualTarget, m_ActualTarget.GetHitComponentForAI(), "MeleeZombie", hitPosWS); } } } } return true; } return false; } }