5class SCR_EstablishBaseTaskEntity :
SCR_Task
26 if (!s_OnPlayerEnteredEstablishingArea)
29 return s_OnPlayerEnteredEstablishingArea;
35 SCR_XPHandlerComponent comp = SCR_XPHandlerComponent.Cast(
GetGame().
GetGameMode().FindComponent(SCR_XPHandlerComponent));
41 if (!assigneePlayerIDs)
44 foreach (
int playerID : assigneePlayerIDs)
46 comp.AwardXP(playerID,
SCR_EXPRewards.ESTABLISH_BASE_COMPLETED, 1.0,
false);
62 SCR_NotificationsComponent.SendLocal(
ENotification.GROUP_TASK_ESTABLISH_BASE_ENABLED);
64 if (s_OnPlayerEnteredEstablishingArea)
65 s_OnPlayerEnteredEstablishingArea.Invoke();
71 SCR_NotificationsComponent.SendLocal(
ENotification.GROUP_TASK_ESTABLISH_BASE_DISABLED);
124 array<SCR_MilitaryBaseComponent> bases = {};
127 foreach (SCR_MilitaryBaseComponent
base : bases)
144 float distanceSq =
vector.DistanceSqXZ(campaignBase.GetOwner().GetOrigin(),
GetOrigin());
157 SCR_MilitaryBaseComponent
base =
GetBase(campaignBase.GetOwner().GetOrigin());
195 FactionManager factionManager =
GetGame().GetFactionManager();
201 foreach (SCR_CampaignBuildingCompositionComponent buildingComposition,
float buildingRadius :
m_mPlacedHQs)
203 if (!buildingComposition || !buildingComposition.IsCompositionSpawned())
211 foreach (
string factionKey :
m_TaskData.m_aOwnerFactionKeys)
213 if (factionKey.IsEmpty())
217 if (!campaignFaction)
220 if (campaignFaction == builderFaction)
234 if (!editableEntity || !provider)
237 SCR_CampaignBuildingCompositionComponent buildingCompositionComponent = SCR_CampaignBuildingCompositionComponent.Cast(editableEntity.GetOwner().FindComponent(SCR_CampaignBuildingCompositionComponent));
238 if (!buildingCompositionComponent)
245 editableEntity.
GetPos(entityPos);
247 float providerBuildingRadius = provider.GetBuildingRadius();
251 m_mPlacedHQs.Set(buildingCompositionComponent, providerBuildingRadius);
263 array<EEditableEntityLabel> entityLabels = {};
286 bool loaded = super.RplLoad(reader);
296 super.EOnInit(owner);
301 SCR_CampaignFactionCommanderHandlerComponent handlerComponent = SCR_CampaignFactionCommanderHandlerComponent.Cast(SCR_FactionCommanderHandlerComponent.GetInstance());
302 if (!handlerComponent)
307 int baseMinDistance = SCR_CampaignFactionCommanderHandlerComponent.Cast(SCR_FactionCommanderHandlerComponent.GetInstance()).GetBaseMinDistance(
SCR_ECampaignBaseType.BASE);
311 if (!
System.IsConsoleApp())
331 m_BuildingManagerComponent = SCR_CampaignBuildingManagerComponent.Cast(gameMode.FindComponent(SCR_CampaignBuildingManagerComponent));
359 foreach (SCR_CampaignBuildingCompositionComponent buildingComposition,
float buildingRadius :
m_mPlacedHQs)
361 if (!buildingComposition)
ArmaReforgerScripted GetGame()
override bool RplLoad(ScriptBitReader reader)
SCR_BaseGameMode GetGameMode()
RplComponent m_RplComponent
bool IsHQService(notnull SCR_EditableEntityComponent editableEntity)
SCR_CampaignBuildingManagerComponent m_BuildingManagerComponent
int m_iBaseEstablishingRadius
void OnTaskStateChanged(SCR_Task task, SCR_ETaskState newState)
void OnTaskAssigneeAdded(SCR_Task task, SCR_TaskExecutor executor, int requesterID)
SCR_CampaignFaction m_BuilderFaction
SCR_MilitaryBaseComponent GetBase(vector position, bool isAllowedCampaignBase=false)
void OnTaskAssigneeRemoved(SCR_Task task, SCR_TaskExecutor executor, int requesterID)
bool m_bHasHQSameFactionAsTask
const int DELETE_TASK_DELAY
void StartCheckingEstablishmentArea()
void OnBaseBuilt(notnull SCR_CampaignMilitaryBaseComponent campaignBase, Faction faction)
int m_iBaseEstablishingRadiusSq
void StopCheckingEstablishmentArea()
void CheckEstablishmentArea()
bool m_bIsRunningCheckEstablishmentArea
float m_fProviderBuildingRadius
void OnHQCompositionSpawned(bool spawned)
void OnEntitySpawnedByProvider(int prefabID, SCR_EditableEntityComponent editableEntity, int playerId, SCR_CampaignBuildingProviderComponent provider)
void ~SCR_EstablishBaseTaskEntity()
ref map< SCR_CampaignBuildingCompositionComponent, float > m_mPlacedHQs
void SCR_FactionManager(IEntitySource src, IEntity parent)
void SCR_GameModeCampaign(IEntitySource src, IEntity parent)
ScriptInvokerBase< ScriptInvokerVoidMethod > ScriptInvokerVoid
array< int > GetTaskAssigneePlayerIDs()
void SCR_Task(IEntitySource src, IEntity parent)
ref SCR_TaskData m_TaskData
bool IsTaskAssignedTo(SCR_TaskExecutor executor, out SCR_TaskExecutor match=null)
SCR_TaskSystem m_TaskSystem
proto external vector GetOrigin()
Created in SCR_GameModeCampaign.
OnBaseBuiltInvoker GetOnBaseBuilt()
bool GetPos(out vector pos)
SCR_UIInfo GetInfo(IEntity owner=null)
int GetEntityLabels(out notnull array< EEditableEntityLabel > entityLabels)
int GetBases(notnull out array< SCR_MilitaryBaseComponent > bases)
static SCR_MilitaryBaseSystem GetInstance()
static int GetLocalPlayerId()
Returns either a valid ID of local player or 0.
static IEntity GetLocalControlledEntity()
override void EOnInit(IEntity owner)