Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_ConsumableTourniquet.c
Go to the documentation of this file.
1
3class SCR_ConsumableTourniquet : SCR_ConsumableEffectHealthItems
4{
5
6 //------------------------------------------------------------------------------------------------
7 override void ApplyEffect(notnull IEntity target, notnull IEntity user, IEntity item, ItemUseParameters animParams)
8 {
9 ChimeraCharacter char = ChimeraCharacter.Cast(target);
10 if (!char)
11 return;
12
14 if (!damageMgr)
15 return;
16
17 m_eTargetHZGroup = damageMgr.FindAssociatedHitZoneGroup(animParams.GetIntParam());
18
20 if (!tqStorageComp)
21 {
22 Print("SCR_TourniquetStorageComponent missing", LogLevel.ERROR);
23 return;
24 }
25
26 tqStorageComp.AddTourniquetToSlot(target, m_eTargetHZGroup, item);
27
28 super.ApplyEffect(target, user, item, animParams);
29 }
30
31 //------------------------------------------------------------------------------------------------
32 override bool CanApplyEffect(notnull IEntity target, notnull IEntity user, out SCR_EConsumableFailReason failReason = SCR_EConsumableFailReason.NONE)
33 {
34 ChimeraCharacter char = ChimeraCharacter.Cast(target);
35 if (!char)
36 return false;
37
39 if (!damageMgr || !damageMgr.IsBleeding())
40 return false;
41
42 return damageMgr.GetCharMostDOTHitzoneGroup(EDamageType.BLEEDING, true, true);
43 }
44
45 //------------------------------------------------------------------------------------------------
46 override bool CanApplyEffectToHZ(notnull IEntity target, notnull IEntity user, ECharacterHitZoneGroup group, out SCR_EConsumableFailReason failReason = SCR_EConsumableFailReason.NONE)
47 {
48 ChimeraCharacter char = ChimeraCharacter.Cast(target);
49 if (!char)
50 return false;
51
53 if (!damageMgr)
54 return false;
55
56 array<ECharacterHitZoneGroup> limbs = {};
57 damageMgr.GetAllExtremities(limbs);
58
59 if (!limbs.Contains(group))
60 return false;
61
62 if (damageMgr.GetGroupTourniquetted(group))
63 {
64 failReason = SCR_EConsumableFailReason.ALREADY_APPLIED;
65 return false;
66 }
67
68 if (damageMgr.GetGroupDamageOverTime(group, EDamageType.BLEEDING) > 0)
69 return true;
70
71 failReason = SCR_EConsumableFailReason.NOT_BLEEDING;
72 return false;
73 }
74
75 //------------------------------------------------------------------------------------------------
76 override ItemUseParameters GetAnimationParameters(IEntity item, notnull IEntity target, ECharacterHitZoneGroup group = ECharacterHitZoneGroup.VIRTUAL)
77 {
78 ChimeraCharacter char = ChimeraCharacter.Cast(target);
79 if (!char)
80 return null;
81
83 if (!damageMgr)
84 return null;
85
87
88 if (group != ECharacterHitZoneGroup.VIRTUAL)
89 {
90 if (!damageMgr.GetGroupIsBeingHealed(group))
91 bodyPartToBandage = damageMgr.FindAssociatedBandagingBodyPart(group);
92 }
93 else
94 {
95 group = damageMgr.GetCharMostDOTHitzoneGroup(EDamageType.BLEEDING, true, true, true);
96 if (!group)
97 return null;
98
99 array<HitZone> groupHitZones = {};
100 damageMgr.GetHitZonesOfGroup(group, groupHitZones);
101
102 SCR_CharacterHitZone charHitZone = SCR_CharacterHitZone.Cast(groupHitZones[0]);
103 if (!charHitZone)
104 return null;
105
106 bodyPartToBandage = charHitZone.GetBodyPartToHeal();
107 }
108
109 if (bodyPartToBandage == EBandagingAnimationBodyParts.Invalid)
110 return null;
111
112 bool allowMovement = bodyPartToBandage != EBandagingAnimationBodyParts.RightLeg && bodyPartToBandage != EBandagingAnimationBodyParts.LeftLeg;
113
115 params.SetEntity(item);
116 params.SetAllowMovementDuringAction(allowMovement);
117 params.SetKeepInHandAfterSuccess(false);
118 params.SetCommandID(GetApplyToSelfAnimCmnd(target));
119 params.SetCommandIntArg(1);
120 params.SetCommandFloatArg(0.0);
121 params.SetMaxAnimLength(m_fApplyToSelfDuration);
122 params.SetIntParam(bodyPartToBandage);
123
124 return params;
125 }
126
127 //------------------------------------------------------------------------------------------------
128 // constructor
129 void SCR_ConsumableTourniquet()
130 {
131 m_eConsumableType = SCR_EConsumableType.TOURNIQUET;
132 }
133}
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
EBandagingAnimationBodyParts
SCR_EConsumableType
Type of consumable gadget.
SCR_VehicleDamageManagerComponent GetDamageManager()
ECharacterHitZoneGroup GetCharMostDOTHitzoneGroup(EDamageType damageType, bool onlyExtremities=false, bool ignoreTQdHitZones=false, bool ignoreIfBeingTreated=false)
bool GetGroupIsBeingHealed(ECharacterHitZoneGroup hitZoneGroup)
static void GetAllExtremities(notnull out array< ECharacterHitZoneGroup > limbs)
bool GetGroupTourniquetted(ECharacterHitZoneGroup hitZoneGroup)
bool IsBleeding()
the official and globally used way of checking if bleeding tests for any PERSISTENT damage effects of...
EBandagingAnimationBodyParts FindAssociatedBandagingBodyPart(ECharacterHitZoneGroup hitZoneGroup)
ECharacterHitZoneGroup FindAssociatedHitZoneGroup(EBandagingAnimationBodyParts bodyPartToBandage)
override float GetGroupDamageOverTime(ECharacterHitZoneGroup hitZoneGroup, EDamageType damageType)
void AddTourniquetToSlot(IEntity target, ECharacterHitZoneGroup eHitZoneGroup, IEntity tourniquet)
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
EDamageType
Definition EDamageType.c:13