Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
mask.c
Go to the documentation of this file.
2{
3 const float IN_AREA_CONSUME_FILTER_QUANTITY_PER_SEC = 0.3;
4 const float OUT_AREA_CONSUME_FILTER_QUANTITY_PER_SEC = 0.03;
5
6 const float STAMINA_RECOVERY_MODIFIER = 0.5;
7 const float STAMINA_DEPLETION_MODIFIER = 1.25;
8
9 const float LOW_FILTER_SOUND_EVENT_MIN = 3;
10 const float LOW_FILTER_SOUND_EVENT_MAX = 9;
11
12 const float LOW_FILTER_SOUND_THRESHOLD = 0.2;//[0..1] , what's the filter quantity between 0 and 1 at which low filter sounds begin playing ?
13
14 float m_SoundTimeAccu1;
15 float m_NextSoundEventTime;
16
17 override void Init()
18 {
21 m_ID = eModifiers.MDF_MASK;
24 }
25
26 override bool ActivateCondition(PlayerBase player)
27 {
28 return MaskBase.Cast(player.GetInventory().FindAttachment(InventorySlots.MASK)) != null;
29 }
30
31 override bool DeactivateCondition(PlayerBase player)
32 {
33 return !ActivateCondition( player);
34 }
35
36 override void OnTick(PlayerBase player, float deltaT)
37 {
38 MaskBase mask = MaskBase.Cast(player.GetInventory().FindAttachment(InventorySlots.MASK));
39
40 float consume_quantity = OUT_AREA_CONSUME_FILTER_QUANTITY_PER_SEC;
41
42 bool inside_area = m_Manager.IsModifierActive(eModifiers.MDF_AREAEXPOSURE);
43
44 if(inside_area)
45 {
46 consume_quantity = IN_AREA_CONSUME_FILTER_QUANTITY_PER_SEC;
47 }
48
49 if ( mask && !mask.IsDamageDestroyed())
50 {
51 bool consuming_filter = mask.ConsumeQuantity(consume_quantity * deltaT, player);
52 StaminaSoundHandlerServer.Cast(player.GetPlayerSoundManagerServer().GetHandler(eSoundHandlers.STAMINA)).SetStaminaZoneOffset(1);
53
54 if (mask.HasValidFilter())
55 {
56 player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.MASK);
57 player.GetStaminaHandler().ActivateDepletionModifier(EStaminaMultiplierTypes.MASK);
58
59 }
60 else
61 {
62 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.MASK);
63 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.MASK);
64 }
65 HandleSounds(player, deltaT, mask);
66 }
67 }
68
69 void HandleSounds(PlayerBase player, float deltaT, MaskBase mask)
70 {
71 float filter_quantity_01 = mask.GetFilterQuantity01();
72
73 if(mask.CanHaveExternalFilter() && !mask.IsExternalFilterAttached())
74 return;
75
76 if(filter_quantity_01 > LOW_FILTER_SOUND_THRESHOLD)
77 return;
78
79 float low_quantity_norm = Math.InverseLerp(0, LOW_FILTER_SOUND_THRESHOLD, filter_quantity_01);//should give us 0..1 based on normalized quantity between 0 and LOW_FILTER_SOUND_THRESHOLD
80
81 m_SoundTimeAccu1 += deltaT;
82 if( m_SoundTimeAccu1 >= m_NextSoundEventTime)
83 {
84 m_NextSoundEventTime = Math.Lerp(LOW_FILTER_SOUND_EVENT_MIN, LOW_FILTER_SOUND_EVENT_MAX,low_quantity_norm);
85
86 EPlayerSoundEventID event_type = EPlayerSoundEventID.STAMINA_LOW_FILTER_UPPER;
87 //under 50% of low filter quantity (not overall filter quantity!!)
88 if (low_quantity_norm < 0.5)
89 {
90 event_type = EPlayerSoundEventID.STAMINA_LOW_FILTER_MID;
91 }
92 if (low_quantity_norm < 0.25)
93 {
94 event_type = EPlayerSoundEventID.STAMINA_LOW_FILTER_LOWER;
95 }
96 player.RequestSoundEventEx(event_type, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
97 m_SoundTimeAccu1 = 0;
98 }
99 }
100
101 override void OnReconnect(PlayerBase player)
102 {
103 OnActivate(player);
104 }
105
106 override void OnActivate(PlayerBase player)
107 {
108 //m_NextSoundEventTime = Math.RandomFloat(LOW_FILTER_SOUND_EVENT_MIN, LOW_FILTER_SOUND_EVENT_MAX);
109 }
110
111 override void OnDeactivate(PlayerBase player)
112 {
113 StaminaSoundHandlerServer.Cast(player.GetPlayerSoundManagerServer().GetHandler(eSoundHandlers.STAMINA)).SetStaminaZoneOffset(0);
114 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.MASK);
115 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.MASK);
116 }
117
118
119
120};
provides access to slot configuration
Definition mask.c:2
Definition enmath.c:7
int m_ID
ID of effect, given by SEffectManager when registered (automatically done when playing through it)
Definition effect.c:51
eModifiers
Definition emodifiers.c:2
bool m_TrackActivatedTime
overall time this modifier was active
ModifiersManager m_Manager
bool m_AnalyticsStatsEnabled
float m_TickIntervalActive
float m_TickIntervalInactive
const int DEFAULT_TICK_TIME_INACTIVE
const int DEFAULT_TICK_TIME_ACTIVE_SHORT
eSoundHandlers
EStaminaMultiplierTypes
void OnActivate()