Arma Reforger Explorer
1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Toggle main menu visibility
Loading...
Searching...
No Matches
SCR_PhysicalHitZonesRegenDamageEffect.c
Go to the documentation of this file.
1
class
SCR_PhysicalHitZonesRegenDamageEffect
:
SCR_DotDamageEffect
2
{
3
protected
float
m_fDelayTimer
= 0;
4
protected
float
m_fLocalRegenDelayTime
;
5
protected
float
m_fDurationPerHitZone
;
6
protected
float
m_fAccurateTimeSlice
;
7
protected
ref array<SCR_RegeneratingHitZone>
m_aHitZonesToRegen
= {};
8
9
//ALWAYS OVERRIDE LIKE THIS. ALWAYS OVERRIDE THIS FUNCTION
10
protected
override
void
HandleConsequences
(SCR_ExtendedDamageManagerComponent dmgManager,
DamageEffectEvaluator
evaluator)
11
{
12
super.HandleConsequences(dmgManager, evaluator);
13
14
evaluator.HandleEffectConsequences(
this
, dmgManager);
15
}
16
17
//------------------------------------------------------------------------------------------------
18
override
void
OnEffectAdded
(SCR_ExtendedDamageManagerComponent dmgManager)
19
{
20
super.OnEffectAdded(dmgManager);
21
SCR_CharacterDamageManagerComponent
characterDmgManager =
SCR_CharacterDamageManagerComponent
.Cast(dmgManager);
22
if
(!characterDmgManager)
23
return
;
24
25
if
(characterDmgManager.
s_HealthSettings
&& !
GetSkipRegenDelay
(dmgManager))
26
m_fLocalRegenDelayTime
= characterDmgManager.
s_HealthSettings
.GetRegenerationDelay();
27
}
28
29
//------------------------------------------------------------------------------------------------
30
protected
override
void
EOnFrame
(
float
timeSlice, SCR_ExtendedDamageManagerComponent dmgManager)
31
{
32
m_fDelayTimer
+= timeSlice;
33
if
(
m_fDelayTimer
<
m_fLocalRegenDelayTime
)
34
return
;
35
36
if
(
m_aHitZonesToRegen
.IsEmpty())
37
{
38
dmgManager.TerminateDamageEffect(
this
);
39
return
;
40
}
41
42
m_fAccurateTimeSlice
= GetAccurateTimeSlice(timeSlice);
43
m_fDurationPerHitZone
=
m_fAccurateTimeSlice
/
m_aHitZonesToRegen
.Count();
44
45
array<SCR_RegeneratingHitZone> hitZonesToRemove = {};
46
SCR_RegeneratingHitZone
hitZone;
47
48
DotDamageEffectTimerToken
token = UpdateTimer(
m_fAccurateTimeSlice
, dmgManager);
49
50
for
(
int
i =
m_aHitZonesToRegen
.Count() - 1; i > -1; i--)
51
{
52
hitZone =
m_aHitZonesToRegen
[i];
53
if
(hitZone.GetDamageState() ==
EDamageState
.UNDAMAGED)
54
{
55
m_aHitZonesToRegen
.Remove(i);
56
continue
;
57
}
58
59
DealCustomDot(hitZone, -hitZone.
CalculatePassiveRegenDPS
() *
m_fAccurateTimeSlice
, token, dmgManager);
60
}
61
62
//everything is fully healed
63
if
(
m_aHitZonesToRegen
.IsEmpty())
64
dmgManager.TerminateDamageEffect(
this
);
65
}
66
67
//------------------------------------------------------------------------------------------------
68
event
override
bool
HijackDamageEffect
(SCR_ExtendedDamageManagerComponent dmgManager)
69
{
70
SCR_CharacterDamageManagerComponent
characterDmgManager =
SCR_CharacterDamageManagerComponent
.Cast(dmgManager);
71
72
array<ref SCR_PersistentDamageEffect> bleedings = characterDmgManager.GetAllPersistentEffectsOfType(
SCR_BleedingDamageEffect
);
73
if
(!bleedings.IsEmpty())
74
return
true
;
75
76
array<ref SCR_PersistentDamageEffect> poisons = characterDmgManager.GetAllPersistentEffectsOfType(
SCR_PoisonDamageEffect
);
77
if
(!poisons.IsEmpty())
78
return
true
;
79
80
array<ref SCR_PersistentDamageEffect> persistentEffects = {};
81
characterDmgManager.FindAllDamageEffectsOfTypeOnHitZone(
SCR_PhysicalHitZonesRegenDamageEffect
, characterDmgManager.GetDefaultHitZone(), persistentEffects);
82
83
//if the effect is already present on the hitzone, we dont add a second one.
84
if
(!persistentEffects.IsEmpty())
85
{
86
SCR_PhysicalHitZonesRegenDamageEffect
actualEffect =
SCR_PhysicalHitZonesRegenDamageEffect
.Cast(persistentEffects[0]);
87
88
// if regen already exists but owner got regen added again, reset hitZonesToHeal
89
SetHitZonesToHeal
(characterDmgManager);
90
actualEffect.
m_fDelayTimer
= 0;
91
return
true
;
92
}
93
94
// if no regen is present yet, add all physical hitzones to the HitZonesToHeal
95
SetHitZonesToHeal
(characterDmgManager,
false
);
96
97
return
false
;
98
}
99
100
//------------------------------------------------------------------------------------------------
101
protected
void
SetHitZonesToHeal
(
SCR_CharacterDamageManagerComponent
characterDmgManager,
bool
clearHealedHZs =
true
)
102
{
103
m_aHitZonesToRegen
.Clear();
104
105
array<SCR_RegeneratingHitZone> hitZonesToAdd = {};
106
characterDmgManager.GetRegeneratingHitZones(hitZonesToAdd);
107
108
hitZonesToAdd.RemoveItem(characterDmgManager.
GetBloodHitZone
());
109
hitZonesToAdd.RemoveItem(characterDmgManager.
GetResilienceHitZone
());
110
111
foreach
(
SCR_RegeneratingHitZone
hitZone : hitZonesToAdd)
112
{
113
if
(clearHealedHZs && hitZone.GetDamageState() ==
EDamageState
.UNDAMAGED)
114
continue
;
115
116
m_aHitZonesToRegen
.Insert(hitZone);
117
}
118
}
119
120
//------------------------------------------------------------------------------------------------
121
bool
DelayTimerRanOut
()
122
{
123
return
m_fDelayTimer
>
m_fLocalRegenDelayTime
;
124
}
125
126
//------------------------------------------------------------------------------------------------
127
override
bool
GetSkipRegenDelay
(SCR_ExtendedDamageManagerComponent dmgManager)
128
{
129
SCR_CharacterDamageManagerComponent
characterDmgManager =
SCR_CharacterDamageManagerComponent
.Cast(dmgManager);
130
if
(characterDmgManager && characterDmgManager.
s_HealthSettings
)
131
m_fLocalRegenDelayTime
= characterDmgManager.
s_HealthSettings
.GetRegenerationDelay();
132
133
return
super.GetSkipRegenDelay(dmgManager);
134
}
135
}
DamageEffectEvaluator
Definition
DamageEffectEvaluator.c:2
DotDamageEffectTimerToken
Definition
DotDamageEffectTimerToken.c:13
SCR_BleedingDamageEffect
Definition
SCR_BleedingDamageEffect.c:2
SCR_CharacterDamageManagerComponent
Definition
SCR_CharacterDamageManagerComponent.c:19
SCR_CharacterDamageManagerComponent::s_HealthSettings
static SCR_GameModeHealthSettings s_HealthSettings
Definition
SCR_CharacterDamageManagerComponent.c:62
SCR_CharacterDamageManagerComponent::GetResilienceHitZone
SCR_CharacterResilienceHitZone GetResilienceHitZone()
Definition
SCR_CharacterDamageManagerComponent.c:845
SCR_CharacterDamageManagerComponent::GetBloodHitZone
SCR_CharacterBloodHitZone GetBloodHitZone()
Definition
SCR_CharacterDamageManagerComponent.c:709
SCR_DotDamageEffect
Definition
SCR_DotDamageEffect.c:7
SCR_PhysicalHitZonesRegenDamageEffect
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:2
SCR_PhysicalHitZonesRegenDamageEffect::SetHitZonesToHeal
void SetHitZonesToHeal(SCR_CharacterDamageManagerComponent characterDmgManager, bool clearHealedHZs=true)
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:101
SCR_PhysicalHitZonesRegenDamageEffect::GetSkipRegenDelay
override bool GetSkipRegenDelay(SCR_ExtendedDamageManagerComponent dmgManager)
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:127
SCR_PhysicalHitZonesRegenDamageEffect::HijackDamageEffect
event override bool HijackDamageEffect(SCR_ExtendedDamageManagerComponent dmgManager)
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:68
SCR_PhysicalHitZonesRegenDamageEffect::m_aHitZonesToRegen
ref array< SCR_RegeneratingHitZone > m_aHitZonesToRegen
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:7
SCR_PhysicalHitZonesRegenDamageEffect::m_fAccurateTimeSlice
float m_fAccurateTimeSlice
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:6
SCR_PhysicalHitZonesRegenDamageEffect::m_fLocalRegenDelayTime
float m_fLocalRegenDelayTime
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:4
SCR_PhysicalHitZonesRegenDamageEffect::m_fDelayTimer
float m_fDelayTimer
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:3
SCR_PhysicalHitZonesRegenDamageEffect::HandleConsequences
override void HandleConsequences(SCR_ExtendedDamageManagerComponent dmgManager, DamageEffectEvaluator evaluator)
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:10
SCR_PhysicalHitZonesRegenDamageEffect::m_fDurationPerHitZone
float m_fDurationPerHitZone
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:5
SCR_PhysicalHitZonesRegenDamageEffect::DelayTimerRanOut
bool DelayTimerRanOut()
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:121
SCR_PhysicalHitZonesRegenDamageEffect::OnEffectAdded
override void OnEffectAdded(SCR_ExtendedDamageManagerComponent dmgManager)
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:18
SCR_PhysicalHitZonesRegenDamageEffect::EOnFrame
override void EOnFrame(float timeSlice, SCR_ExtendedDamageManagerComponent dmgManager)
Definition
SCR_PhysicalHitZonesRegenDamageEffect.c:30
SCR_PoisonDamageEffect
Definition
SCR_PoisonDamageEffect.c:2
SCR_RegeneratingHitZone
Definition
SCR_CharacterHitZone.c:67
SCR_RegeneratingHitZone::CalculatePassiveRegenDPS
float CalculatePassiveRegenDPS(bool considerRegenScale=true)
Definition
SCR_CharacterHitZone.c:78
EDamageState
EDamageState
Definition
EDamageState.c:13
scripts
Game
Damage
DamageEffects
CharacterDamageEffects
SCR_PhysicalHitZonesRegenDamageEffect.c
Generated by
1.17.0