Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_GroupTaskManagerComponent.c
Go to the documentation of this file.
3typedef ScriptInvokerBase<ScriptInvokerGroupTaskSetMethod> ScriptInvokerGroupTaskSet;
4
5void ScriptInvokerRequestedGroupTaskSetMethod(SCR_Task task, int byPlayerID, int requesterGroupId);
7typedef ScriptInvokerBase<ScriptInvokerRequestedGroupTaskSetMethod> ScriptInvokerRequestedGroupTaskSet;
8
9[ComponentEditorProps(category: "GameScripted/Tasks", description: "Group task manager helps set groups to tasks, attach to game mode entity")]
13
15{
16 [Attribute("{8FD30741F5E75C87}Configs/Task/GroupTaskRelevanceConfig.conf", desc: "Config with group task relevance", params: "conf class=SCR_GroupTaskRelevanceConfig")]
17 protected ref SCR_GroupTaskRelevanceConfig m_GroupTaskRelevanceConfig;
18
19 [Attribute("1", desc:"Enables assigning frequencies", category:"Frequency settings")]
20 protected bool m_bEnabledAssigningFrequencies;
21
22 [Attribute("200", desc:"The frequency offset used to assign new frequencies", params:"0 inf", category:"Frequency settings")]
23 protected int m_iTaskFrequencyOffset;
24
25 [Attribute("45000", desc:"Min frequency", params:"0 inf", category:"Frequency settings")]
26 protected int m_iTaskFrequencyMin;
27
28 [Attribute("54000", desc:"Max frequency", params:"0 inf", category: "Frequency settings")]
29 protected int m_iTaskFrequencyMax;
30
31 [Attribute(desc:"List of tasks to which frequency will be assigned in the min, max range", category: "Frequency settings")]
32 protected ref array<string> m_aAllowedTasksWithFrequencies;
33
34 [RplProp()]
35 protected ref array<bool> m_aFreeFactionFrequency = {};
36
39 protected FactionManager m_FactionManager;
40 protected RplComponent m_RplComponent;
41
46
47 protected static SCR_GroupTaskManagerComponent s_Instance;
48
49 //------------------------------------------------------------------------------------------------
50 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
51 protected void RpcDo_AddTaskFrequency(RplId taskRplId, int frequency)
52 {
53 m_mUsedFrequenciesByTaskMap.Set(taskRplId, frequency);
54 }
55
56 //------------------------------------------------------------------------------------------------
57 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
58 protected void RpcDo_RemoveTaskFrequency(RplId taskRplId)
59 {
60 m_mUsedFrequenciesByTaskMap.Remove(taskRplId);
61 }
62
63 //------------------------------------------------------------------------------------------------
67 {
68 return m_bEnabledAssigningFrequencies;
69 }
70
71 //------------------------------------------------------------------------------------------------
75 {
76 int factionIndex = m_FactionManager.GetFactionIndex(faction);
77 if (!m_aFreeFactionFrequency || !m_aFreeFactionFrequency.IsIndexValid(factionIndex))
78 return false;
79
80 return m_aFreeFactionFrequency[factionIndex];
81 }
82
83 //------------------------------------------------------------------------------------------------
84 protected void SetFreeFrequencyForFaction(notnull Faction faction, bool isFree)
85 {
86 int factionIndex = m_FactionManager.GetFactionIndex(faction);
87 if (!m_aFreeFactionFrequency || !m_aFreeFactionFrequency.IsIndexValid(factionIndex))
88 return;
89
90 m_aFreeFactionFrequency[factionIndex] = isFree;
91
92 Replication.BumpMe();
93 }
94
95 //------------------------------------------------------------------------------------------------
96 protected string GetTaskPrefabClassName(ResourceName taskPrefabName)
97 {
98 Resource resource = BaseContainerTools.LoadContainer(taskPrefabName);
99 if (!resource || !resource.IsValid())
100 {
101 Print("Task prefab resource name is not valid", LogLevel.WARNING);
102 return string.Empty;
103 }
104
105 BaseResourceObject resourceObject = resource.GetResource();
106 if (!resourceObject)
107 return string.Empty;
108
109 BaseContainer container = resourceObject.ToBaseContainer();
110 return container.GetClassName();
111 }
112
113 //------------------------------------------------------------------------------------------------
117 bool CanCreateNewTaskWithResourceName(ResourceName taskPrefabResourceName, notnull Faction faction)
118 {
119 return CanCreateNewTaskWithClassName(GetTaskPrefabClassName(taskPrefabResourceName), faction);
120 }
121
122 //------------------------------------------------------------------------------------------------
126 bool CanCreateNewTaskWithTypename(typename taskTypename, notnull Faction faction)
127 {
128 return CanCreateNewTaskWithClassName(taskTypename.ToString(), faction);
129 }
130
131 //------------------------------------------------------------------------------------------------
135 bool CanCreateNewTaskWithClassName(string taskClassName, notnull Faction faction)
136 {
137 if (taskClassName == string.Empty)
138 {
139 Print("Task prefab class name is not set", LogLevel.WARNING);
140 return false;
141 }
142
143 // Ignore free frequency check if task is not in list
144 if (!m_aAllowedTasksWithFrequencies.Contains(taskClassName))
145 return true;
146
147 if (m_RplComponent.IsProxy())
148 return IsAnyFrequencyFreeForFaction(faction);
149
150 return GetFreeFrequency(faction) != -1;
151 }
152
153 //------------------------------------------------------------------------------------------------
157 {
159 return false;
160
161 string taskClassName = task.Type().ToString();
162 if (taskClassName == string.Empty)
163 {
164 Print("Task prefab class name is not set", LogLevel.WARNING);
165 return false;
166 }
167
168 if (m_aAllowedTasksWithFrequencies.Contains(taskClassName))
169 return true;
170
171 return false;
172 }
173
174 //------------------------------------------------------------------------------------------------
178 {
179 RplId taskRplId = GetTaskRplId(task);
180 int frequency = 0;
181 if (!taskRplId.IsValid())
182 Print("Task rplId is not valid", LogLevel.WARNING);
183 else if (!m_mUsedFrequenciesByTaskMap.Find(taskRplId, frequency))
184 Print("Frequency not found", LogLevel.WARNING);
185
186 return frequency;
187 }
188
189 //------------------------------------------------------------------------------------------------
193 SCR_Task GetTaskByFrequency(notnull Faction faction, int frequency)
194 {
195 if (!m_TaskSystem || frequency <= 0)
196 return null;
197
198 array<SCR_Task> tasks = {};
199 m_TaskSystem.GetTasksByState(tasks, SCR_ETaskState.CREATED | SCR_ETaskState.ASSIGNED, faction.GetFactionKey());
200
201 foreach (SCR_Task task : tasks)
202 {
203 if (!task)
204 continue;
205
206 int assignedFrequency = GetTaskFrequency(task);
207 if (assignedFrequency != frequency)
208 continue;
209
210 return task;
211 }
212
213 return null;
214 }
215
216 //------------------------------------------------------------------------------------------------
220 {
221 SCR_TaskData data = task.GetTaskData();
222 if (data && data.m_UIInfo)
223 {
224 return data.m_UIInfo.GetTranslatedName();
225 }
226
227 return string.Empty;
228 }
229
230 //------------------------------------------------------------------------------------------------
234 {
235 Faction faction;
236 foreach (string factionKey : task.GetTaskData().m_aOwnerFactionKeys)
237 {
238 if (factionKey.IsEmpty())
239 continue;
240
241 faction = m_FactionManager.GetFactionByKey(factionKey);
242 if (faction)
243 return faction;
244 }
245
246 return null;
247 }
248
249 //------------------------------------------------------------------------------------------------
251 {
252 // cannot use Replication.FindItemId(task), because when calling the OnTaskRemoved event rplId is no longer valid
253
254 RplComponent taskRplComponent = RplComponent.Cast(task.FindComponent(RplComponent));
255 if (!taskRplComponent)
256 {
257 Print("Task RplComponent not exist", LogLevel.WARNING);
258 return RplId.Invalid();
259 }
260
261 return taskRplComponent.Id();
262 }
263
264 //------------------------------------------------------------------------------------------------
265 protected void AssignFrequency(notnull SCR_Task task)
266 {
268 return;
269
270 typename taskTypename = task.Type();
271 if (taskTypename == typename.Empty)
272 return;
273
274 if (!m_aAllowedTasksWithFrequencies.Contains(taskTypename.ToString()))
275 return;
276
277 Faction faction = GetTaskFaction(task);
278 if (!faction)
279 return;
280
281 int frequency = GetFreeFrequency(faction);
282 if (frequency == -1)
283 return;
284
285 ClaimFrequency(task, frequency, faction);
286 }
287
288 //------------------------------------------------------------------------------------------------
289 protected void ClaimFrequency(SCR_Task task, int frequency, Faction faction)
290 {
291 if (!task || !faction)
292 return;
293
294 RplId taskRplId = GetTaskRplId(task);
295 if (!taskRplId.IsValid())
296 {
297 Print("RplId is not valid", LogLevel.WARNING);
298 return;
299 }
300
301 FactionHolder usedForFactions = new FactionHolder();
302 FactionHolder factions = new FactionHolder();
303
304 if (!m_mUsedFrequenciesByFactionMap.Find(frequency, usedForFactions))
305 {
306 factions.Insert(faction);
307 m_mUsedFrequenciesByFactionMap.Insert(frequency, factions);
308
309 }
310 else if (usedForFactions.Find(faction) == -1)
311 {
312 usedForFactions.Insert(faction);
313 }
314
315 RpcDo_AddTaskFrequency(taskRplId, frequency);
316 Rpc(RpcDo_AddTaskFrequency, taskRplId, frequency);
317
318 // check free frequency
319 SetFreeFrequencyForFaction(faction, GetFreeFrequency(faction) != -1);
320 }
321
322 //------------------------------------------------------------------------------------------------
323 protected int GetFreeFrequency(Faction faction)
324 {
325 int factionHQFrequency; // Don't assign this frequency to any of the tasks
326
327 SCR_Faction scrFaction = SCR_Faction.Cast(faction);
328 if (scrFaction)
329 factionHQFrequency = scrFaction.GetFactionRadioFrequency();
330
331 FactionHolder usedForFactions = new FactionHolder();
332 int minFrequencyAvailable = m_iTaskFrequencyMin;
333
334 while (minFrequencyAvailable <= m_iTaskFrequencyMax)
335 {
336 if (minFrequencyAvailable == factionHQFrequency)
337 {
338 minFrequencyAvailable += m_iTaskFrequencyOffset;
339 continue; // We cannot assign this frequency to task, it is used by the factions HQ
340 }
341
342 if (!m_mUsedFrequenciesByFactionMap.Find(minFrequencyAvailable, usedForFactions))
343 break; // No assigned frequencies for this faction yet
344
345 if (usedForFactions.Find(faction) == -1)
346 break; // Unused frequency found
347
348 minFrequencyAvailable += m_iTaskFrequencyOffset;
349 }
350
351 if (minFrequencyAvailable <= m_iTaskFrequencyMax)
352 return minFrequencyAvailable;
353
354 Print("Ran out of frequencies for tasks", LogLevel.WARNING);
355 return -1;
356 }
357
358 //------------------------------------------------------------------------------------------------
359 protected void ReleaseFrequency(notnull SCR_Task task)
360 {
362 return;
363
364 RplId taskRplId = GetTaskRplId(task);
365 if (!taskRplId.IsValid())
366 {
367 Print("RplId is not valid", LogLevel.WARNING);
368 return;
369 }
370
371 int frequency;
372 if (!m_mUsedFrequenciesByTaskMap.Find(taskRplId, frequency))
373 {
374 Print("This task has not assigned frequency", LogLevel.WARNING);
375 return;
376 }
377
378 Faction faction = GetTaskFaction(task);
379 if (!faction)
380 return;
381
382 FactionHolder factions = new FactionHolder();
383 if (m_mUsedFrequenciesByFactionMap.Find(frequency, factions))
384 {
385 if (factions.Count() <= 1 && factions.Find(faction) != -1)
386 {
387 m_mUsedFrequenciesByFactionMap.Remove(frequency);
388 }
389 else
390 {
391 int factionIndex = factions.Find(faction);
392 if (factionIndex >= 0 && factionIndex < factions.Count())
393 factions.Remove(factionIndex);
394 }
395
396 RpcDo_RemoveTaskFrequency(taskRplId);
397 Rpc(RpcDo_RemoveTaskFrequency, taskRplId);
398
399 SetFreeFrequencyForFaction(faction, true);
400 }
401 }
402
403 //------------------------------------------------------------------------------------------------
405 static SCR_GroupTaskManagerComponent GetInstance()
406 {
407 return s_Instance;
408 }
409
410 //------------------------------------------------------------------------------------------------
418
419 //------------------------------------------------------------------------------------------------
427
428 //------------------------------------------------------------------------------------------------
431 SCR_GroupTaskRelevance GetGroupTaskRelevance(typename taskTypename)
432 {
433 if (!m_GroupTaskRelevanceConfig)
434 return null;
435
436 return m_GroupTaskRelevanceConfig.GetGroupTaskRelevance(taskTypename);
437 }
438
439 //------------------------------------------------------------------------------------------------
440 protected void OnGroupRoleChanged(int groupID, SCR_EGroupRole groupRole)
441 {
442 if (!m_GroupsManager)
443 return;
444
445 SCR_AIGroup group = m_GroupsManager.FindGroup(groupID);
446 if (!group)
447 return;
448
449 // assign new group as owner to all tasks
450 Faction faction = group.GetFaction();
451 if (!faction)
452 return;
453
454 array<SCR_Task> tasks = {};
455 m_TaskSystem.GetTasksByState(tasks, SCR_ETaskState.CREATED | SCR_ETaskState.ASSIGNED, faction.GetFactionKey());
456
457 SCR_GroupTaskRelevance groupTaskRelevance;
458 SCR_TaskExecutor taskGroupExecutor = SCR_TaskExecutorGroup.FromGroup(group.GetGroupID());
459 SCR_BaseRequestedTaskEntity requestedTask;
460
461 foreach (SCR_Task task : tasks)
462 {
463 if (m_TaskSystem.GetTaskOwnership(task) != SCR_ETaskOwnership.EXECUTOR)
464 continue;
465
466 // skip assigning requester group, it can't be assigned
467 requestedTask = SCR_BaseRequestedTaskEntity.Cast(task);
468 if (requestedTask && group.GetGroupID() == requestedTask.GetRequesterId())
469 {
470 // requester group see own request
471 m_TaskSystem.AddTaskGroup(task, group.GetGroupID());
472 continue;
473 }
474
475 groupTaskRelevance = GetGroupTaskRelevance(task.Type());
476 if (!groupTaskRelevance)
477 continue;
478
479 if (groupTaskRelevance.IsTaskExecutableByGroup(group))
480 m_TaskSystem.AddTaskExecutor(task, taskGroupExecutor);
481
482 if (groupTaskRelevance.IsTaskVisibleForGroup(group))
483 m_TaskSystem.AddTaskGroup(task, group.GetGroupID());
484 }
485 }
486
487 //------------------------------------------------------------------------------------------------
489 {
490 if (!group)
491 return;
492
494 }
495
496 //------------------------------------------------------------------------------------------------
497 protected void OnPlayerRemoved(SCR_AIGroup group, int playerID)
498 {
499 if (!group || group.GetPlayerCount() > 0)
500 return;
501
503 }
504
505 //------------------------------------------------------------------------------------------------
507 {
509 }
510
511 //------------------------------------------------------------------------------------------------
513 {
514 if (!group)
515 return;
516
517 Faction faction = group.GetFaction();
518 if (!faction)
519 return;
520
521 array<SCR_Task> tasks = {};
522 m_TaskSystem.GetTasksByState(tasks, SCR_ETaskState.CREATED | SCR_ETaskState.ASSIGNED, faction.GetFactionKey());
523
524 SCR_BaseRequestedTaskEntity requestedTask;
525
526 // delete all requested tasks created by this group
527 for (int i = tasks.Count() - 1; i >= 0; i--)
528 {
529 if (m_TaskSystem.GetTaskOwnership(tasks[i]) != SCR_ETaskOwnership.EXECUTOR)
530 continue;
531
532 requestedTask = SCR_BaseRequestedTaskEntity.Cast(tasks[i]);
533 if (!requestedTask || group.GetGroupID() != requestedTask.GetRequesterId())
534 continue;
535
536 m_TaskSystem.DeleteTask(requestedTask);
537 }
538 }
539
540 //------------------------------------------------------------------------------------------------
543 {
545 return;
546
547 if (m_TaskSystem.GetTaskOwnership(task) != SCR_ETaskOwnership.EXECUTOR)
548 return;
549
550 array<string> taskFactions = m_TaskSystem.GetTaskFactions(task);
551 if (!taskFactions || taskFactions.IsEmpty())
552 return;
553
554 SCR_GroupTaskRelevance groupTaskRelevance = GetGroupTaskRelevance(task.Type());
555 if (!groupTaskRelevance)
556 return;
557
558 Faction faction;
559 array<SCR_AIGroup> groups;
560 foreach (string taskFaction : taskFactions)
561 {
562 faction = m_FactionManager.GetFactionByKey(taskFaction);
563 if (!faction)
564 continue;
565
566 groups = m_GroupsManager.GetPlayableGroupsByFaction(faction);
567 if (!groups || groups.IsEmpty())
568 continue;
569
570 foreach (SCR_AIGroup group : groups)
571 {
572 if (groupTaskRelevance.IsTaskExecutableByGroup(group))
573 m_TaskSystem.AddTaskExecutor(task, SCR_TaskExecutorGroup.FromGroup(group.GetGroupID()));
574
575 if (groupTaskRelevance.IsTaskVisibleForGroup(group))
576 m_TaskSystem.AddTaskGroup(task, group.GetGroupID());
577 }
578 }
579 }
580
581 //------------------------------------------------------------------------------------------------
584 void SetGroupTask(notnull SCR_Task task, int byPlayerID)
585 {
588
590 m_OnGroupTaskSet.Invoke(task, byPlayerID);
591 }
592
593 //------------------------------------------------------------------------------------------------
596 {
598 return;
599
600 if (m_TaskSystem.GetTaskOwnership(task) != SCR_ETaskOwnership.EXECUTOR)
601 return;
602
603 SCR_BaseRequestedTaskEntity requestedTask = SCR_BaseRequestedTaskEntity.Cast(task);
604 if (!requestedTask)
605 return;
606
607 array<string> taskFactions = m_TaskSystem.GetTaskFactions(task);
608 if (!taskFactions || taskFactions.IsEmpty())
609 return;
610
611 SCR_GroupTaskRelevance groupTaskRelevance = GetGroupTaskRelevance(task.Type());
612 if (!groupTaskRelevance)
613 return;
614
615 Faction faction;
616 array<SCR_AIGroup> groups;
617 foreach (string taskFaction : taskFactions)
618 {
619 faction = m_FactionManager.GetFactionByKey(taskFaction);
620 if (!faction)
621 continue;
622
623 groups = m_GroupsManager.GetPlayableGroupsByFaction(faction);
624 if (!groups)
625 continue;
626
627 int groupID;
628 foreach (SCR_AIGroup group : groups)
629 {
630 groupID = group.GetGroupID();
631
632 // skip assigning requester group as executor, it can't be assigned
633 if (groupID == requestedTask.GetRequesterId())
634 {
635 // requester group see own request
636 m_TaskSystem.AddTaskGroup(task, groupID);
637 continue;
638 }
639
640 if (groupTaskRelevance.IsTaskExecutableByGroup(group))
641 m_TaskSystem.AddTaskExecutor(task, SCR_TaskExecutorGroup.FromGroup(groupID));
642
643 if (groupTaskRelevance.IsTaskVisibleForGroup(group))
644 m_TaskSystem.AddTaskGroup(task, groupID);
645 }
646 }
647 }
648
649 //------------------------------------------------------------------------------------------------
653 void SetRequestedGroupTask(notnull SCR_Task task, int byPlayerID, int requesterGroupId)
654 {
657
659 m_OnRequestedGroupTaskSet.Invoke(task, byPlayerID, requesterGroupId);
660 }
661
662 //------------------------------------------------------------------------------------------------
666 array<SCR_AIGroup> GetPlayableGroupsSortedByRelevance(notnull SCR_Task task, notnull Faction faction)
667 {
668 if (!m_GroupsManager)
669 return null;
670
671 SCR_GroupTaskRelevance groupTaskRelevance = GetGroupTaskRelevance(task.Type());
672 if (!groupTaskRelevance)
673 return null;
674
675 array<SCR_AIGroup> playableGroups = m_GroupsManager.GetPlayableGroupsByFaction(faction);
676 if (!playableGroups)
677 return null;
678
679 array<ref SCR_GroupRoleRelevance> relevanceList;
680 groupTaskRelevance.GetOrderedGroupRoleRelevanceList(relevanceList);
681 if (!relevanceList)
682 return null;
683
684 array<SCR_AIGroup> playableGroupsSorted = {};
685 SCR_EGroupRole groupRole;
686 foreach (SCR_GroupRoleRelevance groupRoleRelevance : relevanceList)
687 {
688 groupRole = groupRoleRelevance.GetGroupRole();
689
690 foreach (SCR_AIGroup playableGroup : playableGroups)
691 {
692 if (playableGroup.GetGroupRole() == groupRole)
693 playableGroupsSorted.Insert(playableGroup);
694 }
695 }
696
697 return playableGroupsSorted;
698 }
699
700 //------------------------------------------------------------------------------------------------
701 override bool RplSave(ScriptBitWriter writer)
702 {
703 int usedFrequenciesByTaskMapCount = m_mUsedFrequenciesByTaskMap.Count();
704 writer.WriteInt(usedFrequenciesByTaskMapCount);
705
706 foreach (int key, int value : m_mUsedFrequenciesByTaskMap)
707 {
708 writer.WriteInt(key);
709 writer.WriteInt(value);
710 }
711
712 return true;
713 }
714
715 //------------------------------------------------------------------------------------------------
716 override bool RplLoad(ScriptBitReader reader)
717 {
718 int usedFrequenciesByTaskMapCount;
719 reader.ReadInt(usedFrequenciesByTaskMapCount);
720
721 int taskRplId;
722 int frequency;
724 Faction faction;
726
727 for (int i = 0; i < usedFrequenciesByTaskMapCount; i++)
728 {
729 reader.ReadInt(taskRplId);
730 reader.ReadInt(frequency);
731 m_mUsedFrequenciesByTaskMap.Insert(taskRplId, frequency);
732 }
733
734 return true;
735 }
736
737 //------------------------------------------------------------------------------------------------
738 override void EOnInit(IEntity owner)
739 {
740 super.EOnInit(owner);
741
742 m_FactionManager = GetGame().GetFactionManager();
744
745 m_TaskSystem = SCR_TaskSystem.GetInstance();
746 if (!m_TaskSystem)
747 return;
748
749 m_RplComponent = RplComponent.Cast(owner.FindComponent(RplComponent));
750 if (!m_RplComponent || m_RplComponent.IsProxy())
751 return;
752
753 // check and set free faction frequencies
754 for (int i, count = m_FactionManager.GetFactionsCount(); i < count; i++)
755 {
756 m_aFreeFactionFrequency.Insert(false);
757 Faction faction = m_FactionManager.GetFactionByIndex(i);
758 SetFreeFrequencyForFaction(faction, GetFreeFrequency(faction) != -1);
759 }
760
761 if (m_GroupsManager)
762 m_GroupsManager.GetOnPlayableGroupRemoved().Insert(OnPlayableGroupRemoved);
763
766 m_TaskSystem.GetOnTaskRemoved().Insert(OnTaskRemoved);
767 }
768
769 //------------------------------------------------------------------------------------------------
770 override void OnPostInit(IEntity owner)
771 {
772 SetEventMask(owner, EntityEvent.INIT);
773 }
774
775 //------------------------------------------------------------------------------------------------
776 override void OnDelete(IEntity owner)
777 {
778 super.OnDelete(owner);
779
780 if (m_GroupsManager)
781 m_GroupsManager.GetOnPlayableGroupRemoved().Remove(OnPlayableGroupRemoved);
782
785
786 if (m_TaskSystem)
787 m_TaskSystem.GetOnTaskRemoved().Remove(OnTaskRemoved);
788 }
789
790 //------------------------------------------------------------------------------------------------
795 {
796 if (!s_Instance)
797 s_Instance = this;
798 else
799 Print("[SCR_GroupTaskManagerComponent.SCR_GroupTaskManagerComponent] instance is missing", LogLevel.WARNING);
800 }
801}
ArmaReforgerScripted GetGame()
Definition game.c:1398
override bool RplLoad(ScriptBitReader reader)
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
SCR_CacheNoteComponentClass ScriptComponentClass RplProp()] protected ref array< string > m_aLines
override bool RplSave(ScriptBitWriter writer)
RplComponent m_RplComponent
SCR_EGroupRole
Group roles.
void OnTaskRemoved(notnull SCR_Task task)
Get all prefabs that have the spawner data
void SetFreeFrequencyForFaction(notnull Faction faction, bool isFree)
bool IsAnyFrequencyFreeForFaction(notnull Faction faction)
ref ScriptInvokerGroupTaskSet m_OnGroupTaskSet
void SetGroupTaskOwnership(notnull SCR_Task task)
void OnPlayableGroupRemoved(SCR_AIGroup group)
bool CanCreateNewTaskWithClassName(string taskClassName, notnull Faction faction)
void RpcDo_AddTaskFrequency(RplId taskRplId, int frequency)
void SCR_GroupTaskManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
bool CanAssignFrequencyToTask(notnull SCR_Task task)
ScriptInvokerBase< ScriptInvokerRequestedGroupTaskSetMethod > ScriptInvokerRequestedGroupTaskSet
Faction GetTaskFaction(notnull SCR_Task task)
ScriptInvokerRequestedGroupTaskSet GetOnRequestedGroupTaskSet()
ref map< int, ref FactionHolder > m_mUsedFrequenciesByFactionMap
ref map< int, int > m_mUsedFrequenciesByTaskMap
array< SCR_AIGroup > GetPlayableGroupsSortedByRelevance(notnull SCR_Task task, notnull Faction faction)
bool IsEnabledAssigningFrequencies()
void SetGroupTask(notnull SCR_Task task, int byPlayerID)
SCR_Task GetTaskByFrequency(notnull Faction faction, int frequency)
bool CanCreateNewTaskWithTypename(typename taskTypename, notnull Faction faction)
ref ScriptInvokerRequestedGroupTaskSet m_OnRequestedGroupTaskSet
string GetTaskTranslatedName(notnull SCR_Task task)
int GetTaskFrequency(notnull SCR_Task task)
void OnGroupRoleChanged(int groupID, SCR_EGroupRole groupRole)
void CheckAndDeleteRequestedTasks(SCR_AIGroup group)
string GetTaskPrefabClassName(ResourceName taskPrefabName)
func ScriptInvokerGroupTaskSetMethod
bool CanCreateNewTaskWithResourceName(ResourceName taskPrefabResourceName, notnull Faction faction)
void RpcDo_RemoveTaskFrequency(RplId taskRplId)
ScriptInvokerGroupTaskSet GetOnGroupTaskSet()
func ScriptInvokerRequestedGroupTaskSetMethod
RplId GetTaskRplId(SCR_Task task)
ScriptInvokerBase< ScriptInvokerGroupTaskSetMethod > ScriptInvokerGroupTaskSet
void SetRequestedGroupTask(notnull SCR_Task task, int byPlayerID, int requesterGroupId)
void AssignFrequency(notnull SCR_Task task)
void SetRequestedGroupTaskOwnership(notnull SCR_Task task)
SCR_GroupTaskRelevance GetGroupTaskRelevance(typename taskTypename)
void SCR_GroupsManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
set< Faction > FactionHolder
void ReleaseFrequency(int frequency, Faction faction)
int GetFreeFrequency(Faction frequencyFaction)
void ClaimFrequency(int frequency, Faction faction)
void OnPlayerRemoved(SCR_AIGroup group, int playerId)
SCR_AIGroup event.
SCR_FactionManager m_FactionManager
SCR_GroupsManagerComponent m_GroupsManager
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
SCR_SpawnerSlotManagerClass s_Instance
Class used for managing changes and removals of slots present in world.
void SCR_Task(IEntitySource src, IEntity parent)
Definition SCR_Task.c:1938
SCR_ETaskState
Definition SCR_Task.c:3
SCR_TaskSystem m_TaskSystem
proto external Managed FindComponent(typename typeName)
Main replication API.
Definition Replication.c:14
Object holding reference to resource. In destructor release the resource.
Definition Resource.c:25
Replication item identifier.
Definition RplId.c:14
int GetPlayerCount(bool checkMasterAndSlaves=false)
static ScriptInvokerGroupRole GetOnGroupRoleChanged()
static ScriptInvoker GetOnPlayerRemoved()
int GetGroupID()
Faction GetFaction()
int GetFactionRadioFrequency()
Definition Types.c:486
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
EntityEvent
Various entity events.
Definition EntityEvent.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