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

◆ HandleInitialMeleeErc()

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

First attack in raised erc (light or heavy if modifier is used). Also added support for finishers.

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

387 {
388 //Debug.MeleeLog(m_Player, "HandleInitialMeleeErc[1]");
389
391 m_MeleeCombat.Update(itemInHands, m_HitType);
392
393 //Debug.MeleeLog(m_Player, string.Format("HandleInitialMeleeErc[2] %1", EnumTools.EnumToString(EMeleeHitType, m_HitType)));
394
395 EntityAI target;
396 EMeleeTargetType targetType;
397 GetTargetData(target, targetType);
398 float attackByDistance = GetAttackTypeByDistanceToTarget(target, targetType);
399
400 // finisher attack hittype override
401 int finisherType = m_MeleeCombat.GetFinisherType();
402 if (finisherType != -1)
403 {
404 int animationType = DetermineFinisherAnimation(finisherType);
405 if (animationType > -1)
406 {
407 //Debug.MeleeLog(m_Player, string.Format("HandleInitialMeleeErc[3a] target=%1, finisherType=%2, animationType=%3, hitPositionWS=%4", target, finisherType, animationType, m_MeleeCombat.GetHitPos().ToString()));
408 m_Player.StartCommand_Melee2(target, animationType, attackByDistance, m_MeleeCombat.GetHitPos());
409 }
410 else
411 {
412 //Debug.MeleeLog(m_Player, string.Format("HandleInitialMeleeErc[3b] target=%1, finisherType=%2, animationType=%3, hitPositionWS=%4", target, finisherType, (m_HitType == EMeleeHitType.HEAVY).ToString(), m_MeleeCombat.GetHitPos().ToString()));
413 m_Player.StartCommand_Melee2(target, m_HitType == EMeleeHitType.HEAVY, attackByDistance, m_MeleeCombat.GetHitPos());
414 }
415
416 m_HitType = finisherType;
417 target.SetBeingBackstabbed(finisherType);
418 }
419 else
420 {
421 //Debug.MeleeLog(m_Player, string.Format("HandleInitialMeleeErc[3d] target=%1, animationType=%2, hitPositionWS=%3", target, (m_HitType == EMeleeHitType.HEAVY).ToString(), m_MeleeCombat.GetHitPos().ToString()));
422 m_Player.StartCommand_Melee2(target, m_HitType == EMeleeHitType.HEAVY, attackByDistance, m_MeleeCombat.GetHitPos());
423 }
424
425 if (m_HitType == EMeleeHitType.HEAVY)
426 {
427 m_Player.DepleteStamina(EStaminaModifiers.MELEE_HEAVY);
428 if (m_Player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
429 {
431 m_Player.m_ShockHandler.CheckValue(true);
432 }
433 }
434 else
435 {
436 m_Player.DepleteStamina(EStaminaModifiers.MELEE_LIGHT);
437 if (m_Player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
438 {
440 m_Player.m_ShockHandler.CheckValue(true);
441 }
442 }
443
445
447
448 return true;
449 }
EMeleeHitType
Определения DayZPlayerImplementMeleeCombat.c:2
EMeleeHitType m_HitType
Hit type of the most recent attack.
ref DayZPlayerImplementMeleeCombat m_MeleeCombat
EMeleeHitType GetAttackTypeFromInputs(HumanInputController pInputs)
int DetermineFinisherAnimation(int finisher_type)
Picks a specific finisher animation. Not used for mounted bayonet stabs.
void GetTargetData(out EntityAI target, out EMeleeTargetType targetType)
float GetAttackTypeByDistanceToTarget(EntityAI pTarget, EMeleeTargetType pTargetType=EMeleeTargetType.ALIGNABLE)
bool m_WasPreviousHitProcessed
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, DetermineFinisherAnimation(), DisableControls(), GetAttackTypeByDistanceToTarget(), GetAttackTypeFromInputs(), GetTargetData(), m_HitType, m_MeleeCombat, m_Player и m_WasPreviousHitProcessed.

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