Dayz 1.25
Dayz Code Explorer by KGB
Загрузка...
Поиск...
Не найдено
Файл DayZPlayerMeleeFightLogic_LightHeavy.c

См. исходные тексты.

Перечисления

enum  EFightLogicCooldownCategory { EVADE = 0 }
 Light / Heavy punches. Подробнее...
 

Функции

void DayZPlayerMeleeFightLogic_LightHeavy (DayZPlayerImplement player)
 
void Init (DayZPlayerImplement player)
 
void ~DayZPlayerMeleeFightLogic_LightHeavy ()
 
bool IsInBlock ()
 
void SetBlock (bool block)
 
bool IsEvading ()
 
bool GetCurrentHitType ()
 
bool CanFight ()
 
void RegisterCooldowns ()
 
EMeleeHitType GetAttackTypeFromInputs (HumanInputController pInputs)
 
EMeleeHitType GetAttackTypeByWeaponAttachments (EntityAI pEntity)
 
float GetAttackTypeByDistanceToTarget (EntityAI pTarget, EMeleeTargetType pTargetType=EMeleeTargetType.ALIGNABLE)
 
bool HandleFightLogic (int pCurrentCommandID, HumanInputController pInputs, EntityAI pEntityInHands, HumanMovementState pMovementState, out bool pContinueAttack)
 
