Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_RadioRelayBuildingDisassemblyUserAction.c
Go to the documentation of this file.
2{
3 //------------------------------------------------------------------------------------------------
4 override bool CanBePerformedScript(IEntity user)
5 {
6 if (!super.CanBePerformedScript(user))
7 return false;
8
9 SCR_ChimeraCharacter character = SCR_ChimeraCharacter.Cast(user);
10 if (!character)
11 return false;
12
13 return CanRelayBeDismantled(character);
14 }
15
16 //------------------------------------------------------------------------------------------------
17 override protected void DeleteComposition(notnull IEntity composition, notnull SCR_ChimeraCharacter character)
18 {
19 if (!CanRelayBeDismantled(character))
20 return;
21
22 super.DeleteComposition(composition, character);
23 }
24
25 //------------------------------------------------------------------------------------------------
26 protected bool CanRelayBeDismantled(notnull SCR_ChimeraCharacter dismantlingUser)
27 {
29 return true;
30
31 Faction structureFaction = m_FactionComponent.GetAffiliatedFaction();
32 if (!structureFaction)
33 return false;
34
35 if (!IsPlayerFactionSame(dismantlingUser))
36 return true;
37
38 SCR_GameModeCampaign campaign = SCR_GameModeCampaign.GetInstance();
39 if (!campaign)
40 return true;
41
43 if (!campaignBase)
44 return false;
45
46 SCR_DismantleCampaignMilitaryBaseTaskEntity task = SCR_DismantleCampaignMilitaryBaseTaskEntity.Cast(SCR_CampaignTaskHelper.GetTaskOnBase(campaignBase, structureFaction, SCR_DismantleCampaignMilitaryBaseTaskEntity));
47 if (task)
48 return true; // if base is meant to be dismantled then this will have to be dismantled
49
50 SCR_CampaignBuildingManagerComponent buildingManagerComponent = SCR_CampaignBuildingManagerComponent.Cast(campaign.FindComponent(SCR_CampaignBuildingManagerComponent));
51 if (!buildingManagerComponent)
52 return false;
53
54 array<SCR_CampaignBuildingCompositionComponent> compositions = {};
55 buildingManagerComponent.GetBuildingCompositions(campaignBase, compositions);
56 foreach (SCR_CampaignBuildingCompositionComponent composition : compositions)
57 {
58 if (composition && composition != m_CompositionComponent && HasCompositionLabel(composition, EEditableEntityLabel.SERVICE_ANTENNA))
59 return true; // if there is more than one relay then player is allowed to dismantle this one
60 }
61
62 return false;
63 }
64}
EEditableEntityLabel
void SCR_GameModeCampaign(IEntitySource src, IEntity parent)
SCR_CampaignBuildingCompositionComponent m_CompositionComponent
bool HasCompositionLabel(EEditableEntityLabel label=EEditableEntityLabel.TRAIT_SERVICE)
bool IsPlayerFactionSame(notnull SCR_ChimeraCharacter user)
Is user faction same as the composition one.
bool CanRelayBeDismantled(notnull SCR_ChimeraCharacter dismantlingUser)
void DeleteComposition(notnull IEntity composition, notnull SCR_ChimeraCharacter character)