Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
statebase.c
Go to the documentation of this file.
2{
3 const float MAX_TIME_ACTIVE_SAVEGUARD = 20;
4 int m_Priority;
5 SoundOnVehicle m_SoundObject;
6 bool m_PlayedSound;
7 bool m_IsActivated;
8 PlayerBase m_Player;
9 float m_ServerUpdateInterval = 1;
10 float m_ServerUpdateDelta;
11 bool m_IsTemplate = true;
12 float m_ActivatedTime;
13 int m_ID;//ID for the type of Symptom
14 int m_UID;//unique ID
15 bool m_IsClientOnly;
16 bool m_DestroyOnAnimFinish = true;
17 bool m_DestroyRequested = false;
18 int m_SymptomType = -1;
19 bool m_IsPersistent = false;
20 SymptomManager m_Manager;
21 bool m_SyncToClient = false;
22 float m_Duration;
23 bool m_AnimPlayRequested;
24 int m_MaxCount = -1;//how many symptoms of this type can be queued up at the same time, '-1' for unlimited
25
26 SymptomCB m_AnimCallback;
27
28 ref array<Param> m_PersistentParams = new array<Param>;
29
30 void SymptomBase()
31 {
32 }
33
34 void ~SymptomBase()
35 {
36
37 }
38
39 void Init(SymptomManager manager, PlayerBase player, int uid)
40 {
41 m_Manager = manager;
42 m_Player = player;
43 m_UID = uid;
44 m_IsTemplate = false;
45 OnInit();
46 }
47
48 int GetMaxCount()
49 {
50 return m_MaxCount;
51 }
52
53 int GetUID()
54 {
55 return m_UID;
56 }
57
58 void OnOwnerKilled()
59 {
60
61
62 }
63
64 bool CanBeInterupted()
65 {
66 if (m_AnimPlayRequested)
67 {
68 //Print("--------- preventing interrupt ---------");
69 return false;
70 }
71 return true;
72 }
73
74 bool IsClientOnly()
75 {
76 return m_IsClientOnly;
77 }
78
79
80 void SetDuration(float duration)
81 {
82 m_Duration = duration;
83 }
84
85 float GetDuration()
86 {
87 return m_Duration;
88 }
89
90 string GetName()
91 {
92 return this.ClassName();
93 }
94
95 SymptomManager GetManager()
96 {
97 return m_Manager;
98 }
99
100 int GetType()
101 {
102 return m_ID;
103 }
104
105 void SetParam(Param p)
106 {
107
108 }
109
110 bool IsSyncToClient()
111 {
112 return m_SyncToClient;
113 }
114
116 bool IsSyncToRemotes()
117 {
118 return false;
119 }
120
121 void GetPersistentParams(array<Param> params)
122 {
123 for (int i = 0; i < m_PersistentParams.Count(); i++)
124 {
125 params.Insert(m_PersistentParams.Get(i));
126 }
127 }
128
129 void MakeParamObjectPersistent(Param object)
130 {
131 if ( !GetGame().IsServer() && !GetGame().IsMultiplayer() ) return;
132
133 m_PersistentParams.Insert(object);
134 }
135
136 bool IsPersistent()
137 {
138 return m_IsPersistent;
139 }
140
141 bool IsPrimary()
142 {
143 if ( m_SymptomType == SymptomTypes.PRIMARY)
144 return true;
145 else return false;
146 }
147
148 // override this if you want the symptom to be played also while the player is unconscious
149 bool AllowInUnconscious()
150 {
151 return false;
152 }
153
154 PlayerBase GetPlayer()
155 {
156 return m_Player;
157 }
158
159 int GetPriority()
160 {
161 return m_Priority;
162 }
163
164 bool OnConstructed(SymptomManager manager)
165 {
166
167 }
168
169 void OnDestructed()
170 {
171 if ( IsActivated() ) Deactivate();
172 if ( GetManager() ) m_Manager.OnSymptomExit(this, m_UID);
173 }
174
175 void Activate()
176 {
177 m_IsActivated = true;
178 if ( GetGame() && GetGame().IsServer() )
179 {
181 if ( GetGame().IsMultiplayer() )
182 {
183 if ( IsSyncToClient() )
184 SyncToClientActivated( GetType(), GetUID() );
185 #ifdef DIAG_DEVELOPER
186 GetManager().SendServerDebugToClient();
187 #endif
188 }
189 }
190 if ( !GetGame().IsDedicatedServer() )
191 {
193 }
194 }
195
196 void Deactivate()
197 {
198 if ( !GetGame() ) return;
199 m_IsActivated = false;
200 if ( GetGame().IsServer() )
201 {
203 if ( GetGame().IsMultiplayer() && IsSyncToClient() )
204 {
205 SyncToClientDeactivated( GetType(), GetUID() );
206 }
207 }
208 if ( !GetGame().IsDedicatedServer() )
209 {
211 }
212
213 }
214
215 bool IsActivated()
216 {
217 return m_IsActivated;
218 }
219
220
221
222 void Update(float deltatime)
223 {
224 if ( GetGame().IsServer() )
225 {
226 m_ServerUpdateDelta += deltatime;
227 if (m_ServerUpdateDelta > m_ServerUpdateInterval )
228 {
229 m_ActivatedTime += m_ServerUpdateDelta;
230 OnUpdateServer(m_Player, m_ServerUpdateDelta);
231 m_ServerUpdateDelta = 0;
232 }
233 }
234 if ( GetGame().IsClient() )
235 {
236 OnUpdateClient(m_Player, deltatime);
237 }
238 if ( GetGame().IsServer() && !GetGame().IsMultiplayer() && !GetGame().IsMissionMainMenu() )
239 {
240 OnUpdateClient(m_Player, deltatime);
241 }
242 CheckDestroy();
243 }
244
245 void PlayAnimationFB(int animation, int stance_mask, float running_time = -1)
246 {
247 DayZPlayerSyncJunctures.SendPlayerSymptomFB(m_Player, animation, GetType() , stance_mask, running_time );
248 m_AnimPlayRequested = true;
249 }
250
251 void PlayAnimationADD(int type)
252 {
253 DayZPlayerSyncJunctures.SendPlayerSymptomADD(m_Player, type, GetType());
254 m_AnimPlayRequested = true;
255 }
256
258 {
259 GetPlayer().RequestSoundEvent(id);
260 m_PlayedSound = true;
261 }
262
263 void SyncToClientActivated( int SYMPTOM_id, int uid )
264 {
265 if ( !GetPlayer() ) return;
266
267 CachedObjectsParams.PARAM2_INT_INT.param1 = SYMPTOM_id;
268 CachedObjectsParams.PARAM2_INT_INT.param2 = uid;
269 GetGame().RPCSingleParam(GetPlayer(), ERPCs.RPC_PLAYER_SYMPTOM_ON, CachedObjectsParams.PARAM2_INT_INT,true,GetPlayer().GetIdentity() );
270 }
271
272 void SyncToClientDeactivated( int SYMPTOM_id, int uid )
273 {
274 if ( !GetPlayer() ) return;
275 CachedObjectsParams.PARAM2_INT_INT.param1 = SYMPTOM_id;
276 CachedObjectsParams.PARAM2_INT_INT.param2 = uid;
277 GetGame().RPCSingleParam(GetPlayer(), ERPCs.RPC_PLAYER_SYMPTOM_OFF, CachedObjectsParams.PARAM2_INT_INT,true,GetPlayer().GetIdentity() );
278 }
279
280 void CheckSoundFinished()
281 {
282 if (GetGame().IsServer())
283 {
284 if (m_PlayedSound && m_ActivatedTime >= m_Duration)
285 RequestDestroy();
286 }
287 }
288
289 void CheckDestroy()
290 {
291 CheckSoundFinished();
292 if ( IsPrimary() && m_ActivatedTime > MAX_TIME_ACTIVE_SAVEGUARD)
293 {
294 RequestDestroy();
295 }
296
298 Destroy();
299 }
300
301 SmptAnimMetaBase SpawnAnimMetaObject()
302 {
303 return null;
304 }
305
306
307 void RequestDestroy()
308 {
309 m_DestroyRequested = true;
310 //if(!IsActivated() ) Destroy();
311 }
312
313 void Destroy()
314 {
315 if (!m_IsTemplate)
316 OnDestructed();
317 }
318
320 void AnimationFinish()
321 {
322 //Print("*********** OnAnimationFinish ************");
323 if ( m_DestroyOnAnimFinish ) RequestDestroy();
325 }
326
327 void AnimationPlayFailed()
328 {
330 AnimationFinish();
331 }
332
333 void AnimationStart()
334 {
336 }
337
338 protected void OnAnimationFinish();
339 protected void OnAnimationStart();
340 protected void OnAnimationPlayFailed();
341
342
344 void OnInit();
345
347 void OnUpdateServer(PlayerBase player, float deltatime);
348 bool CanActivate(){return true;}//server only
350 void OnUpdateClient(PlayerBase player, float deltatime);
357}
float m_Duration
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
void OnAnimationStart()
void OnGetActivatedServer(PlayerBase player)
gets called once on an Symptom which is being activated
bool CanActivate()
Definition statebase.c:348
void OnGetActivatedClient(PlayerBase player)
void OnInit()
this is just for the Symptom parameters set-up and is called even if the Symptom doesn't execute,...
void OnAnimationPlayFailed()
void OnAnimationFinish()
void OnGetDeactivatedClient(PlayerBase player)
void OnUpdateClient(PlayerBase player, float deltatime)
gets called every frame
void OnUpdateServer(PlayerBase player, float deltatime)
gets called every frame
void OnGetDeactivatedServer(PlayerBase player)
only gets called once on an active Symptom that is being deactivated
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
override Widget Init()
Definition dayzgame.c:127
int m_ID
ID of effect, given by SEffectManager when registered (automatically done when playing through it)
Definition effect.c:51
ERPCs
Definition erpcs.c:2
proto native CGame GetGame()
DayZPlayer m_Player
Definition hand_events.c:42
void PlaySound()
ModifiersManager m_Manager
float m_ActivatedTime
bool m_IsPersistent
should this modifier track overall time it was active ?
bool m_DestroyRequested
int m_SymptomType
SymptomTypes