bool HandleHitEvent (int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
 Handle the event that our melee hit something.
 
bool HandleInitialFirearmMelee (int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
 NOTE: Only singular (or first) hits, combo attacks are handled in combo.
 
bool HandleInitialMeleeErc (int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
 First attack in raised erc (light or heavy if modifier is used). Also added support for finishers.
 
bool HandleProneKick (int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
 kick from raised pne
 
bool HandleSprintAttack (int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
 sprint attack in erc stance
 
bool HandleComboHit (int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
 combo hits - when we are already in Melee command and clicking UseButton
 
void EvaluateHit (InventoryItem weapon)
 
void EvaluateHit_Player (InventoryItem weapon, Object target)
 
void EvaluateHit_Infected (InventoryItem weapon, Object target)
 
bool EvaluateFinisherAttack (InventoryItem weapon, Object target)
 Check and evaluate stealth kill, if applicable.
 
void EvaluateHit_Common (InventoryItem weapon, Object target, bool forcedDummy=false, int forcedWeaponMode=-1)
 
void EvaluateHit_NonAlignableObjects (InventoryItem weapon, Object target)
 
bool WeaponDestroyedCheck (InventoryItem weapon, out string ammo)
 
void GetTargetData (out EntityAI target, out EMeleeTargetType targetType)
 
bool DummyHitSelector (EMeleeHitType hitType, out string ammoType)
 evaluation of hit player vs. player
 
bool IsBehindEntity (int angle, DayZPlayer source, Object target)
 DEPRECATED - moved into DayZPlayerImplementMeleeCombat.
 
void SetCooldown (float time, EFightLogicCooldownCategory cooldownCategory)
 
void ResetCooldown (EFightLogicCooldownCategory cooldownCategory)
 
void EnableControls ()
 
void DisableControls ()
 
void DamageHands (DayZPlayer DZPlayer, ClothingBase gloves, InventoryItem itemInHands)
 
int GetFinisherType (InventoryItem weapon, EntityAI target)
 DEPRECATED.
 
bool IsHitTypeFinisher (int type)
 DEPRECATED.
 
int DetermineFinisherAnimation (int finisher_type)
 Picks a specific finisher animation. Not used for mounted bayonet stabs.
 
string DetermineFinisherAmmo (int finisher_type)
 Picks a specific finisher ammo fot the hit type. This gets synchronized and guides further behaviour of the target.
 
int DetermineSpecificFinisherType (ItemBase weapon, int component)
 DEPRECATED.
 
bool IsShortDistance (EntityAI pTarget, float pDistanceSq)
 

Переменные

enum EFightLogicCooldownCategory EVADE_COOLDOWN = 0.5
 cooldown timers settings
 
const float CLOSE_TARGET_DISTANCE = 1.5
 
const string DUMMY_LIGHT_AMMO = "Dummy_Light"
 dummy ammo types
 
const string DUMMY_HEAVY_AMMO = "Dummy_Heavy"
 
PlayerBase m_Player
 
ref DayZPlayerImplementMeleeCombat m_MeleeCombat
 
EMeleeHitType m_HitType
 
ref map< int, ref Timerm_CooldownTimers
 
Mission m_Mission
 
bool m_IsInBlock
 
bool m_IsEvading
 
bool m_IsInComboRange
 
bool m_WasPreviousHitProcessed
 
DayZPlayerImplement m_DZPlayer
 DEPRECATED.
 
bool m_IsFinisher
 

Перечисления

◆ EFightLogicCooldownCategory

Light / Heavy punches.

Элементы перечислений
EVADE 
3{
4 EVADE = 0
5}
@ EVADE
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:4

Функции

◆ CanFight()

bool CanFight ( )
protected
74 {
75 if (m_Player.IsEmotePlaying())
76 return false;
77
78 if (m_Player.GetActionManager() && m_Player.GetActionManager().GetRunningAction())
79 return false;
80
81 return true;
82 }
PlayerBase m_Player
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:19

Перекрестные ссылки m_Player.

◆ DamageHands()

void DamageHands ( DayZPlayer DZPlayer,
ClothingBase gloves,
InventoryItem itemInHands )
protected
815 {
816 EntityAI target = m_MeleeCombat.GetTargetEntity();
817
818 //We did not hit anything
819 if (itemInHands || !target || !DZPlayer)
820 return;
821
822 //Check if server side
823 if (GetGame().IsServer())
824 {
825 int randNum;
826
827 //If gloves, damage gloves
828 if (gloves && gloves.GetHealthLevel() < GameConstants.STATE_RUINED)
829 {
830 gloves.DecreaseHealth("", "", 1);
831 }
832 else
833 {
834 //Do not add bleeding if hitting player, zombie or animal
835 if (PlayerBase.Cast(target) || DayZCreatureAI.Cast(target))
836 return;
837
839
840 //We don't inflict bleeding to hands when kicking
841 if (m_HitType != EMeleeHitType.KICK)
842 {
843 //If no gloves, inflict hand damage and bleeding
844 //m_Player.DecreaseHealth("hands", "", 10); IN CASE WE WANT TO DO STUFF WITH HAND HEALTH
845
846 //Random bleeding source
848 switch (randNum)
849 {
850 case 1:
851 if (m_Player)
852 {
853 bleedingManager = m_Player.GetBleedingManagerServer();
854 if (bleedingManager)
855 bleedingManager.AttemptAddBleedingSourceBySelection("RightForeArmRoll");
856 }
857 break;
858
859 case 2:
860 if (m_Player)
861 {
862 bleedingManager = m_Player.GetBleedingManagerServer();
863 if (bleedingManager)
864 bleedingManager.AttemptAddBleedingSourceBySelection("LeftForeArmRoll");
865 }
866 break;
867 }
868 }
869 else
870 {
871 //Random bleeding source
873 //We only add bleeding to left foot as character kicks with left foot
874 switch (randNum)
875 {
876 case 1:
877 if (m_Player)
878 {
879 bleedingManager = m_Player.GetBleedingManagerServer();
880 if (bleedingManager)
881 bleedingManager.AttemptAddBleedingSourceBySelection("LeftToeBase");
882 }
883 break;
884
885 case 2:
886 if (m_Player)
887 {
888 bleedingManager = m_Player.GetBleedingManagerServer();
889 if (bleedingManager)
890 bleedingManager.AttemptAddBleedingSourceBySelection("LeftFoot");
891 }
892 break;
893 }
894 }
895 }
896 }
897 }
EMeleeHitType
Definition DayZPlayerImplementMeleeCombat.c:2
ref DayZPlayerImplementMeleeCombat m_MeleeCombat
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:20
EMeleeHitType m_HitType
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:21
do not process rotations !
Definition DayZAnimal.c:607
Definition Building.c:6
Definition constants.c:615
Definition EnMath.c:7
Definition EntityAI.c:95
Definition PlayerBaseClient.c:2
proto native CGame GetGame()
const int STATE_RUINED
Definition constants.c:760
static int RandomIntInclusive(int min, int max)
Returns a random int number between and min [inclusive] and max [inclusive].
Definition EnMath.c:54

Перекрестные ссылки GetGame(), m_HitType, m_MeleeCombat, m_Player, Math::RandomIntInclusive() и GameConstants::STATE_RUINED.

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

◆ DayZPlayerMeleeFightLogic_LightHeavy()

void DayZPlayerMeleeFightLogic_LightHeavy ( DayZPlayerImplement player)
protected
32 {
33 Init(player);
34 }
override Widget Init()
Definition DayZGame.c:122

Перекрестные ссылки Init().

Используется в DayZPlayer::DayZPlayerImplement().

◆ DetermineFinisherAmmo()

string DetermineFinisherAmmo ( int finisher_type)
protected

Picks a specific finisher ammo fot the hit type. This gets synchronized and guides further behaviour of the target.

932 {
933 string ret = "";
934
935 switch (finisher_type)
936 {
937 case EMeleeHitType.FINISHER_NECKSTAB:
938 ret = "FinisherHitNeck";
939 break;
940
941 default:
942 ret = "FinisherHit";
943 break;
944 }
945
946 return ret;
947 }

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

◆ DetermineFinisherAnimation()

int DetermineFinisherAnimation ( int finisher_type)
protected

Picks a specific finisher animation. Not used for mounted bayonet stabs.

913 {
914 int animation = -1;
915
916 switch (finisher_type)
917 {
918 case EMeleeHitType.FINISHER_LIVERSTAB:
920 break;
921
922 case EMeleeHitType.FINISHER_NECKSTAB:
924 break;
925 }
926
927 return animation;
928 }
Definition human.c:537
static const int HIT_TYPE_FINISHER
Definition human.c:543
static const int HIT_TYPE_FINISHER_NECK
Definition human.c:544

Перекрестные ссылки HumanCommandMelee2::HIT_TYPE_FINISHER и HumanCommandMelee2::HIT_TYPE_FINISHER_NECK.

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

◆ DetermineSpecificFinisherType()

int DetermineSpecificFinisherType ( ItemBase weapon,
int component )
protected

DEPRECATED.

951 {
952 return -1;
953 }

◆ DisableControls()

void DisableControls ( )
protected

◆ DummyHitSelector()

bool DummyHitSelector ( EMeleeHitType hitType,
out string ammoType )
protected

evaluation of hit player vs. player

in case of kick (on back or push from erc) change the ammo type to dummy

767 {
768 switch (hitType)
769 {
771 case EMeleeHitType.KICK:
773 return true;
774 break;
775 }
776
778
779 return false;
780 }
const string DUMMY_HEAVY_AMMO
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:17
const string DUMMY_LIGHT_AMMO
dummy ammo types
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:16

Перекрестные ссылки DUMMY_HEAVY_AMMO и DUMMY_LIGHT_AMMO.

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

◆ EnableControls()

void EnableControls ( )
protected

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

◆ EvaluateFinisherAttack()

bool EvaluateFinisherAttack ( InventoryItem weapon,
Object target )
protected

Check and evaluate stealth kill, if applicable.

642 {
643 //Debug.MeleeLog(m_Player, string.Format("EvaluateFinisherAttack[1] target=%1, hitPos=%2, hitZoneIdx=%3, finisherType=%4", m_MeleeCombat.GetTargetEntity(), m_MeleeCombat.GetHitPos().ToString(), m_MeleeCombat.GetHitZoneIdx(), m_MeleeCombat.GetFinisherType()));
644
645 if (m_MeleeCombat.GetFinisherType() > -1)
646 {
647 if (GetGame().IsServer())
648 DamageSystem.CloseCombatDamage(m_Player, target, m_MeleeCombat.GetHitZoneIdx(), DetermineFinisherAmmo(m_MeleeCombat.GetFinisherType()), m_MeleeCombat.GetHitPos(), ProcessDirectDamageFlags.NO_ATTACHMENT_TRANSFER);
649
650 return true;
651 }
652
653 return false;
654 }
string DetermineFinisherAmmo(int finisher_type)
Picks a specific finisher ammo fot the hit type. This gets synchronized and guides further behaviour ...
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:931
ProcessDirectDamageFlags
Definition Object.c:2

Перекрестные ссылки DetermineFinisherAmmo(), GetGame(), m_MeleeCombat и m_Player.

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

◆ EvaluateHit()

void EvaluateHit ( InventoryItem weapon)
protected
574 {
575 EntityAI target = m_MeleeCombat.GetTargetEntity();
576
577 if (target)
578 {
579 if (target.IsInherited(DayZPlayer))
580 {
582 }
583 else if (target.IsInherited(DayZInfected))
584 {
586 }
587 else if (target.GetMeleeTargetType() == EMeleeTargetType.NONALIGNABLE)
588 {
590 }
591 else
592 {
594 }
595
596 m_MeleeCombat.CheckMeleeItem();
597 }
598 }
void EvaluateHit_Player(InventoryItem weapon, Object target)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:600
void EvaluateHit_NonAlignableObjects(InventoryItem weapon, Object target)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:701
void EvaluateHit_Infected(InventoryItem weapon, Object target)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:633
void EvaluateHit_Common(InventoryItem weapon, Object target, bool forcedDummy=false, int forcedWeaponMode=-1)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:656
EMeleeTargetType
Definition EMeleeTargetType.c:2
Definition ZombieBase.c:2
Definition DayZPlayerImplement.c:111

Перекрестные ссылки EvaluateHit_Common(), EvaluateHit_Infected(), EvaluateHit_NonAlignableObjects(), EvaluateHit_Player() и m_MeleeCombat.

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

◆ EvaluateHit_Common()

void EvaluateHit_Common ( InventoryItem weapon,
Object target,
bool forcedDummy = false,
int forcedWeaponMode = -1 )
protected

check if we need to use dummy hit

normal hit with applied damage to targeted component

play hit animation for dummy hits

override hit pos by pos defined in type

657 {
658 int hitZoneIdx = m_MeleeCombat.GetHitZoneIdx();
659 int weaponMode = m_MeleeCombat.GetWeaponMode();
661 string ammo;
662
663 if (forcedWeaponMode > -1)
665
667
670 {
672 if (hitZoneIdx >= 0)
673 {
674 hitPosWS = targetEntity.ModelToWorld(targetEntity.GetDefaultHitPosition());
675
677 {
678 DamageSystem.CloseCombatDamage(m_Player, target, hitZoneIdx, ammo, hitPosWS);
679 //Debug.MeleeLog(m_Player, string.Format("EvaluateHit_Common[a]::CloseCombatDamage:: target: %1, hitzone: %2, ammo: %3", target, hitZoneIdx, ammo));
680 }
681 else
682 {
683 m_Player.ProcessMeleeHit(weapon, weaponMode, target, hitZoneIdx, hitPosWS);
684 //Debug.MeleeLog(m_Player, string.Format("EvaluateHit_Common[b]::ProcessMeleeHit:: target: %1, hitzone: %2, meleeMode: %3, forcedWeaponMode:%4", target, hitZoneIdx, weaponMode));
685 }
686 }
687 }
688 else
689 {
691 if (GetGame().IsServer() && targetEntity)
692 {
694 hitPosWS = targetEntity.ModelToWorld(targetEntity.GetDefaultHitPosition());
695 DamageSystem.CloseCombatDamage(m_Player, target, hitZoneIdx, ammo, hitPosWS);
696 //Debug.MeleeLog(m_Player, string.Format("EvaluateHit_Common[c]::CloseCombatDamage:: target: %1, hitzone: %2, meleeMode: %3, ammo: %4", target, hitZoneIdx, weaponMode, ammo));
697 }
698 }
699 }
bool DummyHitSelector(EMeleeHitType hitType, out string ammoType)
evaluation of hit player vs. player
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:766
bool WeaponDestroyedCheck(InventoryItem weapon, out string ammo)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:718
Definition EnConvert.c:106

Перекрестные ссылки DummyHitSelector(), GetGame(), m_HitType, m_MeleeCombat, m_Player и WeaponDestroyedCheck().

Используется в EvaluateHit(), EvaluateHit_Infected() и EvaluateHit_Player().

◆ EvaluateHit_Infected()

void EvaluateHit_Infected ( InventoryItem weapon,
Object target )
protected
634 {
635 //If the finisher attack haven't been performed, then use normal hit
638 }
bool EvaluateFinisherAttack(InventoryItem weapon, Object target)
Check and evaluate stealth kill, if applicable.
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:641

Перекрестные ссылки EvaluateFinisherAttack() и EvaluateHit_Common().

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

◆ EvaluateHit_NonAlignableObjects()

void EvaluateHit_NonAlignableObjects ( InventoryItem weapon,
Object target )
protected
702 {
703 int hitZoneIdx = m_MeleeCombat.GetHitZoneIdx();
705 string ammo;
706
707 if (hitZoneIdx >= 0)
708 {
710 DamageSystem.CloseCombatDamage(m_Player, target, hitZoneIdx, ammo, m_MeleeCombat.GetHitPos());
711 else
712 m_Player.ProcessMeleeHit(weapon, m_MeleeCombat.GetWeaponMode(), target, hitZoneIdx, m_MeleeCombat.GetHitPos());
713 }
714
715 return;
716 }

Перекрестные ссылки m_MeleeCombat, m_Player и WeaponDestroyedCheck().

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

◆ EvaluateHit_Player()

void EvaluateHit_Player ( InventoryItem weapon,
Object target )
protected

Melee Hit/Impact modifiers

if the oponnent is in Melee Block shift the damage down

601 {
602 int hitZoneIdx = m_MeleeCombat.GetHitZoneIdx();
603 int weaponMode = m_MeleeCombat.GetWeaponMode();
604 int forcedWeaponMode = -1;
606 bool forcedDummy = false;
607
610 if (targetPlayer)
611 {
612 vector targetPos = targetPlayer.GetPosition();
613 vector agressorPos = m_Player.GetPosition();
614
615 // We get the angle from which an infected hit the blocking player
617
619 if (targetPlayer.GetMeleeFightLogic() && targetPlayer.GetMeleeFightLogic().IsInBlock() && hitAngle <= GameConstants.PVP_MAX_BLOCKABLE_ANGLE)
620 {
621 if (weaponMode > 0)
622 {
623 forcedWeaponMode = --weaponMode; // Heavy -> Light shift
624 }
625 else
626 forcedDummy = true; // dummy hits, cannot shift lower than 0
627 }
628 }
629
631 }
Definition EnMath3D.c:28
const float PVP_MAX_BLOCKABLE_ANGLE
Definition constants.c:926
static proto float AngleFromPosition(vector origin, vector originDir, vector target)
Angle that a target is from the direction of an origin.
static proto float AbsFloat(float f)
Returns absolute value.
static const float RAD2DEG
Definition EnMath.c:16

Перекрестные ссылки Math::AbsFloat(), Math3D::AngleFromPosition(), EvaluateHit_Common(), m_MeleeCombat, m_Player, GameConstants::PVP_MAX_BLOCKABLE_ANGLE и Math::RAD2DEG.

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

◆ GetAttackTypeByDistanceToTarget()

float GetAttackTypeByDistanceToTarget ( EntityAI pTarget,
EMeleeTargetType pTargetType = EMeleeTargetType.ALIGNABLE )
protected

target in short distance - in place attack

target is far from the player - forward movement attack

121 {
122 if (pTargetType == EMeleeTargetType.NONALIGNABLE)
123 {
124 return 1.0;
125 }
126
129 {
130 return 1.0;
131 }
132
134 return 0.0;
135 }
bool IsShortDistance(EntityAI pTarget, float pDistanceSq)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:955
const float CLOSE_TARGET_DISTANCE
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:13
static proto float SqrFloat(float f)
Returns squared value.

Перекрестные ссылки CLOSE_TARGET_DISTANCE, IsShortDistance() и Math::SqrFloat().

Используется в HandleComboHit(), HandleInitialFirearmMelee(), HandleInitialMeleeErc(), HandleProneKick() и HandleSprintAttack().

◆ GetAttackTypeByWeaponAttachments()

EMeleeHitType GetAttackTypeByWeaponAttachments ( EntityAI pEntity)
protected

use stabbing if the bayonet/knife is attached to firearm

101 {
102 if (!m_Player.CanConsumeStamina(EStaminaConsumers.MELEE_HEAVY))
103 {
104 return EMeleeHitType.NONE;
105 }
106
108 if (pEntity.HasBayonetAttached())
109 {
110 return EMeleeHitType.WPN_STAB;
111 }
112 else if (pEntity.HasButtstockAttached())
113 {
114 return EMeleeHitType.WPN_HIT_BUTTSTOCK;
115 }
116
117 return EMeleeHitType.WPN_HIT;
118 }
EStaminaConsumers
Definition EStaminaConsumers.c:2

Перекрестные ссылки DayZPlayer::CanConsumeStamina() и m_Player.

Используется в HandleComboHit() и HandleInitialFirearmMelee().

◆ GetAttackTypeFromInputs()

EMeleeHitType GetAttackTypeFromInputs ( HumanInputController pInputs)
protected
91 {
92 if (pInputs.IsMeleeFastAttackModifier() && m_Player.CanConsumeStamina(EStaminaConsumers.MELEE_HEAVY))
93 {
94 return EMeleeHitType.HEAVY;
95 }
96
97 return EMeleeHitType.LIGHT;
98 }

Перекрестные ссылки DayZPlayer::CanConsumeStamina() и m_Player.

Используется в HandleComboHit() и HandleInitialMeleeErc().

◆ GetCurrentHitType()

bool GetCurrentHitType ( )
protected
69 {
70 return m_HitType;
71 }

Перекрестные ссылки m_HitType.

◆ GetFinisherType()

int GetFinisherType ( InventoryItem weapon,
EntityAI target )
protected

DEPRECATED.

901 {
902 return -1;
903 }

◆ GetTargetData()

void GetTargetData ( out EntityAI target,
out EMeleeTargetType targetType )
protected

default

nullify target for nonalignable objects (big objects)

743 {
744 target = m_MeleeCombat.GetTargetEntity();
745 targetType = EMeleeTargetType.ALIGNABLE;
746
747 // If there is no hitzone defined, then we won't be able to hit the target anyways..
748 if (m_MeleeCombat.GetHitZoneIdx() < 0)
749 {
750 target = null;
751 }
752
753 if ( target )
754 {
755 targetType = target.GetMeleeTargetType();
756 }
757
759 if ( targetType == EMeleeTargetType.NONALIGNABLE )
760 {
761 target = null;
762 }
763 }

Перекрестные ссылки m_MeleeCombat.

Используется в HandleComboHit(), HandleInitialFirearmMelee(), HandleInitialMeleeErc(), HandleProneKick() и HandleSprintAttack().

◆ 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

no suitable attack - skip that

No combos for the finisher command

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

targetting

wait for the previous hit commit before hitting again

continue 'combo' - left hand attacks

broken legs shock

stamina depletion per attack

502 {
503 //Debug.MeleeLog(m_Player, "HandleComboHit::");
504
506 if (m_HitType == EMeleeHitType.NONE)
507 return false;
508
510 if (m_MeleeCombat.GetFinisherType() > -1)
511 return false;
512
517
519 if (itemInHands && itemInHands.IsWeapon())
520 {
522 }
523 else
524 {
526 }
527
529 //Debug.MeleeLog(m_Player, string.Format("HandleComboHit:: %1", EnumTools.EnumToString(EMeleeHitType, m_HitType)));
532 {
534 }
535
537 bool isHeavy = (m_HitType == EMeleeHitType.HEAVY || m_HitType == EMeleeHitType.WPN_STAB);
538 m_Player.GetCommand_Melee2().ContinueCombo(isHeavy, attackByDistance, target, m_MeleeCombat.GetHitPos());
540
542 if (m_Player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
543 {
545
546 if (!isHeavy)
548
550 m_Player.m_ShockHandler.CheckValue(true);
551 }
552
554 switch (m_HitType)
555 {
556 case EMeleeHitType.HEAVY:
557 case EMeleeHitType.SPRINT:
558 case EMeleeHitType.WPN_STAB:
559 case EMeleeHitType.WPN_HIT_BUTTSTOCK:
560 case EMeleeHitType.WPN_HIT:
561 m_Player.DepleteStamina(EStaminaModifiers.MELEE_HEAVY);
562 break;
563 default:
564 m_Player.DepleteStamina(EStaminaModifiers.MELEE_LIGHT);
565 break;
566 }
567
568 m_IsInComboRange = false;
569
570 return true;
571 }
bool m_IsInComboRange
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:28
EMeleeHitType GetAttackTypeFromInputs(HumanInputController pInputs)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:90
void GetTargetData(out EntityAI target, out EMeleeTargetType targetType)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:742
float GetAttackTypeByDistanceToTarget(EntityAI pTarget, EMeleeTargetType pTargetType=EMeleeTargetType.ALIGNABLE)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:120
bool m_WasPreviousHitProcessed
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:29
EMeleeHitType GetAttackTypeByWeaponAttachments(EntityAI pEntity)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:100
void DisableControls()
eBrokenLegs
Definition EBrokenLegs.c:2
EStaminaModifiers
Definition EStaminaModifiers.c:2
Definition PlayerConstants.c:2
static const float BROKEN_LEGS_HEAVY_MELEE_SHOCK
Definition PlayerConstants.c:214
static const float BROKEN_LEGS_LIGHT_MELEE_SHOCK
Definition PlayerConstants.c:213

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

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

◆ HandleFightLogic()

bool HandleFightLogic ( int pCurrentCommandID,
HumanInputController pInputs,
EntityAI pEntityInHands,
HumanMovementState pMovementState,
out bool pContinueAttack )
protected

Check if we need to damage

Actually pressing a button to start a melee attack

do not perform attacks when blocking

if the item in hands cannot be used as melee weapon

Currently not performing any attacks, so here we start the initial

melee with firearm

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

kick from raised pne

sprint attack in erc stance

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

evade and blocking logic

evades in raised erc stance while moving

not enough stamina to do evades

stand up when crouching and raised pressed

blocks in raised erc/pro stance (bare hand or with melee weapon only)

138 {
140 if (invFSM && !invFSM.IsIdle())
141 return false;
142
143 HumanCommandMove hcm = m_Player.GetCommand_Move();
145 bool isFireWeapon = itemInHands && itemInHands.IsWeapon();
146
149 return false;
150
152 if ((pInputs.IsAttackButtonDown() && !isFireWeapon) || (pInputs.IsMeleeWeaponAttack() && isFireWeapon) || (pContinueAttack && isFireWeapon))
153 {
154 //Debug.MeleeLog(m_Player, string.Format("HandleFightLogic[1] attackButtonDown=%1, meleeWeaponAttack=%2, pContinueAttack=%3, isFireWeapon=%4", pInputs.IsAttackButtonDown(), pInputs.IsMeleeWeaponAttack(), pContinueAttack, isFireWeapon));
155
158 return false;
159
161 if (itemInHands && !itemInHands.IsMeleeWeapon() && !isFireWeapon)
162 return false;
163
165 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_MOVE)
166 {
167 //Debug.MeleeLog(m_Player, "HandleFightLogic[1a]");
169 if (isFireWeapon)
170 {
172 }
173 else
174 {
176 if (pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDERECT)
177 {
179 }
181 else if (pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
182 {
184 }
186 else if (pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_ERECT && m_Player.IsSprintFull())
187 {
189 }
190 }
191 }
193 else if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_MELEE2)
194 {
195 m_IsInComboRange = m_Player.GetCommand_Melee2().IsInComboRange();
197 {
199 }
200 }
201 }
203 else if (!isFireWeapon && pCurrentCommandID == DayZPlayerConstants.COMMANDID_MOVE)
204 {
206 if (pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDERECT)
207 {
208 int roll = pInputs.IsMeleeLREvade();
209 if (roll != 0)
210 {
212 if (!m_Player.CanConsumeStamina(EStaminaConsumers.MELEE_EVADE))
213 {
214 return false;
215 }
216
217 float angle;
218 if (roll == 1)
219 {
220 angle = -90; // left
221 }
222 else
223 {
224 angle = 90; // right
225 }
226
227 // start melee evade
228 m_IsEvading = true;
230 hcm.StartMeleeEvadeA(angle);
231 m_Player.DepleteStamina(EStaminaModifiers.MELEE_EVADE);
232
233 //Inflict shock when sidestepping with broken legs
234 if (m_Player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
235 {
237 m_Player.m_ShockHandler.CheckValue(true);
238 }
239 }
240 }
241
243 if (pInputs.IsWeaponRaised() && pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_CROUCH)
244 {
245 //Debug.MeleeLog(m_Player, "HandleFightLogic[2b]");
246 if (DayZPlayerUtils.PlayerCanChangeStance(m_Player, DayZPlayerConstants.STANCEIDX_RAISEDERECT))
247 {
248 //Debug.MeleeLog(m_Player, "HandleFightLogic[2c]");
249 hcm.ForceStance(DayZPlayerConstants.STANCEIDX_RAISEDERECT);
250
251 return false;
252 }
253 }
254
257 if (!isFireWeapon && (pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDERECT || pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE))
258 {
259 float angle2;
260
261 if (hcm.GetCurrentInputAngle(angle2) && (angle2 < -130.0 || angle2 > 130))
262 {
263 hcm.SetMeleeBlock(true);
264 SetBlock(true);
265 }
266 else
267 {
268 hcm.SetMeleeBlock(false);
269 SetBlock(false);
270 }
271 }
272 else
273 {
274 hcm.SetMeleeBlock(false);
275 SetBlock(false);
276 }
277 }
278
279 return false;
280 }
bool HandleProneKick(int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
kick from raised pne
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:450
EFightLogicCooldownCategory
Light / Heavy punches.
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:3
bool HandleHitEvent(int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
Handle the event that our melee hit something.
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:283
enum EFightLogicCooldownCategory EVADE_COOLDOWN
cooldown timers settings
bool m_IsEvading
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:26
bool m_IsInBlock
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:25
void SetBlock(bool block)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:58
bool HandleInitialFirearmMelee(int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
NOTE: Only singular (or first) hits, combo attacks are handled in combo.
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:338
bool HandleSprintAttack(int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
sprint attack in erc stance
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:480
bool HandleComboHit(int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
combo hits - when we are already in Melee command and clicking UseButton
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:501
void SetCooldown(float time, EFightLogicCooldownCategory cooldownCategory)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:788
bool HandleInitialMeleeErc(int pCurrentCommandID, HumanInputController pInputs, InventoryItem itemInHands, HumanMovementState pMovementState, out bool pContinueAttack)
First attack in raised erc (light or heavy if modifier is used). Also added support for finishers.
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:384
void DayZPlayerUtils()
cannot be instantiated
Definition DayZPlayerUtils.c:461
Definition human.c:434
HumanInventory... with FSM (synchronous, no anims)
Definition HumanInventoryWithFSM.c:6
Definition ItemBase.c:14
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602

Перекрестные ссылки PlayerConstants::BROKEN_LEGS_LIGHT_MELEE_SHOCK, DayZPlayer::CanConsumeStamina(), DayZPlayerUtils(), DayZPlayer::DepleteStamina(), EVADE_COOLDOWN, HandleComboHit(), HandleHitEvent(), HandleInitialFirearmMelee(), HandleInitialMeleeErc(), HandleProneKick(), HandleSprintAttack(), DayZPlayer::IsSprintFull(), m_IsEvading, m_IsInBlock, m_IsInComboRange, m_Player, SetBlock() и SetCooldown().

◆ HandleHitEvent()

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

Handle the event that our melee hit something.

Check if we need to damage

on anim event Hit received

re-target (enemy can have moved out of range or disappeared)

evaluate hit - selection of cfg 'ammo' type

284 {
286 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_MELEE2)
287 {
288 HumanCommandMelee2 hmc2a = m_Player.GetCommand_Melee2();
289 if (hmc2a)
290 {
292 if (hmc2a.WasHit())
293 {
294 //Debug.MeleeLog(m_Player, "HandleHitEvent[START]");
295 //Debug.MeleeLog(m_Player, string.Format("HandleHitEvent[1] target=%1, hitPos=%2, hitZoneIdx=%3, finisherType=%4", m_MeleeCombat.GetTargetEntity(), m_MeleeCombat.GetHitPos().ToString(), m_MeleeCombat.GetHitZoneIdx(), m_MeleeCombat.GetFinisherType()));
296 if (m_MeleeCombat.GetFinisherType() == -1)
297 {
298 //Debug.MeleeLog(m_Player, string.Format("HandleHitEvent[2] target=%1, hitPos=%2, hitZoneIdx=%3, finisherType=%4", m_MeleeCombat.GetTargetEntity(), m_MeleeCombat.GetHitPos().ToString(), m_MeleeCombat.GetHitZoneIdx(), m_MeleeCombat.GetFinisherType()));
300 m_MeleeCombat.Update(itemInHands, m_HitType, true);
301 }
302
305
306 //Get gloves
308 if (m_HitType == EMeleeHitType.KICK)
309 {
310 //We kick so "gloves" will be the shoes
311 gloves = ClothingBase.Cast(m_Player.GetItemOnSlot("FEET"));
312 }
313 else
314 {
315 gloves = ClothingBase.Cast(m_Player.GetItemOnSlot("GLOVES"));
316 }
317
318 //If we hit something, inflict damage
320
321 m_MeleeCombat.ResetTarget();
322
324
326
327 //Debug.MeleeLog(m_Player, "HandleHitEvent[END]");
328
329 return true;
330 }
331 }
332 }
333
334 return false;
335 }
void EnableControls()
void DamageHands(DayZPlayer DZPlayer, ClothingBase gloves, InventoryItem itemInHands)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:814
void EvaluateHit(InventoryItem weapon)
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:573
Definition DallasMask.c:2

Перекрестные ссылки DamageHands(), EnableControls(), EvaluateHit(), m_HitType, m_MeleeCombat, m_Player и m_WasPreviousHitProcessed.

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

◆ HandleInitialFirearmMelee()

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

NOTE: Only singular (or first) hits, combo attacks are handled in combo.

don't allow bash to interfere with actions like chambering or ejecting bullets

perform firearm melee from raised erect or continue with attack after character stand up from crouch

exit if there is no suitable attack

char stand up when performing firearm melee from crouch

339 {
342 if (weapon.IsWaitingForActionFinish())
343 return false;
344
345 HumanCommandMove hcm = m_Player.GetCommand_Move();
346
348 if (hcm.GetCurrentMovementSpeed() <= 2.05 && (pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDERECT || pContinueAttack) && !m_Player.IsFighting())
349 {
351 if ( m_HitType == EMeleeHitType.NONE )
352 return false;
353
355
360
361 m_Player.StartCommand_Melee2(target, m_HitType == EMeleeHitType.WPN_STAB, attackByDistance, m_MeleeCombat.GetHitPos());
362 m_Player.DepleteStamina(EStaminaModifiers.MELEE_HEAVY);
364
365 pContinueAttack = false; // reset continueAttack flag
366
367 return true;
368 }
370 else if ( pMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDCROUCH )
371 {
372 if (hcm)
373 {
374 hcm.ForceStance(DayZPlayerConstants.STANCEIDX_RAISEDERECT);
375 pContinueAttack = true;
376 return false;
377 }
378 }
379
380 return false;
381 }
shorthand
Definition BoltActionRifle_Base.c:6

Перекрестные ссылки DayZPlayer::DepleteStamina(), DisableControls(), GetAttackTypeByDistanceToTarget(), GetAttackTypeByWeaponAttachments(), GetTargetData(), DayZPlayer::IsFighting(), m_HitType, m_MeleeCombat и m_Player.

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

◆ 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.

385 {
386 //Debug.MeleeLog(m_Player, "HandleInitialMeleeErc[1]");
387
390
391 //Debug.MeleeLog(m_Player, string.Format("HandleInitialMeleeErc[2] %1", EnumTools.EnumToString(EMeleeHitType, m_HitType)));
392
397
398 // finisher attack hittype override
399 int finisherType = m_MeleeCombat.GetFinisherType();
400 if (finisherType != -1)
401 {
403 if (animationType > -1)
404 {
405 //Debug.MeleeLog(m_Player, string.Format("HandleInitialMeleeErc[3a] target=%1, finisherType=%2, animationType=%3, hitPositionWS=%4", target, finisherType, animationType, m_MeleeCombat.GetHitPos().ToString()));
406 m_Player.StartCommand_Melee2(target, animationType, attackByDistance, m_MeleeCombat.GetHitPos());
407 }
408 else
409 {
410 //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()));
411 m_Player.StartCommand_Melee2(target, m_HitType == EMeleeHitType.HEAVY, attackByDistance, m_MeleeCombat.GetHitPos());
412 }
413
415 target.SetBeingBackstabbed(finisherType);
416 }
417 else
418 {
419 //Debug.MeleeLog(m_Player, string.Format("HandleInitialMeleeErc[3d] target=%1, animationType=%2, hitPositionWS=%3", target, (m_HitType == EMeleeHitType.HEAVY).ToString(), m_MeleeCombat.GetHitPos().ToString()));
420 m_Player.StartCommand_Melee2(target, m_HitType == EMeleeHitType.HEAVY, attackByDistance, m_MeleeCombat.GetHitPos());
421 }
422
423 if (m_HitType == EMeleeHitType.HEAVY)
424 {
425 m_Player.DepleteStamina(EStaminaModifiers.MELEE_HEAVY);
426 if (m_Player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
427 {
429 m_Player.m_ShockHandler.CheckValue(true);
430 }
431 }
432 else
433 {
434 m_Player.DepleteStamina(EStaminaModifiers.MELEE_LIGHT);
435 if (m_Player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
436 {
438 m_Player.m_ShockHandler.CheckValue(true);
439 }
440 }
441
443
445
446 return true;
447 }
int DetermineFinisherAnimation(int finisher_type)
Picks a specific finisher animation. Not used for mounted bayonet stabs.
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:912

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

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

◆ HandleProneKick()

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

kick from raised pne

check if player is on back (situation where the player is raised in prone and on back is not in anim graph)

451 {
452 HumanCommandWeapons hcw = m_Player.GetCommandModifier_Weapons();
453
454 float hcw_angle = hcw.GetBaseAimingAngleLR();
457 if ( ( hcw_angle < -90 || hcw_angle > 90 ) && m_Player.GetBrokenLegs() != eBrokenLegs.BROKEN_LEGS )
458 {
459 // targetting
462
467
468 // command
469 m_Player.StartCommand_Melee2(target, false, attackByDistance, m_MeleeCombat.GetHitPos());
470 m_Player.DepleteStamina(EStaminaModifiers.MELEE_HEAVY);
472
473 return true;
474 }
475
476 return false;
477 }
Definition human.c:987

Перекрестные ссылки DayZPlayer::DepleteStamina(), DisableControls(), GetAttackTypeByDistanceToTarget(), GetTargetData(), m_HitType, m_MeleeCombat и m_Player.

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

◆ HandleSprintAttack()

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

sprint attack in erc stance

targetting

command

481 {
483 m_HitType = EMeleeHitType.SPRINT;
485
490
492 //Debug.MeleeLog(m_Player, string.Format("HandleSprintAttack[1] target=%1, animationType=%2, hitPositionWS=%3", target, false, m_MeleeCombat.GetHitPos().ToString()));
493 m_Player.StartCommand_Melee2(target, false, attackByDistance, m_MeleeCombat.GetHitPos());
494 m_Player.DepleteStamina(EStaminaModifiers.MELEE_HEAVY);
496
497 return true;
498 }

Перекрестные ссылки DayZPlayer::DepleteStamina(), DisableControls(), GetAttackTypeByDistanceToTarget(), GetTargetData(), m_HitType, m_MeleeCombat и m_Player.

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

◆ Init()

void Init ( DayZPlayerImplement player)
protected
37 {
40 m_MeleeCombat = m_Player.GetMeleeCombat();
41 m_Mission = GetGame().GetMission();
42
43 m_IsInBlock = false;
44 m_IsEvading = false;
47
49 }
void RegisterCooldowns()
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:84
Mission m_Mission
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:23
DayZPlayerImplement m_DZPlayer
DEPRECATED.
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:961

Перекрестные ссылки GetGame(), DayZPlayer::GetMeleeCombat(), m_DZPlayer, m_HitType, m_IsEvading, m_IsInBlock, m_MeleeCombat, m_Mission, m_Player, m_WasPreviousHitProcessed и RegisterCooldowns().

◆ IsBehindEntity()

bool IsBehindEntity ( int angle,
DayZPlayer source,
Object target )
protected

DEPRECATED - moved into DayZPlayerImplementMeleeCombat.

784 {
785 return false;
786 }

◆ IsEvading()

bool IsEvading ( )
protected
64 {
65 return m_IsEvading;
66 }

Перекрестные ссылки m_IsEvading.

◆ IsHitTypeFinisher()

bool IsHitTypeFinisher ( int type)
protected

DEPRECATED.

907 {
908 return false;
909 }

◆ IsInBlock()

bool IsInBlock ( )
protected
54 {
55 return m_IsInBlock;
56 }

Перекрестные ссылки m_IsInBlock.

◆ IsShortDistance()

bool IsShortDistance ( EntityAI pTarget,
float pDistanceSq )
protected
956 {
957 return pTarget && vector.DistanceSq(m_Player.GetPosition(), m_MeleeCombat.GetHitPos()) <= pDistanceSq || vector.DistanceSq(m_Player.GetBonePositionWS(m_Player.GetBoneIndexByName("Head")), m_MeleeCombat.GetHitPos()) <= pDistanceSq)
958 }
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.

Перекрестные ссылки vector::DistanceSq(), m_MeleeCombat и m_Player.

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

◆ RegisterCooldowns()

void RegisterCooldowns ( )
protected
85 {
88 }
ref map< int, ref Timer > m_CooldownTimers
Definition DayZPlayerMeleeFightLogic_LightHeavy.c:22
Definition DayZPlayerImplement.c:63
const int CALL_CATEGORY_SYSTEM
Definition tools.c:8

Перекрестные ссылки CALL_CATEGORY_SYSTEM и m_CooldownTimers.

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

◆ ResetCooldown()

void ResetCooldown ( EFightLogicCooldownCategory cooldownCategory)
protected
802 {
803 switch (cooldownCategory)
804 {
806 m_IsEvading = false;
807 break;
808 }
809 }

Перекрестные ссылки m_IsEvading.

◆ SetBlock()

void SetBlock ( bool block)
protected
59 {
61 }

Перекрестные ссылки m_IsInBlock.

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

◆ SetCooldown()

void SetCooldown ( float time,
EFightLogicCooldownCategory cooldownCategory )
protected

stops currently running cooldown timer (for specific category)

param for ResetCooldown

789 {
791 if ( m_CooldownTimers.Get(cooldownCategory).IsRunning() )
792 {
794 }
795
798 m_CooldownTimers.Get(cooldownCategory).Run(time, this, "ResetCooldown", param);
799 }

Перекрестные ссылки m_CooldownTimers.

◆ WeaponDestroyedCheck()

bool WeaponDestroyedCheck ( InventoryItem weapon,
out string ammo )
protected
719 {
720 if (!weapon)
721 return false;
722
724 ItemBase bayonet = ItemBase.Cast(weapon.GetInventory().FindAttachment(weapon.GetBayonetAttachmentIdx()));
725
726 if ( firearm && bayonet && bayonet.IsRuined() )
727 {
728 ammo = bayonet.GetRuinedMeleeAmmoType();
729 return true;
730 }
731 else if (weapon.IsRuined())
732 {
733 ammo = weapon.GetRuinedMeleeAmmoType();
734 return true;
735 }
736 else
737 {
738 return false;
739 }
740 }
Definition InventoryItem.c:731

Используется в EvaluateHit_Common() и EvaluateHit_NonAlignableObjects().

◆ ~DayZPlayerMeleeFightLogic_LightHeavy()

Переменные

◆ CLOSE_TARGET_DISTANCE

const float CLOSE_TARGET_DISTANCE = 1.5

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

◆ DUMMY_HEAVY_AMMO

const string DUMMY_HEAVY_AMMO = "Dummy_Heavy"

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

◆ DUMMY_LIGHT_AMMO

const string DUMMY_LIGHT_AMMO = "Dummy_Light"

dummy ammo types

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

◆ EVADE_COOLDOWN

enum EFightLogicCooldownCategory EVADE_COOLDOWN = 0.5

cooldown timers settings

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

◆ m_CooldownTimers

ref map<int, ref Timer> m_CooldownTimers
protected

Используется в RegisterCooldowns() и SetCooldown().

◆ m_DZPlayer

DayZPlayerImplement m_DZPlayer
protected

DEPRECATED.

◆ m_HitType

EMeleeHitType m_HitType
protected

◆ m_IsEvading

bool m_IsEvading
protected

Используется в HandleFightLogic(), Init(), IsEvading() и ResetCooldown().

◆ m_IsFinisher

bool m_IsFinisher
protected

◆ m_IsInBlock

bool m_IsInBlock
protected

Используется в HandleFightLogic(), Init(), IsInBlock() и SetBlock().

◆ m_IsInComboRange

bool m_IsInComboRange
protected

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

◆ m_MeleeCombat

◆ m_Mission

Mission m_Mission
protected

◆ m_Player

PlayerBase m_Player
protected

◆ m_WasPreviousHitProcessed

bool m_WasPreviousHitProcessed
protected