Arma Reforger Explorer  1.1.0.42
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
SCR_ArsenalComponent.c
Go to the documentation of this file.
1 class SCR_ArsenalComponentClass : ScriptComponentClass
2 {
3 }
4 
5 void ScriptInvokerArsenalUpdatedMethod(array<ResourceName> arsenalItems);
7 typedef ScriptInvokerBase<ScriptInvokerArsenalUpdatedMethod> ScriptInvokerArsenalUpdated;
8 
10 {
11  [Attribute(SCR_EArsenalSupplyCostType.DEFAULT.ToString(), desc: "Cost type of items. If it is not DEFAULT than it will try to get the diffrent supply cost if the item has it assigned" , uiwidget: UIWidgets.SearchComboBox, enums: ParamEnumArray.FromEnum(SCR_EArsenalSupplyCostType), category: "Settings")]
12  protected SCR_EArsenalSupplyCostType m_eSupplyCostType;
13 
14  [Attribute("", desc: "Toggle supported SCR_EArsenalItemType by this arsenal, items are gathered from SCR_Faction or from the overwrite config", uiwidget: UIWidgets.Flags, enums: ParamEnumArray.FromEnum(SCR_EArsenalItemType), category: "Settings")]
15  protected SCR_EArsenalItemType m_eSupportedArsenalItemTypes;
16 
17  [Attribute("", desc: "Toggle supported SCR_EArsenalItemMode by this arsenal, items are gathered from SCR_Faction or from the overwrite config", uiwidget: UIWidgets.Flags, enums: ParamEnumArray.FromEnum(SCR_EArsenalItemMode), category: "Settings")]
18  protected SCR_EArsenalItemMode m_eSupportedArsenalItemModes;
19 
20  [Attribute("", desc: "Toggle which SCR_EArsenalItemType groups are exposed for gamemaster attribute editing", uiwidget: UIWidgets.Flags, enums: ParamEnumArray.FromEnum(SCR_EArsenalAttributeGroup), category: "Settings")]
21  protected SCR_EArsenalAttributeGroup m_eEditableAttributeGroups;
22 
23  [Attribute(category: "Overwrite", desc: "If empty this will be ignored. For ease of use do not edit this directly in the prefab, use a config instead. The items added the config will allow the arsenal to spawn these items within it. Note that it will still filter on type, meaning that if weapons are added to the list but disabled in the Supported types then they will not show in the arsenal. Changing faction will not have any effect if this is not null")]
24  protected ref SCR_ArsenalItemListConfig m_OverwriteArsenalConfig;
25 
26  [Attribute("1", desc: "Get default faction if current faction could not be found", category: "Settings")]
27  protected bool m_bGetDefaultIfNoFaction;
28 
29  [Attribute("0", desc: "If true will try and find the SCR_FactionAffiliationComponent from parent if it was not found on self", category: "Settings")]
30  protected bool m_bAllowGetFactionFromParent;
31 
32  [Attribute("0", desc: "Save type of Arsenal. Only applicable if there is a save arsenal action attached to the arsenal.\nSAVING_DISABLED: Saving action is disabled.\nIN_ARSENAL_ITEMS_ONLY: Only allow saving if all the items the player has are in the arsenal as well.\nFACTION_ITEMS_ONLY: Only allow saving if all the items the player has in their inventory are of the faction of the arsenal.\nNO_RESTRICTIONS: No restriction as what the arsenal is allowed to save.", uiwidget: UIWidgets.SearchComboBox, enums: ParamEnumArray.FromEnum(SCR_EArsenalSaveType), category: "Settings")]
33  protected SCR_EArsenalSaveType m_eArsenalSaveType;
34 
35  [Attribute("0", desc: "If false it will get the arsenals current faction and change when the faction is updated. If true it will never check the on faction and use the default faction assigned. Use this if you want the content to never change or if there is never a current faction", category: "Settings")]
36  protected bool m_bAlwaysUseDefaultFaction;
37 
38  protected bool m_bArsenalEnabled = true;
39  protected SCR_EArsenalItemMode m_eOnDisableArsenalModes; //~ Saves the arsenal item mode when the arsenal is disabled and the mode is set to 0
40 
41  protected bool m_bArsenalSavingDisplayedIfDisabled = true;
42  protected bool m_bHasSaveArsenalAction = false;
43 
44  protected SCR_ArsenalInventoryStorageManagerComponent m_InventoryComponent;
45  protected UniversalInventoryStorageComponent m_StorageComponent;
46 
47  protected FactionManager m_FactionManager;
48  protected SCR_FactionAffiliationComponent m_FactionComponent;
49 
50  protected ref ScriptInvokerArsenalUpdated m_OnArsenalUpdated;
51 
52  protected bool m_bIsClearingInventory;
53 
54  //------------------------------------------------------------------------------------------------
56  bool IsArsenalEnabled()
57  {
58  return m_bArsenalEnabled;
59  }
60 
61  //------------------------------------------------------------------------------------------------
63  void SetArsenalEnabled(bool enable)
64  {
65  if (m_bArsenalEnabled == enable)
66  return;
67 
69  if ((gameMode && !gameMode.IsMaster()) || (!gameMode && Replication.IsClient()))
70  return;
71 
72  if (!enable)
73  {
74  m_eOnDisableArsenalModes = m_eSupportedArsenalItemModes;
75  SetSupportedArsenalItemModes(0);
76  }
77  else
78  {
79  SetSupportedArsenalItemModes(m_eOnDisableArsenalModes);
80  }
81 
82  SetArsenalEnabledBroadcast(enable);
83  Rpc(SetArsenalEnabledBroadcast, enable);
84  }
85 
86  //------------------------------------------------------------------------------------------------
87  [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
88  protected void SetArsenalEnabledBroadcast(bool enable)
89  {
90  m_bArsenalEnabled = enable;
91  }
92 
93  //------------------------------------------------------------------------------------------------
95  SCR_EArsenalSupplyCostType GetSupplyCostType()
96  {
97  return m_eSupplyCostType;
98  }
99 
100  //------------------------------------------------------------------------------------------------
102  bool IsArsenalUsingSupplies()
103  {
104  IEntity owner = GetOwner();
105  if (!owner)
106  return null;
107 
108  SCR_ResourceComponent resourceComponent = SCR_ResourceComponent.FindResourceComponent(owner);
109 
110  return resourceComponent && resourceComponent.IsResourceTypeEnabled();
111  }
112 
113  //------------------------------------------------------------------------------------------------
115  SCR_EArsenalSaveType GetArsenalSaveType()
116  {
117  return m_eArsenalSaveType;
118  }
119 
120  //------------------------------------------------------------------------------------------------
122  bool IsArsenalSavingDisplayedIfDisabled()
123  {
124  return m_bArsenalSavingDisplayedIfDisabled;
125  }
126 
127  //------------------------------------------------------------------------------------------------
131  void SetHasSaveArsenalAction(bool hasSaveArsenalAction)
132  {
133  m_bHasSaveArsenalAction = hasSaveArsenalAction;
134  }
135 
136  //------------------------------------------------------------------------------------------------
139  bool HasSaveArsenalAction()
140  {
141  return m_bHasSaveArsenalAction;
142  }
143 
144  //------------------------------------------------------------------------------------------------
147  void SetArsenalSaveType(SCR_EArsenalSaveType saveType)
148  {
149  if (m_eArsenalSaveType == saveType)
150  return;
151 
152  RPL_SetArsenalSaveType(saveType);
153  Rpc(RPL_SetArsenalSaveType, saveType);
154  }
155 
156  //------------------------------------------------------------------------------------------------
159  [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
160  void RPL_SetArsenalSaveType(SCR_EArsenalSaveType saveType)
161  {
162  //~ Nothing changed so make sure the action displayed if disabled is not set
163  if (m_eArsenalSaveType == saveType)
164  return;
165 
166  m_eArsenalSaveType = saveType;
167 
168  if (saveType != SCR_EArsenalSaveType.SAVING_DISABLED)
169  m_bArsenalSavingDisplayedIfDisabled = true;
170  }
171 
172  //------------------------------------------------------------------------------------------------
174  SCR_EArsenalItemType GetSupportedArsenalItemTypes()
175  {
176  return m_eSupportedArsenalItemTypes;
177  }
178 
179  //------------------------------------------------------------------------------------------------
183  static SCR_ArsenalComponent FindArsenalComponent(notnull IEntity entity, bool getFromSlotted = true)
184  {
185  SCR_ArsenalComponent arsenalComponent;
186 
187  if (getFromSlotted)
188  arsenalComponent = SCR_ArsenalComponent.Cast(SCR_EntityHelper.FindComponent(entity, SCR_ArsenalComponent));
189  else
190  arsenalComponent = SCR_ArsenalComponent.Cast(entity.FindComponent(SCR_ArsenalComponent));
191 
192  return arsenalComponent;
193  }
194 
195  //------------------------------------------------------------------------------------------------
197  void SetSupportedArsenalItemTypes(SCR_EArsenalItemType types)
198  {
199  m_eSupportedArsenalItemTypes = types;
200  RefreshArsenal();
201  }
202 
203  //------------------------------------------------------------------------------------------------
205  SCR_EArsenalItemMode GetSupportedArsenalItemModes()
206  {
207  return m_eSupportedArsenalItemModes;
208  }
209 
210  //------------------------------------------------------------------------------------------------
212  void SetSupportedArsenalItemModes(SCR_EArsenalItemMode modes)
213  {
214  m_eSupportedArsenalItemModes = modes;
215  RefreshArsenal();
216  }
217 
218  //------------------------------------------------------------------------------------------------
220  SCR_EArsenalAttributeGroup GetEditableAttributeGroups()
221  {
222  return m_eEditableAttributeGroups;
223  }
224 
225  //------------------------------------------------------------------------------------------------
227  SCR_ArsenalInventoryStorageManagerComponent GetArsenalInventoryComponent()
228  {
229  return m_InventoryComponent;
230  }
231 
232  //------------------------------------------------------------------------------------------------
235  SCR_ArsenalItemListConfig GetOverwriteArsenalConfig()
236  {
237  return m_OverwriteArsenalConfig;
238  }
239 
240  //------------------------------------------------------------------------------------------------
243  bool GetAvailablePrefabs(out notnull array<ResourceName> availablePrefabs)
244  {
245  array<SCR_ArsenalItem> arsenalItems = {};
246  if (!GetFilteredArsenalItems(arsenalItems))
247  {
248  return false;
249  }
250 
251  for (int i = 0; i < arsenalItems.Count(); i++)
252  {
253  SCR_ArsenalItem itemToSpawn = arsenalItems[i % arsenalItems.Count()];
254  if (!itemToSpawn)
255  continue;
256 
257  availablePrefabs.Insert(itemToSpawn.GetItemResourceName());
258  }
259  return !availablePrefabs.IsEmpty();
260  }
261 
262  //------------------------------------------------------------------------------------------------
264  SCR_Faction GetAssignedFaction()
265  {
266  //~ Safty if get assigned faction is called before the init
267  if (!m_FactionComponent)
268  FactionInit(GetOwner());
269 
270  if (m_FactionComponent)
271  {
272  //~ Always use default faction
273  if (m_bAlwaysUseDefaultFaction)
274  return SCR_Faction.Cast(m_FactionComponent.GetDefaultAffiliatedFaction());
275 
276  SCR_Faction faction = SCR_Faction.Cast(m_FactionComponent.GetAffiliatedFaction());
277  if (!faction && m_bGetDefaultIfNoFaction)
278  {
279  faction = SCR_Faction.Cast(m_FactionComponent.GetDefaultAffiliatedFaction());
280  }
281 
282  return faction;
283  }
284 
285  return null;
286  }
287 
288  //------------------------------------------------------------------------------------------------
292  bool GetFilteredArsenalItems(out notnull array<SCR_ArsenalItem> filteredArsenalItems, EArsenalItemDisplayType requiresDisplayType = -1)
293  {
294  //~ Is overwritting Arsenal
295  if (m_OverwriteArsenalConfig)
296  {
297  GetFilteredOverwriteArsenalItems(filteredArsenalItems, requiresDisplayType);
298  return !filteredArsenalItems.IsEmpty();
299  }
300 
301  //~ Cannot get items if no entity catalog manager
302  SCR_EntityCatalogManagerComponent catalogManager = SCR_EntityCatalogManagerComponent.GetInstance();
303  if (!catalogManager)
304  return false;
305 
306  //~ Get filtered list from faction (if any) or default
307  filteredArsenalItems = catalogManager.GetFilteredArsenalItems(m_eSupportedArsenalItemTypes, m_eSupportedArsenalItemModes, GetAssignedFaction(), requiresDisplayType);
308  return !filteredArsenalItems.IsEmpty();
309  }
310 
311  //------------------------------------------------------------------------------------------------
315  bool GetFilteredOverwriteArsenalItems(out notnull array<SCR_ArsenalItem> filteredArsenalItems, EArsenalItemDisplayType requiresDisplayType = -1)
316  {
317  filteredArsenalItems = m_OverwriteArsenalConfig.GetFilteredArsenalItems(m_eSupportedArsenalItemTypes, m_eSupportedArsenalItemModes, requiresDisplayType);
318  return !filteredArsenalItems.IsEmpty();
319  }
320 
321  //------------------------------------------------------------------------------------------------
323  //~ Used by SCR_ArsenalDisplayComponent
324  void ClearArsenal()
325  {
326  }
327 
328  //------------------------------------------------------------------------------------------------
331  void RefreshArsenal(SCR_Faction faction = null)
332  {
333  ClearArsenal();
334 
335  array<SCR_ArsenalItem> arsenalItems = {};
336  if (!GetFilteredArsenalItems(arsenalItems))
337  return;
338 
339  //SCR_Sorting<SCR_ArsenalItem, SCR_CompareArsenalItemPriority>.HeapSort(arsenalItems);
340 
341  array<ResourceName> arsenalPrefabs = {};
342 
343  int arsenalItemCount = arsenalItems.Count();
344  for (int i = 0; i < arsenalItemCount; i++)
345  {
346  SCR_ArsenalItem itemToSpawn = arsenalItems[i % arsenalItemCount];
347  if (!itemToSpawn)
348  continue;
349 
350  arsenalPrefabs.Insert(itemToSpawn.GetItemResourceName());
351  }
352 
353  if (m_OnArsenalUpdated)
354  m_OnArsenalUpdated.Invoke(arsenalPrefabs);
355 
356  if (Replication.IsServer())
357  Rpc(RPC_OnArsenalUpdated, m_eSupportedArsenalItemTypes, m_eSupportedArsenalItemModes);
358  }
359 
360  //------------------------------------------------------------------------------------------------
361  [RplRpc(RplChannel.Reliable, RplRcver.Broadcast)]
362  protected void RPC_OnArsenalUpdated(SCR_EArsenalItemType itemTypes, SCR_EArsenalItemMode itemModes)
363  {
364  //~ Call later so faction is correctly updated
365  GetGame().GetCallqueue().CallLater(DelayedOnArsenalUpdatedClient, param1: itemTypes, param2: itemModes);
366  }
367 
368  //------------------------------------------------------------------------------------------------
369  protected void DelayedOnArsenalUpdatedClient(SCR_EArsenalItemType itemTypes, SCR_EArsenalItemMode itemModes)
370  {
371  m_eSupportedArsenalItemTypes = itemTypes;
372  m_eSupportedArsenalItemModes = itemModes;
373 
374  if (!m_FactionComponent)
375  FactionInit(GetOwner());
376 
377  if (m_OnArsenalUpdated)
378  {
379  array<ResourceName> arsenalPrefabs = {};
380  GetAvailablePrefabs(arsenalPrefabs);
381 
382  m_OnArsenalUpdated.Invoke(arsenalPrefabs);
383  }
384  }
385 
386  //------------------------------------------------------------------------------------------------
387  protected bool GetItemValid(SCR_EArsenalItemType arsenalItemType, SCR_EArsenalItemMode arsenalItemMode)
388  {
389  return arsenalItemType & m_eSupportedArsenalItemTypes
390  && arsenalItemMode & m_eSupportedArsenalItemModes;
391  }
392 
393  //------------------------------------------------------------------------------------------------
394  protected bool GetItemValid(SCR_Faction faction, int index, out bool isEmpty = true)
395  {
396  return true;
397  }
398 
399  //------------------------------------------------------------------------------------------------
401  ScriptInvokerArsenalUpdated GetOnArsenalUpdated()
402  {
403  if (!m_OnArsenalUpdated)
404  m_OnArsenalUpdated = new ScriptInvokerArsenalUpdated();
405 
406  return m_OnArsenalUpdated;
407  }
408 
409  //------------------------------------------------------------------------------------------------
410  protected void OnFactionChanged(FactionAffiliationComponent owner, Faction previousFaction, Faction newFaction)
411  {
412  RefreshArsenal();
413  }
414 
415  //------------------------------------------------------------------------------------------------
416  override protected void OnPostInit(IEntity owner)
417  {
418  if (SCR_Global.IsEditMode())
419  return;
420 
421  //~ Make sure it knows that it is disabled at the start
422  if (GetArsenalSaveType() == SCR_EArsenalSaveType.SAVING_DISABLED)
423  m_bArsenalSavingDisplayedIfDisabled = false;
424 
425  SetEventMask(owner, EntityEvent.INIT);
426 
427  // Initialize inventory of arsenal, if applicable (Display racks without additional inventory will return here)
428  m_InventoryComponent = SCR_ArsenalInventoryStorageManagerComponent.Cast(owner.FindComponent(SCR_ArsenalInventoryStorageManagerComponent));
429  m_StorageComponent = UniversalInventoryStorageComponent.Cast(owner.FindComponent(UniversalInventoryStorageComponent));
430  // Arsenal inventory is filled after OnPostInit by SCR_ArsenalInventoryStorageManagerComponent.FillInitialPrefabsToStore
431  }
432 
433  //------------------------------------------------------------------------------------------------
434  override protected void EOnInit(IEntity owner)
435  {
436  m_FactionManager = GetGame().GetFactionManager();
438  if (!factionComponent && m_bAllowGetFactionFromParent)
439  GetGame().GetCallqueue().CallLater(FactionInit, param1: owner);
440  else
441  FactionInit(owner);
442 
443  }
444 
445  //------------------------------------------------------------------------------------------------
446  protected void FactionInit(IEntity owner)
447  {
448  //~ Faction is already init
449  if (m_FactionComponent)
450  return;
451 
454  {
455  if (owner.GetParent())
457 
458  if (!m_FactionComponent)
459  return;
460  }
461  else if (!m_FactionComponent)
462  return;
463 
464  if (!m_bAlwaysUseDefaultFaction)
465  {
466  RplComponent rplComponent = RplComponent.Cast(owner.FindComponent(RplComponent));
467  if (rplComponent && rplComponent.Role() == RplRole.Authority)
468  {
469  m_FactionComponent.GetOnFactionChanged().Insert(OnFactionChanged);
470  }
471  }
472  }
473 
474  //------------------------------------------------------------------------------------------------
475  override protected void OnDelete(IEntity owner)
476  {
477  if (SCR_Global.IsEditMode())
478  return;
479 
480  RplComponent rplComponent = RplComponent.Cast(owner.FindComponent(RplComponent));
481  if (rplComponent && rplComponent.Role() == RplRole.Authority)
482  {
483  if (!m_bAlwaysUseDefaultFaction && m_FactionComponent)
484  m_FactionComponent.GetOnFactionChanged().Remove(OnFactionChanged);
485  }
486  }
487 
488  //------------------------------------------------------------------------------------------------
489  override bool RplSave(ScriptBitWriter writer)
490  {
491  writer.WriteInt(m_eSupportedArsenalItemTypes);
492  writer.WriteInt(m_eSupportedArsenalItemModes);
493  writer.WriteInt(GetArsenalSaveType());
494  writer.WriteBool(m_bArsenalEnabled);
495  return true;
496  }
497 
498  //------------------------------------------------------------------------------------------------
499  override bool RplLoad(ScriptBitReader reader)
500  {
501  int itemTypes, itemModes, saveType;
502  bool isArsenalEnabled;
503 
504  reader.ReadInt(itemTypes);
505  reader.ReadInt(itemModes);
506  reader.ReadInt(saveType);
507  reader.ReadBool(isArsenalEnabled);
508 
509  RPC_OnArsenalUpdated(itemTypes, itemModes);
510  RPL_SetArsenalSaveType(saveType);
511  SetArsenalEnabledBroadcast(isArsenalEnabled);
512 
513  return true;
514  }
515 }
516 
517 //------------------------------------------------------------------------------------------------
518 enum SCR_EArsenalSaveType
519 {
520  SAVING_DISABLED = 0,
521  IN_ARSENAL_ITEMS_ONLY = 10,
522  FACTION_ITEMS_ONLY = 20,
523  NO_RESTRICTIONS = 30,
524 }
525 
526 //------------------------------------------------------------------------------------------------
527 enum SCR_EArsenalSupplyCostType
528 {
529  DEFAULT,
531  RESPAWN_COST,
532 }
SCR_EArsenalAttributeGroup
SCR_EArsenalAttributeGroup
Definition: SCR_EArsenalAttributeGroup.c:1
DEFAULT
SCR_ArsenalComponent DEFAULT
Default cost will be used.
GADGET_ARSENAL
SCR_ArsenalComponent GADGET_ARSENAL
If the arsenal is on a gadget it will try to take this cost if any is assigned in the catalog.
SCR_ArsenalItemListConfig
Definition: SCR_ArsenalItemListConfig.c:2
SCR_BaseGameMode
Definition: SCR_BaseGameMode.c:137
m_bAllowGetFactionFromParent
protected bool m_bAllowGetFactionFromParent
Definition: SCR_BaseSupportStationComponent.c:9
SCR_EntityHelper
Definition: SCR_EntityHelper.c:1
m_FactionComponent
protected SCR_FactionAffiliationComponent m_FactionComponent
Definition: SCR_MilitaryBaseComponent.c:46
ScriptComponent
SCR_SiteSlotEntityClass ScriptComponent
GetGame
ArmaReforgerScripted GetGame()
Definition: game.c:1424
SCR_EArsenalItemMode
SCR_EArsenalItemMode
Definition: SCR_EArsenalItemMode.c:1
FACTION_ITEMS_ONLY
SCR_ArsenalComponent FACTION_ITEMS_ONLY
Only allow saving if items the player has are items of the player faction.
SCR_ArsenalComponentClass
Definition: SCR_ArsenalComponent.c:1
desc
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
Definition: SCR_RespawnBriefingComponent.c:17
RplRpc
SCR_AchievementsHandlerClass ScriptComponentClass RplRpc(RplChannel.Reliable, RplRcver.Owner)] void UnlockOnClient(AchievementId achievement)
Definition: SCR_AchievementsHandler.c:11
func
func
Definition: SCR_AIThreatSystem.c:5
GetGameMode
SCR_BaseGameMode GetGameMode()
Definition: SCR_BaseGameModeComponent.c:15
SCR_EArsenalItemType
SCR_EArsenalItemType
Definition: SCR_EArsenalItemType.c:2
IN_ARSENAL_ITEMS_ONLY
SCR_ArsenalComponent IN_ARSENAL_ITEMS_ONLY
Only allows arsenal saving if all the items the player has are in the arsenal.
m_FactionManager
protected SCR_FactionManager m_FactionManager
Definition: SCR_NotificationSenderComponent.c:28
Attribute
typedef Attribute
Post-process effect of scripted camera.
SAVING_DISABLED
SCR_ArsenalComponent SAVING_DISABLED
Saving is disabled.
GetOwner
IEntity GetOwner()
Owner entity of the fuel tank.
Definition: SCR_FuelNode.c:128
ScriptInvokerArsenalUpdated
ScriptInvokerBase< ScriptInvokerArsenalUpdatedMethod > ScriptInvokerArsenalUpdated
Definition: SCR_ArsenalComponent.c:7
Faction
Definition: Faction.c:12
index
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
Definition: SCR_DestructionSynchronizationComponent.c:17
SCR_Global
Definition: Functions.c:6
ScriptInvokerArsenalUpdatedMethod
func ScriptInvokerArsenalUpdatedMethod
Definition: SCR_ArsenalComponent.c:6
NO_RESTRICTIONS
SCR_ArsenalComponent NO_RESTRICTIONS
Always allow saving of arsenal.
SCR_FactionAffiliationComponent
Definition: SCR_FactionAffiliationComponent.c:10
SCR_ArsenalComponent
Definition: SCR_ArsenalComponent.c:9
SCR_ArsenalItem
Definition: SCR_ArsenalItem.c:2
SCR_Faction
Definition: SCR_Faction.c:6
RESPAWN_COST
SCR_ArsenalComponent RESPAWN_COST
Cost of item when the player spawns with the item.
category
params category
Definition: SCR_VehicleDamageManagerComponent.c:180