3 [
Attribute(
"0",
desc:
"Will block supply actions if one or more compartments are occupied as well as blocking player get in actions if there are supplies. This is a hotfix until proper solution as it simply disables some player actions on the surface rather than with proper logic and does not effect AI")]
19 static const ref array<ECompartmentType> PASSENGER_COMPARTMENT_TYPES = {
ECompartmentType.CARGO};
38 return data.ShouldBlockSuppliesIfOccupied();
47 array<BaseCompartmentSlot> compartments = {}; GetCompartments(compartments);
50 if (compartment && compartment.GetType() == compartmentType)
51 outCompartments.Insert(compartment);
58 void GetCompartmentsOfTypes(inout array<BaseCompartmentSlot> outCompartments, notnull array<ECompartmentType> compartmentTypes)
60 outCompartments.Clear();
61 array<BaseCompartmentSlot> compartments = {};
62 GetCompartments(compartments);
66 if (compartment && compartmentTypes.Contains(compartment.GetType()))
67 outCompartments.Insert(compartment);
78 array<BaseCompartmentSlot> compartments = {}; GetCompartments(compartments);
81 if (compartment && compartment.GetType() == compartmentType && !compartment.IsOccupied() && compartment.IsCompartmentAccessible() && (!checkHasValidOccupantPrefab || (checkHasValidOccupantPrefab && !compartment.GetDefaultOccupantPrefab().IsEmpty())))
82 outCompartments.Insert(compartment);
93 array<BaseCompartmentSlot> compartments = {}; GetCompartments(compartments);
96 if (compartment && compartment.GetType() == compartmentType && !compartment.IsOccupied() && compartment.IsCompartmentAccessible() && (!checkHasValidOccupantPrefab || (checkHasValidOccupantPrefab && !compartment.GetDefaultOccupantPrefab().IsEmpty())))
110 array<BaseCompartmentSlot> compartments = {};
111 GetCompartments(compartments);
115 if (compartment.Type() != compartmentClass)
118 if (!compartment.IsOccupied() && compartment.IsCompartmentAccessible() && (!checkHasValidOccupantPrefab || !compartment.GetDefaultOccupantPrefab().IsEmpty()))
131 array<BaseCompartmentSlot> compartments = {};
135 compartments.Clear();
140 if (!compartment.IsOccupied() && compartment.IsCompartmentAccessible())
152 array<IEntity> occupants = {};
155 return occupants.Count();
163 array<BaseCompartmentSlot> compartments = {}; GetCompartments(compartments);
167 occupant = compartment.GetOccupant();
169 occupants.Insert(occupant);
183 occupant = compartment.GetOccupant();
185 occupants.Insert(occupant);
201 array<BaseCompartmentSlot> compartments = {};
202 GetCompartments(compartments);
208 compartment.DamageOccupant(damage, damageType, instigator, damageWhileGetIn, damageWhileGetOut);
210 compartment.ScreenShakeOccupant(damage);
223 array<BaseCompartmentSlot> compartments = {};
224 GetCompartments(compartments);
229 compartment.KillOccupant(instigator, eject, gettingIn, gettingOut);
240 bool EjectRandomOccupants(
float ejectionChance = -1,
bool ejectUnconscious =
false, out
bool allEjectedImmediately =
true,
bool ejectOnTheSpot =
false)
242 array<BaseCompartmentSlot> compartments = {};
243 GetCompartments(compartments);
245 bool characterEjected;
246 bool ejectedImmediately;
247 allEjectedImmediately =
true;
251 float random =
Math.RandomFloat01();
252 if (ejectionChance < 0)
254 if (random > compartment.GetRandomEjectionChance())
257 else if (ejectionChance > 0 && ejectionChance < 1)
259 if (random > ejectionChance)
265 characterEjected = compartment.EjectOccupant(ejectionChance == 1, ejectUnconscious, ejectedImmediately, ejectOnTheSpot) || characterEjected;
266 allEjectedImmediately = allEjectedImmediately && ejectedImmediately;
270 return characterEjected;
278 array<BaseCompartmentSlot> compartments = {};
279 GetCompartments(compartments);
282 compartment.SetCompartmentAccessible(accessible);
303 array<BaseCompartmentSlot> compartments = {};
308 compartment.SetCompartmentAccessible(setAccessible);
325 bool CanOccupy(array<ECompartmentType> compartmentTypes,
bool checkHasDefaultOccupantsData =
true,
FactionKey friendlyFaction =
string.Empty,
bool checkOccupyingFaction =
true,
bool checkForFreeCompartments =
true)
357 if (compartmentTypes.IsEmpty())
380 Print(
string.Format(
"'SCR_BaseCompartmentManagerComponent' is already spawning default occupants of type %1!",
typename.EnumToString(
ECompartmentType,
type)),
LogLevel.WARNING);
457 if (!compartmentToFill)
464 if (!spawnedCharacter)
529 if (vehicleFactionKey.IsEmpty())
532 array<BaseCompartmentSlot> compartments = {};
533 GetCompartments(compartments);
535 if (compartments.IsEmpty())
544 FactionAffiliationComponent factionAffiliationComponent;
546 Faction vehicleFaction = factionManager.GetFactionByKey(vehicleFactionKey);
547 bool friendlyFound =
false;
548 bool occupantFound =
false;
553 occupant = compartment.GetOccupant();
558 occupantFound =
true;
560 factionAffiliationComponent = FactionAffiliationComponent.Cast(occupant.
FindComponent(FactionAffiliationComponent));
561 if (!factionAffiliationComponent)
564 occupantFaction = factionAffiliationComponent.GetAffiliatedFaction();
567 if (occupantFaction.GetFactionKey() == vehicleFactionKey)
571 if (vehicleFaction.IsFactionFriendly(occupantFaction))
574 friendlyFound =
true;
591 return friendlyFound;
601 array<IEntity> occupants = {};
605 if (!occupants.IsEmpty())
608 array<BaseCompartmentSlot> compartments = {};
609 GetCompartments(compartments);
617 if (compartment.IsGetInLocked())
632 array<BaseCompartmentSlot> compartments =
new array<BaseCompartmentSlot>;
633 SCR_DefaultOccupantData defaultOccupantData;
637 compartments.Clear();
642 defaultOccupantData = compartment.GetDefaultOccupantData();
644 if (defaultOccupantData && defaultOccupantData.IsValid())
bool IsCompartmentAccessible()
ArmaReforgerScripted GetGame()
ref array< BaseCompartmentSlot > m_aCompartmentsToSpawnDefaultOccupant
BaseCompartmentSlot GetFirstFreeCompartmentOfType(ECompartmentType compartmentType, bool checkHasValidOccupantPrefab=false)
bool m_bIsSpawningDefaultOccupants
bool InitiateSpawnDefaultOccupants(notnull array< ECompartmentType > compartmentTypes)
ref ScriptInvoker Event_OnDoneSpawningDefaultOccupants
void DamageOccupants(float damage, EDamageType damageType, notnull Instigator instigator, bool damageWhileGetIn=false, bool damageWhileGetOut=false)
bool CanOccupy(array< ECompartmentType > compartmentTypes, bool checkHasDefaultOccupantsData=true, FactionKey friendlyFaction=string.Empty, bool checkOccupyingFaction=true, bool checkForFreeCompartments=true)
void GetOccupantsOfType(inout array< IEntity > occupants, ECompartmentType compartmentType)
ref array< ref array< ECompartmentType > > m_aDefaultOccupantsCompartmentTypesToSpawn
void ~SCR_BaseCompartmentManagerComponent()
void CancelSpawningCharacters()
Cancel spawning if in progress.
bool SpawnDefaultOccupants(notnull array< ECompartmentType > compartmentTypes)
bool IsOccupiedByFriendlies(FactionKey vehicleFactionKey, bool allFriendly, bool trueIfEmpty=true)
void SpawnDefaultOccupantEachFrame()
SCR_BaseCompartmentManagerComponentClass CREW_COMPARTMENT_TYPES
bool AnyCompartmentsOccupiedOrLocked()
bool HasDefaultOccupantsDataForTypes(array< ECompartmentType > compartmentTypes)
void GetFreeCompartmentsOfType(inout array< BaseCompartmentSlot > outCompartments, ECompartmentType compartmentType, bool checkHasValidOccupantPrefab=false)
void GetCompartmentsOfTypes(inout array< BaseCompartmentSlot > outCompartments, notnull array< ECompartmentType > compartmentTypes)
void KillOccupants(notnull Instigator instigator, bool eject=false, bool gettingIn=false, bool gettingOut=false)
bool EjectRandomOccupants(float ejectionChance=-1, bool ejectUnconscious=false, out bool allEjectedImmediately=true, bool ejectOnTheSpot=false)
void GetOccupants(inout array< IEntity > occupants)
void SetAllCompartmentsAccessibleOfTypes(notnull array< ECompartmentType > compartmentTypes, bool setAccessible)
bool IsSpawningDefaultOccupants()
ref array< IEntity > m_aSpawnedDefaultOccupants
void FinishedSpawningDefaultOccupants(bool wasCanceled)
AIGroup m_SpawnedOccupantsAIGroup
bool BlockSuppliesIfOccupied()
ScriptInvoker GetOnDoneSpawningDefaultOccupants()
void GetCompartmentsOfType(inout array< BaseCompartmentSlot > outCompartments, ECompartmentType compartmentType)
void SetCompartmentsAccessibleForAI(bool accessible)
bool HasFreeCompartmentOfTypes(notnull array< ECompartmentType > compartmentTypes)
SCR_CharacterSoundComponentClass GetComponentData()
Get all prefabs that have the spawner data
bool IsOccupied()
Returns true, if slot is occupied.
void SCR_FactionManager(IEntitySource src, IEntity parent)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
IEntity SpawnDefaultCharacterInCompartment(inout AIGroup group, ResourceName groupPrefab="{000CD338713F2B5A}Prefabs/AI/Groups/Group_Base.et")
proto external Managed FindComponent(typename typeName)
bool ShouldBlockSuppliesIfOccupied()
bool m_bBlockSuppliesIfOccupied
IEntity GetOwner()
Owner entity of the fuel tank.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
SCR_FieldOfViewSettings Attribute
proto bool Contains(T value)
proto native bool IsEmpty()