Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_EntityCatalogSpawnerData.c
Go to the documentation of this file.
1
4[BaseContainerProps(configRoot: true), BaseContainerCustomCheckIntTitleField("m_bEnabled", "SpawnerData", "DISABLED - SpawnerData", 1)]
6{
7 [Attribute(desc: "UI info overwrite to overwrite entity name. Will use EditableEntityUI if non is set")]
8 protected ref SCR_UIInfo m_UiInfo;
9
10 [Attribute("0", desc: "Slot size the entity can be spawned in", uiwidget: UIWidgets.Flags, enums: ParamEnumArray.FromEnum(SCR_EEntitySpawnerSlotType))]
12
13 [Attribute(defvalue: "1", params: "1 inf", desc: "Prefab entity count. To be used with prefabs like groups, where spawned logic create additional entities")]
14 protected int m_iEntityCount;
15
16 [Attribute(desc: "Variants prefab data of entity. These are a diffrent variant of the default")]
17 protected ref array<ref SCR_SpawnerVariantData> m_aVariantData;
18
20
21 protected SCR_ECharacterRank m_eMinimumRequiredRank;
22
23 protected int m_iSupplyCost;
24
25 //--------------------------------- Enable/Disable in Spawner ---------------------------------\\
26
31 void SetEnabled(bool enable)
32 {
33 m_bEnabled = enable;
34 }
35
36 //------------------------------------------------------------------------------------------------
38 {
39 return m_iEntityCount;
40 }
41
42 //--------------------------------- Get Overwrite name ---------------------------------\\
43
49 {
50 if (!m_UiInfo)
51 return string.Empty;
52
53 return m_UiInfo.GetName();
54 }
55
56 //--------------------------------- Can Spawn in Slot ---------------------------------\\
57
63 {
64 return SCR_Enum.HasFlag(GetValidSlotSizes(), slotSize);
65 }
66
67 //--------------------------------- Get Valid slot sizes ---------------------------------\\
68
76
77 //--------------------------------- Get has required Rank ---------------------------------\\
78
84 bool HasRequiredRank(SCR_ECharacterRank rank)
85 {
86 if (rank == SCR_ECharacterRank.INVALID)
87 return false;
88
89 return rank >= GetMinimumRequiredRank();
90 }
91
92 //--------------------------------- Get minimum required Rank ---------------------------------\\
93
97 SCR_ECharacterRank GetMinimumRequiredRank()
98 {
100 }
101
102 //--------------------------------- Get supply cost ---------------------------------\\
103
108 {
109 return m_iSupplyCost;
110 }
111
112 //--------------------------------- Get Variants of Type ---------------------------------\\
113
118 {
119 array<ResourceName> prefabs = {};
120
121 prefabs.Insert(m_sDefaultPrefab);
122
124 {
125 if (SCR_StringHelper.IsEmptyOrWhiteSpace(data.GetVariantPrefabData()))
126 continue;
127
128 prefabs.Insert(data.GetVariantPrefabData());
129 }
130
131 return prefabs.GetRandomElement();
132 }
133
134 //--------------------------------- Get Variant data list ---------------------------------\\
135
140 int GetVariantDataList(notnull out array<SCR_SpawnerVariantData> variantData)
141 {
142 variantData.Clear();
143
145 {
146 variantData.Insert(data);
147 }
148
149 return variantData.Count();
150 }
151
152 //--------------------------------- Get Variant Prefab List ---------------------------------\\
153
158 int GetVariantPrefabList(notnull out array<ResourceName> variantPrefabs)
159 {
160 variantPrefabs.Clear();
161
163 {
164 variantPrefabs.Insert(data.GetVariantPrefabData());
165 }
166
167 return variantPrefabs.Count();
168 }
169
170 //--------------------------------- Get Variants of Type ---------------------------------\\
171
174 \return Variant data (or null if not found)
175 */
176 SCR_SpawnerVariantData GetVariantDataOfType(ESpawnerVariantType variantType)
177 {
179 {
180 if (data.GetVariantType() == variantType)
181 return data;
182 }
183
184 return null;
185 }
186
187 //--------------------------------- Get Variant prefabs of Type ---------------------------------\\
188
191 \return Variant prefab (or empty if not found)
192 */
193 ResourceName GetVariantPrefabOfType(ESpawnerVariantType variantType)
194 {
195 SCR_SpawnerVariantData variantData = GetVariantDataOfType(variantType);
196
197 if (!variantData)
198 return string.Empty;
199
200 return variantData.GetVariantPrefabData();
201 }
202
203 override void InitData(notnull SCR_EntityCatalogEntry entry)
204 {
205 super.InitData(entry);
206
207 m_sDefaultPrefab = entry.GetPrefab();
208
209 SCR_EditableEntityUIInfo uiInfo = SCR_EditableEntityUIInfo.Cast(entry.GetEntityUiInfo());
210 if (!uiInfo)
211 return;
212
213 array<ref SCR_EntityBudgetValue> budgets = {};
214 uiInfo.GetEntityAndChildrenBudgetCost(budgets);
215
217
218 foreach (SCR_EntityBudgetValue budget : budgets)
219 {
220 switch (budget.GetBudgetType())
221 {
222 //~ Set Supply cost
223 case EEditableEntityBudget.CAMPAIGN:
224 {
225 m_iSupplyCost = budget.GetBudgetValue();
226
227 break;
228 }
229
230 //~ Set ranks
231 case EEditableEntityBudget.RANK_RENEGADE:
232 {
233 if (m_eMinimumRequiredRank == -1)
234 m_eMinimumRequiredRank = SCR_ECharacterRank.RENEGADE;
235 else
236 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
237
238 break;
239 }
240 case EEditableEntityBudget.RANK_PRIVATE:
241 {
242 if (m_eMinimumRequiredRank == -1)
243 m_eMinimumRequiredRank = SCR_ECharacterRank.PRIVATE;
244 else
245 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
246
247 break;
248 }
249 case EEditableEntityBudget.RANK_CORPORAL:
250 {
251 if (m_eMinimumRequiredRank == -1)
252 m_eMinimumRequiredRank = SCR_ECharacterRank.CORPORAL;
253 else
254 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
255
256 break;
257 }
258 case EEditableEntityBudget.RANK_SERGEANT:
259 {
260 if (m_eMinimumRequiredRank == -1)
261 m_eMinimumRequiredRank = SCR_ECharacterRank.SERGEANT;
262 else
263 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
264
265 break;
266 }
267 case EEditableEntityBudget.RANK_LIEUTENANT:
268 {
269 if (m_eMinimumRequiredRank == -1)
270 m_eMinimumRequiredRank = SCR_ECharacterRank.LIEUTENANT;
271 else
272 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
273
274 break;
275 }
276 case EEditableEntityBudget.RANK_CAPTAIN:
277 {
278 if (m_eMinimumRequiredRank == -1)
279 m_eMinimumRequiredRank = SCR_ECharacterRank.CAPTAIN;
280 else
281 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
282
283 break;
284 }
285 case EEditableEntityBudget.RANK_MAJOR:
286 {
287 if (m_eMinimumRequiredRank == -1)
288 m_eMinimumRequiredRank = SCR_ECharacterRank.MAJOR;
289 else
290 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
291
292 break;
293 }
294 case EEditableEntityBudget.RANK_COLONEL:
295 {
296 if (m_eMinimumRequiredRank == -1)
297 m_eMinimumRequiredRank = SCR_ECharacterRank.COLONEL;
298 else
299 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
300
301 break;
302 }
303 case EEditableEntityBudget.RANK_GENERAL:
304 {
305 if (m_eMinimumRequiredRank == -1)
306 m_eMinimumRequiredRank = SCR_ECharacterRank.GENERAL;
307 else
308 Print("'SCR_EntityCatalogSpawnerData' entry " + uiInfo.GetName() + " has rank " + typename.EnumToString(EEditableEntityBudget, m_eMinimumRequiredRank) + " assigned but multiple ranks in the editable UI info which is not supported!");
309
310 break;
311 }
312 }
313 }
314
315 //~ No rank set so set minimum rank
316 if (m_eMinimumRequiredRank == -1)
317 m_eMinimumRequiredRank = SCR_ECharacterRank.PRIVATE;
318 }
319};
320
321//======================================== VARIANT DATA ========================================\\
322
327{
328 [Attribute(desc: "Prefab of Variant entity", params: "et")]
330
331 [Attribute("0", desc: "Type of variant. Type needs to be unique in the list", uiwidget: UIWidgets.SearchComboBox, enums: ParamEnumArray.FromEnum(ESpawnerVariantType))]
333
342
351
352};
353
354//======================================== ENUMS ========================================\\
355
EEditableEntityBudget
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
SCR_CampaignMilitaryBaseComponent SCR_MilitaryBaseComponent SCR_BaseContainerCustomTitleResourceName("m_sBaseName", true)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
SCR_ValuableIntelArsenalRefundEffect SCR_WeightedListArsenalRefundEffect BaseContainerCustomCheckIntTitleField("m_bEnabled", "Valuable Intel - Add XP", "(Disabled) Valuable Intel - Add XP", 1)
void GetEntityAndChildrenBudgetCost(out notnull array< ref SCR_EntityBudgetValue > outBudgets)
Get Entity and its children budgets.
override LocalizedString GetName()
Get random variant or default prefab return Random variant or default prefab *ResourceName GetRandomDefaultOrVariantPrefab()
Set the enabled state of the entity in the spawner Changing this in runtime will allow disallow certain entities to spawn for factions param enable New Enabled state *void SetEnabled(bool enable)
Get list of all variant prefabs param[out] variantData List of variant prefabs return length of variant prefab array *int GetVariantPrefabList(notnull out array< ResourceName > variantPrefabs)
Check if entity can be spawned in slot of given size param slotSize Slot size to check return Returns true if entity can spawn in given slot size *bool CanSpawnInSlot(SCR_EEntitySpawnerSlotType slotSize)
SCR_EEntitySpawnerSlotType m_eSlotTypes
Get list of all variant data param[out] variantData List of variant data return length of variant data array *int GetVariantDataList(notnull out array< SCR_SpawnerVariantData > variantData)
override void InitData(notnull SCR_EntityCatalogEntry entry)
ref array< ref SCR_SpawnerVariantData > m_aVariantData
Get supply cost of spawning Entity return Supply cost *int GetSupplyCost()
Get the minimum required rank return Returns the minimum required rank *SCR_ECharacterRank GetMinimumRequiredRank()
Check if entity can be spawned by player with specific rank Will check if given rank is equal or greater then minimum required rank param rank Rank of player that request the spawn return Returns true if player has the required rank *bool HasRequiredRank(SCR_ECharacterRank rank)
Get Localized overwrite name Empty if no name is overwritten return Localized overwrite name *LocalizedString GetOverwriteName()
Get flags of valid slot sizes return Valid slot sizes flags *SCR_EEntitySpawnerSlotType GetValidSlotSizes()
Get specific variant data of type if it exists param Type of variant to find return Variant data(or null if not found) */SCR_SpawnerVariantData GetVariantDataOfType(ESpawnerVariantType variantType)
static bool IsEmptyOrWhiteSpace(string input)
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
SCR_FieldOfViewSettings Attribute