DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ FightLogic()

bool DayZInfected::FightLogic ( int pCurrentCommandID,
DayZInfectedInputController pInputController,
float pDt )
inlineprotected

player is in block stance and facing the infected

infected is playing heavy attack - decrease the dmg to light

override hit pos by pos defined in type

infected is playing light attack - do not send damage, play animation instead

override hit pos by pos defined in type

См. определение в файле ZombieBase.c строка 613

614 {
615 if (pCurrentCommandID == DayZInfectedConstants.COMMANDID_MOVE)
616 {
617 // we attack only in chase & fight state
618 int mindState = pInputController.GetMindState();
619 if (mindState == DayZInfectedConstants.MINDSTATE_CHASE)
620 {
621 return ChaseAttackLogic(pCurrentCommandID, pInputController, pDt);
622 }
623 else if (mindState == DayZInfectedConstants.MINDSTATE_FIGHT)
624 {
625 return FightAttackLogic(pCurrentCommandID, pInputController, pDt);
626 }
627 }
628 else if (pCurrentCommandID == DayZInfectedConstants.COMMANDID_ATTACK)
629 {
630 DayZInfectedCommandAttack attackCommand = GetCommand_Attack();
631 if (attackCommand && attackCommand.WasHit())
632 {
633 if (m_ActualTarget != null)
634 {
635 if (m_ActualTarget.GetMeleeTargetType() == EMeleeTargetType.NONALIGNABLE)
636 return false;
637
638 bool playerInBlockStance = false;
639 vector targetPos = m_ActualTarget.GetPosition();
640 vector hitPosWS = targetPos;
641 vector zombiePos = GetPosition();
642
643 PlayerBase playerTarget = PlayerBase.Cast(m_ActualTarget);
644 if (playerTarget)
645 {
646 playerInBlockStance = playerTarget.GetMeleeFightLogic() && playerTarget.GetMeleeFightLogic().IsInBlock();
647 }
648
649 if (vector.DistanceSq(targetPos, zombiePos) <= m_ActualAttackType.m_Distance * m_ActualAttackType.m_Distance)
650 {
652 if (playerInBlockStance && (Math.RAD2DEG * Math.AbsFloat(Math3D.AngleFromPosition(targetPos, MiscGameplayFunctions.GetHeadingVector(playerTarget), zombiePos))) <= GameConstants.AI_MAX_BLOCKABLE_ANGLE)
653 {
655 if (m_ActualAttackType.m_IsHeavy == 1)
656 {
657 hitPosWS = m_ActualTarget.ModelToWorld(m_ActualTarget.GetDefaultHitPosition());
658 DamageSystem.CloseCombatDamageName(this, m_ActualTarget, m_ActualTarget.GetHitComponentForAI(), "MeleeZombie", hitPosWS);
659 }
660 else
661 {
663 hitPosWS = m_ActualTarget.ModelToWorld(m_ActualTarget.GetDefaultHitPosition());
664 DamageSystem.CloseCombatDamageName(this, m_ActualTarget, m_ActualTarget.GetHitComponentForAI(), "Dummy_Light", hitPosWS);
665 }
666 }
667 else
668 {
669 hitPosWS = m_ActualTarget.ModelToWorld(m_ActualTarget.GetDefaultHitPosition());
670 DamageSystem.CloseCombatDamageName(this, m_ActualTarget, m_ActualTarget.GetHitComponentForAI(), m_ActualAttackType.m_AmmoType, hitPosWS);
671 }
672 }
673 }
674 }
675
676 return true;
677 }
678
679 return false;
680 }
DayZInfectedConstants
Определения DayZInfected.c:2
EMeleeTargetType
Определения EMeleeTargetType.c:2
DayZInfectedAttackType m_ActualAttackType
Определения ZombieBase.c:611
EntityAI m_ActualTarget
Определения ZombieBase.c:609
bool FightAttackLogic(int pCurrentCommandID, DayZInfectedInputController pInputController, float pDt)
Определения ZombieBase.c:723
bool ChaseAttackLogic(int pCurrentCommandID, DayZInfectedInputController pInputController, float pDt)
Определения ZombieBase.c:682
proto native int GetMindState()
vector GetPosition()
Get the world position of the Effect.
Определения Effect.c:473

Перекрестные ссылки Math::AbsFloat(), GameConstants::AI_MAX_BLOCKABLE_ANGLE, Math3D::AngleFromPosition(), ChaseAttackLogic(), vector::DistanceSq(), FightAttackLogic(), DayZInfectedInputController::GetMindState(), GetPosition(), m_ActualAttackType, m_ActualTarget и Math::RAD2DEG.

Используется в CommandHandler().