Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_EditableFactionComponent.c
Go to the documentation of this file.
1[ComponentEditorProps(category: "GameScripted/Editor (Editables)", description: "", icon: "WBData/ComponentEditorProps/componentEditor.png")]
3{
4 //------------------------------------------------------------------------------------------------
5 static override bool GetEntitySourceBudgetCost(IEntityComponentSource editableEntitySource, out notnull array<ref SCR_EntityBudgetValue> budgetValues)
6 {
7 // Avoid fallback entityType cost
8 return true;
9 }
10}
11
13
15class SCR_EditableFactionComponent : SCR_EditableEntityComponent
16{
17 [Attribute()]
18 protected ref array<ref SCR_ArsenalItemCountConfig> m_MaxCountPerItemType;
19
20 protected int m_iFactionIndex = -1;
21
22 protected Faction m_Faction;
24 protected ref SCR_UIInfo m_Info;
25
26 //Faction info
27 protected int m_iSpawnPointCount = -1;
28 protected int m_iTaskCount = -1;
29
30
31 //Script invokers
34
35 //Arsenal
38
39 private bool m_bQueuedSpawnpointChanges = false;
40 private bool m_bQueuedTaskCountChanged = false;
41
42 //------------------------------------------------------------------------------------------------
45 void SetFactionIndex(int index)
46 {
47 if (m_iFactionIndex != -1)
48 return;
49
52 }
53
54 //------------------------------------------------------------------------------------------------
57 int GetFactionIndex()
58 {
59 return m_iFactionIndex;
60 }
61
62 //------------------------------------------------------------------------------------------------
63 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
64 protected void SetFactionIndexBroadcast(int index)
65 {
66 FactionManager factionManager = GetGame().GetFactionManager();
67 if (!factionManager)
68 return;
69
70 //--- Find faction on the manager (factions are local, that's why they're identified by index)
71 m_Faction = factionManager.GetFactionByIndex(index);
72 if (!m_Faction)
73 return;
74
76 if (!m_ScrFaction)
77 return;
78
79 //--- Set the value
81
82 //--- Copy UI info into editable entity
85
86 //--- Register the faction back in the manager on local machine
88 if (delegatesManager)
89 delegatesManager.SetFactionDelegate(m_Faction, this);
90
91 //--- Hide non-playable faction
92 SetVisible(m_ScrFaction.IsPlayable());
93
94 //If Workbench or client
95 if (SCR_Global.IsEditMode(GetOwner()) || Replication.IsClient())
96 return;
97
98 //Init count. Call one frame later to make sure the counts are correct
99 GetGame().GetCallqueue().CallLater(InitSpawnPointCount);
100 GetGame().GetCallqueue().CallLater(InitTaskCount);
101
102 //Spawnpoints
103 SCR_SpawnPoint.Event_OnSpawnPointCountChanged.Insert(OnSpawnPointCountChanged);
104 SCR_SpawnPoint.Event_SpawnPointFactionAssigned.Insert(OnSpawnpointFactionChanged);
105
106 //Tasks
107 SCR_TaskSystem.GetOnTaskAdded().Insert(OnTaskAdded);
108 SCR_TaskSystem.GetOnTaskRemoved().Insert(OnTaskRemoved);
109 }
110
111 //======================================== FACTION RELATIONSHIP REPLICATION ========================================\\
112 //------------------------------------------------------------------------------------------------
115 void SetFactionFriendly_S(int FactionIndex)
116 {
117 Rpc(SetFactionFriendlyBroadcast, FactionIndex);
118 }
119
120 //------------------------------------------------------------------------------------------------
121 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
122 protected void SetFactionFriendlyBroadcast(int FactionIndex)
123 {
124 SCR_FactionManager factionManager = SCR_FactionManager.Cast(GetGame().GetFactionManager());
126 return;
127
128 SCR_Faction refFaction = SCR_Faction.Cast(m_Faction);
129 if (!refFaction)
130 return;
131
132 SCR_Faction scrFaction = SCR_Faction.Cast(factionManager.GetFactionByIndex(FactionIndex));
133 if (!scrFaction)
134 return;
135
136 factionManager.SetFactionsFriendly(refFaction, scrFaction, updateAIs: false);
137 }
138
139 //------------------------------------------------------------------------------------------------
142 void SetFactionFriendlyOneWay_S(int FactionIndex)
143 {
145 }
146
147 //------------------------------------------------------------------------------------------------
148 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
149 protected void RpcDo_SetFactionFriendlyOneWayBroadcast(int FactionIndex)
150 {
151 SCR_FactionManager factionManager = SCR_FactionManager.Cast(GetGame().GetFactionManager());
153 return;
154
155 SCR_Faction refFaction = SCR_Faction.Cast(m_Faction);
156 if (!refFaction)
157 return;
158
159 SCR_Faction scrFaction = SCR_Faction.Cast(factionManager.GetFactionByIndex(FactionIndex));
160 if (!scrFaction)
161 return;
162
163 factionManager.SetFactionFriendlyOneWay(scrFaction, refFaction);
164 }
165
166 //------------------------------------------------------------------------------------------------
169 void SetFactionHostile_S(int FactionIndex)
170 {
171 Rpc(SetFactionHostileBroadcast, FactionIndex);
172 }
173
174 //------------------------------------------------------------------------------------------------
175 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
176 protected void SetFactionHostileBroadcast(int FactionIndex)
177 {
178 SCR_FactionManager factionManager = SCR_FactionManager.Cast(GetGame().GetFactionManager());
180 return;
181
182 SCR_Faction refFaction = SCR_Faction.Cast(m_Faction);
183 if (!refFaction)
184 return;
185
186 SCR_Faction scrFaction = SCR_Faction.Cast(factionManager.GetFactionByIndex(FactionIndex));
187 if (!scrFaction)
188 return;
189
190 factionManager.SetFactionsHostile(refFaction, scrFaction, updateAIs: false);
191 }
192
193 //======================================== FACTION SPAWNPOINTS ========================================\\
194 //------------------------------------------------------------------------------------------------
195 // Called on server
196 protected void InitSpawnPointCount()
197 {
198 int spawnPointCount = SCR_SpawnPoint.GetSpawnPointCountForFaction(m_Faction.GetFactionKey());
199
200 InitSpawnPointCountBroadcast(spawnPointCount);
201 Rpc(InitSpawnPointCountBroadcast, spawnPointCount);
202 }
203
204 //------------------------------------------------------------------------------------------------
205 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
206 protected void InitSpawnPointCountBroadcast(int spawnPointCount)
207 {
208 m_iSpawnPointCount = spawnPointCount;
209 }
210
211 //------------------------------------------------------------------------------------------------
213 {
214 QueueSpawnPointChanged(m_Faction.GetFactionKey());
215 }
216
217 //---------------------------------------- On Faction Spawnpoints changed ----------------------------------------\\
218 //! Queues a spawn point change. We only have to notify once per frame that spawnpoints changed, instead of once per changed spawnpoint.
220 private void QueueSpawnPointChanged(FactionKey faction)
221 {
222 //changes already queued
223 if(m_bQueuedSpawnpointChanges)
224 return;
225
226 m_bQueuedSpawnpointChanges = true;
227 GetGame().GetCallqueue().CallLater(ProcessQueuedSpawnPointChanges);
228 }
229
230 //------------------------------------------------------------------------------------------------
233 protected void OnSpawnPointCountChanged(string factionKey)
234 {
235 if (factionKey != m_Faction.GetFactionKey())
236 return;
237
238 QueueSpawnPointChanged(factionKey);
239 }
240
241 //------------------------------------------------------------------------------------------------
246 {
247 m_bQueuedSpawnpointChanges = false;
248
249 int spawnPointCount = SCR_SpawnPoint.GetSpawnPointCountForFaction(m_Faction.GetFactionKey());
250
251 //No change
252 if (spawnPointCount == m_iSpawnPointCount)
253 return;
254
255 OnSpawnPointsChanged(m_Faction.GetFactionKey());
256 }
257
258 //------------------------------------------------------------------------------------------------
259 // Called on server
260 protected void OnSpawnPointsChanged(string factionKey)
261 {
262 int spawnPointCount = SCR_SpawnPoint.GetSpawnPointCountForFaction(m_Faction.GetFactionKey());
263
264 //Notification no spawns
265 if (spawnPointCount == 0)
266 {
267 int thisRplId = Replication.FindItemId(this);
268 SCR_NotificationsComponent.SendToUnlimitedEditorPlayers(ENotification.EDITOR_FACTION_NO_SPAWNS, thisRplId);
269 }
270
271 //Update Spawn count
272 OnSpawnPointCountChangedBroadcast(spawnPointCount);
273
274 Rpc(OnSpawnPointCountChangedBroadcast, spawnPointCount);
275 }
276
277 //------------------------------------------------------------------------------------------------
278 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
279 protected void OnSpawnPointCountChangedBroadcast(int spawnPointCount)
280 {
281 m_iSpawnPointCount = spawnPointCount;
282 Event_OnSpawnPointCountChanged.Invoke(m_Faction, spawnPointCount);
283 }
284
285 //======================================== FACTION TASKS ========================================\\
286
287 //------------------------------------------------------------------------------------------------
288 // Called on server
289 protected void InitTaskCount()
290 {
291 SCR_TaskSystem taskSystem = SCR_TaskSystem.GetInstance();
292 if (!taskSystem)
293 return;
294
295 array<SCR_Task> tasks = {};
296 taskSystem.GetTasksByState(tasks, SCR_ETaskState.CREATED, m_Faction.GetFactionKey());
297
298 InitTaskCountBroadcast(tasks.Count());
299 Rpc(InitTaskCountBroadcast, tasks.Count());
300 }
301
302 //------------------------------------------------------------------------------------------------
303 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
304 protected void InitTaskCountBroadcast(int factionTaskCount)
305 {
306 m_iTaskCount = factionTaskCount;
307 }
308
309 //---------------------------------------- Faction Task Count Changed ----------------------------------------\\
310 //Called on server
311 protected void OnTaskAdded(notnull SCR_Task task)
312 {
314 }
315
316 //------------------------------------------------------------------------------------------------
317 protected void OnTaskRemoved(notnull SCR_Task task)
318 {
320 }
321
322 //------------------------------------------------------------------------------------------------
325 protected void QueueTaskCountChanges(notnull SCR_Task task)
326 {
327 if(m_bQueuedTaskCountChanged)
328 return;
329
330 SCR_TaskSystem taskSystem = SCR_TaskSystem.GetInstance();
331 if (!taskSystem)
332 return;
333
334 if (!task)
335 return;
336
337 array<string> factionKeys = task.GetOwnerFactionKeys();
338 if (factionKeys.IsEmpty() || !factionKeys.Contains(m_Faction.GetFactionKey()))
339 return;
340
341 m_bQueuedTaskCountChanged = true;
342 GetGame().GetCallqueue().CallLater(OnTaskCountChanged);
343
344 }
345
346 //------------------------------------------------------------------------------------------------
350 protected void OnTaskCountChanged()
351 {
352 m_bQueuedTaskCountChanged = false;
353
354 SCR_TaskSystem taskSystem = SCR_TaskSystem.GetInstance();
355 if (!taskSystem)
356 return;
357
358 array<SCR_Task> tasks = {};
359 taskSystem.GetTasksByState(tasks, SCR_ETaskState.CREATED | SCR_ETaskState.ASSIGNED | SCR_ETaskState.PROGRESSED , m_Faction.GetFactionKey());
360
361 int tasksCount = tasks.Count();
362
363 //Safty as task Update is called on any change in tasks, but it should catch all the OnTaskUpdates types regardless. So if the same value is given don't do anything
364 if (m_iTaskCount == tasksCount)
365 return;
366
367 //Update task count
368 OnTaskCountChangedBroadcast(tasksCount);
369 Rpc(OnTaskCountChangedBroadcast, tasksCount);
370 }
371
372 //------------------------------------------------------------------------------------------------
373 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
374 protected void OnTaskCountChangedBroadcast(int factionTaskCount)
375 {
376 m_iTaskCount = factionTaskCount;
377 Event_OnTaskCountChanged.Invoke(m_Faction, factionTaskCount);
378 }
379
380 //======================================== FACTION PLAYABLE ========================================\\
381
382 //------------------------------------------------------------------------------------------------
385 void SetFactionPlayableServer(bool factionPlayable)
386 {
387 //If client cancel
388 if (Replication.IsClient())
389 return;
390
391 if (m_ScrFaction.IsPlayable() == factionPlayable)
392 return;
393
394 //Update enabled
395 OnFactionplayableChangedBroadcast(factionPlayable);
396 Rpc(OnFactionplayableChangedBroadcast, factionPlayable);
397 }
398
399 //------------------------------------------------------------------------------------------------
400 // Broadcast to client
401 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
402 protected void OnFactionplayableChangedBroadcast(bool factionPlayable)
403 {
404 m_ScrFaction.SetIsPlayable(factionPlayable, true);
405
406 //--- Hide non-playable faction, so it's unselected if it was currently selected
407 SetVisible(factionPlayable);
408 }
409
410 //======================================== GETTERS ========================================\\
411
412 //------------------------------------------------------------------------------------------------
416 {
417 return m_iSpawnPointCount;
418 }
419
420 //------------------------------------------------------------------------------------------------
424 {
425 return m_iTaskCount;
426 }
427
428 //------------------------------------------------------------------------------------------------
435
436 //------------------------------------------------------------------------------------------------
443
444 //------------------------------------------------------------------------------------------------
450
451 //------------------------------------------------------------------------------------------------
454 {
455 m_AllowedArsenalItemTypes = allowedArsenalItemTypes;
456 }
457
458 //------------------------------------------------------------------------------------------------
459 override bool CanDuplicate(out notnull set<SCR_EditableEntityComponent> outRecipients)
460 {
461 return false;
462 }
463
464 //------------------------------------------------------------------------------------------------
466 {
467 return m_Faction;
468 }
469
470 //------------------------------------------------------------------------------------------------
471 override bool GetPos(out vector pos)
472 {
473 return false;
474 }
475
476 //------------------------------------------------------------------------------------------------
477 override bool GetEntityBudgetCost(out notnull array<ref SCR_EntityBudgetValue> outBudgets, IEntity owner = null)
478 {
479 // Return true and empty cost array, avoid fallback entityType cost
480 return true;
481 }
482
483 //------------------------------------------------------------------------------------------------
484 override void OnPostInit(IEntity owner)
485 {
486 super.OnPostInit(owner);
487
488 owner.SetFlags(EntityFlags.NO_LINK, true);
489 }
490
491 //======================================== RPL ========================================\\
492
493 //------------------------------------------------------------------------------------------------
494 override bool RplSave(ScriptBitWriter writer)
495 {
496 if (!super.RplSave(writer))
497 return false;
498
499 writer.WriteInt(m_iFactionIndex);
500 writer.WriteInt(m_iSpawnPointCount);
501 writer.WriteInt(m_iTaskCount);
502 writer.WriteBool(m_ScrFaction.IsPlayable());
503
504 SCR_Faction factionRef = SCR_Faction.Cast(m_Faction);
505 if (!factionRef)
506 {
507 writer.WriteInt(0);
508 return true;
509 }
510
511 SCR_FactionManager factionManager = SCR_FactionManager.Cast(GetGame().GetFactionManager());
512 if (!factionManager)
513 {
514 writer.WriteInt(0);
515 return true;
516 }
517
518 array<Faction> factions = {};
519 factionManager.GetFactionsList(factions);
520 SCR_Faction scrFaction;
521
522 // Make sure to write the number of factions so the client doesn't
523 // end up reading beyond its bounds. This shouldn't really be necessary
524 // because the number of factions is set in config. However, we need
525 // this for logging so we actually know where a JIP issue comes from:
526 // https://jira.bistudio.com/browse/ARMA4-63824
527 int factionsCount = 0;
528 foreach (Faction faction : factions)
529 {
530 scrFaction = SCR_Faction.Cast(faction);
531 if (!scrFaction)
532 continue;
533
534 ++factionsCount;
535 }
536 writer.WriteInt(factionsCount);
537
538 // Write if faction is hostile or friendly
539 foreach (Faction faction : factions)
540 {
541 scrFaction = SCR_Faction.Cast(faction);
542 if (!scrFaction)
543 continue;
544
545 bool isFriendly = scrFaction.DoCheckIfFactionFriendly(factionRef);
546 writer.WriteBool(isFriendly);
547 }
548
549 return true;
550 }
551
552 //------------------------------------------------------------------------------------------------
553 override bool RplLoad(ScriptBitReader reader)
554 {
555 if (!super.RplLoad(reader))
556 return false;
557
558 int spawnPointCount, taskCount;
559 bool isPlayable;
560
561 reader.ReadInt(m_iFactionIndex);
562 reader.ReadInt(spawnPointCount);
563 reader.ReadInt(taskCount);
564 reader.ReadBool(isPlayable);
565
566 m_ScrFaction.InitFactionIsPlayable(isPlayable);
568 InitSpawnPointCountBroadcast(spawnPointCount);
569 InitTaskCountBroadcast(taskCount);
570
571 int factionsCntServer = 0;
572 reader.ReadInt(factionsCntServer);
573 if (factionsCntServer == 0)
574 return true;
575
576 SCR_Faction factionRef = SCR_Faction.Cast(m_Faction);
577 if (!factionRef)
578 {
579 // Consume the rest of the bits. The server writes as many bits as there are factions.
580 bool dummy;
581 for (int i=0; i<factionsCntServer; ++i)
582 reader.ReadBool(dummy);
583
584 return true;
585 }
586
587 SCR_FactionManager factionManager = SCR_FactionManager.Cast(GetGame().GetFactionManager());
588 if (!factionManager)
589 {
590 // Consume the rest of the bits. The server writes as many bits as there are factions.
591 bool dummy;
592 for (int i=0; i<factionsCntServer; ++i)
593 reader.ReadBool(dummy);
594
595 return true;
596 }
597
598 array<Faction> factions = {};
599 factionManager.GetFactionsList(factions);
600 int factionManagerFactionCnt = factions.Count();
601 if (factionManagerFactionCnt != factionsCntServer)
602 {
603 Print(string.Format("Factions count mismatch. Local:%1, server:%2", factionManagerFactionCnt, factionsCntServer), LogLevel.WARNING);
604
605 // Consume the rest of the bits. The server writes as many bits as there are factions.
606 bool dummy;
607 for (int i=0; i<factionsCntServer; ++i)
608 reader.ReadBool(dummy);
609
610 return true;
611 }
612
613 SCR_Faction scrFaction;
614 bool isFriendly;
615
616 // Verify faction validity.
617 int factionsCnt = 0;
618 foreach (Faction faction : factions)
619 {
620 scrFaction = SCR_Faction.Cast(faction);
621 if (!scrFaction)
622 continue;
623
624 ++factionsCnt;
625 }
626
627 if (factionsCnt != factionsCntServer)
628 {
629 Print(string.Format("SCR_Faction factions count mismatch. Local:%1, server:%2", factionsCnt, factionsCntServer), LogLevel.WARNING);
630
631 // Consume the rest of the bits. The server writes as many bits as there are factions.
632 bool dummy;
633 for (int i=0; i<factionsCntServer; ++i)
634 reader.ReadBool(dummy);
635
636 return true;
637 }
638
639 // Read if faction is hostile or friendly and set the faction to hostile or friendly
640 foreach (Faction faction : factions)
641 {
642 scrFaction = SCR_Faction.Cast(faction);
643 if (!scrFaction)
644 continue;
645
646 reader.ReadBool(isFriendly);
647
648 if (isFriendly)
649 factionManager.SetFactionFriendlyOneWay(factionRef, scrFaction);
650 else
651 factionManager.SetFactionsHostile(factionRef, scrFaction);
652 }
653
654 return true;
655 }
656
657 //------------------------------------------------------------------------------------------------
658 // destructor
660 {
661 if (m_Faction && Replication.IsServer())
662 {
663 //Spawnpoints
664 SCR_SpawnPoint.Event_OnSpawnPointCountChanged.Remove(OnSpawnPointsChanged);
665 SCR_SpawnPoint.Event_SpawnPointFactionAssigned.Remove(OnSpawnpointFactionChanged);
666
667 //Tasks
668 SCR_TaskSystem.GetInstance().GetOnTaskAdded().Remove(OnTaskAdded);
669 SCR_TaskSystem.GetInstance().GetOnTaskRemoved().Remove(OnTaskRemoved);
670 }
671 }
672}
ENotification
string FactionKey
Faction unique identifier type.
Definition FactionKey.c:2
ArmaReforgerScripted GetGame()
Definition game.c:1398
int GetFactionIndex()
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
Faction m_Faction
ref SCR_HintUIInfo m_Info
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
SCR_EArsenalItemType
void SetAllowedArsenalItemTypes(SCR_EArsenalItemType allowedArsenalItemTypes)
void QueueTaskCountChanges(notnull SCR_Task task)
void OnFactionplayableChangedBroadcast(bool factionPlayable)
void OnTaskAdded(notnull SCR_Task task)
void OnSpawnPointsChanged(string factionKey)
void OnTaskCountChanged()
void SetFactionHostileBroadcast(int FactionIndex)
void InitTaskCountBroadcast(int factionTaskCount)
ref ScriptInvoker Event_OnSpawnPointCountChanged
void SetFactionFriendly_S(int FactionIndex)
void SetFactionFriendlyOneWay_S(int FactionIndex)
void SetFactionHostile_S(int FactionIndex)
void RpcDo_SetFactionFriendlyOneWayBroadcast(int FactionIndex)
void OnTaskCountChangedBroadcast(int factionTaskCount)
ref map< SCR_EArsenalItemType, int > m_aCurrentItemTaken
void ~SCR_EditableFactionComponent()
ScriptInvoker GetOnSpawnPointCountChanged()
SCR_EArsenalItemType m_AllowedArsenalItemTypes
void SetFactionFriendlyBroadcast(int FactionIndex)
ref ScriptInvoker Event_OnTaskCountChanged
void InitSpawnPointCount()
void ProcessQueuedSpawnPointChanges()
int GetFactionSpawnPointCount()
void OnTaskRemoved(notnull SCR_Task task)
SCR_EArsenalItemType GetAllowedArsenalItemTypes()
int GetFactionTasksCount()
ScriptInvoker GetOnTaskCountChanged()
void InitSpawnPointCountBroadcast(int spawnPointCount)
void OnSpawnPointCountChanged(string factionKey)
SCR_Faction m_ScrFaction
void OnSpawnpointFactionChanged(SCR_SpawnPoint spawnPoint)
void SetFactionIndexBroadcast(int index)
void SetFactionPlayableServer(bool factionPlayable)
void OnSpawnPointCountChangedBroadcast(int spawnPointCount)
void SCR_FactionManager(IEntitySource src, IEntity parent)
void SCR_Task(IEntitySource src, IEntity parent)
Definition SCR_Task.c:1938
SCR_ETaskState
Definition SCR_Task.c:3
void Rpc(func method, void p0=NULL, void p1=NULL, void p2=NULL, void p3=NULL, void p4=NULL, void p5=NULL, void p6=NULL, void p7=NULL)
proto external EntityFlags SetFlags(EntityFlags flags, bool recursively=false)
Main replication API.
Definition Replication.c:14
void SetFactionDelegate(Faction faction, SCR_EditableFactionComponent delegate)
static SCR_DelegateFactionManagerComponent GetInstance()
override bool RplLoad(ScriptBitReader reader)
bool CanDuplicate(out notnull set< SCR_EditableEntityComponent > outRecipients)
override bool RplSave(ScriptBitWriter writer)
bool GetEntityBudgetCost(out notnull array< ref SCR_EntityBudgetValue > outBudgets, IEntity owner=null)
override bool DoCheckIfFactionFriendly(Faction faction)
static bool IsEditMode()
Definition Functions.c:1566
Spawn point entity defines positions on which players can possibly spawn.
static SCR_UIInfo CreateInfo(UIInfo source)
Definition SCR_UIInfo.c:146
Definition Types.c:486
IEntity GetOwner()
Owner entity of the fuel tank.
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
void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition=RplCondition.None, string customConditionName="")
Definition EnNetwork.c:95
RplRcver
Definition RplRcver.c:59
RplChannel
Communication channel. Reliable is guaranteed to be delivered. Unreliable not.
Definition RplChannel.c:14
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134