DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
StaminaHandler.c
См. документацию.
10
11
12/**@class Stamina Consumer
13 * @brief Holds information about Stamina Consumer
14 *
15 * @param[in] threshold value needed to allow consume stamina
16 * @param[in] state keeps state of the consumer non-depleted/depleted
17 */
19{
20 protected float m_ActivationThreshold;
21 protected float m_DrainThreshold
22 protected bool m_State;
23
24 void StaminaConsumer(float threshold, float threshold2, bool state)
25 {
26 m_ActivationThreshold = threshold; //can be activated if above this threshold
27 m_DrainThreshold = threshold2; //can continually drain until it reaches this threshold
28 m_State = state;
29 }
30
31 bool GetState() { return m_State; }
32 void SetState(bool state) { m_State = state; }
33
35 void SetActivationThreshold(float threshold) { m_ActivationThreshold = threshold; }
36
37 float GetDrainThreshold() { return m_DrainThreshold; }
38 void SetDrainThreshold(float threshold) { m_DrainThreshold = threshold; }
39}
40
42{
44
49
50 void RegisterConsumer(EStaminaConsumers consumer, float threshold, float depletion_threshold = -1)
51 {
52 if (depletion_threshold == -1)
53 {
54 depletion_threshold = threshold;
55 }
56
57 if ( !m_StaminaConsumers.Contains(consumer) )
58 {
60 StaminaConsumer sc = new StaminaConsumer(threshold, depletion_threshold, true);
61 m_StaminaConsumers.Set(consumer, sc);
62 }
63 }
64
65 bool HasEnoughStaminaFor(EStaminaConsumers consumer, float curStamina, bool isDepleted, float cap)
66 {
68 if (m_StaminaConsumers && m_StaminaConsumers.Find(consumer, sc))
69 {
70 if (consumer != EStaminaConsumers.SPRINT)
71 {
72 if (isDepleted || (curStamina < sc.GetDrainThreshold()))
73 {
74 sc.SetState(false);
75 return false;
76 }
77 }
78 else
79 {
80 if (!isDepleted)
81 {
82 if (sc.GetState())
83 {
84 sc.SetState(true);
85 return true;
86 }
87 }
88 else
89 {
90 sc.SetState(false);
91 return false;
92 }
93 }
94
95 if (curStamina > sc.GetDrainThreshold() || curStamina == cap) //Sometimes player can't go up to drain threshold
96 {
97 sc.SetState(true);
98 return true;
99 }
100 }
101
102 return false;
103 }
104
105 bool HasEnoughStaminaToStart(EStaminaConsumers consumer, float curStamina, bool isDepleted, float cap)
106 {
108 if (m_StaminaConsumers && m_StaminaConsumers.Find(consumer, sc))
109 {
110 if ((isDepleted || (curStamina < sc.GetActivationThreshold() && curStamina < cap)))
111 {
112 sc.SetState(false);
113 return false;
114 }
115 else
116 {
117 sc.SetState(true);
118 return true;
119 }
120 }
121
122 return false;
123 }
124}
125
126
135class StaminaModifier
136{
137 bool m_InUse = false;
140
141 void StaminaModifier(int type, float min, float max, float cooldown, float startTime = 0, float duration = 0)
142 {
143 m_Type = type;
144 m_MinValue = min;
145 m_MaxValue = max;
146 m_Cooldown = cooldown;
148 m_Duration = duration;
149 m_Tick = 1;
150 }
151
152 int GetType() { return m_Type; }
153
154 float GetMinValue() { return m_MinValue; }
155 void SetMinValue(float val) { m_MinValue = val; }
156
157 float GetMaxValue() { return m_MaxValue; }
158 void SetMaxValue(float val) { m_MaxValue = val; }
159
160 float GetCooldown() { return m_Cooldown; }
161 void SetCooldown(float val) { m_Cooldown = val; }
162
163 float GetStartTime() { return m_StartTime; } //Actual game time (progressive modifiers only)
164 void SetStartTime(float val) { m_StartTime = val; }
165
166 float GetStartTimeAdjustment() {return m_StartTimeAdjustment;} //adjustment to current time (progressive modifiers only)
167
168 float GetDuration() { return m_Duration; }
170
171 bool IsInUse() { return m_InUse; }
172 void SetInUse(bool val) { m_InUse = val; }
173
174 float GetRunTime() { return m_ProgressTime; }
175 void AddRunTime(float val) { m_ProgressTime += val; }
176 void SetRunTimeTick(float val) { m_Tick = val; }
178}
179
181{
182 protected ref SMDataExponential m_SMDataEx;
183
184 float GetBaseValue() { return m_SMDataEx.m_BaseValue; }
185 float GetExponent() { return m_SMDataEx.m_Exponent; }
186 float GetMultiplier() { return m_SMDataEx.m_Multiplier; }
187 override float GetCooldown() { return m_SMDataEx.m_Cooldown; }
188 override float GetStartTimeAdjustment() { return m_SMDataEx.m_StartTimeAdjustment; }
189 override float GetDuration() { return m_SMDataEx.m_Duration; }
190 override float GetDurationAdjusted() { return m_SMDataEx.m_Duration / m_Tick; }
191
192 void SetData(SMDataExponential data) { m_SMDataEx = data; }
193}
194
196{
197 const int FIXED = 0;
198 const int RANDOMIZED = 1;
199 const int LINEAR = 2; //Useful ONLY for regular, over-time stamina drain
200 const int EXPONENTIAL = 3; //Useful ONLY for regular, over-time stamina drain
201
203
208
211 {
212 if ( !m_StaminaModifiers.Contains(modifier) )
213 {
215 StaminaModifier sm = new StaminaModifier(FIXED, -1, value, cooldown);
216 m_StaminaModifiers.Set(modifier, sm);
217 }
218 }
219
221 void RegisterRandomized(EStaminaModifiers modifier, float minValue, float maxValue, float cooldown = GameConstants.STAMINA_REGEN_COOLDOWN_DEPLETION)
222 {
223 if ( !m_StaminaModifiers.Contains(modifier) )
224 {
226 StaminaModifier sm = new StaminaModifier(RANDOMIZED, minValue, maxValue, cooldown);
227 m_StaminaModifiers.Set(modifier, sm);
228 }
229 }
230
232 void RegisterLinear(EStaminaModifiers modifier, float startValue, float endValue, float startTime, float duration, float cooldown = GameConstants.STAMINA_REGEN_COOLDOWN_DEPLETION)
233 {
234 StaminaModifier sm = new StaminaModifier(LINEAR, startValue, endValue, cooldown, startTime, duration);
235 m_StaminaModifiers.Set(modifier, sm);
236 }
237
239 void RegisterExponential(EStaminaModifiers modifier, float startValue, float exponent, float startTime, float duration, float cooldown = GameConstants.STAMINA_REGEN_COOLDOWN_DEPLETION)
240 {
241 StaminaModifier sm = new StaminaModifier(EXPONENTIAL, startValue, exponent, cooldown, startTime, duration);
242 m_StaminaModifiers.Set(modifier, sm);
243 }
244
246 void RegisterExponentialEx(EStaminaModifiers modifier, SMDataExponential data)
247 {
248 StaminaModifierExponential smex = new StaminaModifierExponential(EXPONENTIAL, data.m_BaseValue, data.m_Exponent, data.m_Cooldown, data.m_StartTimeAdjustment, data.m_Duration);
249 smex.SetData(data);
250 m_StaminaModifiers.Set(modifier, smex);
251 }
252
254 {
255 return m_StaminaModifiers.Get(modifier);
256 }
257}
258
259typedef Param1<float> StaminaCooldownParams;
260
262{
263 protected const float STAMINA_GAIN_THRESHOLD = 25.0;
264 protected const float STAMINA_GAIN_MODIFIER = 10.0;
265
266 protected const float LOAD_DIFF_UPDATE_THRESHOLD = 1.0;
267 protected const float LOAD_DIFF_CAP_UPDATE_THRESHOLD = 0.01;
268
269 protected bool m_InitUpdate;
270 protected float m_PlayerLoad;
271 protected float m_StaminaDelta;
272 protected float m_Stamina;
273 protected float m_StaminaSynced; //guaranteed to be identical on server and client
274 protected float m_StaminaCap;
275 protected float m_StaminaCapSynced; //guaranteed to be identical on server and client
276 protected float m_StaminaDepletionMultiplierNext; // value being sent via SJ
277 protected float m_StaminaRecoveryMultiplierNext; // value being sent via SJ
278 protected float m_StaminaDepletion;
279 protected float m_StaminaDepletionMultiplier; //controls depletion rate
280 protected float m_StaminaRecoveryMultiplier; //controls recovery rate
281 protected float m_Time;
282 protected ref Param3<float,float,bool> m_StaminaParams;
286
287 protected bool m_StaminaDepleted;
288
290 ref set<EStaminaMultiplierTypes> m_ActiveDepletionModifiers;
291
293 ref set<EStaminaMultiplierTypes> m_ActiveRecoveryModifiers;
294
295 protected bool m_IsInCooldown;
296
299
300 protected float m_LastPlayerLoad = -1;
301
304
306
307 // Movement state caching members
308 protected int m_LastCommandTypeId = -1;
309 protected int m_LastMovementIdx = -1;
310 protected int m_LastStanceIdx = -1;
311 protected bool m_MovementStateChanged = true; // Force initial processing
312
313 protected bool m_ForceLoadRecheck;
314
315 #ifdef DIAG_DEVELOPER
316 protected bool m_StaminaDisabled;
317 protected float m_DebugTimer = 0;
318 protected int m_LastPoolInUse = 0;
319 #endif
320
322 {
323 if (g_Game.IsServer() || !g_Game.IsMultiplayer())
324 m_StaminaParams = new Param3<float,float,bool>(0, 0, false);
325
327 m_Player = player;
328
329 if (m_Player)
330 {
331 m_Player.GetOnPlayerLoadChanged().Insert(MarkLoadDirty);
332 }
333
334 m_InitUpdate = false;
344 m_Time = 0;
345 m_StaminaDepleted = false;
346 m_IsInCooldown = false;
347 m_HumanMoveSettings = m_Player.GetDayZPlayerType().CommandMoveSettingsW();
349
352
354
355 //----------------- depletion --------------------
357 m_ActiveDepletionModifiers = new set<EStaminaMultiplierTypes>;
358
359 //----------------- recovery --------------------
361 m_ActiveRecoveryModifiers = new set<EStaminaMultiplierTypes>;
362
363 Init();
364 }
365
367 {
368 if (m_Player)
369 {
370 m_Player.GetOnPlayerLoadChanged().Remove(MarkLoadDirty);
371 }
372
373 if (m_CooldownMap)
374 {
375 m_CooldownMap.Clear();
376 }
377 }
378
395
397 {
398 if (m_RegisteredDepletionModifiers.Contains(type))
399 {
400 m_ActiveDepletionModifiers.Insert(type);
402 }
403 else
404 {
405 Error("attempting to activate unregistered depletion modifier");
406 }
407 }
408
410 {
411 int index = m_ActiveDepletionModifiers.Find(type);
412 if (index != -1)
413 {
414 m_ActiveDepletionModifiers.Remove(index);
416 }
417 }
418
420 {
421 float value = 1;
422
423 foreach (int multiplier: m_ActiveDepletionModifiers)
424 {
425 value *= m_RegisteredDepletionModifiers.Get(multiplier);
426 }
427
428 if (value != m_StaminaDepletionMultiplier)
430 }
431
433 {
434 if (m_RegisteredRecoveryModifiers.Contains(type))
435 {
436 m_ActiveRecoveryModifiers.Insert(type);
438 }
439 else
440 {
441 Error("attempting to activate unregistered recovery modifier");
442 }
443 }
444
446 {
447 int index = m_ActiveRecoveryModifiers.Find(type);
448 if (index != -1)
449 {
450 m_ActiveRecoveryModifiers.Remove(index);
452 }
453 }
454
456 {
457 float value = 1;
458
459 foreach (int multiplier: m_ActiveRecoveryModifiers)
460 {
461 value *= m_RegisteredRecoveryModifiers.Get(multiplier);
462 }
463
464 if (value != m_StaminaRecoveryMultiplier)
465 {
467 }
468 }
469
470 // Check if movement state has changed since last frame
471 protected bool HasMovementStateChanged()
472 {
473 // Only call GetMovementState if we need to check for changes
474 m_Player.GetMovementState(m_State);
475
476 bool changed = (m_State.m_CommandTypeId != m_LastCommandTypeId || m_State.m_iMovement != m_LastMovementIdx || m_State.m_iStanceIdx != m_LastStanceIdx);
477
478 if (changed)
479 {
480 // Update cached values
481 m_LastCommandTypeId = m_State.m_CommandTypeId;
482 m_LastMovementIdx = m_State.m_iMovement;
483 m_LastStanceIdx = m_State.m_iStanceIdx;
484 }
485
486 return changed;
487 }
488
489 void Update(float deltaT, int pCurrentCommandID)
490 {
491 #ifdef DIAG_DEVELOPER
492 if (m_StaminaDisabled)
493 return;
494 #endif
495
496 if (!m_Player)
497 return;
498
499 // Process cooldowns - subtract deltaT and remove expired ones
500 array<int> expiredCooldowns = new array<int>();
501 foreach (int modifier, StaminaCooldownParams cooldownParams : m_CooldownMap)
502 {
503 cooldownParams.param1 -= deltaT;
504 if (cooldownParams.param1 <= 0)
505 {
506 expiredCooldowns.Insert(modifier);
507 }
508 }
509
510 // Remove expired cooldowns
511 foreach (int expiredModifier : expiredCooldowns)
512 {
513 ResetCooldown(expiredModifier);
514 }
515
516 // Reset so we get current bonus value once in this update loop and then reuse the cached value within this update call
518
519 // Check if movement state has changed
521
522 bool isAiOrSingleplayer = m_Player.IsAuthorityOwner();
523 bool isServerOrSingleplayer = m_Player.IsAuthority();
524
525 // Calculates actual max stamina based on player's load
526 if (isServerOrSingleplayer)
527 {
528 float oldCap = m_StaminaCap;
529 bool forceLoadRecheck = m_ForceLoadRecheck;
530 m_ForceLoadRecheck = false;
531 m_PlayerLoad = m_Player.GetWeightEx(forceLoadRecheck);
532
533 float loadDiff = Math.AbsFloat(m_PlayerLoad - m_LastPlayerLoad);
534 if (forceLoadRecheck || loadDiff > LOAD_DIFF_UPDATE_THRESHOLD)
535 {
538
539 float capDiff = Math.AbsFloat(oldCap - m_StaminaCap);
540 if (capDiff > LOAD_DIFF_CAP_UPDATE_THRESHOLD)
541 {
543 {
545 }
546
549
551 m_Time = 0;
552 }
553 }
554 }
555 else
556 {
557 PlayerBaseMove move = PlayerBaseMove.Cast(m_Player.GetNextMove());
558 if (move)
559 {
560 move.m_fStaminaValue = m_Stamina;
561 move.m_fStaminaCapacity = m_StaminaCap;
562 }
563 }
564
565 if (isAiOrSingleplayer)
566 {
569 }
570
571 // Process movement if: state changed, we have stamina delta, in cooldown, not initialized, or stamina is bewlow cap
574
575 // Sets current stamina & stores + syncs data with client
576 ProcessStaminaChanges(deltaT, isServerOrSingleplayer);
577
580
581 m_StaminaDelta = 0;
582 m_StaminaDepletion = 0; // resets depletion modifier
584 if (!m_InitUpdate)
585 m_InitUpdate = true;
586 }
587
588 protected void ProcessMovementState()
589 {
590 switch (m_State.m_CommandTypeId)
591 {
592 case DayZPlayerConstants.COMMANDID_MOVE:
594 break;
595 case DayZPlayerConstants.COMMANDID_LADDER:
597 break;
598 case DayZPlayerConstants.COMMANDID_SWIM:
600 break;
601 case DayZPlayerConstants.COMMANDID_FALL:
602 case DayZPlayerConstants.COMMANDID_MELEE2:
603 case DayZPlayerConstants.COMMANDID_CLIMB:
604 break;
605 default:
606 if (!m_IsInCooldown)
607 {
609 }
610 break;
611 }
612 }
613
614 protected void ProcessStaminaChanges(float deltaT, bool isServerOrSingleplayer)
615 {
616 // Calculate stamina changes
617 float temp = m_StaminaDelta * deltaT;
618 if (temp < 0)
619 {
621 }
622 else
623 {
625 }
626
627 // Apply stamina depletion first, then add/subtract the delta
628 float newStamina = m_Stamina - m_StaminaDepletion + temp;
629
630 // Clamp to valid range
631 m_Stamina = Math.Max(0, Math.Min(newStamina, m_StaminaCap));
632
633 // Handle floating-point precision issues - snap to cap if very close
634 if (m_Stamina > (m_StaminaCap - 0.01) && temp > 0)
635 {
637 }
638
639 if (isServerOrSingleplayer)
640 {
641 m_Player.GetStatStamina().Set(m_Stamina);
642 m_Time += deltaT;
643
645 {
646 m_Time = 0;
648 }
649 }
650
651 #ifndef SERVER
653 #endif
654 }
655
670
672 void OnSyncJuncture(int pJunctureID, ParamsReadContext pCtx)
673 {
674 switch (pJunctureID)
675 {
677 float stamina;
678 float staminaCap;
679 bool cooldown;
680
681 if (!pCtx.Read(stamina) || !pCtx.Read(staminaCap) || !pCtx.Read(cooldown))
682 {
683 return;
684 }
685
686 m_Stamina = stamina; //?
687 m_StaminaSynced = stamina;
688 m_StaminaCap = staminaCap;
689 m_StaminaCapSynced = staminaCap;
690
691 if (m_Player.GetInstanceType() != DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
692 {
693 return;
694 }
695
696 if (staminaCap != m_StaminaCap)
697 {
698 m_StaminaCap = staminaCap;
699 }
700
701 m_IsInCooldown = cooldown;
702 m_Player.SetStamina(m_Stamina, m_StaminaCap);
703 break;
704
707 break;
708 }
709 }
710
711 protected void StaminaProcessor_Move(HumanMovementState pHumanMovementState)
712 {
713 switch (pHumanMovementState.m_iMovement)
714 {
715 case DayZPlayerConstants.MOVEMENTIDX_SPRINT: //sprint
716 if (pHumanMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_ERECT)
717 {
720 break;
721 }
722 else if ( pHumanMovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_CROUCH)
723 {
726 break;
727 }
728
730 break;
731
732 case DayZPlayerConstants.MOVEMENTIDX_RUN: //jog
733 if (m_Player.GetCurrentWaterLevel() >= m_HumanMoveSettings.m_fWaterLevelSpeedRectrictionHigh)
734 {
736 break;
737 }
738
739 if (!m_IsInCooldown)
740 {
742 }
743 break;
744
745 case DayZPlayerConstants.MOVEMENTIDX_WALK: //walk
746 if (!m_IsInCooldown)
747 {
749 }
750 break;
751
752 case DayZPlayerConstants.MOVEMENTIDX_IDLE: //idle
753 if (m_Player.IsRolling())
754 {
756 break;
757 }
758
759 if (!m_IsInCooldown)
760 {
762 }
763 break;
764
765 default:
766 if (!m_IsInCooldown)
767 {
769 }
770 break;
771 }
772 }
773
774 protected void StaminaProcessor_Ladder(HumanMovementState pHumanMovementState)
775 {
776 switch (pHumanMovementState.m_iMovement)
777 {
778 case 2: //climb up (fast)
781 break;
782
783 case 1: //climb up (slow)
784 if (!m_IsInCooldown)
785 {
787 }
788 break;
789
790 default:
791 if (!m_IsInCooldown)
792 {
794 }
795 break;
796 }
797 }
798
799 protected void StaminaProcessor_Swimming(HumanMovementState pHumanMovementState)
800 {
801 switch (pHumanMovementState.m_iMovement)
802 {
803 case 3: //swim fast
806 break;
807
808 case 2: //swim slow
809 if (!m_IsInCooldown)
810 {
812 }
813 break;
814
815 default:
816 if (!m_IsInCooldown)
817 {
819 }
820 break;
821 }
822 }
823
825 protected void SyncStaminaEx()
826 {
828 }
829
831 protected void SyncStamina(float stamina, float stamina_cap, bool cooldown)
832 {
833 m_Player.GetStatStamina().Set(stamina);
835 pCtx.Write(stamina);
836 pCtx.Write(stamina_cap);
837 pCtx.Write(cooldown);
838 m_Player.SendSyncJuncture(DayZPlayerSyncJunctures.SJ_STAMINA,pCtx);
839 }
840
843 {
845
847 pCtx.Write(p.param1);
848 pCtx.Write(p.param2);
849 m_Player.SendSyncJuncture(DayZPlayerSyncJunctures.SJ_STAMINA_MISC,pCtx);
850 }
851
854 {
855 float depletionMultiplier;
856 float recoveryMultiplier;
857 if (!pCtx.Read(depletionMultiplier) || !pCtx.Read(recoveryMultiplier))
858 {
859 return;
860 }
861
862 m_StaminaDepletionMultiplier = depletionMultiplier;
863 m_StaminaRecoveryMultiplier = recoveryMultiplier;
864 }
865
867 {
869
870 m_StaminaConsumers.RegisterConsumer(
871 EStaminaConsumers.HOLD_BREATH,
874 );
875 m_StaminaConsumers.RegisterConsumer(
876 EStaminaConsumers.SPRINT,
878 );
879 m_StaminaConsumers.RegisterConsumer(
880 EStaminaConsumers.JUMP,
882 );
883 m_StaminaConsumers.RegisterConsumer(
884 EStaminaConsumers.VAULT,
886 );
887 m_StaminaConsumers.RegisterConsumer(
888 EStaminaConsumers.CLIMB,
890 );
891 m_StaminaConsumers.RegisterConsumer(
892 EStaminaConsumers.MELEE_HEAVY,
894 );
895 m_StaminaConsumers.RegisterConsumer(
896 EStaminaConsumers.MELEE_EVADE,
898 );
899 m_StaminaConsumers.RegisterConsumer(
902 );
903 m_StaminaConsumers.RegisterConsumer(
904 EStaminaConsumers.DROWN,
905 0,
906 );
907 m_StaminaConsumers.RegisterConsumer(
909 0,
910 );
911 }
912
914 {
916
918 m_StaminaModifiers.RegisterExponentialEx(
919 EStaminaModifiers.HOLD_BREATH,
920 data,
921 );
922 m_StaminaModifiers.RegisterExponentialEx(
923 EStaminaModifiers.PUSH_CAR,
924 data,
925 );
926 m_StaminaModifiers.RegisterFixed(
927 EStaminaModifiers.DROWN,
928 10,
929 );
930 m_StaminaModifiers.RegisterFixed(
933 );
934 m_StaminaModifiers.RegisterFixed(
935 EStaminaModifiers.VAULT,
937 );
938 m_StaminaModifiers.RegisterFixed(
939 EStaminaModifiers.CLIMB,
941 );
942 m_StaminaModifiers.RegisterFixed(
943 EStaminaModifiers.MELEE_LIGHT,
945 );
946 m_StaminaModifiers.RegisterFixed(
947 EStaminaModifiers.MELEE_HEAVY,
949 );
950 m_StaminaModifiers.RegisterFixed(
951 EStaminaModifiers.OVERALL_DRAIN,
953 5.0,
954 );
955 m_StaminaModifiers.RegisterRandomized(
958 );
959 m_StaminaModifiers.RegisterFixed(
962 );
963 }
964
987
988 protected void ApplyExhaustion()
989 {
991 HumanCommandAdditives ad = m_Player.GetCommandModifier_Additives();
992
993 float exhaustion_value = 1;
994 if (m_StaminaCap != 0)
995 {
996 exhaustion_value = 1 - ((m_Stamina / (m_StaminaCap * 0.01)) * 0.01);
997 }
998
999 exhaustion_value = Math.Min(1, exhaustion_value);
1000 if (ad)
1001 {
1002 // do not apply exhaustion on local client if player is in ADS/Optics (camera shakes)
1003 if (m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT && (m_Player.IsInOptics() || m_Player.IsInIronsights()))
1004 {
1005 ad.SetExhaustion(0, true);
1006 }
1007 else
1008 {
1009 ad.SetExhaustion(exhaustion_value, true);
1010 }
1011 }
1012 }
1013
1015 protected void CheckStaminaState()
1016 {
1017 if (m_Stamina <= 0)
1018 {
1019 m_StaminaDepleted = true;
1021 if (!m_IsInCooldown)
1022 {
1023 // set this only once
1025 }
1026 }
1027 else
1028 {
1029 m_StaminaDepleted = false;
1030 }
1031 }
1032
1034 protected void SetCooldown(float time, int modifier = -1)
1035 {
1036 StaminaCooldownParams cooldown;
1037 if (!m_CooldownMap.Find(modifier, cooldown))
1038 {
1039 cooldown = new StaminaCooldownParams(0);
1040 m_CooldownMap.Insert(modifier, cooldown);
1041 }
1042
1043 m_IsInCooldown = true;
1044 cooldown.param1 = time; // Set remaining time
1045 }
1046
1047 protected void ResetCooldown(int modifier = -1)
1048 {
1049 StaminaModifier sm = m_StaminaModifiers.GetModifierData(modifier);
1050 if (sm)
1051 {
1052 sm.SetStartTime(-1);
1053 sm.ResetRunTime();
1054 sm.SetInUse(false);
1055 }
1056
1057 // Remove from cooldown map
1058 m_CooldownMap.Remove(modifier);
1059
1060 // Update cooldown state based on remaining active cooldowns
1061 m_IsInCooldown = (m_CooldownMap.Count() > 0);
1062 }
1063
1064 // ---------------------------------------------------
1066 {
1067 return m_StaminaConsumers.HasEnoughStaminaFor(consumer, m_StaminaSynced, m_StaminaDepleted, m_StaminaCapSynced);
1068 }
1069
1071 {
1072 return m_StaminaConsumers.HasEnoughStaminaToStart(consumer, m_StaminaSynced, m_StaminaDepleted, m_StaminaCapSynced);
1073 }
1074
1075 void SetStamina(float stamina_value)
1076 {
1077 m_Stamina = Math.Clamp(stamina_value, 0, CfgGameplayHandler.GetStaminaMax());
1078 SyncStaminaEx();
1079 }
1080
1082 {
1083 return m_Stamina;
1084 }
1085
1087 {
1088 return m_Stamina / GetStaminaMax();
1089 }
1090
1092 {
1093 return m_StaminaSynced;
1094 }
1095
1097 {
1098 return GetSyncedStamina() / GetStaminaMax();
1099 }
1100
1102 {
1103 return m_StaminaCap;
1104 }
1105
1107 {
1108 return m_StaminaCapSynced;
1109 }
1110
1112 {
1114 }
1115
1116 // Only used internaly in this class, use ActivateDepletionModifier/DeactivateDepletionModifier instead
1124
1125 // Only used internaly in this class, use ActivateRecoveryModifier/DeactivateRecoveryModifier instead
1133
1135 {
1137 }
1138
1140 {
1142 }
1143
1144 void DepleteStaminaEx(EStaminaModifiers modifier, float dT = -1, float coef = 1.0)
1145 {
1146 #ifdef DIAG_DEVELOPER
1147 if (m_StaminaDisabled)
1148 return;
1149 #endif
1150 float val = 0.0;
1151 float current_time = m_Player.GetSimulationTimeStamp();
1152 float valueProgress;
1153 StaminaModifier sm = m_StaminaModifiers.GetModifierData(modifier);
1154
1155 // select by modifier type and drain stamina
1156 switch (sm.GetType())
1157 {
1158 case m_StaminaModifiers.FIXED:
1159 if (dT == -1)
1160 {
1161 dT = 1;
1162 }
1163 m_StaminaDepletion += sm.GetMaxValue() * dT * coef;
1164
1165 break;
1166
1167 case m_StaminaModifiers.RANDOMIZED:
1168 val = Math.RandomFloat(sm.GetMinValue(), sm.GetMaxValue());
1169 m_StaminaDepletion += val * coef;
1170
1171 break;
1172
1173 case m_StaminaModifiers.LINEAR:
1174 if (!sm.IsInUse())
1175 {
1176 sm.SetStartTime(current_time + sm.GetStartTimeAdjustment()/dT);
1177 sm.SetRunTimeTick(dT);
1178 sm.SetInUse(true);
1179 }
1180 valueProgress = Math.Clamp((current_time - sm.GetStartTime())/sm.GetDurationAdjusted(), 0, 1 );
1181 val = Math.Lerp(sm.GetMinValue(), sm.GetMaxValue(), valueProgress);
1182 m_StaminaDepletion += val * coef;
1183
1184 break;
1185
1186 case m_StaminaModifiers.EXPONENTIAL:
1188 if (!Class.CastTo(smex,sm))
1189 {
1190 ErrorEx("StaminaModifierExponential not found for modifier type: " + sm.GetType());
1191 break;
1192 }
1193
1194 if (!smex.IsInUse())
1195 {
1196 smex.SetStartTime(current_time + smex.GetStartTimeAdjustment()/dT);
1197 smex.SetRunTimeTick(dT);
1198 smex.SetInUse(true);
1199 }
1200 valueProgress = Math.Clamp((current_time - smex.GetStartTime())/smex.GetDurationAdjusted(), 0, 1 );
1201 float exp;
1202 if (Math.AbsFloat(smex.GetBaseValue()) < 1)
1203 {
1204 exp = 1 - Math.Lerp(0, smex.GetExponent(), valueProgress);
1205 val = Math.Pow(smex.GetBaseValue(),exp);
1206 }
1207 else
1208 {
1209 exp = Math.Lerp(Math.Min(0, smex.GetExponent()), Math.Max(0, smex.GetExponent()), valueProgress);
1210 val = Math.Pow(smex.GetBaseValue(),exp) + smex.GetBaseValue() - 1;
1211 }
1212
1213 m_StaminaDepletion += val * smex.GetMultiplier() * coef;
1214
1215 break;
1216 }
1217
1219 SetCooldown(sm.GetCooldown(),modifier);
1220
1223 }
1224
1225 // ADD these new methods - don't remove any existing ones
1226 void ObtainState(PlayerBaseOwnerState state)
1227 {
1228 // we are writing the state data for stamina to the move, use 'GetNextMove'
1229 }
1230
1231 void ObtainMove(PlayerBaseMove move)
1232 {
1233 // unused
1234 }
1235
1236 void RewindState(PlayerBaseOwnerState state, PlayerBaseMove move)
1237 {
1238 m_Stamina = move.m_fStaminaValue;
1239 m_StaminaCap = move.m_fStaminaCapacity;
1240 }
1241
1242 void ReplayMove(PlayerBaseMove move)
1243 {
1244 // mimick receiving of sync juncture
1245 if (move.m_bStaminaSynced)
1246 {
1247 m_StaminaSynced = move.m_fStaminaSyncedValue;
1248 m_StaminaCapSynced = move.m_fStaminaSyncedCapacity;
1249
1252 }
1253
1254 m_StaminaDepletion = move.m_fStaminaDepletion;
1255
1256 Update(move.GetTimeSlice(), m_Player.GetCurrentCommandID());
1257 }
1258
1260 {
1261 m_ForceLoadRecheck = true;
1262 }
1263
1264 #ifdef DIAG_DEVELOPER
1265 void SetStaminaDisabled(bool value)
1266 {
1267 m_StaminaDisabled = value;
1268 }
1269 #endif
1270
1272 //DEPRECATED BELOW
1274 protected bool m_Debug;
1275
1276 [Obsolete("No replacement")]
1277 void DepleteStamina(EStaminaModifiers modifier, float dT = -1)
1278 {
1279 DepleteStaminaEx(modifier,dT);
1280 }
1281
1282 [Obsolete("Deprecated use, StaminaHandler uses SyncJunctures now!")]
1283 void OnRPC(float stamina, float stamina_cap, bool cooldown);
1284}
eBleedingSourceType m_Type
eBleedingSourceType GetType()
string startTime
default values
Определения CfgBunkerBroadcastJsonData.c:148
DayZGame g_Game
Определения DayZGame.c:4074
float m_Duration
Определения DebugWeatherRPCData.c:45
@ MASK
Определения ECachedEquipmentItemCategory.c:10
EStaminaConsumers
Определения EStaminaConsumers.c:2
EStaminaModifiers
Определения EStaminaModifiers.c:2
enum EObjectTemperatureState m_State
@ DROWNING
Определения PlayerSoundEventBase.c:9
class PlayerStatBase m_MinValue
T m_MaxValue
Определения PlayerStatBase.c:35
void StaminaConsumer(float threshold, float threshold2, bool state)
Определения StaminaHandler.c:24
const int RANDOMIZED
Определения StaminaHandler.c:198
m_ActivationThreshold
EStaminaMultiplierTypes
Определения StaminaHandler.c:2
float GetMinValue()
Определения StaminaHandler.c:154
void SetMaxValue(float val)
Определения StaminaHandler.c:158
const int LINEAR
Определения StaminaHandler.c:199
DISEASE_PNEUMONIA
Определения StaminaHandler.c:9
float m_ProgressTime
Определения StaminaHandler.c:139
void StaminaModifier(int type, float min, float max, float cooldown, float startTime=0, float duration=0)
Определения StaminaHandler.c:141
void RegisterLinear(EStaminaModifiers modifier, float startValue, float endValue, float startTime, float duration, float cooldown=GameConstants.STAMINA_REGEN_COOLDOWN_DEPLETION)
register lerped modifier - depletes stamina for startValue, and, after a startTime,...
Определения StaminaHandler.c:232
void SetActivationThreshold(float threshold)
Определения StaminaHandler.c:35
void ResetRunTime()
Определения StaminaHandler.c:177
FATIGUE
Определения StaminaHandler.c:4
float m_Tick
Определения StaminaHandler.c:139
void SetStartTime(float val)
Определения StaminaHandler.c:164
void SetInUse(bool val)
Определения StaminaHandler.c:172
StaminaModifierExponential FIXED
m_InUse
void StaminaConsumers()
Определения StaminaHandler.c:45
void SetDrainThreshold(float threshold)
Определения StaminaHandler.c:38
float m_StartTimeAdjustment
Определения StaminaHandler.c:139
void SetState(bool state)
Определения StaminaHandler.c:32
ref map< EStaminaModifiers, ref StaminaModifier > m_StaminaModifiers
Определения StaminaHandler.c:202
void RegisterExponentialEx(EStaminaModifiers modifier, SMDataExponential data)
register exponential modifier, extended parameters
Определения StaminaHandler.c:246
float GetMaxValue()
Определения StaminaHandler.c:157
float GetStartTimeAdjustment()
Определения StaminaHandler.c:166
bool IsInUse()
Определения StaminaHandler.c:171
float m_Multiplier
Определения StaminaHandler.c:139
float m_StartTime
Определения StaminaHandler.c:139
VOMIT_EXHAUSTION
Определения StaminaHandler.c:7
float GetDrainThreshold()
Определения StaminaHandler.c:37
const int EXPONENTIAL
Определения StaminaHandler.c:200
float GetActivationThreshold()
Определения StaminaHandler.c:34
Param1< float > StaminaCooldownParams
Определения StaminaHandler.c:259
void SetRunTimeTick(float val)
Определения StaminaHandler.c:176
void StaminaModifiers()
Определения StaminaHandler.c:204
void SetMinValue(float val)
Определения StaminaHandler.c:155
void RegisterExponential(EStaminaModifiers modifier, float startValue, float exponent, float startTime, float duration, float cooldown=GameConstants.STAMINA_REGEN_COOLDOWN_DEPLETION)
register exponential modifier - depletes stamina for startValue, and, after a startTime,...
Определения StaminaHandler.c:239
void RegisterFixed(EStaminaModifiers modifier, float value, float cooldown=GameConstants.STAMINA_REGEN_COOLDOWN_DEPLETION)
register single value modifier - depletes stamina for that value
Определения StaminaHandler.c:210
EPINEPHRINE
Определения StaminaHandler.c:5
float GetStartTime()
Определения StaminaHandler.c:163
void SetCooldown(float val)
Определения StaminaHandler.c:161
StaminaModifier GetModifierData(EStaminaModifiers modifier)
Определения StaminaHandler.c:253
float GetCooldown()
Определения StaminaHandler.c:160
float GetDurationAdjusted()
Определения StaminaHandler.c:169
float m_Cooldown
Определения StaminaHandler.c:139
void AddRunTime(float val)
Определения StaminaHandler.c:175
void RegisterRandomized(EStaminaModifiers modifier, float minValue, float maxValue, float cooldown=GameConstants.STAMINA_REGEN_COOLDOWN_DEPLETION)
register randomized modifier - stamina will be depleted by value between min and max value;
Определения StaminaHandler.c:221
static float GetSprintLadderStaminaModifier()
Определения CfgGameplayHandler.c:207
static float GetStaminaKgToStaminaPercentPenalty()
Определения CfgGameplayHandler.c:222
static float GetStaminaMinCap()
Определения CfgGameplayHandler.c:227
static float GetSprintStaminaModifierCro()
Определения CfgGameplayHandler.c:198
static float GetSprintStaminaModifierErc()
Определения CfgGameplayHandler.c:193
static float GetObstacleTraversalStaminaModifier()
Определения CfgGameplayHandler.c:237
static float GetStaminaMax()
Определения CfgGameplayHandler.c:217
static float GetMeleeStaminaModifier()
Определения CfgGameplayHandler.c:232
static float GetSprintSwimmingStaminaModifier()
Определения CfgGameplayHandler.c:203
static float GetStaminaWeightLimitThreshold()
Определения CfgGameplayHandler.c:212
Super root of all classes in Enforce script.
Определения EnScript.c:11
static const int SJ_STAMINA
Определения DayZPlayerSyncJunctures.c:29
static const int SJ_STAMINA_MISC
Определения DayZPlayerSyncJunctures.c:30
static const float STAMINA_RECOVERY_MULTIPLIER
Определения Drowning.c:3
Определения Drowning.c:2
const float STAMINA_DEPLETION_MULTIPLIER
Определения EpinephrineMdfr.c:4
Определения EpinephrineMdfr.c:2
static const float STAMINA_DEPLETION_MULTIPLIER
Определения Fatigue.c:9
static const float STAMINA_RECOVERY_MULTIPLIER
Определения Fatigue.c:8
Определения Fatigue.c:2
int m_iMovement
current stance (DayZPlayerConstants.STANCEIDX_ERECT, ...), only if the command has a stance
Определения human.c:1184
int m_iStanceIdx
current command's id
Определения human.c:1183
Определения human.c:1181
const float STAMINA_RECOVERY_MODIFIER
Определения Mask.c:6
const float STAMINA_DEPLETION_MODIFIER
Определения Mask.c:7
Определения Mask.c:2
Определения EnMath.c:7
Определения PPEConstants.c:68
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Определения param.c:12
Определения PlayerBaseClient.c:2
const float STAMINA_RECOVERY_MULTIPLIER
Определения Pneumonia.c:7
const float STAMINA_DEPLETION_MULTIPLIER
Определения Pneumonia.c:6
Определения Pneumonia.c:2
Определения gameplay.c:152
proto bool Write(void value_out)
proto bool Read(void value_in)
void RegisterConsumer(EStaminaConsumers consumer, float threshold, float depletion_threshold=-1)
Определения StaminaHandler.c:50
void StaminaConsumers()
Определения StaminaHandler.c:45
ref map< EStaminaConsumers, ref StaminaConsumer > m_StaminaConsumers
Определения StaminaHandler.c:43
bool HasEnoughStaminaToStart(EStaminaConsumers consumer, float curStamina, bool isDepleted, float cap)
Определения StaminaHandler.c:105
bool HasEnoughStaminaFor(EStaminaConsumers consumer, float curStamina, bool isDepleted, float cap)
Определения StaminaHandler.c:65
float m_StaminaDepletionMultiplier
Определения StaminaHandler.c:279
void Init()
Определения StaminaHandler.c:379
void StaminaProcessor_Ladder(HumanMovementState pHumanMovementState)
Определения StaminaHandler.c:774
bool m_ForceLoadRecheck
Определения StaminaHandler.c:313
void RegisterStaminaModifiers()
Определения StaminaHandler.c:913
float m_StaminaCapSynced
Определения StaminaHandler.c:275
ref HumanMovementState m_State
Определения StaminaHandler.c:283
void StaminaProcessor_Swimming(HumanMovementState pHumanMovementState)
Определения StaminaHandler.c:799
float GetDepletionMultiplier()
Определения StaminaHandler.c:1134
void ReplayMove(PlayerBaseMove move)
Определения StaminaHandler.c:1242
int m_LastMovementIdx
Определения StaminaHandler.c:309
void RecalculateRecoveryMultiplier()
Определения StaminaHandler.c:455
void DepleteStamina(EStaminaModifiers modifier, float dT=-1)
Определения StaminaHandler.c:1277
float m_StaminaDepletionMultiplierNext
Определения StaminaHandler.c:276
void DepleteStaminaEx(EStaminaModifiers modifier, float dT=-1, float coef=1.0)
Определения StaminaHandler.c:1144
void SetDepletionMultiplier(float val)
Определения StaminaHandler.c:1117
void SetRecoveryMultiplier(float val)
Определения StaminaHandler.c:1126
const float LOAD_DIFF_CAP_UPDATE_THRESHOLD
Определения StaminaHandler.c:267
void RecalculateStaminaCap()
Определения StaminaHandler.c:656
float m_StaminaRecoveryMultiplier
Определения StaminaHandler.c:280
int m_LastCommandTypeId
Определения StaminaHandler.c:308
float GetStaminaCap()
Определения StaminaHandler.c:1101
ref set< EStaminaMultiplierTypes > m_ActiveDepletionModifiers
Определения StaminaHandler.c:290
float GetSyncedStaminaCap()
Определения StaminaHandler.c:1106
void SyncAdditionalStaminaInfo(Param par)
Method to sync more info for stamina manager. Template parameter means it is very extendable for furt...
Определения StaminaHandler.c:842
ref StaminaModifiers m_StaminaModifiers
Определения StaminaHandler.c:298
void OnSyncJuncture(int pJunctureID, ParamsReadContext pCtx)
called from PlayerBase - syncs stamina values on server with client AND sets the value to match on se...
Определения StaminaHandler.c:672
void CheckStaminaState()
check if the stamina is completely depleted
Определения StaminaHandler.c:1015
float GetStaminaMax()
Определения StaminaHandler.c:1111
int m_LastStanceIdx
Определения StaminaHandler.c:310
void DeactivateRecoveryModifier(EStaminaMultiplierTypes type)
Определения StaminaHandler.c:445
void RegisterStaminaConsumers()
Определения StaminaHandler.c:866
float m_StaminaRecoveryMultiplierNext
Определения StaminaHandler.c:277
void ~StaminaHandler()
Определения StaminaHandler.c:366
bool HasEnoughStaminaFor(EStaminaConsumers consumer)
Определения StaminaHandler.c:1065
void StaminaHandler(PlayerBase player)
Определения StaminaHandler.c:321
bool m_Debug
Определения StaminaHandler.c:1274
const float STAMINA_GAIN_MODIFIER
Определения StaminaHandler.c:264
ref map< int, ref StaminaCooldownParams > m_CooldownMap
Определения StaminaHandler.c:305
float m_LastPlayerLoad
Определения StaminaHandler.c:300
bool m_InitUpdate
Определения StaminaHandler.c:269
PlayerBase m_Player
Определения StaminaHandler.c:285
void MarkLoadDirty()
Определения StaminaHandler.c:1259
float GetRecoveryMultiplier()
Определения StaminaHandler.c:1139
float GetStamina()
Определения StaminaHandler.c:1081
float m_StaminaSynced
Определения StaminaHandler.c:273
float m_StaminaDepletion
Определения StaminaHandler.c:278
bool m_IsStaminaGainBonusCached
Определения StaminaHandler.c:303
void OnRPC(float stamina, float stamina_cap, bool cooldown)
void ApplyExhaustion()
Определения StaminaHandler.c:988
float GetSyncedStamina()
Определения StaminaHandler.c:1091
float CalcStaminaGainBonus()
Calulates stamina regain bonus coef based on current stamina cap and level and caches it during one U...
Определения StaminaHandler.c:966
float m_StaminaCap
Определения StaminaHandler.c:274
bool m_MovementStateChanged
Определения StaminaHandler.c:311
ref set< EStaminaMultiplierTypes > m_ActiveRecoveryModifiers
Определения StaminaHandler.c:293
const float STAMINA_GAIN_THRESHOLD
Определения StaminaHandler.c:263
ref Param3< float, float, bool > m_StaminaParams
Определения StaminaHandler.c:282
void RecalculateDepletionMultiplier()
Определения StaminaHandler.c:419
bool HasMovementStateChanged()
Определения StaminaHandler.c:471
void StaminaProcessor_Move(HumanMovementState pHumanMovementState)
Определения StaminaHandler.c:711
float GetStaminaNormalized()
Определения StaminaHandler.c:1086
float GetSyncedStaminaNormalized()
Определения StaminaHandler.c:1096
void SyncStaminaEx()
stamina sync - server part
Определения StaminaHandler.c:825
void ProcessStaminaChanges(float deltaT, bool isServerOrSingleplayer)
Определения StaminaHandler.c:614
void DeactivateDepletionModifier(EStaminaMultiplierTypes type)
Определения StaminaHandler.c:409
void ObtainMove(PlayerBaseMove move)
Определения StaminaHandler.c:1231
float m_StaminaDelta
Определения StaminaHandler.c:271
float m_Time
Определения StaminaHandler.c:281
const float LOAD_DIFF_UPDATE_THRESHOLD
Определения StaminaHandler.c:266
float m_PlayerLoad
Определения StaminaHandler.c:270
bool m_StaminaDepleted
Определения StaminaHandler.c:287
float m_CachedStaminaGainBonus
Определения StaminaHandler.c:302
float m_Stamina
Определения StaminaHandler.c:272
bool HasEnoughStaminaToStart(EStaminaConsumers consumer)
Определения StaminaHandler.c:1070
void ProcessMovementState()
Определения StaminaHandler.c:588
void SetCooldown(float time, int modifier=-1)
set cooldown timer between each consume of stamina
Определения StaminaHandler.c:1034
void SetStamina(float stamina_value)
Определения StaminaHandler.c:1075
void ReadAdditionalStaminaInfo(ParamsReadContext pCtx)
Order of read parameters must match the order of writing above.
Определения StaminaHandler.c:853
void ObtainState(PlayerBaseOwnerState state)
Определения StaminaHandler.c:1226
void RewindState(PlayerBaseOwnerState state, PlayerBaseMove move)
Определения StaminaHandler.c:1236
bool m_IsInCooldown
Определения StaminaHandler.c:295
ref StaminaConsumers m_StaminaConsumers
Определения StaminaHandler.c:297
void ActivateDepletionModifier(EStaminaMultiplierTypes type)
Определения StaminaHandler.c:396
SHumanCommandMoveSettings m_HumanMoveSettings
Определения StaminaHandler.c:284
void ResetCooldown(int modifier=-1)
Определения StaminaHandler.c:1047
void SyncStamina(float stamina, float stamina_cap, bool cooldown)
stamina sync - server part
Определения StaminaHandler.c:831
ref map< EStaminaMultiplierTypes, float > m_RegisteredRecoveryModifiers
Определения StaminaHandler.c:292
void ActivateRecoveryModifier(EStaminaMultiplierTypes type)
Определения StaminaHandler.c:432
ref map< EStaminaMultiplierTypes, float > m_RegisteredDepletionModifiers
Определения StaminaHandler.c:289
void Update(float deltaT, int pCurrentCommandID)
Определения StaminaHandler.c:489
override float GetStartTimeAdjustment()
Определения StaminaHandler.c:188
float GetExponent()
Определения StaminaHandler.c:185
override float GetCooldown()
Определения StaminaHandler.c:187
float GetMultiplier()
Определения StaminaHandler.c:186
float GetBaseValue()
Определения StaminaHandler.c:184
override float GetDuration()
Определения StaminaHandler.c:189
void SetData(SMDataExponential data)
Определения StaminaHandler.c:192
override float GetDurationAdjusted()
Определения StaminaHandler.c:190
ref SMDataExponential m_SMDataEx
Определения StaminaHandler.c:182
static const float STAMINA_RECOVERY_MULTIPLIER
Определения VomitState.c:4
static const float STAMINA_DEPLETION_MULTIPLIER
Определения VomitState.c:3
Определения VomitState.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения Transport.c:70
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1084
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
Serializer ParamsReadContext
Определения gameplay.c:15
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
enum ShapeType ErrorEx
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
void Obsolete(string msg="")
Определения EnScript.c:371
static proto float Max(float x, float y)
Returns bigger of two given values.
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static proto float Min(float x, float y)
Returns smaller of two given values.
static proto float RandomFloat(float min, float max)
Returns a random float number between and min[inclusive] and max[exclusive].
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static proto float Pow(float v, float power)
Return power of v ^ power.
static proto float AbsFloat(float f)
Returns absolute value.
const float STAMINA_DRAIN_CLIMB
Определения 3_Game/DayZ/constants.c:715
const float STAMINA_HOLD_BREATH_THRESHOLD_DRAIN
Определения 3_Game/DayZ/constants.c:735
const float STAMINA_DRAIN_MELEE_LIGHT
Определения 3_Game/DayZ/constants.c:716
const float STAMINA_KG_TO_GRAMS
in grams (weight where the player is not penalized by stamina)
Определения 3_Game/DayZ/constants.c:747
const float STAMINA_ROLL_THRESHOLD
Определения 3_Game/DayZ/constants.c:739
const float STAMINA_CLIMB_THRESHOLD
Определения 3_Game/DayZ/constants.c:738
const float STAMINA_DRAIN_MELEE_HEAVY
Определения 3_Game/DayZ/constants.c:717
const int STAMINA_GAIN_IDLE_PER_SEC
Определения 3_Game/DayZ/constants.c:726
const float STAMINA_GAIN_BONUS_CAP
Определения 3_Game/DayZ/constants.c:730
const float STAMINA_JUMP_THRESHOLD
Определения 3_Game/DayZ/constants.c:736
const float STAMINA_REGEN_COOLDOWN_EXHAUSTION
Определения 3_Game/DayZ/constants.c:745
const int STAMINA_DRAIN_SWIM_FAST_PER_SEC
Определения 3_Game/DayZ/constants.c:708
const int STAMINA_GAIN_WALK_PER_SEC
Определения 3_Game/DayZ/constants.c:725
const int STAMINA_GAIN_JOG_PER_SEC
Определения 3_Game/DayZ/constants.c:724
const float STAMINA_VAULT_THRESHOLD
Определения 3_Game/DayZ/constants.c:737
const float STAMINA_MELEE_EVADE_THRESHOLD
Определения 3_Game/DayZ/constants.c:743
const float STAMINA_HOLD_BREATH_THRESHOLD_ACTIVATE
Определения 3_Game/DayZ/constants.c:734
const float STAMINA_MELEE_HEAVY_THRESHOLD
Определения 3_Game/DayZ/constants.c:742
const int STAMINA_GAIN_ROLL_PER_SEC
Определения 3_Game/DayZ/constants.c:729
const float STAMINA_DRAIN_JUMP
Определения 3_Game/DayZ/constants.c:713
const float STAMINA_DRAIN_ROLL
Определения 3_Game/DayZ/constants.c:719
const float STAMINA_DRAIN_MELEE_EVADE
Определения 3_Game/DayZ/constants.c:718
const float STAMINA_REGEN_COOLDOWN_DEPLETION
Определения 3_Game/DayZ/constants.c:744
const int STAMINA_DRAIN_STANDING_SPRINT_PER_SEC
Определения 3_Game/DayZ/constants.c:705
const int STAMINA_DRAIN_CROUCHED_SPRINT_PER_SEC
Определения 3_Game/DayZ/constants.c:706
const int STAMINA_DRAIN_LADDER_FAST_PER_SEC
Определения 3_Game/DayZ/constants.c:709
const float STAMINA_DRAIN_VAULT
Определения 3_Game/DayZ/constants.c:714
const int STAMINA_GAIN_SWIM_PER_SEC
Определения 3_Game/DayZ/constants.c:727
const int STAMINA_GAIN_LADDER_PER_SEC
Определения 3_Game/DayZ/constants.c:728
const float STAMINA_SYNC_RATE
Определения 3_Game/DayZ/constants.c:748
float GetRunTime()
Определения 3_Game/DayZ/tools/tools.c:323
float GetDuration()
Определения 3_Game/DayZ/tools/tools.c:313
proto native volatile void Update()
Определения PlayerSoundManager.c:125
proto native int GetState()
returns one of STATE_...
Определения StaminaHandler.c:31
class HumanCommandWeapons HumanCommandAdditives()
Определения human.c:1154
class SHumanGlobalSettings SHumanCommandMoveSettings()
Определения humansettings.c:12