Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_CallsignGroupComponent.c
Go to the documentation of this file.
1[ComponentEditorProps(category: "GameScripted/Callsign", description: "")]
5
7class SCR_CallsignGroupComponent : SCR_CallsignBaseComponent
8{
9 protected bool m_bGroupInitCalled;
11
12 //~ TODO: Investigate why AI leaders need to be group character nr 1 if they become leader
13 protected const int iLEADER_ROLE_CHARACTER_CALLSIGN = 1;
14
17
20
23
26
27 //~ If the group is a slave than all logic will be handled by the master rather than the slave
28 protected bool m_bIsSlave;
30 protected SCR_CallsignGroupComponent m_MasterGroupCallsignComponent;
31
32 //------------------------------------------------------------------------------------------------
33 //If server assign callsign
34 override void InitOnServer(IEntity owner)
35 {
36 // Always verify the pointer. The object could be deleted by the time it gets here.
37 if (!owner)
38 return;
39
40 super.InitOnServer(owner);
41
42 m_Group = SCR_AIGroup.Cast(owner);
43 if (!m_Group)
44 return;
45
46 //~ Set master group if group is slave
47 if (m_Group.IsSlave())
48 {
49 m_MasterGroup = m_Group.GetMaster();
50
51 if (m_MasterGroup)
52 {
53 m_bIsSlave = true;
54 m_MasterGroupCallsignComponent = SCR_CallsignGroupComponent.Cast(m_MasterGroup.FindComponent(SCR_CallsignGroupComponent));
55 }
56 }
57
58 //If leader assigned then init group, else wait until leader is assigned
59 IEntity leader = m_Group.GetLeaderEntity();
60 Faction groupFaction;
61 if (leader)
63 else
64 groupFaction = m_Group.GetFaction();
65
66 if (groupFaction)
67 FactionInit(groupFaction);
68
69 //~ If AI characters are added/removed from group or leader changed
70 m_Group.GetOnAgentAdded().Insert(OnAIAddedToGroup);
71 m_Group.GetOnAgentRemoved().Insert(OnAIRemovedFromGroup);
72 m_Group.GetOnLeaderChanged().Insert(OnAILeaderAssigned);
73
74 //~ If players are added or removed from group or leader changed
75 m_Group.GetOnPlayerAdded().Insert(OnPlayerAddedToGroup);
76 m_Group.GetOnPlayerRemoved().Insert(OnPlayerRemovedFromGroup);
77 m_Group.GetOnPlayerLeaderChanged().Insert(OnPlayerLeaderAssigned);
78
79 //~ On faction changed
80 m_Group.GetOnFactionChanged().Insert(OnFactionChanged);
81 }
82
83 //------------------------------------------------------------------------------------------------
84 protected void OnPlayerAddedToGroup(SCR_AIGroup aiGroup, int playerID)
85 {
86 if (!m_Group || m_Group != aiGroup)
87 return;
88
90 return;
91
92 AssignPlayerCallsign(playerID);
93
94 //No longer one character in group so update callsigns (This includes squad leader)
95 if (m_Group && m_Group.GetPlayerAndAgentCount(true) == 2)
97 }
98
99 //------------------------------------------------------------------------------------------------
100 protected void OnPlayerRemovedFromGroup(SCR_AIGroup aiGroup, int playerID)
101 {
102 if (!m_Group || m_Group != aiGroup)
103 return;
104
105 foreach (int characterCallsignNumber, int mapPlayerID : m_mPlayerCallsigns)
106 {
107 if (playerID == mapPlayerID)
108 {
109 m_mPlayerCallsigns.Remove(characterCallsignNumber);
110 break;
111 }
112 }
113
114 foreach (int characterUniqueRole, int mapPlayerID : m_mPlayerRoleCallsigns)
115 {
116 if (playerID == mapPlayerID)
117 {
118 m_mPlayerRoleCallsigns.Remove(characterUniqueRole);
119 break;
120 }
121 }
122
124 }
125
126 //------------------------------------------------------------------------------------------------
127 protected void OnPlayerLeaderAssigned(int groupID, int playerID)
128 {
129 if (!m_Group || m_Group.GetGroupID() != groupID || playerID <= 0)
130 return;
131
132 //~ If AI is Squad leader remove it
133 if (m_mAIRoleCallsigns.Contains(ERoleCallsign.SQUAD_LEADER))
135
137 }
138
139 //------------------------------------------------------------------------------------------------
140 protected void UpdatePlayerRoles()
141 {
143
144 foreach (int characterNumber, int player : m_mPlayerCallsigns)
145 {
146 AssignPlayerCallsign(player, characterNumber);
147 }
148 }
149
150 //------------------------------------------------------------------------------------------------
151 protected void AssignPlayerCallsign(int playerID, int characterCallsign = -1)
152 {
153 if (!m_CallsignInfo)
154 return;
155
156 //Assign first availible callsign
157 if (characterCallsign <= 0)
158 {
159 characterCallsign = 1;
160
161 while (m_mAICallsigns.Contains(characterCallsign) || m_mPlayerCallsigns.Contains(characterCallsign))
162 {
163 characterCallsign++;
164 }
165 }
166
167 ERoleCallsign roleIndex = -1;
168 bool roleIsUnique;
169 if (m_CallsignInfo.GetCharacterRoleCallsign(SCR_PossessingManagerComponent.GetPlayerMainEntity(playerID), playerID, m_Group, roleIndex, roleIsUnique) && roleIsUnique)
170 {
171 m_mPlayerRoleCallsigns.Set(roleIndex, playerID);
172 }
173
174 //~ Assigned callsigns will only replicate if the CallsignCharacterComponent has diffrent values
175 m_CallsignManager.SetPlayerCallsign(playerID, m_iCompanyCallsign, m_iPlatoonCallsign, m_iSquadCallsign, characterCallsign, roleIndex);
176
177 if (characterCallsign >= 0)
178 m_mPlayerCallsigns.Set(characterCallsign, playerID);
179 }
180
181 //------------------------------------------------------------------------------------------------
182 //~ Clears and reassigns all Player and AI callsigns
184 {
186
187 m_mAIRoleCallsigns.Clear();
188 array<AIAgent> agents = {};
189 SCR_CallsignCharacterComponent characterCallsignComponent;
190
191 if (m_Group)
192 m_Group.GetAgents(agents);
193
194 foreach (AIAgent agent : agents)
195 {
196 characterCallsignComponent = SCR_CallsignCharacterComponent.Cast(agent.GetControlledEntity().FindComponent(SCR_CallsignCharacterComponent));
197
198 if (characterCallsignComponent)
199 {
200 int characterCallsign, roleCallsign;
201 characterCallsignComponent.GetCharacterAndRoleCallsign(characterCallsign, roleCallsign);
202 characterCallsignComponent.ClearCharacterRoleCallsign();
203 AssignAICallsign(agent, characterCallsignComponent, characterCallsign);
204 }
205 }
206 }
207
208 //------------------------------------------------------------------------------------------------
214 bool IsUniqueRoleInUse(int roleToCheck)
215 {
216 if (m_Group.IsSlave())
217 {
218 SCR_AIGroup master = m_Group.GetMaster();
219
220 if (master)
221 {
222 SCR_CallsignGroupComponent masterCallsignComponent = SCR_CallsignGroupComponent.Cast(master.FindComponent(SCR_CallsignGroupComponent));
223
224 if (masterCallsignComponent)
225 return masterCallsignComponent.IsUniqueRoleInUse(roleToCheck);
226 }
227 }
228
229 //~ Was not slave or master group could not be obtained for some reason
230 return m_mAIRoleCallsigns.Contains(roleToCheck) || m_mPlayerRoleCallsigns.Contains(roleToCheck);
231 }
232
233 //------------------------------------------------------------------------------------------------
234 //Called if group is created by editor to get correct faction
235 protected void OnAILeaderAssigned(AIAgent currentLeader, AIAgent prevLeader)
236 {
237 //~ Player has become leader not AI
238 if (currentLeader && SCR_PossessingManagerComponent.GetPlayerIdFromMainEntity(currentLeader.GetControlledEntity()) > 0)
239 return;
240
241 //Group init
243 {
244 if (!currentLeader)
245 return;
246
247 IEntity leader = currentLeader.GetControlledEntity();
249 }
250 else
251 {
252 ReplaceAILeaderRole(currentLeader, prevLeader);
253 }
254 }
255
256 //------------------------------------------------------------------------------------------------
257 //If leader was replaced and both characters are still alive and in the same group
258 //Note this only works if the actual leader is replaced in the SCR_AIGroup component, it will not override the callsign if it is not a leader
259 protected void ReplaceAILeaderRole(AIAgent currentLeader, AIAgent prevLeader)
260 {
261 if (!m_bIsServer)
262 return;
263
264 //~ Make sure both agents are alive, not the same character and in the same group
265 if (currentLeader == null || prevLeader == null || currentLeader == prevLeader || currentLeader.GetParentGroup() != prevLeader.GetParentGroup())
266 return;
267
268 SCR_CallsignCharacterComponent prevLeaderCallsignComponent = SCR_CallsignCharacterComponent.Cast(prevLeader.GetControlledEntity().FindComponent(SCR_CallsignCharacterComponent));
269 if (!prevLeaderCallsignComponent)
270 return;
271
272 int prevLeaderCharacterCallsign, prevLeaderRoleCallsign
273 prevLeaderCallsignComponent.GetCharacterAndRoleCallsign(prevLeaderCharacterCallsign, prevLeaderRoleCallsign);
274
275 if (prevLeaderRoleCallsign != ERoleCallsign.SQUAD_LEADER)
276 return;
277
278 //~ Have system assign a new character callsign to the leader. Will change character callsign from 1 and assign a new role if any
279 AssignAICallsign(prevLeader, prevLeaderCallsignComponent);
280
281 //~ Make leader role availible so it is auto assigned to the new leader
283 }
284
285 //------------------------------------------------------------------------------------------------
286 protected void OnAIAddedToGroup(notnull AIAgent character)
287 {
288 //~ Player was added to group not AI
289 if (SCR_PossessingManagerComponent.GetPlayerIdFromMainEntity(character.GetControlledEntity()) > 0)
290 return;
291
293 return;
294
295 SCR_CallsignCharacterComponent characterCallsignComponent = SCR_CallsignCharacterComponent.Cast(character.GetControlledEntity().FindComponent(SCR_CallsignCharacterComponent));
296
297 if (characterCallsignComponent)
298 AssignAICallsign(character, characterCallsignComponent);
299
300 //No longer one character in group so update callsigns (This includes squad leader)
301 if (m_Group && m_Group.GetPlayerAndAgentCount(true) == 2)
303 }
304
305 //------------------------------------------------------------------------------------------------
306 protected void OnAIRemovedFromGroup(SCR_AIGroup group, AIAgent character)
307 {
308 //~ Player was added to group not AI
309 if (SCR_PossessingManagerComponent.GetPlayerIdFromMainEntity(character.GetControlledEntity()) > 0)
310 return;
311
313 return;
314
315 SCR_CallsignCharacterComponent characterCallsignComponent = SCR_CallsignCharacterComponent.Cast(character.GetControlledEntity().FindComponent(SCR_CallsignCharacterComponent));
316
317 if (!characterCallsignComponent)
318 return;
319
320 int characterIndex, roleIndex;
321 characterCallsignComponent.GetCharacterAndRoleCallsign(characterIndex, roleIndex);
322
323 //Make character callsign availible
324 if (m_mAICallsigns.Contains(characterIndex))
325 m_mAICallsigns.Remove(characterIndex);
326
327 MakeAIRoleAvailable(roleIndex);
328
329 //Only one character in group so make sure squad leader is not assigned
330 if (m_Group && m_Group.GetPlayerAndAgentCount(true) == 1)
332 }
333
334 //------------------------------------------------------------------------------------------------
335 protected void AssignAICallsign(AIAgent character, SCR_CallsignCharacterComponent characterCallsignComponent, int characterCallsign = -1)
336 {
337 if (!m_CallsignInfo)
338 return;
339
340 //Assign first availible callsign
341 if (characterCallsign <= 0)
342 {
343 characterCallsign = 1;
344
345 while (m_mAICallsigns.Contains(characterCallsign) || m_mPlayerCallsigns.Contains(characterCallsign))
346 {
347 characterCallsign++;
348 }
349 }
350
351 //Assign specific role callsign
352 int roleIndex = -1;
353 bool isUnique;
354 if (m_CallsignInfo.GetCharacterRoleCallsign(character.GetControlledEntity(), -1, m_Group, roleIndex, isUnique) && isUnique)
355 {
356 m_mAIRoleCallsigns.Set(roleIndex, character);
357 }
358
359 //Assign callsign
360 characterCallsignComponent.AssignCharacterCallsign(m_Faction, m_iCompanyCallsign, m_iPlatoonCallsign, m_iSquadCallsign, characterCallsign, roleIndex, (!m_Group || m_Group.GetPlayerAndAgentCount(true) <= 1));
361
362 if (characterCallsign >= 0)
363 m_mAICallsigns.Set(characterCallsign, character);
364 }
365
366 //------------------------------------------------------------------------------------------------
367 protected void MakeAIRoleAvailable(int roleIndex)
368 {
369 if (roleIndex < 0)
370 return;
371
372 //Make character role callsign availible
373 m_mAIRoleCallsigns.Remove(roleIndex);
374
375 array<AIAgent> agents = {};
376 SCR_CallsignCharacterComponent characterCallsignComponent;
377
378 int characterCallsign, currentRoleCallsign;
379 bool roleReassigned = false;
380
381 m_Group.GetAgents(agents);
382
383 //Go over each character to check if role can be reassigned to another character
384 foreach (AIAgent agent : agents)
385 {
386 if (SCR_PossessingManagerComponent.GetPlayerIdFromMainEntity(agent.GetControlledEntity()) > 0)
387 continue;
388
389 characterCallsignComponent = SCR_CallsignCharacterComponent.Cast(agent.GetControlledEntity().FindComponent(SCR_CallsignCharacterComponent));
390 if (!characterCallsignComponent)
391 continue;
392
393 characterCallsignComponent.GetCharacterAndRoleCallsign(characterCallsign, currentRoleCallsign);
394
395 //Do not assign roles to characters that already have a role (Unless squad leader)
396 if (currentRoleCallsign >= 0 && roleIndex != ERoleCallsign.SQUAD_LEADER)
397 continue;
398
399 bool isUnique;
400 if (m_CallsignInfo.GetCharacterRoleCallsign(agent.GetControlledEntity(), -1, m_Group, roleIndex, isUnique))
401 {
402 //~ Update role
403 if (roleIndex != ERoleCallsign.SQUAD_LEADER)
404 {
405 characterCallsignComponent.UpdateCharacterRoleCallsign(roleIndex);
406 }
407 //~ Replace leader
408 else
409 {
410 characterCallsignComponent.UpdateCharacterCallsignAndRole(iLEADER_ROLE_CHARACTER_CALLSIGN, roleIndex);
411
412 m_mAICallsigns.Remove(characterCallsign);
413
415 }
416
417 //~ Update role map
418 if (isUnique)
419 m_mAIRoleCallsigns.Set(roleIndex, agent);
420
421 roleReassigned = true;
422 break;
423 }
424 }
425
426 //~ Had a prev role make it availible again (Only called if new role assigned is Squad leader else it will never reach this)
427 if (roleReassigned && currentRoleCallsign >= 0 && currentRoleCallsign != roleIndex)
428 MakeAIRoleAvailable(currentRoleCallsign);
429 }
430
431 //------------------------------------------------------------------------------------------------
432 override bool GetCallsignNames(out string company, out string platoon, out string squad, out string character, out string format)
433 {
434 int companyCallsignIndex, platoonCallsignIndex, squadCallsignIndex, emptyCharacter;
435 character = string.Empty;
436
437 if (!GetCallsignIndexes(companyCallsignIndex, platoonCallsignIndex, squadCallsignIndex, emptyCharacter))
438 return false;
439
440 //No callsign data
441 if (!SetCallsignInfo())
442 {
443 company = companyCallsignIndex.ToString();
444 platoon = platoonCallsignIndex.ToString();
445 squad = squadCallsignIndex.ToString();
446
447 format = "ERROR %1-%2-%3";
448
449 return true;
450 }
451
452 company = m_CallsignInfo.GetCompanyCallsignName(companyCallsignIndex);
453 platoon = m_CallsignInfo.GetPlatoonCallsignName(platoonCallsignIndex);
454 squad = m_CallsignInfo.GetSquadCallsignName(squadCallsignIndex);
455
456 format = m_CallsignInfo.GetCallsignFormat(false);
457 return true;
458 }
459
460 //------------------------------------------------------------------------------------------------
461 override bool GetCallsignIndexes(out int companyIndex, out int platoonIndex, out int squadIndex, out int characterNumber = -1, out ERoleCallsign characterRole = ERoleCallsign.NONE)
462 {
463 characterNumber = -1;
464
465 if (m_iCompanyCallsign < 0 || m_iPlatoonCallsign < 0 || m_iSquadCallsign < 0)
466 {
467 companyIndex = -1;
468 platoonIndex = -1;
469 squadIndex = -1;
470 return false;
471 }
472
473 companyIndex = m_iCompanyCallsign;
474 platoonIndex = m_iPlatoonCallsign;
475 squadIndex = m_iSquadCallsign;
476
477 return true;
478 }
479
480 //------------------------------------------------------------------------------------------------
481 // TODO: Callsigns should have logic as to how they are assigned as now there can be duplicants and there is no structure (eg Alpha-Red-1 should be followed by Alpha-Red-2)
482 protected void AssignGroupCallsign()
483 {
484 if (!m_CallsignManager)
485 return;
486
487 int company, platoon, squad;
488 m_CallsignManager.AssignCallGroupCallsign(m_Group, m_Faction, m_MasterGroupCallsignComponent, company, platoon, squad);
489 DoAssignCallsign(company, platoon, squad);
490 }
491
492 //------------------------------------------------------------------------------------------------
493 void DoAssignCallsign(int company, int platoon, int squad)
494 {
495 AssignCallsignBroadcast(company, platoon, squad);
496 Rpc(AssignCallsignBroadcast, company, platoon, squad);
497 }
498
499 //------------------------------------------------------------------------------------------------
500 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
501 protected void AssignCallsignBroadcast(int company, int platoon, int squad)
502 {
503 if (company == m_iCompanyCallsign && m_iPlatoonCallsign == platoon && m_iSquadCallsign == squad)
504 return;
505
506 m_iCompanyCallsign = company;
507 m_iPlatoonCallsign = platoon;
508 m_iSquadCallsign = squad;
509
510 Event_OnCallsignChanged.Invoke(m_iCompanyCallsign, m_iPlatoonCallsign, m_iSquadCallsign, -1, -1);
511 }
512
513 //------------------------------------------------------------------------------------------------
517 void FactionInit(Faction faction, bool isFactionChange = false)
518 {
519 //~ Faction is changed but is the same as before
520 if (isFactionChange && faction == m_Faction)
521 return;
522
523 Faction prevFaction = m_Faction;
524 m_Faction = faction;
525
526 //Server only
527 if (!m_bIsServer)
528 return;
529
530 if (!SetCallsignInfo())
531 return;
532
533 //Faction is changed so make current callsign availible again
534 if (isFactionChange)
535 {
536 if (!prevFaction || !m_CallsignManager)
537 return;
538
539 if (m_bIsSlave)
540 {
541 Debug.Error2("SCR_CallsignGroupComponent", "FactionInit when faction changed is called on a slave group. This is not supported as it will assign it's own group callsign seperate from the master group!");
542 return;
543 }
544
545 if (m_iCompanyCallsign >= 0)
546 {
547 m_CallsignManager.MakeGroupCallsignAvailible(prevFaction, m_iCompanyCallsign, m_iPlatoonCallsign, m_iSquadCallsign);
548 }
549 //Clears assigned callsign
551
552 //Clear character callsigns
553 m_mAICallsigns.Clear();
554 m_mAIRoleCallsigns.Clear();
555 }
556
557 if (!SetCallsignInfo())
558 return;
559
560 m_bGroupInitCalled = true;
561
562 // Already assigned through e.g. save data
563 if (m_iCompanyCallsign != -1 && m_iPlatoonCallsign != -1 && m_iSquadCallsign != -1)
564 return;
565
566 //Assign group callsign
568
569 array<AIAgent> agents = {};
570 SCR_CallsignCharacterComponent characterCallsignComponent;
571
572 m_Group.GetAgents(agents);
573
574 //If callsigns are assigned at random randomize group as well on init
575 array<int> availibleRandomCallsigns = {};
576 if (m_CallsignInfo.GetIsAssignedRandomly())
577 {
578 int count = agents.Count();
579
580 while (count > 0)
581 {
582 availibleRandomCallsigns.Insert(count);
583 count--;
584 }
585 }
586
587 //Assign callsigns for each character in group
588 foreach (AIAgent agent : agents)
589 {
590 characterCallsignComponent = SCR_CallsignCharacterComponent.Cast(agent.GetControlledEntity().FindComponent(SCR_CallsignCharacterComponent));
591 if (!characterCallsignComponent)
592 continue;
593
594 characterCallsignComponent.ClearCallsigns();
595 AssignAICallsign(agent, characterCallsignComponent);
596
597 //~ Replace line above if you want character callsigns to also be randomized
598// if (m_CallsignInfo.GetIsAssignedRandomly())
599// {
600// int randomIndex = availibleRandomCallsigns.GetRandomIndex();
601// int randomCharacterCallsign = availibleRandomCallsigns[randomIndex];
602// availibleRandomCallsigns.Remove(randomIndex);
603//
604// AssignCharacterCallsign(agent, characterCallsignComponent, randomCharacterCallsign);
605// }
606// else
607// {
608// AssignCharacterCallsign(agent, characterCallsignComponent);
609// }
610 }
611 }
612
613 //------------------------------------------------------------------------------------------------
615 {
616 return m_Group;
617 }
618
619 //------------------------------------------------------------------------------------------------
620 protected void OnFactionChanged(Faction faction)
621 {
622 FactionInit(faction, m_Faction && m_Faction != faction);
623 }
624
625 //------------------------------------------------------------------------------------------------
626 override bool RplSave(ScriptBitWriter writer)
627 {
628 writer.WriteInt(m_iCompanyCallsign);
629 writer.WriteInt(m_iPlatoonCallsign);
630 writer.WriteInt(m_iSquadCallsign);
631
632 return true;
633 }
634
635 //------------------------------------------------------------------------------------------------
636 override bool RplLoad(ScriptBitReader reader)
637 {
638 int company, platoon, squad;
639
640 reader.ReadInt(company);
641 reader.ReadInt(platoon);
642 reader.ReadInt(squad);
643
644 AssignCallsignBroadcast(company, platoon, squad);
645
646 return true;
647 }
648
649 //------------------------------------------------------------------------------------------------
650 // destructor
652 {
653 if (!m_bIsServer || m_iCompanyCallsign < 0 || !m_Faction || !m_CallsignManager || m_bIsSlave)
654 return;
655
656 m_CallsignManager.MakeGroupCallsignAvailible(m_Faction, m_iCompanyCallsign, m_iPlatoonCallsign, m_iSquadCallsign);
657 }
658}
ERoleCallsign
void OnPlayerAddedToGroup(SCR_AIGroup aiGroup, int playerID)
void OnPlayerRemovedFromGroup(SCR_AIGroup aiGroup, int playerID)
override bool RplLoad(ScriptBitReader reader)
SCR_AIGroupSettingsComponentClass m_Group
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
Faction m_Faction
override void ClearCallsigns()
Called on server only before assigning new callsign to make sure everything is clear....
override bool GetCallsignNames(out string company, out string platoon, out string squad, out string character, out string format)
void AssignCallsignBroadcast(int company, int platoon, int squad, int character, int role, bool aloneInGroup)
override bool GetCallsignIndexes(out int companyIndex, out int platoonIndex, out int squadIndex, out int characterNumber=-1, out ERoleCallsign characterRole=ERoleCallsign.NONE)
void FactionInit(Faction faction, bool isFactionChange=false)
void ~SCR_CallsignGroupComponent()
bool IsUniqueRoleInUse(int roleToCheck)
void OnAIAddedToGroup(notnull AIAgent character)
void AssignGroupCallsign()
void OnAILeaderAssigned(AIAgent currentLeader, AIAgent prevLeader)
void ReplaceAILeaderRole(AIAgent currentLeader, AIAgent prevLeader)
ref map< int, int > m_mPlayerRoleCallsigns
Keeps track of specific AI role callsigns in group. map<RoleID, PlayerID>.
SCR_CallsignGroupComponent m_MasterGroupCallsignComponent
void AssignAICallsign(AIAgent character, SCR_CallsignCharacterComponent characterCallsignComponent, int characterCallsign=-1)
void OnFactionChanged(Faction faction)
void UpdatePlayerRoles()
ref map< int, int > m_mPlayerCallsigns
Keeps track of player callsigns in group <Callsign, PlayerID>. Player callsigns never change.
ref map< int, AIAgent > m_mAICallsigns
Keeps track of AI callsigns in group.
void AssignPlayerCallsign(int playerID, int characterCallsign=-1)
SCR_AIGroup GetGroup()
override void InitOnServer(IEntity owner)
ref map< int, AIAgent > m_mAIRoleCallsigns
Keeps track of specific AI role callsigns in group.
SCR_AIGroup m_MasterGroup
const int iLEADER_ROLE_CHARACTER_CALLSIGN
void UpdateAllCharacterRoleCallsigns()
void MakeAIRoleAvailable(int roleIndex)
SCR_CallsignGroupComponentClass m_bGroupInitCalled
Component of assigning and storing squad names.
void OnAIRemovedFromGroup(SCR_AIGroup group, AIAgent character)
void OnPlayerLeaderAssigned(int groupID, int playerID)
void DoAssignCallsign(int company, int platoon, int squad)
override bool RplSave(ScriptBitWriter writer)
ref SCR_FactionCallsignInfo m_CallsignInfo
Definition SCR_Faction.c:54
Definition Debug.c:13
Component of assigning and storing squad names.
static SCR_EditableEntityComponent GetEditableEntity(IEntity owner)
Definition Types.c:486
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