DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ModifiersManager.c
Go to the documentation of this file.
1//max 32 synced modifiers supported
3{
4
7 MODIFIER_SYNC_CONTAMINATION = 0x00000004,//stage1
8 MODIFIER_SYNC_CONTAMINATION2 = 0x00000008,//stage2 and stage3 share the same sync id
11 MODIFIER_SYNC_FEVER = 0x00000040,
12 //0x00000080,
13 //0x00000100,
14 //0x00000200,
15 //0x00000400,
16 //0x00000800,
17 //0x00001000,
19};
20
21
22
23
25
29};
30
35
37{
38 string m_Name;
39 int m_ID;
42
43 void ModifierDebugObj(int id, string name, bool active, bool locked)
44 {
45 m_Name = name;
46 m_ID = id;
47 m_IsActive = active;
48 m_IsLocked = locked;
49 }
50
51 string GetName()
52 {
53 return m_Name;
54 }
55
56 int GetID()
57 {
58 return m_ID;
59 }
60
61 bool IsActive()
62 {
63 return m_IsActive;
64 }
65
66 bool IsLocked()
67 {
68 return m_IsLocked;
69 }
70}
71
73{
78 bool m_AllowModifierTick = false;
79 const int STORAGE_VERSION = 121;
81 {
84 m_Player = player;
85
86 Init();
87 }
88
89 void Init()
90 {
91 #ifdef DEVELOPER
93 #endif
95 //AddModifier(new BoneRegen);
96 //AddModifier(new Health);
100 //AddModifier(new Shock);
106 //AddModifier(new Blinded);
107 //AddModifier(new BrokenArms);
108 AddModifier(new BrokenLegsMdfr); // <-- Broken legs are here
116 //AddModifier(new Tremor);
124 AddModifier(new WetMdfr);
128 AddModifier(new BreathVapourMdfr);
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 {
187 Error("modifiers ID must be 1 or higher(for debugging reasons)");
188 }
189
190 //TODO: add a check for duplicity
191 m_ModifierList.Insert(id, modifier);
192 m_ModifierListArray.Insert(modifier);
193 }
194
195 bool IsModifierActive(eModifiers modifier_id)
196 {
197 return m_ModifierList.Get(modifier_id).IsActive();
198 }
199
200 void OnScheduledTick(float delta_time)
201 {
202 if(!m_AllowModifierTick) return;
203
205 {
206 m.Tick(delta_time);
207 }
208
209 }
210
212 {
213 for(int i = 0; i < m_ModifierList.Count(); i++)
214 {
215 m_ModifierList.GetElement(i).Deactivate();
216 }
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 {
232
233 int modifier_count;
234 for(int x = 0; x < m_ModifierList.Count(); x++)
235 {
236 ModifierBase mdfr = m_ModifierList.GetElement(x);
237 if( mdfr.IsActive() && mdfr.IsPersistent() )
238 {
239 modifier_count++;
240 //save the modifier id
241 CachedObjectsArrays.ARRAY_INT.Insert( mdfr.GetModifierID() );
242 if( mdfr.IsTrackAttachedTime() )
243 {
244 //save the overall attached time
245 CachedObjectsArrays.ARRAY_INT.Insert( mdfr.GetAttachedTime() );
246 }
247 }
248 }
249
250 //write the count
251 //CachedObjectsParams.PARAM1_INT.param1 = modifier_count;
252 //PrintString("Saving modifiers count: "+ modifier_count);
253 ctx.Write(modifier_count);
254
255 //write the individual modifiers and respective attached times
256 for(int i = 0; i < CachedObjectsArrays.ARRAY_INT.Count(); i++)
257 {
258 int item = CachedObjectsArrays.ARRAY_INT.Get(i);
259 //PrintString( "saving item: "+item );
260 ctx.Write(item);
261 }
262
263 for (int z = 0; z < m_ParamList.Count(); z++)
264 {
265 m_ParamList.Get(z).Serialize(ctx);
266 }
267
268 }
269
270 bool OnStoreLoad( ParamsReadContext ctx, int version )
271 {
272 int modifier_count;
273 if(!ctx.Read(modifier_count))
274 return false;
275 //PrintString("Loading modifiers count: "+ modifier_count);
276 for(int i = 0; i < modifier_count; i++)
277 {
278 int modifier_id;
279 if(!ctx.Read(modifier_id))
280 return false;
281 //PrintString( "loading item: "+modifier_id );
282 //int modifier_id = CachedObjectsParams.PARAM1_INT.param1;
283 ModifierBase modifier = GetModifier(modifier_id);
284 if( modifier )
285 {
286 if( modifier.IsTrackAttachedTime() )
287 {
288 int time;
289 if(!ctx.Read(time))//get the attached time
290 return false;
291 modifier.SetAttachedTime( time );
292 }
293
294 ActivateModifier(modifier_id, EActivationType.TRIGGER_EVENT_ON_CONNECT);
295 }
296 else
297 {
298 Debug.LogError("DB loading: non-existent modifier with id:"+modifier_id.ToString());
299 }
300 }
301
302 for (int x = 0; x < m_ParamList.Count(); x++)
303 {
304 if(!m_ParamList.Get(x).Deserializer(ctx))
305 {
306 return false;
307 }
308 }
309 return true;
310 }
311
312 ModifierBase GetModifier(int modifier_id)
313 {
314 return m_ModifierList.Get(modifier_id);
315 }
316
318 {
319 return m_Player;
320 }
321
322 void SetModifierLock(int modifier_id, bool state)
323 {
324 m_ModifierList.Get(modifier_id).SetLock(state);
325 }
326
327
328 bool GetModifierLock(int modifier_id)
329 {
330 return m_ModifierList.Get(modifier_id).IsLocked();
331 }
332
334 {
335 modifiers.Clear();
336 for(int i = 1;i < eModifiers.COUNT; i++)
337 {
338 if(m_ModifierList.Contains(i))
339 {
340 ModifierBase modifier = m_ModifierList.Get(i);
341 int modifier_id = modifier.GetModifierID();
342 string modifier_name = modifier.GetName();
343 bool active = modifier.IsActive();
344 string debug_text = modifier.GetDebugTextSimple();
345 bool is_locked = modifier.IsLocked();
346
347 if(active && debug_text != "")
348 {
349 modifier_name +=" | "+debug_text;
350 }
351 ModifierDebugObj obj = new ModifierDebugObj(modifier_id, modifier_name, active, is_locked);
352
353 modifiers.Insert( obj );
354 }
355 }
356 }
357}
override Widget Init()
Definition DayZGame.c:122
DiagMenuIDs
Definition EDiagMenuIDs.c:2
DayZPlayer m_Player
Definition Hand_Events.c:42
void SetModifiers()
Icon x
PlayerBase GetPlayer()
void OnStoreSave(ParamsWriteContext ctx)
bool m_AllowModifierTick
int GetStorageVersion()
const int STORAGE_VERSION
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
void ActivateModifier(int modifier_id, bool triggerEvent=EActivationType.TRIGGER_EVENT_ON_ACTIVATION)
EActivationType
@ TRIGGER_EVENT_ON_CONNECT
@ TRIGGER_EVENT_OFF
@ TRIGGER_EVENT_ON_ACTIVATION
void DbgGetModifiers(array< ref ModifierDebugObj > modifiers)
bool GetModifierLock(int modifier_id)
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
ref map< int, ref ModifierBase > m_ModifierList
const int DEFAULT_TICK_TIME_ACTIVE
ref array< ref ModifierBase > m_ModifierListArray
const int DEFAULT_TICK_TIME_INACTIVE_LONG
void OnScheduledTick()
string name
static ref TIntArray ARRAY_INT
Definition Debug.c:14
static void LogError(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message as error message.
Definition Debug.c:235
Definition Mask.c:2
override string GetDebugTextSimple()
void ModifierDebugObj(int id, string name, bool active, bool locked)
Serialization general interface. Serializer API works with:
Definition Serializer.c:56
proto bool Write(void value_out)
proto bool Read(void value_in)
Definition Wet.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
eModifiers
Definition eModifiers.c:2
void Error(string err)
Messagebox with error message.
Definition EnDebug.c:90
static proto void SetValue(int id, int value)
Set value at the given script id.
proto native bool IsModifierActive()
is modifier active