Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_RequestedTaskNotificationComponent.c
Go to the documentation of this file.
1[ComponentEditorProps(category: "GameScripted/Tasks", description: "Requested Task notification component")]
4
5class SCR_RequestedTaskNotificationComponent : SCR_TaskNotificationComponent
6{
7 //------------------------------------------------------------------------------------------------
8 override protected void OnTaskCreated(SCR_Task task, int byPlayerID)
9 {
10 if (task != m_Task || !m_GroupsManager)
11 return;
12
13 SCR_BaseRequestedTaskEntity requestedTask = SCR_BaseRequestedTaskEntity.Cast(task);
14 if (!requestedTask)
15 return;
16
18 if (!faction)
19 return;
20
21 BaseTransceiver playerTransceiver = GetPlayerTransceiver(byPlayerID);
22 if (!playerTransceiver)
23 return;
24
25 array<SCR_AIGroup> playableGroups = m_GroupsManager.GetPlayableGroupsByFaction(faction);
26 if (!playableGroups)
27 return;
28
29 int baseCallsign = SCR_MilitaryBaseComponent.INVALID_BASE_CALLSIGN;
30 SCR_CampaignMilitaryBaseTaskEntity baseTask = SCR_CampaignMilitaryBaseTaskEntity.Cast(GetOwner());
31 if (baseTask && baseTask.GetMilitaryBase())
32 baseCallsign = baseTask.GetMilitaryBase().GetCallsign();
33
34 bool isCreatedByCommander = faction.IsPlayerCommander(byPlayerID);
35 bool isCreatedByGroupLeader = IsPlayerGroupLeader(byPlayerID, playableGroups);
36
37 SCR_TaskExecutorGroup groupExecutor;
38 foreach (SCR_AIGroup group : playableGroups)
39 {
40 if (!ALLOW_SEND_TO_EMPTY_GROUP && group.GetPlayerCount() == 0)
41 continue;
42
43 groupExecutor = SCR_TaskExecutorGroup.Cast(SCR_TaskExecutorGroup.FromGroup(group.GetGroupID()));
44 if (!groupExecutor)
45 continue;
46
47 // doesn't send notification to commander group and spam yourself and group leaders
48 if (isCreatedByCommander && group.GetGroupRole() == SCR_EGroupRole.COMMANDER)
49 continue;
50
51 // is created by squad leader
52 if (isCreatedByGroupLeader && group.GetGroupRole() == SCR_EGroupRole.COMMANDER)
53 {
54 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MAJOR_CREATION_BY_SL, byPlayerID, playerTransceiver, group, baseCallsign, requestedTask.GetRequesterId(), 0, m_iGridX, m_iGridY);
55 }
56 else if (m_TaskSystem.CanTaskBeAssignedTo(task, groupExecutor))
57 {
58 if (!task.IsTaskAssignedTo(groupExecutor))
59 {
60 if (HasGroupTask(groupExecutor))
61 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_CREATION, byPlayerID, playerTransceiver, group, baseCallsign, requestedTask.GetRequesterId());
62 else
63 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MAJOR_CREATION, byPlayerID, playerTransceiver, group, baseCallsign, requestedTask.GetRequesterId(), 0, m_iGridX, m_iGridY);
64 }
65 }
66 }
67 }
68
69 //------------------------------------------------------------------------------------------------
70 override protected void OnTaskAssigneeAdded(SCR_Task task, SCR_TaskExecutor executor, int requesterID)
71 {
72 if (task != m_Task || !m_GroupsManager)
73 return;
74
75 SCR_BaseRequestedTaskEntity requestedTask = SCR_BaseRequestedTaskEntity.Cast(task);
76 if (!requestedTask)
77 return;
78
80 if (!faction)
81 return;
82
83 array<SCR_AIGroup> playableGroups = m_GroupsManager.GetPlayableGroupsByFaction(faction);
84 if (!playableGroups)
85 return;
86
87 SCR_TaskExecutorGroup newAssignedGroupExecutor = SCR_TaskExecutorGroup.Cast(executor);
88 if (!newAssignedGroupExecutor)
89 return;
90
91 SCR_PlayerControllerGroupComponent playerGroupComponent = SCR_PlayerControllerGroupComponent.GetPlayerControllerComponent(requesterID);
92 if (!playerGroupComponent)
93 return;
94
95 int requesterGroupId = playerGroupComponent.GetGroupID();
96
97 SCR_AIGroup newAssignedGroup = m_GroupsManager.FindGroup(newAssignedGroupExecutor.GetGroupID());
98 if (!newAssignedGroup)
99 return;
100
101 BaseTransceiver hqTransceiver = GetHQTransceiver(faction);
102 if (!hqTransceiver)
103 return;
104
105 int baseCallsign = SCR_MilitaryBaseComponent.INVALID_BASE_CALLSIGN;
106 SCR_CampaignMilitaryBaseTaskEntity baseTask = SCR_CampaignMilitaryBaseTaskEntity.Cast(GetOwner());
107 if (baseTask && baseTask.GetMilitaryBase())
108 baseCallsign = baseTask.GetMilitaryBase().GetCallsign();
109
110 if (faction.IsPlayerCommander(requesterID))
111 {
112 // commander send msg to SL and SM
113 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MAJOR_GROUP_ASSIGNED_TO_TASK, requesterID, hqTransceiver, newAssignedGroup, baseCallsign, requestedTask.GetRequesterId(), newAssignedGroup.GetGroupID(), m_iGridX, m_iGridY);
114 }
115
116 SCR_TaskExecutorGroup groupExecutor;
117 foreach (SCR_AIGroup group : playableGroups)
118 {
119 if (!ALLOW_SEND_TO_EMPTY_GROUP && group.GetPlayerCount() == 0)
120 continue;
121
122 groupExecutor = SCR_TaskExecutorGroup.Cast(SCR_TaskExecutorGroup.FromGroup(group.GetGroupID()));
123 if (!groupExecutor)
124 continue;
125
126 if (m_TaskSystem.CanTaskBeAssignedTo(task, groupExecutor))
127 {
128 if (task.IsTaskAssignedTo(groupExecutor))
129 {
130 if (group.IsPlayerLeader(requesterID))
131 {
132 BaseTransceiver playerTransceiver = GetPlayerTransceiver(requesterID);
133 if (playerTransceiver)
134 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MAJOR_ASSIGNED_BY_SL_TO_SM, requesterID, playerTransceiver, newAssignedGroup, baseCallsign, -1, requestedTask.GetRequesterId(), m_iGridX, m_iGridY);
135 }
136 else if (newAssignedGroupExecutor.GetGroupID() != groupExecutor.GetGroupID())
137 {
138 // skip a current assigned group
139 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_GROUP_ASSIGNED_TO_SAME_TASK, requesterID, hqTransceiver, group, baseCallsign, newAssignedGroupExecutor.GetGroupID(), groupExecutor.GetGroupID(), m_iGridX, m_iGridY);
140 }
141 }
142 }
143 else if (m_TaskSystem.IsTaskVisibleFor(task, groupExecutor))
144 {
145 if (group.GetGroupRole() == SCR_EGroupRole.COMMANDER)
146 {
147 BaseTransceiver playerTransceiver = GetPlayerTransceiver(requesterID);
148 if (playerTransceiver)
149 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MAJOR_ASSIGNED_BY_SL_TO_COMMANDER, requesterID, playerTransceiver, group, baseCallsign, requesterGroupId, newAssignedGroup.GetGroupID(), m_iGridX, m_iGridY);
150 }
151 }
152 }
153 }
154
155 //------------------------------------------------------------------------------------------------
156 override protected void OnTaskStateChanged(SCR_Task task, SCR_ETaskState newState)
157 {
158 if (task != m_Task || !m_GroupsManager)
159 return;
160
162 if (!faction)
163 return;
164
165 SCR_BaseRequestedTaskEntity requestedTask = SCR_BaseRequestedTaskEntity.Cast(task);
166 if (!requestedTask)
167 return;
168
169 array<SCR_AIGroup> playableGroups = m_GroupsManager.GetPlayableGroupsByFaction(faction);
170 if (!playableGroups)
171 return;
172
173 BaseTransceiver hqTransceiver = GetHQTransceiver(faction);
174 if (!hqTransceiver)
175 return;
176
177 int baseCallsign = SCR_MilitaryBaseComponent.INVALID_BASE_CALLSIGN;
178 SCR_CampaignMilitaryBaseTaskEntity baseTask = SCR_CampaignMilitaryBaseTaskEntity.Cast(GetOwner());
179 if (baseTask && baseTask.GetMilitaryBase())
180 baseCallsign = baseTask.GetMilitaryBase().GetCallsign();
181
182 SCR_TaskExecutorGroup groupExecutor;
183 foreach (SCR_AIGroup group : playableGroups)
184 {
185 if (!ALLOW_SEND_TO_EMPTY_GROUP && group.GetPlayerCount() == 0)
186 continue;
187
188 groupExecutor = SCR_TaskExecutorGroup.Cast(SCR_TaskExecutorGroup.FromGroup(group.GetGroupID()));
189 if (!groupExecutor)
190 continue;
191
192 if (group.GetGroupRole() == SCR_EGroupRole.COMMANDER)
193 {
194 if (newState == SCR_ETaskState.COMPLETED)
195 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_TASK_COMPLETED_TO_COMMANDER, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
196 else if (newState == SCR_ETaskState.FAILED)
197 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_TASK_FAILED_TO_COMMANDER, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
198 else if (newState == SCR_ETaskState.CANCELLED)
199 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_TASK_CANCELED_TO_COMMANDER, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
200 }
201 else if (task.IsTaskAssignedTo(groupExecutor))
202 {
203 if (newState == SCR_ETaskState.COMPLETED)
204 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MAJOR_TASK_ASSIGNED_TO_YOUR_GROUP_COMPLETED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
205 else if (newState == SCR_ETaskState.FAILED)
206 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MAJOR_TASK_ASSIGNED_TO_YOUR_GROUP_FAILED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
207 else if (newState == SCR_ETaskState.CANCELLED)
208 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MAJOR_TASK_ASSIGNED_TO_YOUR_GROUP_CANCELED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
209 }
210 else
211 {
212 // your request
213 if (requestedTask.GetRequesterId() == group.GetGroupID())
214 {
215 // group is requester
216 if (newState == SCR_ETaskState.COMPLETED)
217 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_YOUR_REQUEST_COMPLETED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
218 else if (newState == SCR_ETaskState.FAILED)
219 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_YOUR_REQUEST_FAILED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
220 else if (newState == SCR_ETaskState.CANCELLED)
221 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_YOUR_REQUEST_CANCELED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
222 }
223 else if (m_TaskSystem.IsTaskVisibleFor(task, groupExecutor))
224 {
225 if (newState == SCR_ETaskState.COMPLETED)
226 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_TASK_COMPLETED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
227 else if (newState == SCR_ETaskState.FAILED)
228 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_TASK_FAILED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
229 else if (newState == SCR_ETaskState.CANCELLED)
230 SendMessageToGroup(m_eTaskNotification, SCR_ETaskNotificationMsg.MINOR_TASK_CANCELED, 0, hqTransceiver, group, baseCallsign, group.GetGroupID(), 0, m_iGridX, m_iGridY);
231 }
232 }
233 }
234 }
235
236 //------------------------------------------------------------------------------------------------
237 protected void OnRequestedGroupTaskSet(SCR_Task task, int byPlayerID, int requesterGroupId)
238 {
239 if (task != m_Task)
240 return;
241
242 OnTaskCreated(task, byPlayerID);
243 }
244
245 //------------------------------------------------------------------------------------------------
246 override void EOnInit(IEntity owner)
247 {
248 super.EOnInit(owner);
249
250 if (!m_RplComponent || m_RplComponent.IsProxy())
251 return;
252
253 if (!m_Campaign)
254 return;
255
257 m_GroupTaskManager.GetOnRequestedGroupTaskSet().Insert(OnRequestedGroupTaskSet);
258 }
259
260 //------------------------------------------------------------------------------------------------
261 override void OnDelete(IEntity owner)
262 {
263 super.OnDelete(owner);
264
266 m_GroupTaskManager.GetOnRequestedGroupTaskSet().Remove(OnRequestedGroupTaskSet);
267 }
268}
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
RplComponent m_RplComponent
SCR_GameModeCampaign m_Campaign
void OnTaskStateChanged(SCR_Task task, SCR_ETaskState newState)
void OnTaskAssigneeAdded(SCR_Task task, SCR_TaskExecutor executor, int requesterID)
SCR_CampaignFaction GetFaction()
SCR_EGroupRole
Group roles.
SCR_ETaskNotificationMsg
Various types of task notifications for different events and states.
SCR_GroupTaskManagerComponent m_GroupTaskManager
SCR_GroupsManagerComponent m_GroupsManager
SCR_RequestedTaskNotificationComponentClass SCR_TaskNotificationComponentClass OnTaskCreated(SCR_Task task, int byPlayerID)
void OnRequestedGroupTaskSet(SCR_Task task, int byPlayerID, int requesterGroupId)
void SCR_Task(IEntitySource src, IEntity parent)
Definition SCR_Task.c:1938
SCR_ETaskState
Definition SCR_Task.c:3
bool IsPlayerGroupLeader(int playerID, notnull array< SCR_AIGroup > playableGroups)
SCR_TaskSystem m_TaskSystem
bool HasGroupTask(SCR_TaskExecutor executor)
void SendMessageToGroup(SCR_ETaskNotification notificationType, SCR_ETaskNotificationMsg msgType, int callerPlayerId, BaseTransceiver transmitter, SCR_AIGroup receiverGroup, int baseCallsign=SCR_MilitaryBaseComponent.INVALID_BASE_CALLSIGN, int callerGroupId=-1, int calledGroupId=-1, int gridX=-1, int gridY=-1)
const bool ALLOW_SEND_TO_EMPTY_GROUP
BaseTransceiver GetPlayerTransceiver(int playerId)
BaseTransceiver GetHQTransceiver(notnull SCR_CampaignFaction faction)
int GetGroupID()
IEntity GetOwner()
Owner entity of the fuel tank.
override void EOnInit(IEntity owner)
SCR_EditableTaskComponentClass m_Task
Editable SCR_BaseTask.