DayZ 1.29
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
TrapBase.c
См. документацию.
2{
4}
5
6class TrapBase extends ItemBase
7{
8 #ifdef SERVER
9 protected const int SPAWN_FLAGS = ECE_CREATEPHYSICS;
10 #else
11 protected const int SPAWN_FLAGS = ECE_LOCAL;
12 #endif
13
14 protected const int DAMAGE_TRIGGER_MINE = 75;
15 protected const float UPDATE_TIMER_INTERVAL = 0.05;
16
17 float m_InitWaitTime; //After this time after deployment, the trap is activated
18 bool m_NeedActivation; //If activation of trap is needed
19 float m_DefectRate; //Added damage after trap activation
20 float m_DamagePlayers; //How much damage player gets when caught
21 float m_DamageOthers; //How much damage player gets when caught
22
23 bool m_AddActivationDefect; // Damage trap after activation
24 bool m_AddDeactivationDefect; // Damage trap after deactivation
25 protected bool m_IsActive; // True means that the trap is ready to detonate
26 protected bool m_IsInProgress;
27
28 protected bool m_Disarmed = false;
29
31
35
41
42 protected ref Timer m_Timer;
43 protected ref Timer m_UpdateTimer;
45
47
48 void TrapBase()
49 {
50 m_IsInProgress = false;
51 m_NeedActivation = true;
52 m_InitWaitTime = 5; //After this time after deployment, the trap is activated
53 m_DefectRate = 15; //Added damage after trap activation
54 m_DamagePlayers = 25; //How much damage player gets when caught
55 m_DamageOthers = 100; //How much damage others gets when caught
56
59
61
65
66 m_InfoSetup = "#STR_TrapBase0";
67 m_InfoDeactivated = "#STR_TrapBase1";
68 m_InfoDamageManipulation = "#STR_TrapBase2";
69 m_InfoDamage = "#STR_TrapBase3";
70 m_InfoActivationTime = "#STR_TrapBase4" + m_InitWaitTime.ToString() + "#STR_TrapBase5";
71
72 m_UpdateTimer = new Timer();
73
74 RegisterNetSyncVariableBool("m_IsActive");
75 RegisterNetSyncVariableBool("m_IsInProgress");
76 }
77
78 void OnUpdate(EntityAI victim);
79
84
87 {
88 super.OnVariablesSynchronized();
89
90 if (g_Game.IsMultiplayer())
91 {
93 SetActive();
94
96 StartActivate(null);
97 }
98 }
99
100 override void EEDelete(EntityAI parent)
101 {
102 super.EEDelete(parent);
103
104 if (g_Game && m_TrapTrigger)
105 {
106 g_Game.ObjectDelete(m_TrapTrigger);
107 m_TrapTrigger = null;
108 }
109 }
110
112 {
113 super.OnStoreSave(ctx);
114
115 ctx.Write(m_IsActive);
117 }
118
119 //----------------------------------------------------------------
120 override bool OnStoreLoad(ParamsReadContext ctx, int version)
121 {
122 if ( !super.OnStoreLoad(ctx, version) )
123 return false;
124
125 bool b_is_active = false;
126 if ( !ctx.Read( b_is_active ) )
127 b_is_active = false;
128
129 bool b_is_in_progress = false;
130 if ( !ctx.Read( b_is_in_progress ) )
131 b_is_in_progress = false;
132
133 if ( b_is_active )
134 {
135 SetActive();
136 }
137
138 if (b_is_in_progress && !b_is_active)
139 {
140 StartActivate(null);
141 }
142
143 return true;
144 }
145
146 bool IsActive()
147 {
148 return m_IsActive && m_IsInProgress == false && GetHierarchyRootPlayer() == null;
149 }
150
152 {
153 return !IsActive() && m_IsInProgress == false && GetHierarchyRootPlayer() == null;
154 }
155
156 // trap cannot be taken when is activated
157 override bool IsTakeable()
158 {
159 if ( m_IsInProgress == false && !IsActive() )
160 {
161 return true;
162 }
163
164 return false;
165 }
166
168 {
169 return !IsActive() && GetHierarchyRootPlayer() == null && GetHierarchyParent() == null && m_IsInProgress == false && !IsRuined() && m_NeedActivation;
170 }
171
173 {
174 if ( GetHierarchyRootPlayer() != null && GetHierarchyRootPlayer().GetEntityInHands() == this )
175 {
176 PlayerBase player = PlayerBase.Cast( GetHierarchyRootPlayer() );
177
178 vector player_pos = player.GetPosition();
179 vector aim_pos = player.GetAimPosition();
180
181 if ( vector.DistanceSq( player_pos, aim_pos ) <= ( Math.SqrFloat( 1.5 ) ) )
182 {
183 return IsPlaceableAtPosition( aim_pos );
184 }
185 }
186
187 return false;
188 }
189
191 {
192 if ( position[1] < g_Game.SurfaceGetSeaLevelMax() + 0.03 )
193 {
194 return false;
195 }
196 else if ( g_Game.SurfaceIsPond( position[0], position[2] ) )
197 {
198 return false;
199 }
200
201 return true;
202 }
203
204 void Disarm()
205 {
206 SetInactive(false);
207 RefreshState();
208 g_Game.RPCSingleParam(this, ERPCs.RPC_TRAP_DISARM, null, true);
209
210 OnDisarm();
211 }
212
214 void OnDisarm();
215
217 {
218 if ( g_Game.IsServer() )
219 {
220 if ( m_Timer )
221 {
222 m_Timer.Stop();
223 }
224
225 RefreshState();
226
227 if (m_DamagePlayers > 0)
228 {
229 if (victim)
230 {
231 if ( victim.IsInherited(SurvivorBase))
232 {
233 victim.DecreaseHealth("", "", m_DamagePlayers);
234 }
235 else if (victim.IsInherited(DayZCreatureAI))
236 {
237 victim.DecreaseHealth("", "", m_DamageOthers);
238 }
239 else if (victim.IsInherited(ItemBase))
240 {
241 ItemBase victim_item = ItemBase.Cast(victim);
242 float damage_coef = 1;
243
244 if (victim_item.HasQuantity() && victim_item.GetQuantityMax() != 0 && victim_item.GetQuantity() > 0)
245 {
246 damage_coef = victim_item.GetQuantityMax() / victim_item.GetQuantity(); // Lower quantity increases damage exposure
247 }
248
249 if (damage_coef > 0)
250 {
251 int item_size_x = 1;
252 int item_size_y = 1;
253 g_Game.GetInventoryItemSize(victim_item, item_size_x, item_size_y);
254
255 float add_damage = 300 * damage_coef / Math.Clamp(item_size_x * item_size_y, 1, int.MAX);
256 victim_item.DecreaseHealth("", "", add_damage);
257 }
258 }
259 }
260 }
261
262 Synch(victim);
263 }
264
265 OnSteppedOn(victim);
266 }
267
269 {
270 OnSteppedOut(victim);
271 }
272
274 {
275 SetInactive(false);
276 }
277
278 void OnSteppedOut(EntityAI victim);
279
280 // Synchronizes states
281 protected void Synch(EntityAI victim)
282 {
283 if (g_Game.IsServer())
284 {
285 if (victim && !victim.GetAllowDamage())
286 return;
287
288 Param1<EntityAI> p = new Param1<EntityAI>(victim);
289 g_Game.RPCSingleParam(this, ERPCs.RPC_TRAP_VICTIM, p, true);
290 }
291
292 }
293
294 // On server -> client synchronization
295 override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
296 {
297 super.OnRPC(sender, rpc_type, ctx);
298
299 if ( !g_Game.IsDedicatedServer() )
300 {
301 switch (rpc_type)
302 {
303 case ERPCs.RPC_TRAP_VICTIM:
304 Param1<EntityAI> victim = new Param1<EntityAI>(null);
305
306 if (ctx.Read(victim))
307 {
308 if (victim.param1)
309 SnapOnObject(victim.param1);
310 }
311
312 break;
313
314 case ERPCs.RPC_TRAP_DISARM:
315 OnDisarm();
316 break;
317 }
318 }
319 }
320
322 {
324 {
325 return;
326 }
327
328 if ( g_Game.IsServer() )
329 {
330 // item is owned by player
331 if ( GetHierarchyRootPlayer() != NULL && m_AnimationPhaseGrounded != "" )
332 {
333 SetAnimationPhase( m_AnimationPhaseSet, 1 );
335 {
336 SetAnimationPhase( m_AnimationPhaseTriggered, 1 );
337 }
338 SetAnimationPhase( m_AnimationPhaseGrounded, 0 );
339 }
340 // item is set active
341 else if ( IsActive() )
342 {
343 if ( m_AnimationPhaseGrounded != "" )
344 {
345 SetAnimationPhase( m_AnimationPhaseGrounded, 1 );
346 }
348 {
349 SetAnimationPhase( m_AnimationPhaseTriggered, 1 );
350 SetAnimationPhase( m_AnimationPhaseSet, 0 );
351 }
352 }
353 // item is inactive and not owned by player (on the ground)
354 else if ( IsInactive() )
355 {
357 {
358 SetAnimationPhase( m_AnimationPhaseGrounded, 1 );
359 }
361 {
362 SetAnimationPhase( m_AnimationPhaseSet, 1 );
363 SetAnimationPhase( m_AnimationPhaseTriggered, 0 );
364 }
365 }
366 }
367 }
368
370 {
371 if (g_Game.IsServer())
372 {
373 if (GetHierarchyRootPlayer() && GetHierarchyRootPlayer().CanDropEntity(this))
374 SetupTrapPlayer(PlayerBase.Cast(GetHierarchyRootPlayer()));
375 }
376 }
377
378 void SetupTrapPlayer( PlayerBase player, bool set_position = true )
379 {
380 if (g_Game.IsServer())
381 {
382 if (set_position)
383 {
384 player.LocalDropEntity(this);
385
386 vector trapPos = player.GetDirection() * 1.5;
387 trapPos[1] = 0;
388 SetPosition(player.GetPosition() + trapPos);
389 }
390
391 if (m_NeedActivation == false)
392 SetActive();
393 }
394 }
395
397 {
398 if ( g_Game.IsServer() )
399 {
400 DecreaseHealth( "", "", m_DefectRate );
401 }
402 }
403
405 {
407
408 m_IsInProgress = false;
409 m_IsActive = true;
410
412 {
413 AddDefect();
414 }
415
416 if (g_Game.IsServer())
417 {
419 RefreshState();
420 SetSynchDirty();
421 }
422
423 OnActivate();
424 }
425
426 void OnActivate();
427
429 {
430 if (g_Game.IsServer())
431 {
433 HideSelection("safety_pin");
434
435 if (m_InitWaitTime > 0)
436 {
437 m_IsInProgress = true;
438 m_Timer.Run(m_InitWaitTime, this, "SetActive");
439
440 SetSynchDirty();
441 }
442 else
443 SetActive();
444 }
445 }
446
447 void StartDeactivate(PlayerBase player);
448
449 void SetInactive(bool stop_timer = true)
450 {
452
453 m_IsActive = false;
454 if (m_Timer && stop_timer)
455 m_Timer.Stop();
456
458 AddDefect();
459
460 SetSynchDirty();
462 RefreshState();
463 }
464
466 {
467 if (Class.CastTo(m_TrapTrigger, g_Game.CreateObjectEx("TrapTrigger", GetPosition(), SPAWN_FLAGS)))
468 {
469 vector mins = "-0.01 -0.05 -0.01";
470 vector maxs = "0.01 0.5 0.01";
471 m_TrapTrigger.SetOrientation(GetOrientation());
472 m_TrapTrigger.SetExtents(mins, maxs);
473 m_TrapTrigger.SetParentObject(this);
475 }
476 }
477
479 {
480 if (m_TrapTrigger)
481 {
482 m_TrapTrigger.SetParentObject(null);
483 m_TrapTrigger.DeleteSafe();
484 }
485 }
486
488 {
489 if (m_TrapTrigger)
490 m_TrapTrigger.SetEnabled();
491 }
492
493 override void OnItemLocationChanged(EntityAI old_owner, EntityAI new_owner)
494 {
495 super.OnItemLocationChanged(old_owner, new_owner);
496
497 if (g_Game.IsServer())
498 {
499 RefreshState();
500
501 // TAKE ACTIVE TRAP FROM VICINITY
502 if (old_owner == NULL && new_owner != NULL && IsActive())
503 {
504 // TAKE INTO HANDS
505 if ( new_owner.IsPlayer() )
506 {
507 SnapOnObject(new_owner);
508 }
509 else if (new_owner.GetHierarchyRootPlayer())
510 {
511 SnapOnObject(new_owner.GetHierarchyRootPlayer());
512 }
513 }
514 }
515
516 }
517
518 override void EEItemAttached(EntityAI item, string slot_name)
519 {
520 super.EEItemAttached(item, slot_name);
521
522 if (g_Game.IsServer())
523 RefreshState();
524 }
525
526 override void EEItemDetached(EntityAI item, string slot_name)
527 {
528 super.EEItemDetached(item, slot_name);
529
530 if (g_Game.IsServer())
531 RefreshState();
532 }
533
534 override void OnPlacementComplete(Man player, vector position = "0 0 0", vector orientation = "0 0 0")
535 {
536 super.OnPlacementComplete(player, position, orientation);
537
538 if (g_Game.IsServer())
539 {
540 SetOrientation(orientation);
541 SetPosition(position);
542 PlaceOnSurface();
543 SetSynchDirty();
544 }
545 }
546
547 override bool CanPutInCargo( EntityAI parent )
548 {
549 if ( !super.CanPutInCargo(parent) )
550 {
551 return false;
552 }
553
554 return IsTakeable();
555 }
556
557 override bool CanPutIntoHands( EntityAI parent )
558 {
559 if ( !super.CanPutIntoHands( parent ) )
560 {
561 return false;
562 }
563
564 return IsTakeable();
565 }
566
567 override bool CanRemoveFromHands( EntityAI parent )
568 {
569 return IsTakeable();
570 }
571
572 override bool CanBePlaced( Man player, vector position )
573 {
574 return IsPlaceableAtPosition( position );
575 }
576
579 {
580 return true;
581 }
582
583 //Set if trap can be disarmed using trap-specific action
585 {
586 return false;
587 }
588
590 void SetDisarmed( bool disarmed )
591 {
592 m_Disarmed = disarmed;
593 }
594
597 {
598 return m_Disarmed;
599 }
600
601 //================================================================
602 // ADVANCED PLACEMENT
603 //================================================================
604
605 override void SetActions()
606 {
607 super.SetActions();
608
610 }
611
612 // HELPERS
614 {
616 vector trapPosXZ = GetPosition();
617 trapPosXZ[1] = 0;
618
619 GameInventory inv = victim.GetInventory();
620 for (int i = 0; i < inv.AttachmentCount(); i++)
621 {
623 EntityAI wheelEntity = inv.GetAttachmentFromIndex(i);
624 if (wheelEntity && wheelEntity.Type() == CarWheel_Ruined)
625 {
626 continue;
627 }
628
630 int slotId;
631 string slotName;
632 wheelEntity.GetInventory().GetCurrentAttachmentSlotInfo(slotId, slotName);
633 slotName.ToLower();
634 if (slotName.Contains("spare"))
635 {
636 continue
637 }
638
640 if (wheelEntity && wheelEntity.IsInherited(CarWheel))
641 {
642 vector entPosXZ = wheelEntity.GetPosition();
643 entPosXZ[1] = 0;
644 if (vector.Distance(trapPosXZ, entPosXZ) < 1)
645 {
646 return wheelEntity;
647 }
648 }
649 }
650
651 return null;
652 }
653
654 protected void DamageClothing(PlayerBase player)
655 {
656 //Array used to find all relevant information about currently equipped clothes
657 array<ClothingBase> equippedClothes = new array<ClothingBase>;
658
659 equippedClothes.Insert(ClothingBase.Cast(player.GetItemOnSlot("LEGS")));
660 equippedClothes.Insert(ClothingBase.Cast(player.GetItemOnSlot("BACK")));
661 equippedClothes.Insert(ClothingBase.Cast(player.GetItemOnSlot("VEST")));
662 equippedClothes.Insert(ClothingBase.Cast(player.GetItemOnSlot("HeadGear")));
663 equippedClothes.Insert(ClothingBase.Cast(player.GetItemOnSlot("Mask")));
664 equippedClothes.Insert(ClothingBase.Cast(player.GetItemOnSlot("BODY")));
665 equippedClothes.Insert(ClothingBase.Cast(player.GetItemOnSlot("FEET")));
666 equippedClothes.Insert(ClothingBase.Cast(player.GetItemOnSlot("GLOVES")));
667
668 //Damage all currently equipped clothes
669 for (int i = 0; i < equippedClothes.Count(); i++)
670 {
671 //If no item is equipped on slot, slot is ignored
672 if (equippedClothes[i] == null)
673 {
674 continue;
675 }
676
677 equippedClothes[i].DecreaseHealth(m_ClothingDmg[i], false);
678 }
679 }
680
682 protected ref EffectSound m_DeployLoopSound; //DEPRECATED in favor of m_DeployLoopSoundEx
683
686}
class LogManager EntityAI
ActionActivateTrapCB ActionContinuousBaseCB ActionActivateTrap()
Определения ActionActivateTrap.c:18
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
vector GetOrientation()
Определения AreaDamageManager.c:306
override void EEItemDetached(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:1871
override void EEItemAttached(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:1862
const int ECE_LOCAL
Определения CentralEconomy.c:24
const int ECE_CREATEPHYSICS
Определения CentralEconomy.c:16
PlayerSpawnPreset slotName
void Disarm()
Определения ClockBase.c:199
override void EEDelete(EntityAI parent)
Определения ContaminatedArea.c:61
override void OnVariablesSynchronized()
Определения ContaminatedArea_Dynamic.c:94
DayZGame g_Game
Определения DayZGame.c:3942
ref Timer m_Timer
Определения DayZGame.c:707
ERPCs
Определения ERPCs.c:2
const int MAX
Определения EnConvert.c:27
override bool CanPutInCargo(EntityAI parent)
Определения ExplosivesBase.c:285
override bool CanPutIntoHands(EntityAI parent)
Определения ExplosivesBase.c:295
override bool IsTakeable()
Определения ExplosivesBase.c:235
override bool CanRemoveFromHands(EntityAI parent)
Определения ExplosivesBase.c:305
override bool CanBePlaced(Man player, vector position)
Определения FireplaceBase.c:2588
override void OnItemLocationChanged(EntityAI old_owner, EntityAI new_owner)
Определения ItemBase.c:6124
bool m_IsActive
Определения ModifierBase.c:19
bool IsActive()
Определения ModifierBase.c:130
void OnStoreSave(ParamsWriteContext ctx)
Определения ModifiersManager.c:229
bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения ModifiersManager.c:265
override void OnRPC(ParamsReadContext ctx)
Определения PlayerStatBase.c:69
ref Timer m_UpdateTimer
Определения RadialMenu.c:20
string m_AnimationPhaseTriggered
Определения TrapBase.c:34
float m_DefectRate
Определения TrapBase.c:19
void DeferredEnableTrigger()
Определения TrapBase.c:487
string m_InfoDamageManipulation
Определения TrapBase.c:38
bool m_WasActivatedOrDeactivated
DEPRECATED Used for explosive traps to prevent detonation after destroying through disarm action.
Определения TrapBase.c:30
ref array< int > m_ClothingDmg
Определения TrapBase.c:46
bool IsActivable()
Определения TrapBase.c:167
TrapTrigger GetTrapTrigger()
Определения TrapBase.c:80
enum SoundTypeTrap SPAWN_FLAGS
void PlayDeployLoopSound()
void StopDeployLoopSound()
DEPRECATED.
void Synch(EntityAI victim)
keeping "step" here for consistency only
Определения TrapBase.c:281
string m_AnimationPhaseGrounded
Определения TrapBase.c:32
const float UPDATE_TIMER_INTERVAL
Определения TrapBase.c:15
void AddDefect()
Определения TrapBase.c:396
void RefreshState()
Определения TrapBase.c:321
void RemoveFromObject(EntityAI victim)
Определения TrapBase.c:268
void SetActive()
Определения TrapBase.c:404
bool m_NeedActivation
Определения TrapBase.c:18
void SetupTrap()
Определения TrapBase.c:369
ref EffectSound m_DeployLoopSound
DEPRECATED.
Определения TrapBase.c:682
const int DAMAGE_TRIGGER_MINE
Определения TrapBase.c:14
bool m_Disarmed
Определения TrapBase.c:28
EntityAI GetClosestCarWheel(EntityAI victim)
Определения TrapBase.c:613
string m_InfoActivationTime
Определения TrapBase.c:40
string m_AnimationPhaseSet
Определения TrapBase.c:33
bool m_IsInProgress
Определения TrapBase.c:26
bool IsInactive()
Определения TrapBase.c:151
void SnapOnObject(EntityAI victim)
Определения TrapBase.c:216
string m_InfoSetup
Определения TrapBase.c:36
void SetInactive(bool stop_timer=true)
Определения TrapBase.c:449
bool IsPlaceable()
Определения TrapBase.c:172
float m_InitWaitTime
Определения TrapBase.c:17
void DamageClothing(PlayerBase player)
Определения TrapBase.c:654
SoundTypeTrap
Определения TrapBase.c:2
@ ACTIVATING
Определения TrapBase.c:3
bool CanBeClapped()
DEPRECATED Set if trap can be disarmed using ActionClapBearTrapWithThisItem.
Определения TrapBase.c:578
TrapTrigger m_TrapTrigger
Определения TrapBase.c:44
string m_InfoDeactivated
Определения TrapBase.c:37
void SetupTrapPlayer(PlayerBase player, bool set_position=true)
Определения TrapBase.c:378
void SetDisarmed(bool disarmed)
DEPRECATED.
Определения TrapBase.c:590
bool GetDisarmed()
DEPRECATED.
Определения TrapBase.c:596
float m_DamagePlayers
Определения TrapBase.c:20
void TrapBase()
Определения TrapBase.c:48
bool IsPlaceableAtPosition(vector position)
Определения TrapBase.c:190
void StartActivate(PlayerBase player)
Определения TrapBase.c:428
string m_InfoDamage
Определения TrapBase.c:39
bool m_AddActivationDefect
Определения TrapBase.c:23
void DeleteTrigger()
Определения TrapBase.c:478
bool m_AddDeactivationDefect
Определения TrapBase.c:24
float m_DamageOthers
Определения TrapBase.c:21
void StartDeactivate(PlayerBase player)
Определения Trap_TripWire.c:209
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения DallasMask.c:2
do not process rotations !
Определения DayZAnimal.c:656
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
proto native EntityAI GetAttachmentFromIndex(int index)
proto native int AttachmentCount()
Returns count of attachments attached to this item.
script counterpart to engine's class Inventory
Определения EnMath.c:7
Определения PlayerBaseClient.c:2
The class that will be instanced (moddable)
Определения gameplay.c:389
proto bool Write(void value_out)
proto bool Read(void value_in)
Определения SurvivorBase.c:7
Определения DayZPlayerImplement.c:39
override void OnSteppedOn(EntityAI victim)
Определения Trap_Bear.c:67
override void CreateTrigger()
Определения Trap_Bear.c:43
override void OnActivate()
Определения Trap_Bear.c:210
override void OnDisarm()
Определения Trap_Bear.c:217
override void OnPlacementComplete(Man player, vector position="0 0 0", vector orientation="0 0 0")
Определения Trap_Bear.c:228
override bool CanBeDisarmed()
Определения Trap_Bear.c:25
override void SetActions()
Определения Trap_Bear.c:249
override void OnSteppedOut(EntityAI victim)
Определения Trap_Bear.c:125
Определения Trap_Bear.c:2
Trigger used by traps.
Определения TrapTrigger.c:3
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:119
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16
proto native void SetPosition(vector position)
Set the world position of the Effect.
Определения Effect.c:463
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
static proto float SqrFloat(float f)
Returns squared value.
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
vector GetPosition()
Get the world position of the Effect.
Определения Effect.c:473
proto native void OnUpdate()
Определения 3_Game/DayZ/tools/tools.c:349
const int CALL_CATEGORY_SYSTEM
Определения 3_Game/DayZ/tools/tools.c:8