18 [
Attribute(
"",
UIWidgets.ResourcePickerThumbnail,
"Prefab of trigger spawned on server to activate a building mode when player enters its range.",
"et")]
21 [
Attribute(
"",
UIWidgets.ResourcePickerThumbnail,
"Prefab of trigger spawned only on clients, to visualize the building area and allow player build only within its radius.",
"et")]
24 [
Attribute(
"{58F07022C12D0CF5}Assets/Editor/PlacingPreview/Preview.emat",
UIWidgets.ResourcePickerThumbnail,
"Material used when for the preview of the compositions outside of the building mode.",
category:
"Preview",
params:
"emat")]
33 [
Attribute(
"10",
UIWidgets.EditBox,
"How many times player has to perform build step to gain a XP reward",
"")]
36 [
Attribute(
"1",
UIWidgets.EditBox,
"How many times player has to perform building step at the beginning of gradual reward process to gain his first XP reward.",
params:
"1 inf 1")]
39 [
Attribute(
"0.2",
UIWidgets.EditBox,
"How steep curve of the gradual reward process will be.",
params:
"0 inf 0.001")]
43 [
Attribute(
"0",
UIWidgets.CheckBox,
"If checked, only players of faction that match the owning faction of provider can disassemble composition")]
46 [
Attribute(
"1",
UIWidgets.CheckBox,
"If checked, players from the opposing faction will only be able to disassemble composition when the base it belongs is being captured")]
52 [
Attribute(
"",
UIWidgets.ResourceNamePicker,
desc:
"Config with prefabs available to build. The config has to be the same as on Editor Mode - placing editor component..",
params:
"conf")]
55 [
Attribute(
"",
UIWidgets.ResourcePickerThumbnail,
desc:
"This prefab will be spawned when composition is disassembled but has no provider where to return supply.",
params:
"et")]
86 SCR_CampaignBuildingCompositionComponent campaignCompositionComponent = SCR_CampaignBuildingCompositionComponent.Cast(owner.
FindComponent(SCR_CampaignBuildingCompositionComponent));
87 if (campaignCompositionComponent)
88 providerEntity = campaignCompositionComponent.GetProviderEntity();
101 component = SCR_ResourceComponent.FindResourceComponent(providerEntity);
117 return m_sFreeRoamBuildingServerTrigger;
158 [
Obsolete(
"SCR_CampaignBuildingManagerComponent.GetResourceComponent() should be used instead.")]
161 SCR_CampaignBuildingCompositionComponent campaignCompositionComponent = SCR_CampaignBuildingCompositionComponent.Cast(ownerEntity.
FindComponent(SCR_CampaignBuildingCompositionComponent));
162 if (!campaignCompositionComponent)
166 providerEntity = campaignCompositionComponent.GetProviderEntity();
179 return suppliesComponent != null;
197 PlayerController playerController =
GetGame().GetPlayerController();
198 if (!playerController)
201 SCR_CampaignBuildingNetworkComponent networkComponent = SCR_CampaignBuildingNetworkComponent.Cast(playerController.FindComponent(SCR_CampaignBuildingNetworkComponent));
202 if (!networkComponent)
205 networkComponent.AddXPReward(playerController.GetPlayerId());
226 if (entity.GetOwner().IsLoaded() && budgetChange > 0)
239 array<ref SCR_EntityBudgetValue> budgets = {};
248 propBudgetValue = budget.GetBudgetValue();
253 SCR_ResourceComponent resourceComponent;
254 bool wasContainerSpawned;
260 SCR_CampaignBuildingCompositionComponent compositionComponent = SCR_CampaignBuildingCompositionComponent.Cast(entityOwner.
FindComponent(SCR_CampaignBuildingCompositionComponent));
261 if (compositionComponent && budgetChange < 0)
264 wasContainerSpawned =
true;
268 if (!resourceComponent)
272 if (!resourceComponent.IsResourceTypeEnabled())
275 IEntity providerEntity = resourceComponent.GetOwner();
280 SCR_CampaignBuildingProviderComponent providerComponent = SCR_CampaignBuildingProviderComponent.Cast(providerEntity.
FindComponent(SCR_CampaignBuildingProviderComponent));
282 if (budgetChange < 0)
286 if (providerComponent)
287 providerComponent.AddPropValue(-propBudgetValue);
289 if (wasContainerSpawned)
306 if (providerComponent)
307 providerComponent.AddPropValue(propBudgetValue);
312 consumer.RequestConsumtion(budgetChange);
320 spawnParams.TransformMode = ETransformMode.WORLD;
331 component = SCR_ResourceComponent.FindResourceComponent(resourceHolder);
372 if (!configContainer || !configContainer.IsValid())
401 array<ResourceName> copy = {};
421 void EnterEditorMode(
int playerID, notnull
IEntity provider,
bool userActionActivationOnly =
false,
bool userActionUsed =
false,
bool useAllAvailableProviders =
false)
429 modeEntity = editorManager.CreateEditorMode(
EEditorMode.BUILDING,
false);
434 SetEditorMode(editorManager, modeEntity, playerID, provider, userActionActivationOnly, userActionUsed, useAllAvailableProviders);
447 SCR_CampaignBuildingEditorComponent buildingComponent = SCR_CampaignBuildingEditorComponent.Cast(modeEntity.FindComponent(SCR_CampaignBuildingEditorComponent));
448 if (!buildingComponent)
451 SCR_CampaignBuildingProviderComponent providerComponent = SCR_CampaignBuildingProviderComponent.Cast(provider.FindComponent(SCR_CampaignBuildingProviderComponent));
452 if (!providerComponent)
455 if (useAllAvailableProviders)
456 providerComponent.SetUseAllAvailableProvidersByPlayer(
IsCommander(playerID));
458 providerComponent.AddNewAvailableUser(playerID);
460 providerComponent.AddNewActiveUser(playerID);
462 buildingComponent.AddProviderEntityEditorComponent(providerComponent);
464 if (!editorManager.IsOpened())
465 editorManager.SetCurrentMode(
EEditorMode.BUILDING);
467 if (userActionActivationOnly || userActionUsed)
480 providerComponent.SetCheckProviderMove();
489 PlayerController owner =
GetGame().GetPlayerManager().GetPlayerController(playerId);
531 SCR_CampaignBuildingEditorComponent buildingComponent = SCR_CampaignBuildingEditorComponent.Cast(modeEntity.FindComponent(SCR_CampaignBuildingEditorComponent));
532 if (!buildingComponent)
535 SCR_CampaignBuildingProviderComponent provider = buildingComponent.GetProviderComponent();
539 IEntity player =
GetGame().GetPlayerManager().GetPlayerControlledEntity(playerId);
550 protected bool TryAddHQ(notnull SCR_CampaignBuildingCompositionComponent composition)
564 protected bool TryRemoveHQ(notnull SCR_CampaignBuildingCompositionComponent composition)
584 array<EEditableEntityLabel> entityLabels = {};
592 IEntity player =
GetGame().GetPlayerManager().GetPlayerControlledEntity(playerID);
606 IEntity player =
GetGame().GetPlayerManager().GetPlayerControlledEntity(playerID);
620 SCR_DamageManagerComponent hitZoneContainerComponent = SCR_DamageManagerComponent.Cast(provider.
FindComponent(SCR_DamageManagerComponent));
621 if (!hitZoneContainerComponent)
632 SCR_DamageManagerComponent hitZoneContainerComponent = SCR_DamageManagerComponent.Cast(provider.
FindComponent(SCR_DamageManagerComponent));
633 if (!hitZoneContainerComponent)
644 if (!characterController)
647 int playerID =
GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(characterController.GetOwner());
653 if (editorManager.IsOpened())
674 SCR_CampaignBuildingProviderComponent providerComponent = SCR_CampaignBuildingProviderComponent.Cast(provider.
FindComponent(SCR_CampaignBuildingProviderComponent));
675 if (!providerComponent)
678 array<int> playersIDs = {};
679 providerComponent.GetAvailableUsers(playersIDs);
680 foreach (
int playerId : playersIDs)
682 if (providerComponent.ContainActiveUsers(playerId))
685 providerComponent.RemoveActiveUser(playerId);
688 providerComponent.RemoveAvailableUser(playerId);
699 bool isActiveUser = providerComponent.ContainActiveUsers(playerID);
701 providerComponent.RemoveActiveUser(playerID);
702 providerComponent.RemoveAvailableUser(playerID);
712 void RemoveProvider(
int playerID, SCR_CampaignBuildingProviderComponent providerComponent,
bool isActiveUser)
722 SCR_CampaignBuildingEditorComponent editorComponent = SCR_CampaignBuildingEditorComponent.Cast(modeEntity.FindComponent(SCR_CampaignBuildingEditorComponent));
723 if (!editorComponent)
726 if (isActiveUser && editorManager.IsOpened())
727 editorManager.Close();
729 editorComponent.RemoveProviderEntityEditorComponent(providerComponent);
731 IEntity provider = providerComponent.GetOwner();
735 providerComponent.RemoveCheckProviderMove();
736 providerComponent.SetUseAllAvailableProvidersByPlayer(
false);
745 if (!editorComponent.GetProviderComponent())
754 editorManager.Toggle();
765 if (!editorModeEntity)
796 array<SCR_MilitaryBaseComponent> bases = {};
797 baseSystem.GetBases(bases);
799 foreach (SCR_MilitaryBaseComponent
base : bases)
805 if (
vector.DistanceSqXZ(campaignBase.GetOwner().GetOrigin(),
position) <= (campaignBase.GetRadius() * campaignBase.GetRadius()))
813 if (!baseComponents.Contains(composition))
815 baseComponents.Insert(composition);
836 array<SCR_MilitaryBaseComponent> bases = {};
839 foreach (SCR_MilitaryBaseComponent
base : bases)
849 if (baseComponents.Contains(composition))
851 baseComponents.RemoveItem(composition);
882 return compositions.Copy(baseComponents);
ArmaReforgerScripted GetGame()
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
SCR_BaseGameMode GetGameMode()
void SCR_BaseGameModeComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
void OnCompositionSpawned()
An event called on proxi when composition is spawned.
ResourceName GetCompositionResourceName(int prefabID)
int m_iCompositionRefundPercentage
int GetBuildingCompositions(SCR_CampaignMilitaryBaseComponent base, out array< SCR_CampaignBuildingCompositionComponent > compositions)
ScriptInvokerEntitySpawnedByProvider GetOnEntitySpawnedByProvider()
ScriptInvokerVoid GetOnAnyCompositionSpawned()
void SpawnCustomResourceHolder(IEntity entityOwner, out SCR_ResourceComponent component)
bool RemovePlayerIdFromProvider(int playerID, SCR_CampaignBuildingProviderComponent providerComponent)
ScriptInvokerBase< ScriptInvokerCompositionUnregisteredMethod > ScriptInvokerCompositionUnregistered
ResourceName m_sPrefabToHoldSupplyOnRefund
func ScriptInvokerCompositionUnregisteredMethod
SCR_EditorManagerEntity GetEditorManagerEntity(int playerID)
float m_fRewardCurveIncrement
RplComponent m_RplComponent
void UnregisterComposition(notnull SCR_CampaignBuildingCompositionComponent composition)
ref array< SCR_CampaignBuildingCompositionComponent > m_aHQBuildingCompositions
SCR_EditableEntityCore m_EntityCore
ref ScriptInvokerCompositionUnregistered m_OnCompositionUnregistered
ResourceName m_sPreviewMaterial
bool m_bSameFactionDisassembleOnly
Note: Provider is saved to composition only when it's built from base.
void RemoveProvider(int playerID, SCR_CampaignBuildingProviderComponent providerComponent, bool isActiveUser)
void SetEditorMode(notnull SCR_EditorManagerEntity editorManager, notnull SCR_EditorModeEntity modeEntity, int playerID, notnull IEntity provider, bool userActionActivationOnly=false, bool userActionUsed=false, bool useAllAvailableProviders=false)
int m_iInitialRewardInterval
void SetOnProviderDestroyedEvent(IEntity provider)
bool GetSupplyComponent(IEntity ownerEntity, out SCR_CampaignSuppliesComponent suppliesComponent)
Get supply component of the provider entity.
void PlayerDisconnected(int playerId, KickCauseCode cause, int timeout)
bool TryAddHQ(notnull SCR_CampaignBuildingCompositionComponent composition)
void SetOnPlayerDeathEvent(int playerID)
ResourceName m_sPrefabsToBuildResource
void RegisterComposition(notnull SCR_CampaignBuildingCompositionComponent composition)
void SetTemporaryProvider(IEntity ent)
int GetCompositionId(ResourceName resName)
ScriptInvokerBase< ScriptInvokerEntitySpawnedByProviderMethod > ScriptInvokerEntitySpawnedByProvider
bool IsHQService(notnull SCR_EditableEntityComponent editableEntity)
IEntity GetTemporaryProvider()
ResourceName m_sFreeRoamBuildingClientTrigger
ScriptInvokerCompositionUnregistered GetOnCompositionUnregistered()
void ToggleEditorMode(notnull SCR_EditorManagerEntity editorManager)
void OnPlayerDeath(SCR_CharacterControllerComponent characterController, IEntity instigatorEntity, notnull Instigator killer)
int GetCompositionRefundPercentage()
array< ResourceName > GetPlaceablePrefabs()
EEditableEntityBudget m_BudgetType
float m_fRewardCurveProgress
void GetPrefabListFromConfig()
Load all the available compositions at the beginning of the game to be accessible without the buildin...
bool CanDisassembleSameFactionOnly()
void OnEntityCoreBudgetUpdated(EEditableEntityBudget entityBudget, int originalBudgetValue, int budgetChange, int updatedBudgetValue, SCR_EditableEntityComponent entity)
func ScriptInvokerEntitySpawnedByProviderMethod
ref map< SCR_CampaignMilitaryBaseComponent, ref array< SCR_CampaignBuildingCompositionComponent > > m_mCampaignBuildingComponents
ResourceName GetServerTriggerResourceName()
void OnProviderDestroyed(SCR_HitZone hitZone)
ref ScriptInvokerEntitySpawnedByProvider m_OnEntitySpawnedByProvider
ref array< ResourceName > m_aPlaceablePrefabs
ResourceName GetCompositionPreviewMaterial()
bool TryRemoveHQ(notnull SCR_CampaignBuildingCompositionComponent composition)
ref ScriptInvokerVoid m_OnAnyCompositionSpawned
bool CanDisassembleOnlyWhenCapturing()
bool m_bDisassembleOnlyWhenCapturing
IEntity m_TemporaryProvider
ResourceName GetClientTriggerResourceName()
void RemoveOnPlayerDeathEvent(int playerID)
bool IsCommander(int playerId)
void RemoveOnProviderDestroyedEvent(IEntity provider)
ref SCR_CampaignBuildingCompositionOutlineManager m_OutlineManager
void EnterEditorMode(int playerID, notnull IEntity provider, bool userActionActivationOnly=false, bool userActionUsed=false, bool useAllAvailableProviders=false)
SCR_CampaignBuildingCompositionOutlineManager GetOutlineManager()
void ProcesXPreward()
Check if the number of cycles reaches a defined limit. If so, restart counter and send an RPC on serv...
array< SCR_CampaignBuildingCompositionComponent > GetHQBuildingCompositions()
void RemoveEditorMode(int playerID, IEntity provider)
SCR_ResourceComponent GetResourceComponent()
Caches and returns the resource component.
void EntitySpawnedByProvider(int prefabID, SCR_EditableEntityComponent editableEntity)
Event rised when the entity is spawned by this provider.
void SCR_CampaignSuppliesComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
void SCR_EditorManagerEntity(IEntitySource src, IEntity parent)
void SCR_GameModeCampaign(IEntitySource src, IEntity parent)
it takes to automatically cancel a task when no enemy has been killed in the zone
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
ScriptInvokerBase< ScriptInvokerVoidMethod > ScriptInvokerVoid
proto external Managed FindComponent(typename typeName)
proto external void GetTransform(out vector mat[])
Object holding reference to resource. In destructor release the resource.
ScriptInvokerBase< SCR_BaseGameMode_OnPlayerDisconnected > GetOnPlayerDisconnected()
OnPlayerDeathWithParamInvoker GetOnPlayerDeathWithParam()
bool GetEntityAndChildrenBudgetCost(out notnull array< ref SCR_EntityBudgetValue > outBudgets, IEntity owner=null)
GenericEntity GetOwnerScripted()
int GetEntityLabels(out notnull array< EEditableEntityLabel > entityLabels)
Core component to manage SCR_EditorManagerEntity.
SCR_EditorManagerEntity GetEditorManager()
static Faction GetEntityFaction(notnull IEntity entity)
bool IsPlayerCommander(int playerId)
int GetBases(notnull out array< SCR_MilitaryBaseComponent > bases)
static SCR_MilitaryBaseSystem GetInstance()
static sealed bool IsLoadInProgress(float msSinceLoad=1000.0)
ScriptInvoker GetOnPlaceEntityServer()
bool SetResourceValue(float value, bool notifyChange=true)
SCR_ResourceGenerationResponse RequestGeneration(float resourceAmount, SCR_ResourceGenerator generator=null)
override void EOnInit(IEntity owner)
SCR_FieldOfViewSettings Attribute
EEditorMode
Editor mode that defines overall functionality.
EntityEvent
Various entity events.