Dayz Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Loading...
Searching...
No Matches
injuryhandler.c
Go to the documentation of this file.
2{
3 const float WORN = 0.5;
4 const float DAMAGED = 0.3;
5 const float BADLY_DAMAGED = 0.2;
6 const float RUINED = 0.1;
7};
8
10{
11 const float LVL0 = 0;
12 const float LVL1 = 0.3;
13 const float LVL2 = 0.6;
14 const float LVL3 = 0.8;
15 const float LVL4 = 1;
16};
17
26
27enum eInjuryOverrides
28{
30 NONE = 0,
34 BROKEN_LEGS = 8, //New
36 PRONE_ANIM_OVERRIDE = 32, //Prevent non pristine animation when prone
37}
38
40{
41
42 const float VALUE_CHECK_INTERVAL = 5;
43 const float SENSITIVTY_PERCENTAGE = 1; //how much the value needs to change up/down from previous update to trigger a new update(in percent)
44
46
51
52
54 private bool m_AnimationChange = false;
55 private bool m_InjuryAnimEnabled = false;
56 private float m_InjuryAnimDamageValue = 0;
58
60 {
61 m_Player = player;
62 m_HealthMaxValue = m_Player.GetMaxHealth("", "Health");
63 }
64
66 {
68 }
69
71 {
73 }
74
79
80 void Update(float deltaT)
81 {
83 {
84 m_Player.GetCommandModifier_Additives().SetInjured(m_InjuryAnimDamageValue, m_InjuryAnimEnabled);
85 m_AnimationChange = false;
86 }
87
88 if ( g_Game.IsClient() )
89 return;
90
91 m_TimeSinceLastTick += deltaT;
92
94 {
95 CheckValue();
97 }
98 }
99
101 {
102 eInjuryHandlerLevels override_level = unchanged_level;
103
104 //Whatever the case, prone will always use PRISTINE anim level as alternative anim level(s) are not interesting gameplaywise
105 if ( m_ForceInjuryAnimMask & eInjuryOverrides.PRONE_ANIM_OVERRIDE && override_level > eInjuryHandlerLevels.PRISTINE )
106 {
107 override_level = eInjuryHandlerLevels.PRISTINE;
108 return override_level;
109 }
110
111 if ( m_ForceInjuryAnimMask & eInjuryOverrides.MORPHINE && override_level > eInjuryHandlerLevels.PRISTINE )
112 {
113 override_level = eInjuryHandlerLevels.PRISTINE;
114 }
115
116 if ( m_ForceInjuryAnimMask & eInjuryOverrides.PAIN_KILLERS_LVL1 && override_level > eInjuryHandlerLevels.WORN )
117 {
118 override_level = eInjuryHandlerLevels.WORN;
119 }
120
121 if ( m_ForceInjuryAnimMask & eInjuryOverrides.PAIN_KILLERS_LVL0 && override_level > eInjuryHandlerLevels.DAMAGED )
122 {
123 override_level = eInjuryHandlerLevels.DAMAGED;
124 }
125
126 if ( m_ForceInjuryAnimMask && override_level > eInjuryHandlerLevels.DAMAGED )
127 {
128 override_level = eInjuryHandlerLevels.RUINED;
129 }
130
131 //Broken leg overrides
132 if ( m_ForceInjuryAnimMask & eInjuryOverrides.BROKEN_LEGS_SPLINT && override_level < eInjuryHandlerLevels.DAMAGED )
133 {
134 override_level = eInjuryHandlerLevels.DAMAGED;
135 }
136
137 if ( m_ForceInjuryAnimMask & eInjuryOverrides.BROKEN_LEGS && override_level < eInjuryHandlerLevels.RUINED )
138 {
139 //Average leg health used to determine which animation to use
140 float avgLegHealth = m_Player.GetHealth("RightLeg","") + m_Player.GetHealth("LeftLeg","") + m_Player.GetHealth("RightFoot","") + m_Player.GetHealth("LeftFoot","");
141 avgLegHealth *= 0.25; //divide by 4 to make the average leg health;
143 override_level = eInjuryHandlerLevels.RUINED;
144 else if (avgLegHealth >= PlayerConstants.BROKEN_LEGS_HIGH_HEALTH_THRESHOLD)
145 override_level = eInjuryHandlerLevels.WORN;
146 else
147 override_level = eInjuryHandlerLevels.DAMAGED;
148 }
149
150 return override_level;
151
152 }
153
154 void CheckValue(bool forceUpdate = false)
155 {
156 float health_current_normalized = m_Player.GetHealth("","Health") / m_HealthMaxValue;
157 eInjuryHandlerLevels injury_level = GetInjuryLevel(health_current_normalized);
158
160 {
161 injury_level = GetOverrideLevel(injury_level);
162 }
163
164 if ( m_LastHealthUpdate != injury_level || forceUpdate )
165 {
166 SendValue(injury_level);
167 m_ChangedStateInvoker.Invoke(injury_level);
168 m_LastHealthUpdate = injury_level;
169 Synchronize(injury_level);
170 }
171 }
172
174 {
175 m_Player.m_HealthLevel = level;
176 //Print("m_Player.m_HealthLevel:" + m_Player.m_HealthLevel);
177 m_Player.SetSynchDirty();
178 }
179
184
186 {
187 m_AnimationChange = true;
188 m_InjuryAnimEnabled = enable;
190 }
191
193 {
194 if ( health < InjuryHandlerThresholds.RUINED )
195 {
196 return eInjuryHandlerLevels.RUINED;
197 }
198
200 {
201 return eInjuryHandlerLevels.BADLY_DAMAGED;
202 }
203
204 if ( health < InjuryHandlerThresholds.DAMAGED )
205 {
206 return eInjuryHandlerLevels.DAMAGED;
207 }
208
209 if ( health < InjuryHandlerThresholds.WORN )
210 {
211 return eInjuryHandlerLevels.WORN;
212 }
213
214 return eInjuryHandlerLevels.PRISTINE;
215 }
216
217
219 {
220 switch ( level )
221 {
222 case eInjuryHandlerLevels.RUINED:
223 {
224 return InjuryAnimValues.LVL4;
225 }
226 case eInjuryHandlerLevels.BADLY_DAMAGED:
227 {
228 return InjuryAnimValues.LVL3;
229 }
230 case eInjuryHandlerLevels.DAMAGED:
231 {
232 return InjuryAnimValues.LVL2;
233 }
234 case eInjuryHandlerLevels.WORN:
235 {
236 return InjuryAnimValues.LVL1;
237 }
238 case eInjuryHandlerLevels.PRISTINE:
239 {
240 return InjuryAnimValues.LVL0;
241 }
242 default:
243 Error("Undefined Injury level");
244 }
245 return 0;
246 }
247}
map m_Player
static void SendInjury(DayZPlayer pPlayer, bool pEnable, eInjuryHandlerLevels level)
Injury.
const float LVL4
const float LVL2
const float LVL3
const float LVL1
const float LVL0
static const float BROKEN_LEGS_HIGH_HEALTH_THRESHOLD
static const float BROKEN_LEGS_LOW_HEALTH_THRESHOLD
ScriptInvoker Class provide list of callbacks usage:
Definition tools.c:116
void Synchronize()
DayZGame g_Game
Definition dayzgame.c:3942
@ BROKEN_LEGS
Definition ebrokenlegs.c:4
@ BROKEN_LEGS_SPLINT
Definition ebrokenlegs.c:5
void Error(string err)
Messagebox with error message.
Definition endebug.c:90
@ NONE
body is not in simulation, nor in collision world
proto native volatile void Update()
enum eInjuryHandlerLevels MORPHINE
ref ScriptInvoker m_ChangedStateInvoker
float m_LastUpdate
ScriptInvoker GetInvoker()
float GetInjuryValue(eInjuryHandlerLevels level)
float m_InjuryAnimDamageValue
eInjuryHandlerLevels GetOverrideLevel(eInjuryHandlerLevels unchanged_level)
eInjuryHandlerLevels m_LastHealthUpdate
float m_HealthMaxValue
const float SENSITIVTY_PERCENTAGE
void CheckValue(bool forceUpdate=false)
enum eInjuryHandlerLevels PAIN_KILLERS_LVL0
bool m_InjuryAnimEnabled
void SetInjuryCommandParams(bool enable, eInjuryHandlerLevels level)
float GetInjuryAnimValue()
enum eInjuryHandlerLevels VALUE_CHECK_INTERVAL
enum eInjuryHandlerLevels PRONE_ANIM_OVERRIDE
eInjuryHandlerLevels
@ RUINED
@ BADLY_DAMAGED
@ DAMAGED
@ PRISTINE
@ WORN
void InjuryAnimationHandler(PlayerBase player)
float m_TimeSinceLastTick
bool IsInjuryAnimEnabled()
enum eInjuryHandlerLevels PAIN_KILLERS_LVL1
int m_ForceInjuryAnimMask
bool m_AnimationChange
owner
eInjuryHandlerLevels GetInjuryLevel(float health)
void SendValue(eInjuryHandlerLevels level)