DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
HeavyMetal.c
См. документацию.
2{
3 static const float WATER_LOSS_HEAVYMETAL_MIN = 0.3;
4 static const float WATER_LOSS_HEAVYMETAL_MAX = 0.8;
5
6 static const float HEALTH_LOSS_HEAVYMETAL_MIN = 0.03;
7 static const float HEALTH_LOSS_HEAVYMETAL_MAX = 0.05;
8
9 static const int SYMPTOMFALLOFF_THRESHOLD1 = 200;
10 static const int SYMPTOMFALLOFF_THRESHOLD2 = 300;
11 static const int SYMPTOMFALLOFF_THRESHOLD3 = 400;
12
13 protected float m_NextEvent;
14 protected float m_Time;
15
16 protected float m_DeafnessTime;
17 protected bool m_IsDeaf;
18
28}
29
30class HeavyMetalPhase1Mdfr : HeavyMetalMdfr
31{
32 static const int AGENT_THRESHOLD_ACTIVATE = 1;
33 static const int AGENT_THRESHOLD_DEACTIVATE = 200;
34
35 static const int SHIVER_EVENT_INTERVAL_MIN = 20;
36 static const int SHIVER_EVENT_INTERVAL_MAX = 40;
37
38 override string GetDebugText()
39 {
40 return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
41 }
42
43 override protected bool ActivateCondition(PlayerBase player)
44 {
45 return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) >= AGENT_THRESHOLD_ACTIVATE && player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_DEACTIVATE);
46 }
47
48 override protected bool DeactivateCondition(PlayerBase player)
49 {
50 return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_ACTIVATE || player.GetSingleAgentCount(eAgents.HEAVYMETAL) > AGENT_THRESHOLD_DEACTIVATE);
51 }
52
53 override protected void OnTick(PlayerBase player, float deltaT)
54 {
55 if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
56 {
57 float waterLoss = (deltaT * (WATER_LOSS_HEAVYMETAL_MAX * Math.Max(WATER_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL))));
58 player.GetStatWater().Add(-waterLoss);
59 }
60
61 m_Time += deltaT;
62
63 if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD2)
64 {
65 player.m_AgentPool.AddAgent(eAgents.HEAVYMETAL, -0.5);
66 }
67
68 if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
69 {
70 if ( m_Time >= m_NextEvent )
71 {
72 player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_HAND_SHIVER);
73 m_Time = 0;
74
76 }
77 }
78 }
79}
80
82{
83 static const int AGENT_THRESHOLD_ACTIVATE = 200;
84 static const int AGENT_THRESHOLD_DEACTIVATE = 400;
85
86 static const int PAIN_EVENT_INTERVAL_MIN = 20;
87 static const int PAIN_EVENT_INTERVAL_MAX = 40;
88
89 static const int DEAFNESS_INTERVAL = 3;
90
91 override void Init()
92 {
93 super.Init();
94
95 m_ID = eModifiers.MDF_HEAVYMETAL2;
96 }
97
98 override string GetDebugText()
99 {
100 return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
101 }
102
103 override protected bool ActivateCondition(PlayerBase player)
104 {
105 return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) >= AGENT_THRESHOLD_ACTIVATE && player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_DEACTIVATE);
106 }
107
108 override protected bool DeactivateCondition(PlayerBase player)
109 {
110 return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_ACTIVATE || player.GetSingleAgentCount(eAgents.HEAVYMETAL) > AGENT_THRESHOLD_DEACTIVATE);
111 }
112
113 override protected void OnDeactivate(PlayerBase player)
114 {
115 DoOnce.Clear(ClassName());
116 player.DecreaseDiseaseCount();
117 }
118
119 override protected void OnTick(PlayerBase player, float deltaT)
120 {
121 m_Time += deltaT;
122
123 if (m_IsDeaf)
124 {
125 m_DeafnessTime += deltaT;
126 }
127
128 if (m_Time >= m_NextEvent)
129 {
130 if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) >= SYMPTOMFALLOFF_THRESHOLD1)
131 {
132 player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_PAIN_LIGHT);
133 m_Time = 0;
134
136 }
137 }
138
139 float chanceOfDeafness = player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL);
140 if (Math.RandomFloat01() < chanceOfDeafness / Math.RandomInt(5, 10))
141 {
142 DoOnce.Run(ClassName(), player, "IncreaseDiseaseCount");
143 player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
144 m_Time = 0;
145 m_DeafnessTime = 0;
146 m_IsDeaf = true;
147
149 }
150
151 if (m_IsDeaf && m_DeafnessTime > DEAFNESS_INTERVAL + player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL)*0.6)
152 {
153 player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
154 m_IsDeaf = false;
155 }
156
157 if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3 && eAgents.HEAVYMETAL >= SYMPTOMFALLOFF_THRESHOLD1)
158 {
159 float waterLoss = (deltaT * (WATER_LOSS_HEAVYMETAL_MAX * Math.Max(WATER_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL))));
160 player.GetStatWater().Add(-waterLoss);
161 }
162
163 if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
164 {
165 player.m_AgentPool.AddAgent(eAgents.HEAVYMETAL, -0.5);
166 }
167 }
168}
169
170class HeavyMetalPhase3Mdfr : HeavyMetalMdfr
171{
172 static const int AGENT_THRESHOLD_ACTIVATE = 400;
173 static const int AGENT_THRESHOLD_DEACTIVATE = 600;
174
175 static const int VOMIT_EVENT_INTERVAL_MIN = 180;
176 static const int VOMIT_EVENT_INTERVAL_MAX = 360;
177
178 override void Init()
179 {
180 super.Init();
181
182 m_ID = eModifiers.MDF_HEAVYMETAL3;
183 }
184
185 override string GetDebugText()
186 {
187 return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
188 }
189
190 override protected bool ActivateCondition(PlayerBase player)
191 {
192 return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) >= AGENT_THRESHOLD_ACTIVATE && player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_DEACTIVATE);
193 }
194
195 override protected bool DeactivateCondition(PlayerBase player)
196 {
197 return player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_ACTIVATE;
198 }
199
200 override protected void OnActivate(PlayerBase player)
201 {
202 super.OnActivate(player);
203
204 player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
205 player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_HMP_SEVERE);
206 }
207
208 override protected void OnDeactivate(PlayerBase player)
209 {
210 super.OnDeactivate(player);
211
212 player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
213 player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_HMP_SEVERE);
214 }
215
216 override protected void OnTick(PlayerBase player, float deltaT)
217 {
218 float healthLoss = (deltaT * (HEALTH_LOSS_HEAVYMETAL_MAX * Math.Max(HEALTH_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL))));
219 player.AddHealth(-healthLoss);
220
221 m_Time += deltaT;
222
223 if (m_Time >= m_NextEvent)
224 {
225 SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_VOMIT);
226 if (symptom)
227 {
228 CachedObjectsParams.PARAM1_FLOAT.param1 = 30.0; //percentage of stomach
229 symptom.SetParam(CachedObjectsParams.PARAM1_FLOAT);
230 }
231
232 m_Time = 0;
233 m_NextEvent = Math.RandomFloatInclusive( VOMIT_EVENT_INTERVAL_MIN, VOMIT_EVENT_INTERVAL_MAX );
234 }
235 }
236}
void OnDeactivate()
Определения BunkerBroadcastComponent.c:239
int m_ID
Определения DustKickupEffects.c:26
eAgents
Определения EAgents.c:3
static const int VOMIT_EVENT_INTERVAL_MAX
Определения HeavyMetal.c:176
static const int VOMIT_EVENT_INTERVAL_MIN
Определения HeavyMetal.c:175
static const int SHIVER_EVENT_INTERVAL_MIN
Определения HeavyMetal.c:35
HeavyMetalMdfr AGENT_THRESHOLD_ACTIVATE
static const int AGENT_THRESHOLD_DEACTIVATE
Определения HeavyMetal.c:33
static const int SHIVER_EVENT_INTERVAL_MAX
Определения HeavyMetal.c:36
bool m_TrackActivatedTime
overall time this modifier was active
Определения ModifierBase.c:14
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
enum eModifierSyncIDs DEFAULT_TICK_TIME_ACTIVE
void OnActivate()
Определения Trap_LandMine.c:67
float m_NextEvent
Определения WoundInfection.c:21
float m_Time
Определения WoundInfection.c:22
static void Clear(string key)
Определения DoOnce.c:37
static bool Run(string key, Class target, string fnName, Param params=null)
Определения DoOnce.c:12
Определения DoOnce.c:2
static const float HEALTH_LOSS_HEAVYMETAL_MAX
Определения HeavyMetal.c:7
static const int SYMPTOMFALLOFF_THRESHOLD3
Определения HeavyMetal.c:11
bool m_IsDeaf
Определения HeavyMetal.c:17
static const float HEALTH_LOSS_HEAVYMETAL_MIN
Определения HeavyMetal.c:6
override void Init()
Определения HeavyMetal.c:19
static const float WATER_LOSS_HEAVYMETAL_MIN
Определения HeavyMetal.c:3
static const float WATER_LOSS_HEAVYMETAL_MAX
Определения HeavyMetal.c:4
static const int SYMPTOMFALLOFF_THRESHOLD1
Определения HeavyMetal.c:9
static const int SYMPTOMFALLOFF_THRESHOLD2
Определения HeavyMetal.c:10
float m_Time
Определения HeavyMetal.c:14
float m_NextEvent
Определения HeavyMetal.c:13
float m_DeafnessTime
Определения HeavyMetal.c:16
Определения HeavyMetal.c:2
static const int PAIN_EVENT_INTERVAL_MIN
Определения HeavyMetal.c:86
override void Init()
Определения HeavyMetal.c:91
void OnTick(PlayerBase player, float deltaT)
Определения HeavyMetal.c:119
void OnDeactivate(PlayerBase player)
Определения HeavyMetal.c:113
static const int AGENT_THRESHOLD_DEACTIVATE
Определения HeavyMetal.c:84
static const int PAIN_EVENT_INTERVAL_MAX
Определения HeavyMetal.c:87
static const int DEAFNESS_INTERVAL
Определения HeavyMetal.c:89
bool DeactivateCondition(PlayerBase player)
Определения HeavyMetal.c:108
bool ActivateCondition(PlayerBase player)
Определения HeavyMetal.c:103
override string GetDebugText()
Определения HeavyMetal.c:98
static const int AGENT_THRESHOLD_ACTIVATE
Определения HeavyMetal.c:83
Определения EnMath.c:7
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
Определения PlayerBaseClient.c:2
void SetParam(Param p)
Определения StateBase.c:105
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 Max(float x, float y)
Returns bigger of two given values.
static float RandomFloatInclusive(float min, float max)
Returns a random float number between and min [inclusive] and max [inclusive].
Определения EnMath.c:106
static proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].