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

◆ HandleComboHit()

bool HandleComboHit ( int pCurrentCommandID,
HumanInputController pInputs,
InventoryItem itemInHands,
HumanMovementState pMovementState,
out bool pContinueAttack )
protected

combo hits - when we are already in Melee command and clicking UseButton

select if the next attack will be light or heavy (based on input/attachment modifier)

no suitable attack - skip that

No combos for the finisher command

wait for the previous hit commit before hitting again if the next attack is heavy and the previous wasn't - otherwise the previous light attack will turn into heavy

targetting

continue 'combo' - left hand attacks

broken legs shock

stamina depletion per attack

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

505 {
506 //Debug.MeleeLog(m_Player, "HandleComboHit::");
507 EMeleeHitType hitType;
508
510 if (itemInHands && itemInHands.IsWeapon())
511 hitType = GetAttackTypeByWeaponAttachments(itemInHands);
512 else
513 hitType = GetAttackTypeFromInputs(pInputs);
514
516 if (hitType == EMeleeHitType.NONE)
517 return false;
518
520 if (m_MeleeCombat.GetFinisherType() > -1)
521 return false;
522
523 bool isHeavy = (hitType == EMeleeHitType.HEAVY || hitType == EMeleeHitType.WPN_STAB);
524 EMeleeHitType previousHitType = m_HitType;
525
527 if (!m_WasPreviousHitProcessed && previousHitType != EMeleeHitType.HEAVY && isHeavy)
528 {
529 return false;
530 }
531
532 m_HitType = hitType;
533
535 //Debug.MeleeLog(m_Player, string.Format("HandleComboHit:: %1", EnumTools.EnumToString(EMeleeHitType, m_HitType)));
536 m_MeleeCombat.Update(itemInHands, m_HitType);
537
538 EntityAI target;
539 EMeleeTargetType targetType;
540 GetTargetData(target, targetType);
541 float attackByDistance = GetAttackTypeByDistanceToTarget(target, targetType);
542
544 m_Player.GetCommand_Melee2().ContinueCombo(isHeavy, attackByDistance, target, m_MeleeCombat.GetHitPos());
546
548 if (m_Player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
549 {
551
552 if (!isHeavy)
554
556 m_Player.m_ShockHandler.CheckValue(true);
557 }
558
560 switch (m_HitType)
561 {
562 case EMeleeHitType.HEAVY:
563 case EMeleeHitType.SPRINT:
564 case EMeleeHitType.WPN_STAB:
565 case EMeleeHitType.WPN_HIT_BUTTSTOCK:
566 case EMeleeHitType.WPN_HIT:
567 m_Player.DepleteStamina(EStaminaModifiers.MELEE_HEAVY);
568 break;
569 default:
570 m_Player.DepleteStamina(EStaminaModifiers.MELEE_LIGHT);
571 break;
572 }
573
574 return true;
575 }
EMeleeHitType
Определения DayZPlayerImplementMeleeCombat.c:2
EMeleeHitType m_HitType
Hit type of the most recent attack.
ref DayZPlayerImplementMeleeCombat m_MeleeCombat
EMeleeHitType GetAttackTypeFromInputs(HumanInputController pInputs)
void GetTargetData(out EntityAI target, out EMeleeTargetType targetType)
float GetAttackTypeByDistanceToTarget(EntityAI pTarget, EMeleeTargetType pTargetType=EMeleeTargetType.ALIGNABLE)
bool m_WasPreviousHitProcessed
EMeleeHitType GetAttackTypeByWeaponAttachments(EntityAI pEntity)
void DisableControls()
eBrokenLegs
Определения EBrokenLegs.c:2
EMeleeTargetType
Определения EMeleeTargetType.c:2
EStaminaModifiers
Определения EStaminaModifiers.c:2
DayZPlayer m_Player
Определения Hand_Events.c:42
static const float BROKEN_LEGS_LIGHT_MELEE_SHOCK
Определения PlayerConstants.c:227
static const float BROKEN_LEGS_HEAVY_MELEE_SHOCK
Определения PlayerConstants.c:228
Определения PlayerConstants.c:2

Перекрестные ссылки PlayerConstants::BROKEN_LEGS_HEAVY_MELEE_SHOCK, PlayerConstants::BROKEN_LEGS_LIGHT_MELEE_SHOCK, DisableControls(), GetAttackTypeByDistanceToTarget(), GetAttackTypeByWeaponAttachments(), GetAttackTypeFromInputs(), GetTargetData(), m_HitType, m_MeleeCombat, m_Player и m_WasPreviousHitProcessed.

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