Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
modifiersmanager.c
Go to the documentation of this file.
1//max 32 synced modifiers supported
3{
6 MODIFIER_SYNC_CONTAMINATION = 0x00000004,//stage1
7 MODIFIER_SYNC_CONTAMINATION2 = 0x00000008,//stage2 and stage3 share the same sync id
10 MODIFIER_SYNC_FEVER = 0x00000040,
11 //0x00000080,
12 //0x00000100,
13 //0x00000200,
14 //0x00000400,
15 //0x00000800,
16 //0x00001000,
18}
19
20enum EActivationType
21{
24 TRIGGER_EVENT_ON_CONNECT
25}
26
31
33{
34 string m_Name;
35 int m_ID;
36 bool m_IsActive;
37 bool m_IsLocked;
38
39 void ModifierDebugObj(int id, string name, bool active, bool locked)
40 {
41 m_Name = name;
42 m_ID = id;
43 m_IsActive = active;
44 m_IsLocked = locked;
45 }
46
47 string GetName()
48 {
49 return m_Name;
50 }
51
52 int GetID()
53 {
54 return m_ID;
55 }
56
57 bool IsActive()
58 {
59 return m_IsActive;
60 }
61
62 bool IsLocked()
63 {
64 return m_IsLocked;
65 }
66}
67
69{
70 const int STORAGE_VERSION = 121;
71
73
75
79
89
90 void Init()
91 {
92 #ifdef DEVELOPER
94 #endif
119 AddModifier(new WetMdfr);
123 AddModifier(new BreathVapourMdfr);
125 AddModifier(new WoundInfectStage1Mdfr);
141 AddModifier(new HeavyMetalPhase1Mdfr);
143 AddModifier(new HeavyMetalPhase3Mdfr);
146 }
147
148 void SetModifiers(bool enable)
149 {
150 if (m_AllowModifierTick == enable)
151 return;
152
153 m_AllowModifierTick = enable;
154
155 #ifdef DIAG_DEVELOPER
156 #ifndef SERVER
157 DiagMenu.SetValue(DiagMenuIDs.CHEATS_MODIFIERS, enable);
158 #endif
159 #endif
160
161 if (!enable)
162 {
163 for (int i = 0; i < m_ModifierList.Count(); i++)
164 {
165 m_ModifierList.GetElement(i).ResetLastTickTime();
166 }
167 }
168 }
169
171 {
172 return STORAGE_VERSION;
173 }
174
176 {
177 return m_AllowModifierTick;
178 }
179
181 {
182 modifier.InitBase(m_Player, this);
183 int id = modifier.GetModifierID();
184
185 if (id < 1)
186 ErrorEx("modifiers ID must be 1 or higher(for debugging reasons)", ErrorExSeverity.WARNING);
187
188 if (m_ModifierListArray.Find(modifier) == -1)
189 {
190 m_ModifierList.Insert(id, modifier);
191 m_ModifierListArray.Insert(modifier);
192 }
193 else
194 {
195 ErrorEx(string.Format("Modifier '%1' is already registered", modifier.GetName()), ErrorExSeverity.WARNING);
196 }
197 }
198
199 bool IsModifierActive(eModifiers modifier_id)
200 {
201 return m_ModifierList.Get(modifier_id).IsActive();
202 }
203
204 void OnScheduledTick(float delta_time)
205 {
207 return;
208
209 foreach (ModifierBase modifier : m_ModifierListArray)
210 modifier.Tick(delta_time);
211 }
212
214 {
215 foreach (ModifierBase modifier : m_ModifierList)
216 modifier.Deactivate();
217 }
218
219 void ActivateModifier(int modifier_id, bool triggerEvent = EActivationType.TRIGGER_EVENT_ON_ACTIVATION)
220 {
221 m_ModifierList.Get(modifier_id).ActivateRequest(triggerEvent);
222 }
223
224 void DeactivateModifier(int modifier_id, bool triggerEvent = true)
225 {
226 m_ModifierList.Get(modifier_id).Deactivate(triggerEvent);
227 }
228
230 {
231 CachedObjectsArrays.ARRAY_INT.Clear();
232
233 int modifierCount;
234 foreach (ModifierBase modifier : m_ModifierList)
235 {
236 if (modifier.IsActive() && modifier.IsPersistent())
237 {
238 modifierCount++;
239 //save the modifier id
240 CachedObjectsArrays.ARRAY_INT.Insert(modifier.GetModifierID());
241 if (modifier.IsTrackAttachedTime())
242 {
243 //save the overall attached time
244 CachedObjectsArrays.ARRAY_INT.Insert(modifier.GetAttachedTime());
245 }
246 }
247 }
248
249 ctx.Write(modifierCount);
250
251 //write the individual modifiers and respective attached times
252 for (int i = 0; i < CachedObjectsArrays.ARRAY_INT.Count(); i++)
253 {
254 int item = CachedObjectsArrays.ARRAY_INT.Get(i);
255 ctx.Write(item);
256 }
257
258 for (int z = 0; z < m_ParamList.Count(); z++)
259 {
260 m_ParamList.Get(z).Serialize(ctx);
261 }
262
263 }
264
265 bool OnStoreLoad(ParamsReadContext ctx, int version)
266 {
267 int modifierCount;
268 if (!ctx.Read(modifierCount))
269 return false;
270
271 for (int i = 0; i < modifierCount; i++)
272 {
273 int modifierId;
274 if (!ctx.Read(modifierId))
275 return false;
276
277 ModifierBase modifier = GetModifier(modifierId);
278 if (modifier)
279 {
280 if (modifier.IsTrackAttachedTime())
281 {
282 int time;
283 if (!ctx.Read(time))//get the attached time
284 return false;
285
286 modifier.SetAttachedTime(time);
287 }
288
289 ActivateModifier(modifierId, EActivationType.TRIGGER_EVENT_ON_CONNECT);
290 }
291 else
292 {
293 Debug.LogError("DB loading: non-existent modifier with id:"+modifierId.ToString());
294 }
295 }
296
297 for (int x = 0; x < m_ParamList.Count(); x++)
298 {
299 if (!m_ParamList.Get(x).Deserializer(ctx))
300 return false;
301 }
302
303 return true;
304 }
305
306 ModifierBase GetModifier(int modifier_id)
307 {
308 return m_ModifierList.Get(modifier_id);
309 }
310
312 {
313 return m_Player;
314 }
315
316 void SetModifierLock(int modifier_id, bool state)
317 {
318 m_ModifierList.Get(modifier_id).SetLock(state);
319 }
320
321 bool GetModifierLock(int modifier_id)
322 {
323 return m_ModifierList.Get(modifier_id).IsLocked();
324 }
325
327 {
328 modifiers.Clear();
329 for (int i = 1;i < eModifiers.COUNT; i++)
330 {
331 if (m_ModifierList.Contains(i))
332 {
333 ModifierBase modifier = m_ModifierList.Get(i);
334
335 int modifierId = modifier.GetModifierID();
336 bool isLocked = modifier.IsLocked();
337 bool active = modifier.IsActive();
338
339 string modifierName = modifier.GetName();
340 string debugText = modifier.GetDebugTextSimple();
341
342 if (active && debugText != "")
343 modifierName += " | " + debugText;
344
345 ModifierDebugObj obj = new ModifierDebugObj(modifierId, modifierName, active, isLocked);
346
347 modifiers.Insert(obj);
348 }
349 }
350 }
351
352 void ResetAll()
353 {
354 bool hasAreaExposureModifier = IsModifierActive(eModifiers.MDF_AREAEXPOSURE);
355 bool hasMaksModifier = IsModifierActive(eModifiers.MDF_MASK);
356
358
359 if (hasAreaExposureModifier)
360 ActivateModifier(eModifiers.MDF_AREAEXPOSURE);
361
362 if (hasMaksModifier)
364 }
365}
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
Definition debug.c:2
Definition mask.c:2
Serialization general interface. Serializer API works with:
Definition serializer.c:56
Definition wet.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
override Widget Init()
Definition dayzgame.c:127
DiagMenuIDs
Definition ediagmenuids.c:2
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
ErrorExSeverity
Definition endebug.c:62
enum ShapeType ErrorEx
DayZPlayer m_Player
Definition hand_events.c:42
void SetModifiers()
Icon x
bool m_IsLocked
bool m_IsActive
PlayerBase GetPlayer()
void OnStoreSave(ParamsWriteContext ctx)
bool m_AllowModifierTick
int GetStorageVersion()
void DeactivateModifier(int modifier_id, bool triggerEvent=true)
ModifierBase GetModifier(int modifier_id)
void DeactivateAllModifiers()
bool IsModifiersEnable()
eModifierSyncIDs
@ MODIFIER_SYNC_FEVER
@ MODIFIER_SYNC_CONTAMINATION2
@ MODIFIER_SYNC_WOUND_INFECT_1
@ LAST_INDEX
@ MODIFIER_SYNC_ZONE_EXPOSURE
@ MODIFIER_SYNC_WOUND_INFECT_2
@ MODIFIER_SYNC_DROWNING
@ MODIFIER_SYNC_CONTAMINATION
enum eModifierSyncIDs TRIGGER_EVENT_OFF
void ActivateModifier(int modifier_id, bool triggerEvent=EActivationType.TRIGGER_EVENT_ON_ACTIVATION)
void DbgGetModifiers(array< ref ModifierDebugObj > modifiers)
bool GetModifierLock(int modifier_id)
class ModifierDebugObj STORAGE_VERSION
const int DEFAULT_TICK_TIME_INACTIVE
bool OnStoreLoad(ParamsReadContext ctx, int version)
void ModifiersManager(PlayerBase player)
const int DEFAULT_TICK_TIME_ACTIVE_SHORT
void AddModifier(ModifierBase modifier)
void SetModifierLock(int modifier_id, bool state)
ref array< ref Param > m_ParamList
void ResetAll()
ref map< int, ref ModifierBase > m_ModifierList
ref array< ref ModifierBase > m_ModifierListArray
enum eModifierSyncIDs DEFAULT_TICK_TIME_ACTIVE
enum eModifierSyncIDs TRIGGER_EVENT_ON_ACTIVATION
const int DEFAULT_TICK_TIME_INACTIVE_LONG
void OnScheduledTick()
class SyncedValue m_Name