DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
InjuryHandler.c
См. документацию.
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 ( GetGame().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}
void Synchronize()
Определения CombinationLock.c:151
@ BROKEN_LEGS
Определения EBrokenLegs.c:4
@ BROKEN_LEGS_SPLINT
Определения EBrokenLegs.c:5
DayZPlayer m_Player
Определения Hand_Events.c:42
enum eInjuryHandlerLevels MORPHINE
ref ScriptInvoker m_ChangedStateInvoker
Определения InjuryHandler.c:45
float m_LastUpdate
Определения InjuryHandler.c:48
ScriptInvoker GetInvoker()
Определения InjuryHandler.c:75
float GetInjuryValue(eInjuryHandlerLevels level)
Определения InjuryHandler.c:218
float m_InjuryAnimDamageValue
Определения InjuryHandler.c:56
eInjuryHandlerLevels GetOverrideLevel(eInjuryHandlerLevels unchanged_level)
Определения InjuryHandler.c:100
eInjuryHandlerLevels m_LastHealthUpdate
Определения InjuryHandler.c:49
float m_HealthMaxValue
Определения InjuryHandler.c:50
const float SENSITIVTY_PERCENTAGE
Определения InjuryHandler.c:43
void CheckValue(bool forceUpdate=false)
Определения InjuryHandler.c:154
enum eInjuryHandlerLevels PAIN_KILLERS_LVL0
bool m_InjuryAnimEnabled
Определения InjuryHandler.c:55
void SetInjuryCommandParams(bool enable, eInjuryHandlerLevels level)
Определения InjuryHandler.c:185
float GetInjuryAnimValue()
Определения InjuryHandler.c:70
enum eInjuryHandlerLevels VALUE_CHECK_INTERVAL
enum eInjuryHandlerLevels PRONE_ANIM_OVERRIDE
eInjuryHandlerLevels
Определения InjuryHandler.c:19
@ RUINED
Определения InjuryHandler.c:24
@ BADLY_DAMAGED
Определения InjuryHandler.c:23
@ DAMAGED
Определения InjuryHandler.c:22
@ PRISTINE
Определения InjuryHandler.c:20
@ WORN
Определения InjuryHandler.c:21
void InjuryAnimationHandler(PlayerBase player)
Определения InjuryHandler.c:59
float m_TimeSinceLastTick
Определения InjuryHandler.c:47
bool IsInjuryAnimEnabled()
Определения InjuryHandler.c:65
enum eInjuryHandlerLevels PAIN_KILLERS_LVL1
int m_ForceInjuryAnimMask
Определения InjuryHandler.c:57
bool m_AnimationChange
owner
Определения InjuryHandler.c:54
eInjuryHandlerLevels GetInjuryLevel(float health)
Определения InjuryHandler.c:192
void SendValue(eInjuryHandlerLevels level)
Определения InjuryHandler.c:180
static void SendInjury(DayZPlayer pPlayer, bool pEnable, eInjuryHandlerLevels level)
Определения DayZPlayerSyncJunctures.c:144
const float LVL4
Определения InjuryHandler.c:15
const float LVL1
Определения InjuryHandler.c:12
const float LVL0
Определения InjuryHandler.c:11
const float LVL2
Определения InjuryHandler.c:13
const float LVL3
Определения InjuryHandler.c:14
Определения InjuryHandler.c:10
const float WORN
Определения InjuryHandler.c:3
const float RUINED
Определения InjuryHandler.c:6
const float DAMAGED
Определения InjuryHandler.c:4
const float BADLY_DAMAGED
Определения InjuryHandler.c:5
Определения PlayerBaseClient.c:2
static const float BROKEN_LEGS_HIGH_HEALTH_THRESHOLD
Определения PlayerConstants.c:230
static const float BROKEN_LEGS_LOW_HEALTH_THRESHOLD
Определения PlayerConstants.c:229
Определения PlayerConstants.c:2
ScriptInvoker Class provide list of callbacks usage:
Определения tools.c:116
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
@ NONE
No flags.
Определения EnProfiler.c:11
proto native volatile void Update()
Определения PlayerSoundManager.c:125