Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_CampaignMilitaryBaseTaskEntity.c
Go to the documentation of this file.
1void TaskMilitaryBaseCallsignInvokerDelegate(SCR_CampaignMilitaryBaseTaskEntity task, int callsign);
3typedef ScriptInvokerBase<TaskMilitaryBaseCallsignInvokerDelegate> SCR_TaskMilitaryBaseCallsignInvoker;
4
8
9class SCR_CampaignMilitaryBaseTaskEntity : SCR_Task
10{
14
15 //------------------------------------------------------------------------------------------------
20
28
29 //------------------------------------------------------------------------------------------------
30 override void SetTaskState(SCR_ETaskState state)
31 {
32 SCR_XPHandlerComponent comp = SCR_XPHandlerComponent.Cast(GetGame().GetGameMode().FindComponent(SCR_XPHandlerComponent));
33
34 // Award XP
35 if (comp && m_MilitaryBase && state == SCR_ETaskState.COMPLETED)
36 AwardXP(comp);
37
38 super.SetTaskState(state);
39 }
40
41 //------------------------------------------------------------------------------------------------
43 protected void AwardXP(notnull SCR_XPHandlerComponent handlerXP);
44
45 //------------------------------------------------------------------------------------------------
46 void SetMilitaryBaseCallSign(int callSign)
47 {
48 if (callSign == SCR_MilitaryBaseComponent.INVALID_BASE_CALLSIGN)
49 return;
50
52 Rpc(RpcDo_SetMilitaryBaseCallSign, callSign);
53
54 if (!m_MilitaryBase)
55 return;
56
58 if (!baseSystem)
59 return;
60
62 baseSystem.GetOnBaseUnregistered().Insert(OnBaseUnregistered);
63 }
64
65 //------------------------------------------------------------------------------------------------
66 [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
67 protected void RpcDo_SetMilitaryBaseCallSign(int callSign)
68 {
70 return;
71
72 m_MilitaryBaseTaskData.m_iBaseCallSign = callSign;
73
75 }
76
77 //------------------------------------------------------------------------------------------------
79 {
80 SCR_GameModeCampaign campaign = SCR_GameModeCampaign.GetInstance();
81 if (!campaign)
82 return;
83
84 SCR_CampaignMilitaryBaseManager baseManager = campaign.GetBaseManager();
85 if (!baseManager)
86 return;
87
88 m_MilitaryBase = baseManager.FindBaseByCallsign(callsign);
89
92
94 m_OnMilitaryBaseCallsignAssigned.Invoke(this, callsign);
95 }
96
97 //------------------------------------------------------------------------------------------------
98 protected void OnTargetBaseCaptured(SCR_MilitaryBaseComponent base, Faction faction)
99 {
100 if (!m_MilitaryBase || base != m_MilitaryBase || !faction || !GetOwnerFactionKeys().Contains(faction.GetFactionKey()))
101 return;
102
103 SetTaskState(SCR_ETaskState.COMPLETED);
104 DeleteTask();
105 }
106
107 //------------------------------------------------------------------------------------------------
108 protected void OnBaseUnregistered(SCR_MilitaryBaseComponent base)
109 {
110 if (SCR_Global.IsEditMode(this) || !GetGame().GetGameMode())
111 return;
112
113 // base is removed - cancel task
114 SCR_MilitaryBaseComponent targetBase = GetMilitaryBase();
115 if (!base || base != targetBase)
116 return;
117
118 m_TaskSystem.SetTaskState(this, SCR_ETaskState.CANCELLED);
119 DeleteTask();
120 }
121
122 //------------------------------------------------------------------------------------------------
123 protected void DeleteTask()
124 {
125 if (!m_TaskSystem)
126 return;
127
128 m_TaskSystem.DeleteTask(this);
129 }
130
131 //------------------------------------------------------------------------------------------------
132 override bool RplSave(ScriptBitWriter writer)
133 {
134 if (!super.RplSave(writer))
135 return false;
136
138 writer.WriteInt(SCR_MilitaryBaseComponent.INVALID_BASE_CALLSIGN);
139 else
140 writer.WriteInt(m_MilitaryBaseTaskData.m_iBaseCallSign);
141
142 return true;
143 }
144
145 //------------------------------------------------------------------------------------------------
146 override bool RplLoad(ScriptBitReader reader)
147 {
148 if (!super.RplLoad(reader))
149 return false;
150
153
154 int baseCallSign;
155 reader.ReadInt(baseCallSign);
156 RpcDo_SetMilitaryBaseCallSign(baseCallSign);
157
158 return true;
159 }
160
161 //------------------------------------------------------------------------------------------------
162 override protected void InitializeData()
163 {
164 if (!m_TaskData)
166
167 super.InitializeData();
168
170 }
171
172 //------------------------------------------------------------------------------------------------
174 {
176 if (militaryBaseSystem)
177 militaryBaseSystem.GetOnBaseFactionChanged().Remove(OnTargetBaseCaptured);
178
180 if (baseManager)
181 baseManager.GetOnBaseUnregistered().Remove(OnBaseUnregistered);
182 }
183}
ArmaReforgerScripted GetGame()
Definition game.c:1398
override bool RplLoad(ScriptBitReader reader)
void DeleteTask()
override void SetTaskState(SCR_ETaskState state)
SCR_BaseGameMode GetGameMode()
void InitializeData()
void OnTargetBaseCaptured(SCR_MilitaryBaseComponent base, Faction faction)
override bool RplSave(ScriptBitWriter writer)
ScriptInvokerBase< TaskMilitaryBaseCallsignInvokerDelegate > SCR_TaskMilitaryBaseCallsignInvoker
void SetMilitaryBaseCallSign(int callSign)
void ~SCR_CampaignMilitaryBaseTaskEntity()
SCR_CampaignMilitaryBaseComponent m_MilitaryBase
void RpcDo_SetMilitaryBaseCallSign(int callSign)
func TaskMilitaryBaseCallsignInvokerDelegate
void AssignMilitaryBaseByCallsign(int callsign)
SCR_TaskMilitaryBaseCallsignInvoker GetOnMilitaryBaseCallsignAssigned()
SCR_CampaignMilitaryBaseComponent GetMilitaryBase()
ref SCR_TaskMilitaryBaseCallsignInvoker m_OnMilitaryBaseCallsignAssigned
SCR_CampaignMilitaryBaseTaskEntityClass m_MilitaryBaseTaskData
void SCR_GameModeCampaign(IEntitySource src, IEntity parent)
void OnBaseUnregistered(notnull SCR_MilitaryBaseComponent base)
void SCR_Task(IEntitySource src, IEntity parent)
Definition SCR_Task.c:1938
ref SCR_TaskData m_TaskData
Definition SCR_Task.c:110
array< string > GetOwnerFactionKeys()
Definition SCR_Task.c:951
SCR_ETaskState
Definition SCR_Task.c:3
ref ScriptInvokerVoid m_OnDisplayDataChanged
Definition SCR_Task.c:133
SCR_TaskSystem m_TaskSystem
SCR_CampaignMilitaryBaseComponent FindBaseByCallsign(int callsign)
static bool IsEditMode()
Definition Functions.c:1566
OnBaseFactionChangedInvoker GetOnBaseFactionChanged()
static SCR_MilitaryBaseSystem GetInstance()
OnBaseUnregisteredInvoker GetOnBaseUnregistered()
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
proto bool Contains(T value)