DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
AreaDamageManager.c
Go to the documentation of this file.
2{
3 const int BASE = 0;
4 const int HITZONE = 1;
5 const int RAYCASTED = 2;
6}
7
9{
12
14
19
20 protected string m_TriggerBaseClass;
21
23 {
24 m_ParentObject = parent;
25
27
30 m_AreaPosition = parent.GetPosition();
31 m_AreaOrientation = parent.GetOrientation();
32
33 m_TriggerBaseClass = "AreaDamageTriggerBase";
34 }
35
37 {
38 Destroy();
39 }
40
42 {
43 switch (type)
44 {
46 {
48 break;
49 }
51 {
53 break;
54 }
56 {
58 break;
59 }
60
61 default:
62 {
63 Error(string.Format("[ERROR] :: [AreaDamageManager] :: Unknown DamageComponentType: %1", type));
64 break;
65 }
66 }
67 }
68
70 void Spawn()
71 {
74 }
75
77 void Destroy()
78 {
81 }
82
84
91 override void OnTriggerCreated()
92 {
93 m_DamageComponent.OnTriggerCreated();
94 }
95
97 override void OnTriggerDestroyed()
98 {
99 m_DamageComponent.OnTriggerDestroyed();
100 }
101
103 override void OnEnterBeginEvent(TriggerInsider insider)
104 {
105 m_DamageComponent.OnEnterBeginEvent(insider);
106 }
107 override void OnEnterServerEvent(TriggerInsider insider)
108 {
109 m_DamageComponent.OnEnterServerEvent(insider);
110 }
111 override void OnEnterClientEvent(TriggerInsider insider)
112 {
113 m_DamageComponent.OnEnterClientEvent(insider);
114 }
115 override void OnEnterEndEvent(TriggerInsider insider)
116 {
117 m_DamageComponent.OnEnterEndEvent(insider);
118 }
119
121 override void OnStayStartBeginEvent(int nrOfInsiders)
122 {
123 m_DamageComponent.OnStayStartBeginEvent(nrOfInsiders);
124 }
125 override void OnStayStartServerEvent(int nrOfInsiders)
126 {
127 m_DamageComponent.OnStayStartServerEvent(nrOfInsiders);
128 }
129 override void OnStayStartClientEvent(int nrOfInsiders)
130 {
131 m_DamageComponent.OnStayStartClientEvent(nrOfInsiders);
132 }
133 override void OnStayStartEndEvent(int nrOfInsiders)
134 {
135 m_DamageComponent.OnStayStartEndEvent(nrOfInsiders);
136 }
137
139 override void OnStayBeginEvent(TriggerInsider insider, float deltaTime)
140 {
141 m_DamageComponent.OnStayBeginEvent(insider, deltaTime);
142 }
143 override void OnStayServerEvent(TriggerInsider insider, float deltaTime)
144 {
145 m_DamageComponent.OnStayServerEvent(insider, deltaTime);
146 }
147 override void OnStayClientEvent(TriggerInsider insider, float deltaTime)
148 {
149 m_DamageComponent.OnStayClientEvent(insider, deltaTime);
150 }
151 override void OnStayEndEvent(TriggerInsider insider, float deltaTime)
152 {
153 m_DamageComponent.OnStayEndEvent(insider, deltaTime);
154 }
155
158 {
159 m_DamageComponent.OnStayFinishBeginEvent();
160 }
162 {
163 m_DamageComponent.OnStayFinishServerEvent();
164 }
166 {
167 m_DamageComponent.OnStayFinishClientEvent();
168 }
169 override void OnStayFinishEndEvent()
170 {
171 m_DamageComponent.OnStayFinishEndEvent();
172 }
173
175 override void OnLeaveBeginEvent(TriggerInsider insider)
176 {
177 m_DamageComponent.OnLeaveBeginEvent(insider);
178 }
179 override void OnLeaveServerEvent(TriggerInsider insider)
180 {
181 m_DamageComponent.OnLeaveServerEvent(insider);
182 }
183 override void OnLeaveClientEvent(TriggerInsider insider)
184 {
185 m_DamageComponent.OnLeaveClientEvent(insider);
186 }
187 override void OnLeaveEndEvent(TriggerInsider insider)
188 {
189 m_DamageComponent.OnLeaveEndEvent(insider);
190 }
191
193 override bool OnEvaluateDamage(TriggerInsider insider, float damageCoef)
194 {
195 return m_DamageComponent.OnEvaluateDamage(insider, damageCoef);
196 }
197
199 override void PreDamageActions()
200 {
201 if ( m_ParentObject )
202 m_ParentObject.PreAreaDamageActions();
203 }
204
206 override void PostDamageActions()
207 {
208 if ( m_ParentObject )
209 m_ParentObject.PostAreaDamageActions();
210 }
213
214
218 bool OnEvaluateDamageEx(TriggerInsider insider, float deltaTime)
219 {
220 return OnEvaluateDamage( insider, CalculateDamageScale( insider, deltaTime ) );
221 }
222
224 protected float CalculateDamageScale(TriggerInsider insider, float deltaTime)
225 {
226 return deltaTime;
227 }
229
230
233 void SetExtents( vector mins, vector maxs )
234 {
235 m_ExtentMin = mins;
236 m_ExtentMax = maxs;
237
239 {
241 }
242 }
243 void GetExtents( out vector mins, out vector maxs )
244 {
245 mins = m_ExtentMin;
246 maxs = m_ExtentMax;
247 }
248 void GetWorldExtents( out vector mins, out vector maxs )
249 {
250 GetExtents(mins, maxs);
251
252 mins + m_AreaPosition;
253 maxs + m_AreaPosition;
254 }
255
256 void SetAmmoName( string ammo_name )
257 {
258 m_DamageComponent.m_AmmoName = ammo_name;
259 }
260 string GetAmmoName()
261 {
262 return m_DamageComponent.m_AmmoName;
263 }
264
265 void SetDamageType( int pDamageType )
266 {
267 m_DamageComponent.m_DamageType = pDamageType;
268 }
270 {
271 return m_DamageComponent.m_DamageType;
272 }
273
275 {
276 m_ParentObject = obj;
277 }
279 {
280 return m_ParentObject;
281 }
282
283 void SetAreaPosition( vector position )
284 {
285 m_AreaPosition = position;
286
288 {
290 }
291 }
293 {
294 return m_AreaPosition;
295 }
296
297 void SetAreaOrientation( vector orientation )
298 {
299 m_AreaOrientation = orientation;
300
302 {
304 }
305 }
307 {
308 return m_AreaOrientation;
309 }
310
312 {
313 m_DamageComponent.m_DamageableTypes = damageableTypes;
314 }
316 {
317 return m_DamageComponent.m_DamageableTypes;
318 }
319
320 void AddDamageableType(typename damageableType)
321 {
322 if (m_DamageComponent.m_DamageableTypes.Find(damageableType) != -1)
323 m_DamageComponent.m_DamageableTypes.Insert(damageableType);
324 }
325
326 void RemoveAddDamageableType(typename damageableType)
327 {
328 m_DamageComponent.m_DamageableTypes.RemoveItem(damageableType);
329 }
330
331 void SetLoopInterval( float time )
332 {
333 Error("SetLoopInterval not implemented - usable in Regular(looped) area damage objects only");
334 }
335
336 void SetDeferDuration( float time )
337 {
338 Error("SetDeferDuration not implemented - usable in Deferred area damage objects only");
339 }
340
341 void SetHitZones( array<string> hitzones )
342 {
344 if ( CastTo( adc, m_DamageComponent ) )
345 adc.SetHitZones( hitzones );
346 else
347 Error("SetHitZones not implemented - override for non raycasted versions of area damage objects only");
348 }
349
350 void SetRaycastSources( array<string> raycast_sources )
351 {
353 if ( CastTo( adc, m_DamageComponent ) )
354 adc.SetRaycastSources( raycast_sources );
355 else
356 Error("SetRaycastSources not implemented - override for raycasted versions of area damage objects only");
357 }
358
360 {
362 if ( CastTo( adc, m_DamageComponent ) )
363 adc.SetRaycastSourcesVector( raycast_sources );
364 else
365 Error("SetRaycastSources not implemented - override for raycasted versions of area damage objects only");
366 }
367
369 {
370 return m_AreaDamageTrigger;
371 }
373
374
377 protected bool CreateDamageTriggerEx()
378 {
379 int flags;
380
381 if ( GetGame().IsMultiplayer() && GetGame().IsServer() )
382 flags = ECE_CREATEPHYSICS;
383 else
384 flags = ECE_LOCAL;
385
387 {
388 m_AreaDamageTrigger.SetOrientation( m_AreaOrientation );
391 return true;
392 }
393
394 return false;
395 }
396
397 protected void CreateDamageTrigger()
398 {
400 }
402
403
406 protected bool DestroyDamageTriggerEx()
407 {
408 if ( GetGame() && m_AreaDamageTrigger ) // It's necesarry to check if the game exists. Otherwise a crash occurs while quitting.
409 {
411 m_AreaDamageTrigger = null;
412 return true;
413 }
414
415 return false;
416 }
417
418 protected void DestroyDamageTrigger()
419 {
421 }
423}
ref array< typename > m_DamageableTypes void AreaDamageComponent(AreaDamageManager parent)
void AddDamageableType(typename damageableType)
void SetAreaOrientation(vector orientation)
void GetExtents(out vector mins, out vector maxs)
void SetDamageType(int pDamageType)
void SetDamageComponentType(int type)
AreaDamageTriggerBase GetTrigger()
void SetExtents(vector mins, vector maxs)
array< typename > GetDamageableTypes()
void SetLoopInterval(float time)
vector GetOrientation()
protected vector m_ExtentMax
protected vector m_AreaPosition
void SetDeferDuration(float time)
void GetWorldExtents(out vector mins, out vector maxs)
protected bool CreateDamageTriggerEx()
void ~AreaDamageManager()
void SetParentObject(EntityAI obj)
protected vector m_AreaOrientation
protected AreaDamageTriggerBase m_AreaDamageTrigger
void Spawn()
spawn damage trigger
void RemoveAddDamageableType(typename damageableType)
protected float CalculateDamageScale(TriggerInsider insider, float deltaTime)
Helper for calculating damageCoeff when using OnEvaluateDamageEx.
void SetDamageableTypes(array< typename > damageableTypes)
void SetAreaPosition(vector position)
void SetHitZones(array< string > hitzones)
void SetAmmoName(string ammo_name)
bool OnEvaluateDamageEx(TriggerInsider insider, float deltaTime)
protected ref AreaDamageComponent m_DamageComponent
string GetAmmoName()
int GetDamageType()
void AreaDamageManager(EntityAI parent)
void SetRaycastSources(array< string > raycast_sources)
protected void CreateDamageTrigger()
protected bool DestroyDamageTriggerEx()
protected void DestroyDamageTrigger()
void SetRaycastSourcesVector(array< vector > raycast_sources)
EntityAI GetParentObject()
protected string m_TriggerBaseClass
protected vector m_ExtentMin
const int ECE_LOCAL
const int ECE_CREATEPHYSICS
protected Object m_ParentObject
Cached parent.
Definition Effect.c:39
class JsonUndergroundAreaTriggerData GetPosition
Newer implementation equivalent of "AreaDamageRegular", hitzone selection only.
Newer implementation equivalent of "AreaDamageRegularRaycasted", hitzone selection only.
void SetRaycastSources(array< string > raycast_sources)
void SetRaycastSourcesVector(array< vector > raycast_sources)
Events used across AreaDamage API, calling of these needs to be handled by parent.
void OnLeaveServerEvent(TriggerInsider insider)
protected bool OnEvaluateDamage(TriggerInsider insider, float damageCoef)
void OnEnterBeginEvent(TriggerInsider insider)
void OnStayClientEvent(TriggerInsider insider, float deltaTime)
void OnStayStartServerEvent(int nrOfInsiders)
void OnStayBeginEvent(TriggerInsider insider, float deltaTime)
void OnStayStartBeginEvent(int nrOfInsiders)
void OnStayEndEvent(TriggerInsider insider, float deltaTime)
protected void PreDamageActions()
void OnStayStartClientEvent(int nrOfInsiders)
void OnTriggerDestroyed()
Called when a trigger is destroyed.
void OnLeaveClientEvent(TriggerInsider insider)
void OnStayStartEndEvent(int nrOfInsiders)
void OnLeaveEndEvent(TriggerInsider insider)
void OnEnterEndEvent(TriggerInsider insider)
void OnEnterClientEvent(TriggerInsider insider)
protected void PostDamageActions()
Called after an object was damaged (only when it actually damaged an object)
void OnLeaveBeginEvent(TriggerInsider insider)
void OnStayServerEvent(TriggerInsider insider, float deltaTime)
void OnEnterServerEvent(TriggerInsider insider)
override void SetAreaDamageManager(AreaDamageManager adType)
override void SetExtents(vector mins, vector maxs)
proto native void ObjectDelete(Object obj)
Super root of all classes in Enforce script.
Definition EnScript.c:11
The object which is in a trigger and its metadata.
Definition Trigger.c:3
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static const vector Zero
Definition EnConvert.c:110
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Definition EnDebug.c:90
proto native void Destroy()
Cleans up the Effect, including unregistering if needed.
Definition Effect.c:212
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.