DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
HeatStroke.c
См. документацию.
2{
3 const int NUMBER_OF_STAGES = 4;
4 const float STAGE_THRESHOLDS[NUMBER_OF_STAGES] = {0.0, 0.4, 0.6, 0.85};
5
7 protected static const int WATER_DRAIN_FROM_FEVER_ST1 = 0.35;
8 protected static const int WATER_DRAIN_FROM_FEVER_ST2 = 0.5;
9 protected static const int WATER_DRAIN_FROM_FEVER_ST3 = 0.75;
10 protected static const int ENERGY_DRAIN_FROM_FEVER = 1;
11
13 protected static const int VOMIT_OCCURRENCES_MIN = 1;
14 protected static const int VOMIT_OCCURRENCES_MAX = 2;
15 protected static const int WATER_DRAIN_FROM_VOMIT = 70;
16 protected static const int ENERGY_DRAIN_FROM_VOMIT = 55;
17
19 protected static const float UNCONSCIOUSNESS_LENGTH_MIN = 5.0;
20 protected static const float UNCONSCIOUSNESS_LENGTH_MAX = 10.0;
21 protected static const float UNCONSCIOUSNESS_EVENT_INTERVAL_MIN = 60.0;
22 protected static const float UNCONSCIOUSNESS_EVENT_INTERVAL_MAX = 120.0;
23
24 protected static const float SHOCK_ACTIVATION_THRESHOLD_MIN = 90.0;
25
27 protected static const float HEALTH_DAMAGE_MIN = 0.01;
28 protected static const float HEALTH_DAMAGE_MAX = 0.35;
29
30 override void Init()
31 {
32 super.Init();
33
38 m_SyncID = eModifierSyncIDs.MODIFIER_SYNC_HEAT_STROKE;
39 }
40}
41
42class HeatStrokePhase1Mdfr : HeatStrokeMdfr
43{
44 private static const float THRESHOLD_ACTIVATE = HeatStrokeMdfr.STAGE_THRESHOLDS[0];
45
46 override void Init()
47 {
48 super.Init();
49
50 m_ID = eModifiers.MDF_HEAT_STROKE1;
51 }
52
53 override string GetDebugText()
54 {
55 return ("Activate threshold >: "+ THRESHOLD_ACTIVATE + "| Deativate threshold: ==" + THRESHOLD_ACTIVATE);
56 }
57
58 override protected bool ActivateCondition(PlayerBase player)
59 {
60 return player.GetThermalBiasHandler().Get() > THRESHOLD_ACTIVATE;
61 }
62
63 override protected bool DeactivateCondition(PlayerBase player)
64 {
65 return player.GetThermalBiasHandler().Get() <= THRESHOLD_ACTIVATE;
66 }
67
68 override protected void OnActivate(PlayerBase player)
69 {
70 }
71
72 override protected void OnDeactivate(PlayerBase player)
73 {
74 player.DecreaseDiseaseCount();
75 }
76
77 override protected void OnTick(PlayerBase player, float deltaT)
78 {
79 PlayerStat<float> waterStat = player.GetStatWater();
80 waterStat.Add(-WATER_DRAIN_FROM_FEVER_ST1 * deltaT);
81 }
82}
83
85{
86 private static const float THRESHOLD_ACTIVATE = HeatStrokeMdfr.STAGE_THRESHOLDS[1];
87
88 override void Init()
89 {
90 super.Init();
91
92 m_ID = eModifiers.MDF_HEAT_STROKE2;
93 }
94
95 override string GetDebugText()
96 {
97 return ("Activate threshold >: "+ THRESHOLD_ACTIVATE + "| Deativate threshold: ==" + THRESHOLD_ACTIVATE);
98 }
99
100 override protected bool ActivateCondition(PlayerBase player)
101 {
102 return player.GetThermalBiasHandler().Get() > THRESHOLD_ACTIVATE;
103 }
104
105 override protected bool DeactivateCondition(PlayerBase player)
106 {
107 return player.GetThermalBiasHandler().Get() <= THRESHOLD_ACTIVATE;
108 }
109
110 override protected void OnActivate(PlayerBase player)
111 {
112 player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_FEVERBLUR);
113 player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
114 player.GetStaminaHandler().ActivateDepletionModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
115 player.IncreaseDiseaseCount();
116 }
117
118 override protected void OnDeactivate(PlayerBase player)
119 {
120 player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_FEVERBLUR);
121 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
122 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
123 }
124
125 override protected void OnTick(PlayerBase player, float deltaT)
126 {
127 float thermalBias = player.GetThermalBiasHandler().Get();
128
129 float chance = Math.Lerp(2, 10, thermalBias);
130 chance = (chance / 500) * deltaT;
131 if (Math.RandomFloat01() < chance)
132 player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_HOT);
133
134 PlayerStat<float> waterStat = player.GetStatWater();
135 waterStat.Add(-WATER_DRAIN_FROM_FEVER_ST2 * deltaT);
136 }
137}
138
140class HeatStrokePhase3Mdfr : HeatStrokeMdfr
141{
142 private static const float THRESHOLD_ACTIVATE = HeatStrokeMdfr.STAGE_THRESHOLDS[2];
143
144 protected bool m_Exhaustion;
145 protected float m_ExhaustionTimer;
146
147 override void Init()
148 {
149 super.Init();
150
151 m_ID = eModifiers.MDF_HEAT_STROKE3;
152 }
153
154 override string GetDebugText()
155 {
156 return ("Activate threshold >: "+ THRESHOLD_ACTIVATE + "| Deativate threshold: <" + THRESHOLD_ACTIVATE);
157 }
158
159 override protected bool ActivateCondition(PlayerBase player)
160 {
161 return player.GetThermalBiasHandler().Get() > THRESHOLD_ACTIVATE;
162 }
163
164 override protected bool DeactivateCondition(PlayerBase player)
165 {
166 return player.GetThermalBiasHandler().Get() < THRESHOLD_ACTIVATE;
167 }
168
169 override protected void OnActivate(PlayerBase player)
170 {
171 player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
172 player.GetStaminaHandler().ActivateDepletionModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
173 }
174
175 override void OnReconnect(PlayerBase player)
176 {
177 this.OnActivate(player);
178 }
179
180 override void OnDeactivate(PlayerBase player)
181 {
182 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
183 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
184 }
185
186 override protected void OnTick(PlayerBase player, float deltaT)
187 {
188 PlayerStat<float> waterStat = player.GetStatWater();
189 PlayerStat<float> energyStat = player.GetStatEnergy();
190 waterStat.Add(-WATER_DRAIN_FROM_FEVER_ST3 * deltaT);
191
192 float thermalBias = player.GetThermalBiasHandler().Get();
193
194 float thermalBiasRemapped = Math.Remap(THRESHOLD_ACTIVATE, 1.0, 0.0, 1.0, thermalBias);
195 float chance = Math.Lerp(VOMIT_OCCURRENCES_MIN, VOMIT_OCCURRENCES_MAX, thermalBiasRemapped);
196 chance = (chance / 900) * deltaT;
197
198 if (Math.RandomFloat01() < chance)
199 {
200 SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_VOMIT);
201 if (symptom)
202 {
203 CachedObjectsParams.PARAM1_FLOAT.param1 = 10.0;
205
206 if (waterStat.Get() > WATER_DRAIN_FROM_VOMIT)
207 waterStat.Add(-1 * WATER_DRAIN_FROM_VOMIT);
208 if (energyStat.Get() > ENERGY_DRAIN_FROM_VOMIT)
209 energyStat.Add(-1 * ENERGY_DRAIN_FROM_VOMIT);
210
211 player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
212 player.GetStaminaHandler().ActivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
213
214 m_Exhaustion = true;
216 }
217 }
218
219 if (m_Exhaustion)
220 {
221 m_ExhaustionTimer += deltaT;
222 if (m_ExhaustionTimer >= 30 * thermalBiasRemapped)
223 {
224 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
225 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
226
227 m_Exhaustion = false;
228 }
229 }
230 }
231}
232
234{
235 private static const float THRESHOLD_ACTIVATE = HeatStrokeMdfr.STAGE_THRESHOLDS[3];
236
240
242
243 override void Init()
244 {
245 super.Init();
246
247 m_ID = eModifiers.MDF_HEAT_STROKE4;
248 }
249
250 override string GetDebugText()
251 {
252 return ("Activate threshold >: "+ THRESHOLD_ACTIVATE + "| Deativate threshold: <" + THRESHOLD_ACTIVATE);
253 }
254
255 override protected bool ActivateCondition(PlayerBase player)
256 {
257 return player.GetThermalBiasHandler().Get() > THRESHOLD_ACTIVATE;
258 }
259
260 override protected bool DeactivateCondition(PlayerBase player)
261 {
262 return player.GetThermalBiasHandler().Get() < THRESHOLD_ACTIVATE;
263 }
264
265 override protected void OnActivate(PlayerBase player)
266 {
268
269 m_FaintEffectTime = 0.0;
272
274
275 m_FaintSymptom = player.GetSymptomManager().QueueUpSecondarySymptomEx(SymptomIDs.SYMPTOM_FAINT);
276 if (m_FaintSymptom)
277 {
279
280 SymptomSyncData faintData = new SymptomSyncData();
281 params.param1 = SymptomIDs.SYMPTOM_FAINT;
282 faintData.m_FloatArray.Insert(0.0);
283 faintData.m_FloatArray.Insert(0.0);
284 faintData.m_FloatArray.Insert(0.0);
285 faintData.m_IntArray.Insert(1);
286 params.param2 = faintData;
287
288 m_FaintSymptom.SetParam(params);
289 }
290 }
291
292 override void OnDeactivate(PlayerBase player)
293 {
294 player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_FAINT);
295 }
296
297 override protected void OnTick(PlayerBase player, float deltaT)
298 {
299 float thermalBias = player.GetThermalBiasHandler().Get();
300
302 SymptomSyncData faintData = new SymptomSyncData();
303 if (!player.IsUnconscious())
304 {
305 m_FaintEffectTime += deltaT;
306
307 // HEALTH DAMAGE
308 float health = Math.Remap(THRESHOLD_ACTIVATE, 1.0, HEALTH_DAMAGE_MIN, HEALTH_DAMAGE_MAX, thermalBias);
309 player.AddHealth("", "", -health * deltaT);
310
312 float vignette = Math.Remap(STAGE_THRESHOLDS[3], 1.0, 1.0, 2.0, thermalBias);
313 float fadeOut = Math.Remap(STAGE_THRESHOLDS[3], 1.0, 3.0, 5.0, thermalBias);
314 float interval = Math.Remap(1.0, STAGE_THRESHOLDS[3], 2.0, 10.0, thermalBias) + fadeOut;
315
317 {
318 params.param1 = SymptomIDs.SYMPTOM_FAINT;
319 faintData.m_FloatArray.Insert(vignette);
320 faintData.m_FloatArray.Insert(fadeOut);
321 faintData.m_FloatArray.Insert(interval);
322 faintData.m_IntArray.Insert(1);
323 params.param2 = faintData;
324
325 m_FaintSymptom.SetParam(params);
326
327 m_FaintEffectTime = 0.0;
328 m_FaintEffectActive = true;
331 }
332 else if (m_FaintEffectTime > interval && m_CanFaintEffectFadeOut)
333 {
334 params.param1 = SymptomIDs.SYMPTOM_FAINT;
335 faintData.m_FloatArray.Insert(vignette);
336 faintData.m_FloatArray.Insert(fadeOut);
337 faintData.m_FloatArray.Insert(interval);
338 faintData.m_IntArray.Insert(1);
339 params.param2 = faintData;
340
341 m_FaintSymptom.SetParam(params);
342
343 m_FaintEffectTime = 0.0;
346 }
347 }
348 else
349 {
351 {
352 m_FaintEffectActive = false;
353
354 params.param1 = SymptomIDs.SYMPTOM_FAINT;
355 faintData.m_FloatArray.Insert(vignette);
356 faintData.m_FloatArray.Insert(fadeOut);
357 faintData.m_FloatArray.Insert(interval);
358 faintData.m_IntArray.Insert(2);
359 params.param2 = faintData;
360
361 m_FaintSymptom.SetParam(params);
362 }
363 }
364
367
369 bool canTriggerUnconsciousness = !m_CanFaintEffectFadeOut && player.GetHealth("", "Shock") > SHOCK_ACTIVATION_THRESHOLD_MIN;
370 if ((thermalBias > 0.75 && canTriggerUnconsciousness) || player.IsUnconscious())
371 {
373 if (m_UnconciousnessInactiveTimer >= m_NextUnconsciousnessEvent && !player.IsUnconscious())
374 {
375 player.RequestUnconsciousness(true);
376 player.SetHealth("", "Shock", 25.0);
380 }
381 else if (m_UnconciousnessActiveTimer > unconsciousnessLength && player.IsUnconscious())
382 {
383 player.RequestUnconsciousness(false);
386 }
387 }
388 }
389}
void OnDeactivate()
Определения BunkerBroadcastComponent.c:239
int m_ID
Определения DustKickupEffects.c:26
bool m_Exhaustion
Определения HeatStroke.c:144
HeatStrokeMdfr THRESHOLD_ACTIVATE
phase3 stays active together with phase4
float m_ExhaustionTimer
Определения HeatStroke.c:145
bool m_TrackActivatedTime
overall time this modifier was active
Определения ModifierBase.c:14
bool m_AnalyticsStatsEnabled
Определения ModifierBase.c:31
eModifierSyncIDs m_SyncID
Определения ModifierBase.c:28
float m_TickIntervalActive
Определения ModifierBase.c:18
float m_TickIntervalInactive
Определения ModifierBase.c:17
eModifierSyncIDs
Определения ModifiersManager.c:3
const int DEFAULT_TICK_TIME_INACTIVE
Определения ModifiersManager.c:29
enum eModifierSyncIDs DEFAULT_TICK_TIME_ACTIVE
void PlayerStat(T min, T max, T init, string label, int flags)
Определения PlayerStatBase.c:43
EStaminaMultiplierTypes
Определения StaminaHandler.c:2
void OnActivate()
Определения Trap_LandMine.c:67
static ref Param1< float > PARAM1_FLOAT
Определения UtilityClasses.c:13
static const float HEALTH_DAMAGE_MIN
Health damage.
Определения HeatStroke.c:27
override void Init()
Определения HeatStroke.c:30
const int NUMBER_OF_STAGES
Определения HeatStroke.c:3
static const float UNCONSCIOUSNESS_EVENT_INTERVAL_MIN
Определения HeatStroke.c:21
static const float SHOCK_ACTIVATION_THRESHOLD_MIN
Определения HeatStroke.c:24
static const int VOMIT_OCCURRENCES_MIN
per tick
Определения HeatStroke.c:13
static const int WATER_DRAIN_FROM_FEVER_ST3
per tick
Определения HeatStroke.c:9
static const float UNCONSCIOUSNESS_EVENT_INTERVAL_MAX
Определения HeatStroke.c:22
static const float UNCONSCIOUSNESS_LENGTH_MIN
one time
Определения HeatStroke.c:19
static const float HEALTH_DAMAGE_MAX
Определения HeatStroke.c:28
static const int ENERGY_DRAIN_FROM_VOMIT
one time
Определения HeatStroke.c:16
static const int ENERGY_DRAIN_FROM_FEVER
per tick
Определения HeatStroke.c:10
static const int WATER_DRAIN_FROM_FEVER_ST2
per tick
Определения HeatStroke.c:8
static const float UNCONSCIOUSNESS_LENGTH_MAX
Определения HeatStroke.c:20
static const int VOMIT_OCCURRENCES_MAX
Определения HeatStroke.c:14
static const int WATER_DRAIN_FROM_FEVER_ST1
Fever setup.
Определения HeatStroke.c:7
static const int WATER_DRAIN_FROM_VOMIT
Определения HeatStroke.c:15
const float STAGE_THRESHOLDS[NUMBER_OF_STAGES]
Определения HeatStroke.c:4
Определения HeatStroke.c:2
void OnDeactivate(PlayerBase player)
Определения HeatStroke.c:118
bool DeactivateCondition(PlayerBase player)
Определения HeatStroke.c:105
static const float THRESHOLD_ACTIVATE
Определения HeatStroke.c:86
void OnTick(PlayerBase player, float deltaT)
Определения HeatStroke.c:125
void OnActivate(PlayerBase player)
Определения HeatStroke.c:110
override void Init()
Определения HeatStroke.c:88
bool ActivateCondition(PlayerBase player)
Определения HeatStroke.c:100
override string GetDebugText()
Определения HeatStroke.c:95
float m_FaintEffectTime
Определения HeatStroke.c:238
void OnTick(PlayerBase player, float deltaT)
Определения HeatStroke.c:297
bool m_FaintEffectActive
Определения HeatStroke.c:237
float m_UnconciousnessActiveTimer
Определения HeatStroke.c:238
ref SymptomBase m_FaintSymptom
Определения HeatStroke.c:241
bool ActivateCondition(PlayerBase player)
Определения HeatStroke.c:255
float m_NextUnconsciousnessEvent
Определения HeatStroke.c:239
bool m_CanFaintEffectFadeIn
Определения HeatStroke.c:237
override void Init()
Определения HeatStroke.c:243
float m_UnconciousnessInactiveTimer
Определения HeatStroke.c:238
bool m_CanFaintEffectFadeOut
Определения HeatStroke.c:237
override void OnDeactivate(PlayerBase player)
Определения HeatStroke.c:292
void OnActivate(PlayerBase player)
Определения HeatStroke.c:265
override string GetDebugText()
Определения HeatStroke.c:250
static const float THRESHOLD_ACTIVATE
Определения HeatStroke.c:235
bool DeactivateCondition(PlayerBase player)
Определения HeatStroke.c:260
Определения EnMath.c:7
override void OnReconnect(PlayerBase player)
Определения BreathVapourMdfr.c:25
override bool DeactivateCondition(PlayerBase player)
Определения BreathVapourMdfr.c:20
override string GetDebugText()
Определения BreathVapourMdfr.c:30
override bool ActivateCondition(PlayerBase player)
Определения BreathVapourMdfr.c:15
override void OnTick(PlayerBase player, float deltaT)
Определения BreathVapourMdfr.c:41
Определения BreathVapourMdfr.c:4
Определения PPEConstants.c:68
Определения PlayerBaseClient.c:2
void SetParam(Param p)
Определения StateBase.c:105
Определения StateBase.c:2
ref TFloatArray m_FloatArray
Определения StateManager.c:53
ref TIntArray m_IntArray
Определения StateManager.c:52
Определения StateManager.c:51
eModifiers
Определения eModifiers.c:2
static float RandomFloat01()
Returns a random float number between and min [inclusive] and max [inclusive].
Определения EnMath.c:126
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static float RandomFloatInclusive(float min, float max)
Returns a random float number between and min [inclusive] and max [inclusive].
Определения EnMath.c:106
static float Remap(float inputMin, float inputMax, float outputMin, float outputMax, float inputValue, bool clampedOutput=true)
Returns given value remaped from input range into output range.
Определения EnMath.c:740