Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_EstablishBaseAIFactionCommander.c
Go to the documentation of this file.
1[BaseContainerProps(), SCR_BaseContainerCustomTitleField("m_sFactionKey", "%1 EstablishBaseAIFactionCommander")]
3{
4 [Attribute("8", desc:"AI Response time [s]", params: "0 inf")]
5 protected float m_fResponseTime;
6
7 [Attribute("", UIWidgets.ResourceNamePicker, "Establish base task", "et")]
9
12
13 //------------------------------------------------------------------------------------------------
14 override protected void OnAICommanderActivated()
15 {
16 super.OnAICommanderActivated();
17
19 if (!gameModeCampaign || !gameModeCampaign.GetEstablishingBasesEnabled())
20 return;
21
23 return;
24
25 m_GroupTaskManager.GetOnRequestedGroupTaskSet().Insert(OnRequestedGroupTaskSet);
26
27 array<SCR_Task> tasks = {};
28 m_TaskSystem.GetTasksByStateFiltered(tasks, SCR_ETaskState.CREATED, m_sFactionKey, -1, SCR_EstablishBaseRequestedTaskEntity, false);
29
30 SCR_EstablishBaseRequestedTaskEntity requestTask;
31 int requestedTaskCount;
32
33 // check all establish base requests and create objective for them
34 foreach (SCR_Task task : tasks)
35 {
36 requestTask = SCR_EstablishBaseRequestedTaskEntity.Cast(task);
37 if (!requestTask)
38 continue;
39
40 requestedTaskCount++;
41
42 // call later is used to delay the AI response
43 GetGame().GetCallqueue().CallLater(CreateTask, m_fResponseTime * 1000 * requestedTaskCount, false, requestTask);
44 }
45 }
46
47 //------------------------------------------------------------------------------------------------
48 override protected void OnAICommanderDeactivated()
49 {
50 super.OnAICommanderDeactivated();
51
53 return;
54
55 m_GroupTaskManager.GetOnRequestedGroupTaskSet().Remove(OnRequestedGroupTaskSet);
56 }
57
58 //------------------------------------------------------------------------------------------------
59 protected void OnRequestedGroupTaskSet(notnull SCR_Task task, int byPlayerID, int requesterGroupId)
60 {
61 if (!m_bIsAICommanderActivated)
62 return;
63
64 SCR_Faction faction = SCR_Faction.Cast(SCR_FactionManager.SGetPlayerFaction(byPlayerID));
65 if (!faction || faction != m_Faction)
66 return;
67
68 SCR_EstablishBaseRequestedTaskEntity requestTask = SCR_EstablishBaseRequestedTaskEntity.Cast(task);
69 if (requestTask)
70 GetGame().GetCallqueue().CallLater(CreateTask, m_fResponseTime * 1000, false, requestTask, byPlayerID);
71 }
72
73 //------------------------------------------------------------------------------------------------
74 protected void CreateTask(SCR_EstablishBaseRequestedTaskEntity requestTask, int playerId = -1)
75 {
76 // check if AI is still commander after delay
77 if (!m_bIsAICommanderActivated)
78 return;
79
80 if (!requestTask || !m_TaskSystem)
81 return;
82
83 if (!m_GroupTaskManager.CanCreateNewTaskWithResourceName(m_sEstablishBaseTaskPrefab, m_Faction))
84 return;
85
86 vector taskPosition = requestTask.GetTaskPosition();
87 string taskID = string.Format(SCR_FactionCommanderPlayerComponent.TASK_ID, m_sFactionKey, SCR_FactionCommanderPlayerComponent.GenerateTaskID());
88
89 SCR_Task task = m_TaskSystem.CreateTask(m_sEstablishBaseTaskPrefab, taskID, "", "", taskPosition, playerId);
90 if (!task)
91 {
92 Print("Task was not created", LogLevel.ERROR);
93 return;
94 }
95
96 m_TaskSystem.SetTaskOwnership(task, SCR_ETaskOwnership.EXECUTOR);
97 m_TaskSystem.SetTaskVisibility(task, SCR_ETaskVisibility.GROUP);
98 m_TaskSystem.AddTaskFaction(task, m_sFactionKey);
99
100 SCR_TaskUIInfo taskUIInfo = task.GetTaskUIInfo();
101 if (!taskUIInfo)
102 return;
103
104 task.SetTaskName(taskUIInfo.GetName(), {SCR_MapEntity.GetGridLabel(taskPosition)});
105
108 }
109
110 //------------------------------------------------------------------------------------------------
111 override void Init(notnull SCR_FactionCommanderHandlerComponent factionCommanderHandlerComponent)
112 {
113 m_TaskSystem = SCR_TaskSystem.GetInstance();
115
116 super.Init(factionCommanderHandlerComponent);
117 }
118
119 //------------------------------------------------------------------------------------------------
120 override void Deinit()
121 {
122 super.Deinit();
123
125 return;
126
127 m_GroupTaskManager.GetOnRequestedGroupTaskSet().Remove(OnRequestedGroupTaskSet);
128 }
129}
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
SCR_BaseGameMode GetGameMode()
SCR_Faction ScriptedFaction SCR_BaseContainerCustomTitleField("m_sCallsign")
void SCR_FactionManager(IEntitySource src, IEntity parent)
void SCR_GameModeCampaign(IEntitySource src, IEntity parent)
void SCR_GroupTaskManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
SCR_ETaskVisibility
Definition SCR_Task.c:24
void SCR_Task(IEntitySource src, IEntity parent)
Definition SCR_Task.c:1938
SCR_ETaskState
Definition SCR_Task.c:3
void OnRequestedGroupTaskSet(notnull SCR_Task task, int byPlayerID, int requesterGroupId)
override void Init(notnull SCR_FactionCommanderHandlerComponent factionCommanderHandlerComponent)
void CreateTask(SCR_EstablishBaseRequestedTaskEntity requestTask, int playerId=-1)
static const int AI_COMMANDER_ID
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