Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_MortarShellGadgetComponent.c
Go to the documentation of this file.
1[EntityEditorProps("GameScripted/Gadgets", description: "Mortar shell that can be picked up.")]
3{
4 [Attribute(desc: "If this shell is using timed fuze")]
5 protected bool m_bIsUsingTimeFuze;
6
7 [Attribute("15", desc: "Minimal time in seconds that this projectile can be set to [s]", params: "1 inf")]
8 protected float m_fMinFuzeTime;
9
10 [Attribute("15", desc: "Maximal time in seconds that this projectile can be set to [s]", params: "1 inf")]
11 protected float m_fMaxFuzeTime;
12
13 [Attribute("100", desc: "What altitude in meters above the impact point should be used for automatically setting the detonation time [m]", params: "1 inf")]
14 protected float m_fDetonationAltitude;
15
16 [Attribute("1", desc: "Fuze time offset applied based on the time that it takes to travel the distance specified in Detonation Altitude attribute [s]", params: "0.01 inf")]
17 protected float m_fVerticalImpactTimeOffset;
18
19 [Attribute(desc: "1. Number of charge rings.\n2. Projectile speed coef.\n3. Is this the default amount of charge rings.", params: "0 inf")]
20 protected ref array<vector> m_aChargeRingConfig;
21
22 //------------------------------------------------------------------------------------------------
24 {
25 return m_bIsUsingTimeFuze;
26 }
27
28 //------------------------------------------------------------------------------------------------
30 {
31 return m_fMinFuzeTime;
32 }
33
34 //------------------------------------------------------------------------------------------------
36 {
37 return m_fMaxFuzeTime;
38 }
39
40 //------------------------------------------------------------------------------------------------
45 void OverrideTimeFuzeConfig(bool shouldBeUsed = false, float min = 0, float max = 0)
46 {
47 if (min == max)
48 {
49 m_bIsUsingTimeFuze = false;
50 return;
51 }
52
53 m_bIsUsingTimeFuze = shouldBeUsed;
54 if (min > max)
55 {
56 m_fMinFuzeTime = max;
57 m_fMaxFuzeTime = min;
58 }
59 else
60 {
61 m_fMinFuzeTime = min;
62 m_fMaxFuzeTime = max;
63 }
64 }
65
66 //------------------------------------------------------------------------------------------------
68 {
69 return m_fDetonationAltitude;
70 }
71
72 //------------------------------------------------------------------------------------------------
74 {
75 return m_fVerticalImpactTimeOffset;
76 }
77
78 //------------------------------------------------------------------------------------------------
80 {
81 return m_aChargeRingConfig.Count();
82 }
83
84 //------------------------------------------------------------------------------------------------
86 {
87 if (!m_aChargeRingConfig || !m_aChargeRingConfig.IsIndexValid(id))
88 return -vector.One;
89
90 return m_aChargeRingConfig[id];
91 }
92
93 //------------------------------------------------------------------------------------------------
97 int FindDefaultChargeRingConfig(out vector foundConfig = -vector.One)
98 {
99 foundConfig = -vector.One;
101 {
102 return -1;
103 }
104
105 int configId = 0;
106 foreach (int i, vector config : m_aChargeRingConfig)
107 {
108 if (float.AlmostEqual(config[2], 0))
109 continue;
110
111 foundConfig = config;
112 configId = i;
113 break;
114 }
115
116 // this is possible when someone has forgotten to set at least one of the configs to be marked as default
117 // in such case we treat the first config as the default one
118 if (foundConfig == -vector.One)
119 {
120 foundConfig = m_aChargeRingConfig[configId];
121 Print("SCR_MortarShellGadgetComponent.FindDefaultChargeRingConfig: WARNING! There is not default config, as all configs have Z set to value different than 1! First config is going to be used as default for now, but this must be fixed in the prefab!", LogLevel.ERROR);
122 }
123
124 return configId;
125 }
126}
127
128class SCR_MortarShellGadgetComponent : SCR_GadgetComponent
129{
130 [RplProp(onRplName: "OnChargeRingReplicated")]
131 protected int m_iChargeRingConfigIndex;
133 protected ref ScriptInvokerVoid m_OnShellUsed;
134 protected SCR_MortarMuzzleComponent m_MortarMuzzleComp;
135 protected SlotManagerComponent m_SlotManagerComp;
136 protected string m_sRegisteredActionName;
137 protected float m_fFuzeTime;
138 protected bool m_bCustomFuzeTimeSet;
139 protected bool m_bCustomChargeRingSet;
141 static const protected string CHARGE_RING_CONFIG_MEMBER_NAME = "m_aChargeRingConfig";
142
143 //------------------------------------------------------------------------------------------------
148 static array<float> GetPrefabInitSpeedCoef(ResourceName resourceName, out int defaultConfigId)
149 {
151 if (!res.IsValid())
152 return null;
153
154 BaseResourceObject resObject = res.GetResource();
155 if (!resObject)
156 return null;
157
158 IEntitySource entitySrc = resObject.ToEntitySource();
159 if (!entitySrc)
160 return null;
161
163 array <float> output = {};
164 array <vector> chargeRingConfigs = {};
165 defaultConfigId = -1;
166 for (int i, componentsCount = entitySrc.GetComponentCount(); i < componentsCount; i++)
167 {
168 componentSrc = entitySrc.GetComponent(i);
169 if (!componentSrc)
170 continue;
171
172 if (!componentSrc.GetClassName().ToType().IsInherited(SCR_MortarShellGadgetComponent))
173 continue;
174
175 componentSrc.Get(CHARGE_RING_CONFIG_MEMBER_NAME, chargeRingConfigs);
176 if (!chargeRingConfigs || chargeRingConfigs.IsEmpty())
177 return null;
178
179 foreach (vector entry : chargeRingConfigs)
180 {
181 output.Insert(entry[1]);
182 if (defaultConfigId == -1 && !float.AlmostEqual(entry[2], 0))
183 defaultConfigId = i;//if there are multiple we only care about first one that was marked as default
184 }
185
186 break;
187 }
188
189 return output;
190 }
191
192 //------------------------------------------------------------------------------------------------
193 override EGadgetType GetType()
195 return EGadgetType.NONE;
196 }
197
198 //------------------------------------------------------------------------------------------------
199 override bool CanBeRaised()
201 return true;
202 }
203
204 //------------------------------------------------------------------------------------------------
205 override bool IsVisibleEquipped()
207 return true;
208 }
209
210 //------------------------------------------------------------------------------------------------
213 {
214 if (!m_OnShellUsed)
215 m_OnShellUsed = new ScriptInvokerVoid();
216
217 return m_OnShellUsed;
218 }
219
220 //------------------------------------------------------------------------------------------------
222 bool IsLoaded()
223 {
224 return m_bActivated;
225 }
226
227 //------------------------------------------------------------------------------------------------
229 bool IsUsingTimeFuze()
230 {
231 SCR_MortarShellGadgetComponentClass data = SCR_MortarShellGadgetComponentClass.Cast(GetComponentData(GetOwner()));
232 if (!data)
233 return false;
234
235 return data.IsUsingTimeFuze();
236 }
237
238 //------------------------------------------------------------------------------------------------
241 {
242 return m_fFuzeTime;
243 }
244
245 //------------------------------------------------------------------------------------------------
247 float GetMinFuzeTime()
248 {
249 SCR_MortarShellGadgetComponentClass data = SCR_MortarShellGadgetComponentClass.Cast(GetComponentData(GetOwner()));
250 if (!data)
251 return 1;
252
253 return data.GetMinFuzeTime();
254 }
255
256 //------------------------------------------------------------------------------------------------
258 float GetMaxFuzeTime()
259 {
260 SCR_MortarShellGadgetComponentClass data = SCR_MortarShellGadgetComponentClass.Cast(GetComponentData(GetOwner()));
261 if (!data)
262 return 1;
263
264 return data.GetMaxFuzeTime();
265 }
266
267 //------------------------------------------------------------------------------------------------
270 {
271 SCR_MortarShellGadgetComponentClass data = SCR_MortarShellGadgetComponentClass.Cast(GetComponentData(GetOwner()));
272 if (!data)
273 return 1;
274
275 return data.GetDetonationAltitude();
276 }
277
278 //------------------------------------------------------------------------------------------------
281 {
282 SCR_MortarShellGadgetComponentClass data = SCR_MortarShellGadgetComponentClass.Cast(GetComponentData(GetOwner()));
283 if (!data)
284 return 0;
285
286 return data.GetNumberOfChargeRingConfigurations();
287 }
288
289 //------------------------------------------------------------------------------------------------
292 {
294 if (!data)
295 return -vector.One;
296
297 return data.GetChargeRingConfig(m_iChargeRingConfigIndex);
298 }
299
300 //------------------------------------------------------------------------------------------------
303 {
304 return m_iChargeRingConfigIndex;
305 }
306
307 //------------------------------------------------------------------------------------------------
309 vector GetChargeRingConfig(int id)
310 {
311 SCR_MortarShellGadgetComponentClass data = SCR_MortarShellGadgetComponentClass.Cast(GetComponentData(GetOwner()));
312 if (!data)
313 return -vector.One;
314
315 return data.GetChargeRingConfig(id);
316 }
317
318 //------------------------------------------------------------------------------------------------
320 protected void OnChargeRingReplicated()
321 {
322 SetChargeRingConfig(m_iChargeRingConfigIndex, false, false);
323 }
324
325 //------------------------------------------------------------------------------------------------
330 void SetChargeRingConfig(int configId, bool silent = false, bool replicate = true)
331 {
333 if (!data)
334 return;
335
336 vector previousConfig = data.GetChargeRingConfig(m_iChargeRingConfigIndex);
337 vector newConfig = data.GetChargeRingConfig(configId);
338 m_bCustomChargeRingSet = true;
339 if (newConfig == -vector.One)
340 {
341 configId = data.FindDefaultChargeRingConfig(newConfig);
342 if (configId == -1)
343 configId = 0;
344
345 m_bCustomChargeRingSet = false;
346 }
347
348 int chargeRingDif = newConfig[0] - previousConfig[0];
349 m_iChargeRingConfigIndex = configId;
350
351 const IEntity owner = GetOwner();
353 if (!moveComp)
354 return;
355
356 moveComp.SetBulletCoef(newConfig[1]);
357 VisualiseChargeRings(newConfig[0]);
358
359 if (!silent)
360 {
361 if (chargeRingDif > 0)
362 SCR_SoundManagerModule.CreateAndPlayAudioSource(owner, SCR_SoundEvent.SOUND_SHELL_CHARGE_RING_ADD);
363 else if (chargeRingDif < 0)
364 SCR_SoundManagerModule.CreateAndPlayAudioSource(owner, SCR_SoundEvent.SOUND_SHELL_CHARGE_RING_REMOVE);
365 }
366
367 if (!replicate)
368 return;
369
370 RplComponent rplComp = SCR_EntityHelper.GetEntityRplComponent(GetOwner());
371 if (!rplComp || !rplComp.IsOwner())
372 return;
373
374 Replication.BumpMe();
375 }
376
377 //------------------------------------------------------------------------------------------------
381 {
382 SCR_VisibleInventoryItemComponent inventoryItemComp = SCR_VisibleInventoryItemComponent.Cast(GetOwner().FindComponent(SCR_VisibleInventoryItemComponent));
383 if (inventoryItemComp)
384 inventoryItemComp.SetHiddenInVicinity(true);
385
386 //Charge rings burn up in order to propel the projectile and because of that they shouldnt be visible when fired
388 }
389
390 //------------------------------------------------------------------------------------------------
393 protected void VisualiseChargeRings(int numberOfChargeRings)
394 {
395 array<EntitySlotInfo> outSlotInfos = {};
396 if (!m_SlotManagerComp || m_SlotManagerComp.GetSlotInfos(outSlotInfos) < 1)
397 return;
398
399 IEntity chargeRing;
400 foreach (int i, EntitySlotInfo slot : outSlotInfos)
401 {
402 if (!slot)
403 continue;
404
405 chargeRing = slot.GetAttachedEntity();
406 if (!chargeRing)
407 continue;
408
409 if (i < numberOfChargeRings)
410 chargeRing.SetFlags(EntityFlags.VISIBLE);
411 else
412 chargeRing.ClearFlags(EntityFlags.VISIBLE);
413 }
414 }
415
416 //------------------------------------------------------------------------------------------------
422 bool SetLoadedState(bool state, SCR_MortarMuzzleComponent mortarMuzzle = null, string fireActionName = "", IEntity user = null)
423 {
424 m_bActivated = state;
425 m_MortarMuzzleComp = mortarMuzzle;
426 if (!state)
427 {
428 GetGame().GetInputManager().RemoveActionListener(m_sRegisteredActionName, EActionTrigger.DOWN, UseShellCB);
429 return false;
430 }
431
432 if (!user || fireActionName.IsEmpty())
433 return false;
434
436 return true;
437
438 m_sRegisteredActionName = fireActionName;
439 GetGame().GetInputManager().AddActionListener(m_sRegisteredActionName, EActionTrigger.DOWN, UseShellCB);
440 return true;
441 }
442
443 //------------------------------------------------------------------------------------------------
445 protected void UseShellCB()
446 {
447 GetGame().GetInputManager().RemoveActionListener(m_sRegisteredActionName, EActionTrigger.DOWN, UseShellCB);
448
449 ToggleActive(true, SCR_EUseContext.CUSTOM);
450 }
451
452 //------------------------------------------------------------------------------------------------
453 override void OnToggleActive(bool state)
454 {
455 if (state && m_OnShellUsed)
456 m_OnShellUsed.Invoke();
457
458 if(m_MortarMuzzleComp)
459 {
460 m_MortarMuzzleComp.SetLoadingState(false);
461 SetLoadedState(false);
462 }
463 }
464
465 //------------------------------------------------------------------------------------------------
466 protected override void ModeSwitch(EGadgetMode mode, IEntity charOwner)
467 {
468 super.ModeSwitch(mode, charOwner);
469
470 if (mode != EGadgetMode.IN_HAND)
471 return;
472
473 if (m_bCustomChargeRingSet)
474 return;
475
476 if (!charOwner || charOwner != SCR_PlayerController.GetLocalControlledEntity())
477 return;
478
479 ChimeraCharacter character = ChimeraCharacter.Cast(charOwner);
480 if (!character)
481 return;
482
483 SCR_ShellConfig config = GetSavedConfig(character);
484 if (!config || config.GetChargeRingConfigId() == m_iChargeRingConfigIndex)
485 return;
486
487 SCR_CharacterControllerComponent controller = SCR_CharacterControllerComponent.Cast(character.GetCharacterController());
488 if (!controller)
489 return;
490
491 controller.SyncShellChargeRingConfig(this, config.GetChargeRingConfigId());
492 SetChargeRingConfig(config.GetChargeRingConfigId(), true, false);
493 }
494
495 //------------------------------------------------------------------------------------------------
498 override protected void ModeClear(EGadgetMode mode)
499 {
500 if (mode != EGadgetMode.IN_HAND)
501 return;
502
503 if (!m_MortarMuzzleComp)
504 return;
505
506 m_MortarMuzzleComp.SetLoadingState(false);
507 SetLoadedState(false);
508 }
509
510 //------------------------------------------------------------------------------------------------
512 void SetFuzeTime(float time)
513 {
515 if (!data)
516 return;
517
518 if (!data.IsUsingTimeFuze())
519 return;
520
521 m_fFuzeTime = Math.Clamp(time, data.GetMinFuzeTime(), data.GetMaxFuzeTime());
522
523 TimerTriggerComponent trigger = TimerTriggerComponent.Cast(GetOwner().FindComponent(TimerTriggerComponent));
524 if (!trigger)
525 return;
526
527 trigger.SetTimer(m_fFuzeTime);
528 }
529
530 //------------------------------------------------------------------------------------------------
533 {
534 SCR_CharacterControllerComponent controller = SCR_CharacterControllerComponent.Cast(character.GetCharacterController());
535 if (!controller)
536 return null;
537
538 EntityPrefabData shellPrefab = GetOwner().GetPrefabData();
539 if (!shellPrefab)
540 return null;
541
542 return controller.GetSavedShellConfig(shellPrefab);
543 }
544
545 //------------------------------------------------------------------------------------------------
547 float GetTimeToDetonation(float angle, bool isDirectFire)
548 {
549 IEntity owner = GetOwner();
551 if (!data)
552 return 0;
553
554 EntityPrefabData prefabData = owner.GetPrefabData();
555 if (!prefabData)
556 return 0;
557
558 BaseContainer prefab = prefabData.GetPrefab();
559 if (!prefab)
560 return 0;
561
562 IEntitySource entitySrc = prefab.ToEntitySource();
563 if (!entitySrc)
564 return 0;
565
566 vector chargeConfig = data.GetChargeRingConfig(m_iChargeRingConfigIndex);
567 angle = angle * Math.DEG2RAD;
568 float distance1, distance2, travelTime1, travelTime2;
569 distance1 = BallisticTable.GetDistanceOfProjectileSource(angle, travelTime1, entitySrc, chargeConfig[1], isDirectFire);
570
571 float detonationAltitude = data.GetDetonationAltitude();
572 distance2 = distance1 + detonationAltitude * 0.5;
573 if (isDirectFire)
574 distance2 = distance1 - detonationAltitude * 0.5;
575
576 BallisticTable.GetHeightFromProjectileSource(distance1, travelTime1, entitySrc, chargeConfig[1], isDirectFire);
577 BallisticTable.GetHeightFromProjectileSource(distance2, travelTime2, entitySrc, chargeConfig[1], isDirectFire);
578
579 if (travelTime2 < 0)
580 {
581 distance2 = distance1 - detonationAltitude * 0.5;
582 if (isDirectFire)
583 distance2 = distance1 + detonationAltitude * 0.5;
584
585 BallisticTable.GetHeightFromProjectileSource(distance2, travelTime2, entitySrc, chargeConfig[1], isDirectFire);
586 travelTime2 = Math.Lerp(travelTime1, travelTime1 - Math.AbsFloat(travelTime1 - travelTime2), 0.9);
587 }
588
589 return travelTime2 - Math.Max(data.GetVerticalImpactTimeOffset() - Math.AbsFloat(travelTime1 - travelTime2), 0);
590 }
591
592 //------------------------------------------------------------------------------------------------
593 protected override void EOnInit(IEntity owner)
594 {
595 super.EOnInit(owner);
596
598 if (data && data.IsUsingTimeFuze())
599 {
600 if (!owner.FindComponent(TimerTriggerComponent))
601 {
602 Print("SCR_MortarShellGadgetComponent.EOnInit: WARNING! "+owner.GetPrefabData().GetPrefabName()+" is missing TimerTriggerComponent and because of that fuze adjustment will not be avialable!", LogLevel.ERROR);
603 data.OverrideTimeFuzeConfig(false);
604 }
605
606 if (data.GetMaxFuzeTime() < data.GetMinFuzeTime())
607 {
608 Print("SCR_MortarShellGadgetComponent.EOnInit: WARNING! MaxFuzeTime is less than MinFuzeTime for "+owner.GetPrefabData().GetPrefabName()+". Please fix this in the actual prefab data!", LogLevel.WARNING);
609 data.OverrideTimeFuzeConfig(data.IsUsingTimeFuze(), data.GetMaxFuzeTime(), data.GetMinFuzeTime());
610 }
611
612 if (data.GetMaxFuzeTime() == data.GetMinFuzeTime())
613 {
614 Print("SCR_MortarShellGadgetComponent.EOnInit: WARNING! Prefab "+owner.GetPrefabData().GetPrefabName()+" has IsUsingTimeFuze set to true, while MIN and MAX times are the same. Because of that fuze time adjustment will not be avialable!.", LogLevel.ERROR);
615 data.OverrideTimeFuzeConfig(false);
616 }
617 else
618 {
619 SetFuzeTime(data.GetMinFuzeTime());
620 }
621 }
622
623 m_SlotManagerComp = SlotManagerComponent.Cast(owner.FindComponent(SlotManagerComponent));
624 m_iChargeRingConfigIndex = data.FindDefaultChargeRingConfig();
625 SetChargeRingConfig(m_iChargeRingConfigIndex, true, false);
626 m_bCustomChargeRingSet = false;
627 }
628
629 //------------------------------------------------------------------------------------------------
630 override bool RplSave(ScriptBitWriter writer)
631 {
633 if (data && data.IsUsingTimeFuze())
634 writer.WriteFloat(m_fFuzeTime);
635
636 writer.WriteBool(m_bCustomChargeRingSet);
637
638 bool hiddenInVicinity = false;
639 SCR_VisibleInventoryItemComponent inventoryItemComp = SCR_VisibleInventoryItemComponent.Cast(GetOwner().FindComponent(SCR_VisibleInventoryItemComponent));
640 if (inventoryItemComp)
641 hiddenInVicinity = inventoryItemComp.ShouldHideInVicinity();
642
643 writer.WriteBool(hiddenInVicinity);
644
645 return super.RplSave(writer);
646 }
647
648 //------------------------------------------------------------------------------------------------
649 override bool RplLoad(ScriptBitReader reader)
650 {
652 if (data && data.IsUsingTimeFuze())
653 {
654 reader.ReadFloat(m_fFuzeTime);
655 SetFuzeTime(m_fFuzeTime);
656 }
657
658 bool hiddenInVicinity;
659 reader.ReadBool(m_bCustomChargeRingSet);
660 reader.ReadBool(hiddenInVicinity);
661
662 SCR_VisibleInventoryItemComponent inventoryItemComp = SCR_VisibleInventoryItemComponent.Cast(GetOwner().FindComponent(SCR_VisibleInventoryItemComponent));
663 // we only hide it when it was fired and in such case charge rings shouldnt be visible
664 if (inventoryItemComp && hiddenInVicinity)
666
667 return super.RplLoad(reader);
668 }
669}
AddonBuildInfoTool id
ArmaReforgerScripted GetGame()
Definition game.c:1398
ResourceName resourceName
Definition SCR_AIGroup.c:66
override bool RplLoad(ScriptBitReader reader)
SCR_CacheNoteComponentClass ScriptComponentClass RplProp()] protected ref array< string > m_aLines
override bool RplSave(ScriptBitWriter writer)
void ModeClear(EGadgetMode mode)
override void ModeSwitch(EGadgetMode mode, IEntity charOwner)
override EGadgetType GetType()
override void OnToggleActive(bool state)
SCR_CharacterSoundComponentClass GetComponentData()
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
override bool IsVisibleEquipped()
override bool CanBeRaised()
SCR_EUseContext
Get all prefabs that have the spawner data
void ToggleActive()
Toggle map light.
void SetChargeRingConfig(int configId, bool silent=false, bool replicate=true)
void SetFuzeTime(float time)
float GetTimeToDetonation(float angle, bool isDirectFire)
Retrieves information about the time of flight for this shell prefab.
SCR_ShellConfig GetSavedConfig(notnull ChimeraCharacter character)
Retrieves locally saved data about manual adjustment of the fuze that player set for this shell type.
void VisualiseChargeRings(int numberOfChargeRings)
vector GetCurentChargeRingConfig()
void OnShellFired(notnull BaseMuzzleComponent muzzle)
ScriptInvokerVoid GetOnShellUsed()
void UseShellCB()
Callback used to tell if user wants to fire the shell now.
vector GetChargeRingConfig(int id)
float GetDetonationAltitude()
int GetCurentChargeRingConfigId()
void OnChargeRingReplicated()
Callback method that will be triggered when m_iChargeRingConfigIndex is bumped for replication.
bool SetLoadedState(bool state, SCR_MortarMuzzleComponent mortarMuzzle=null, string fireActionName="", IEntity user=null)
int GetNumberOfChargeRingConfigurations()
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
ScriptInvokerBase< ScriptInvokerVoidMethod > ScriptInvokerVoid
Adds ability to attach an object to a slot.
proto external Managed FindComponent(typename typeName)
proto external EntityFlags SetFlags(EntityFlags flags, bool recursively=false)
proto external EntityPrefabData GetPrefabData()
proto external EntityFlags ClearFlags(EntityFlags flags, bool recursively=false)
Definition Math.c:13
Main replication API.
Definition Replication.c:14
Object holding reference to resource. In destructor release the resource.
Definition Resource.c:25
SCR_ShellConfig GetSavedShellConfig(notnull EntityPrefabData shellPrefab)
void SyncShellChargeRingConfig(notnull SCR_MortarShellGadgetComponent shellComp, int configId)
static RplComponent GetEntityRplComponent(notnull IEntity entity)
int FindDefaultChargeRingConfig(out vector foundConfig=-vector.One)
void OverrideTimeFuzeConfig(bool shouldBeUsed=false, float min=0, float max=0)
static IEntity GetLocalControlledEntity()
IEntity GetOwner()
Owner entity of the fuel tank.
override void EOnInit(IEntity owner)
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
SCR_FieldOfViewSettings Attribute
EntityFlags
Various entity flags.
Definition EntityFlags.c:14
EActionTrigger