DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Mask.c
См. документацию.
2{
5
6 const float STAMINA_RECOVERY_MODIFIER = 0.5;
7 const float STAMINA_DEPLETION_MODIFIER = 1.25;
8
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
16
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 {
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;
83 {
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);
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};
int m_ID
ID of effect, given by SEffectManager when registered (automatically done when playing through it)
Определения Effect.c:49
bool m_TrackActivatedTime
overall time this modifier was active
Определения ModifierBase.c:14
ModifiersManager m_Manager
Определения ModifierBase.c:11
bool m_AnalyticsStatsEnabled
Определения ModifierBase.c:31
float m_TickIntervalActive
Определения ModifierBase.c:18
float m_TickIntervalInactive
Определения ModifierBase.c:17
const int DEFAULT_TICK_TIME_INACTIVE
Определения ModifiersManager.c:29
const int DEFAULT_TICK_TIME_ACTIVE_SHORT
Определения ModifiersManager.c:28
EPlayerSoundEventID
Определения PlayerSoundEventHandler.c:3
eSoundHandlers
Определения PlayerSoundManager.c:5
EStaminaMultiplierTypes
Определения StaminaHandler.c:2
void OnActivate()
Определения Trap_LandMine.c:67
provides access to slot configuration
Определения InventorySlots.c:6
Определения AirborneMask.c:2
const float STAMINA_RECOVERY_MODIFIER
Определения Mask.c:6
override void Init()
Определения Mask.c:17
const float LOW_FILTER_SOUND_EVENT_MAX
Определения Mask.c:10
const float LOW_FILTER_SOUND_THRESHOLD
Определения Mask.c:12
override bool ActivateCondition(PlayerBase player)
Определения Mask.c:26
void HandleSounds(PlayerBase player, float deltaT, MaskBase mask)
Определения Mask.c:69
float m_SoundTimeAccu1
Определения Mask.c:14
override void OnTick(PlayerBase player, float deltaT)
Определения Mask.c:36
override void OnDeactivate(PlayerBase player)
Определения Mask.c:111
override bool DeactivateCondition(PlayerBase player)
Определения Mask.c:31
const float OUT_AREA_CONSUME_FILTER_QUANTITY_PER_SEC
Определения Mask.c:4
const float IN_AREA_CONSUME_FILTER_QUANTITY_PER_SEC
Определения Mask.c:3
override void OnActivate(PlayerBase player)
Определения Mask.c:106
const float LOW_FILTER_SOUND_EVENT_MIN
Определения Mask.c:9
override void OnReconnect(PlayerBase player)
Определения Mask.c:101
float m_NextSoundEventTime
Определения Mask.c:15
const float STAMINA_DEPLETION_MODIFIER
Определения Mask.c:7
Определения Mask.c:2
Определения EnMath.c:7
Определения BreathVapourMdfr.c:4
Определения PlayerBaseClient.c:2
eModifiers
Определения eModifiers.c:2
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...