Arma Reforger Explorer
1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Toggle main menu visibility
Loading...
Searching...
No Matches
SCR_GetInUserAction.c
Go to the documentation of this file.
1
class
SCR_GetInUserAction
:
SCR_CompartmentUserAction
2
{
3
protected
const
LocalizedString
OCCUPIED_BY_SUPPLIES
=
"#AR-UserAction_SeatOccupied"
;
4
5
protected
SCR_BaseLockComponent
m_pLockComp
;
6
protected
DamageManagerComponent
m_DamageManager
;
7
protected
SCR_ResourceComponent
m_ResourceComp
;
8
protected
SCR_BaseCompartmentManagerComponent
m_CompartmentManager
;
9
10
//------------------------------------------------------------------------------------------------
11
override
void
Init
(
IEntity
pOwnerEntity,
GenericComponent
pManagerComponent)
12
{
13
IEntity
vehicle =
SCR_EntityHelper
.
GetMainParent
(pOwnerEntity,
true
);
14
if
(!vehicle)
15
return
;
16
17
m_pLockComp
= SCR_BaseLockComponent.Cast(pOwnerEntity.
FindComponent
(SCR_BaseLockComponent));
18
m_DamageManager
=
DamageManagerComponent
.Cast(vehicle.
FindComponent
(
DamageManagerComponent
));
19
20
//~ Hotfix to prevent get in action if the vehicle has supplies
21
m_CompartmentManager
= SCR_BaseCompartmentManagerComponent.Cast(pOwnerEntity.
FindComponent
(SCR_BaseCompartmentManagerComponent));
22
if
(
m_CompartmentManager
&&
m_CompartmentManager
.BlockSuppliesIfOccupied())
23
m_ResourceComp
= SCR_ResourceComponent.FindResourceComponent(pOwnerEntity,
true
);
24
}
25
26
//------------------------------------------------------------------------------------------------
27
override
void
PerformAction
(
IEntity
pOwnerEntity,
IEntity
pUserEntity)
28
{
29
if
(!pOwnerEntity || !pUserEntity)
30
return
;
31
32
ChimeraCharacter
character =
ChimeraCharacter
.Cast(pUserEntity);
33
if
(!character)
34
return
;
35
36
SCR_CharacterControllerComponent
controller =
SCR_CharacterControllerComponent
.Cast(character.GetCharacterController());
37
if
(controller && controller.
IsLoitering
())
38
return
;
39
40
BaseCompartmentSlot
targetCompartment = GetCompartmentSlot();
41
if
(!targetCompartment)
42
return
;
43
44
CompartmentAccessComponent compartmentAccess = character.GetCompartmentAccessComponent();
45
if
(!compartmentAccess)
46
return
;
47
48
if
(!compartmentAccess.GetInVehicle(pOwnerEntity, targetCompartment,
false
,
GetRelevantDoorIndex
(pUserEntity),
ECloseDoorAfterActions
.RETURN_TO_PREVIOUS_STATE,
false
))
49
return
;
50
51
super.PerformAction(pOwnerEntity, pUserEntity);
52
}
53
54
//------------------------------------------------------------------------------------------------
55
override
bool
CanBePerformedScript
(
IEntity
user)
56
{
57
if
(
m_DamageManager
&&
m_DamageManager
.GetState() ==
EDamageState
.DESTROYED)
58
return
false
;
59
60
BaseCompartmentSlot
compartment = GetCompartmentSlot();
61
if
(!compartment)
62
return
false
;
63
64
SCR_ChimeraCharacter character = SCR_ChimeraCharacter.Cast(user);
65
if
(!character)
66
return
false
;
67
68
SCR_CharacterControllerComponent
controller =
SCR_CharacterControllerComponent
.Cast(character.GetCharacterController());
69
if
(controller && controller.
IsLoitering
())
70
return
false
;
71
72
CompartmentAccessComponent compartmentAccess = character.GetCompartmentAccessComponent();
73
if
(!compartmentAccess)
74
return
false
;
75
76
//~ TODO: Hotfix until proper solution, only blocks player does not block AI or Editor actions
77
float
storedResources;
78
if
(
m_ResourceComp
&&
m_CompartmentManager
&&
m_CompartmentManager
.BlockSuppliesIfOccupied())
79
{
80
if
(
SCR_ResourceSystemHelper
.GetStoredResources(
m_ResourceComp
, storedResources) && storedResources > 0)
81
{
82
SetCannotPerformReason
(
OCCUPIED_BY_SUPPLIES
);
83
return
false
;
84
}
85
}
86
87
IEntity
owner = compartment.GetOwner();
88
Vehicle
vehicle =
Vehicle
.Cast(
SCR_EntityHelper
.
GetMainParent
(owner,
true
));
89
if
(vehicle)
90
{
91
Faction
characterFaction = character.GetFaction();
92
Faction
vehicleFaction = vehicle.GetFaction();
93
if
(characterFaction && vehicleFaction && characterFaction.IsFactionEnemy(vehicleFaction))
94
{
95
SetCannotPerformReason
(
"#AR-UserAction_SeatHostile"
);
96
return
false
;
97
}
98
}
99
100
if
(compartment.GetOccupant() ||
m_CompartmentManager
.IsGetInAndOutBlockedByDoorUser(
GetRelevantDoorIndex
(user)))
101
{
102
SetCannotPerformReason
(
"#AR-UserAction_SeatOccupied"
);
103
return
false
;
104
}
105
106
// Check if the position isn't lock.
107
if
(
m_pLockComp
&&
m_pLockComp
.IsLocked(user, compartment))
108
{
109
SetCannotPerformReason
(
m_pLockComp
.GetCannotPerformReason(user));
110
return
false
;
111
}
112
113
if
(compartment.IsReserved() && !compartment.IsReservedBy(user))
114
{
115
SetCannotPerformReason
(
"#AR-Campaign_Action_CannotEnterVehicle-UC"
);
116
return
false
;
117
}
118
119
// Make sure vehicle can be enter via provided door, if not, set reason.
120
if
(!compartmentAccess.CanGetInVehicleViaDoor(owner,
m_CompartmentManager
,
GetRelevantDoorIndex
(user)))
121
{
122
SetCannotPerformReason
(
"#AR-UserAction_SeatObstructed"
);
123
return
false
;
124
}
125
126
return
true
;
127
}
128
129
//------------------------------------------------------------------------------------------------
130
override
bool
CanBeShownScript
(
IEntity
user)
131
{
132
if
(
m_DamageManager
&&
m_DamageManager
.GetState() ==
EDamageState
.DESTROYED)
133
return
false
;
134
135
BaseCompartmentSlot
compartment = GetCompartmentSlot();
136
if
(!compartment)
137
return
false
;
138
139
ChimeraCharacter
occupant =
ChimeraCharacter
.Cast(compartment.GetOccupant());
140
if
(occupant)
141
{
142
CharacterControllerComponent controller = occupant.GetCharacterController();
143
if
(controller && controller.GetLifeState() !=
ECharacterLifeState
.ALIVE)
144
return
false
;
145
}
146
147
ChimeraCharacter
character =
ChimeraCharacter
.Cast(user);
148
if
(character && character.IsInVehicle())
149
return
false
;
150
151
CompartmentAccessComponent compartmentAccess = character.GetCompartmentAccessComponent();
152
if
(!compartmentAccess)
153
return
false
;
154
155
if
(compartmentAccess.IsGettingIn() || compartmentAccess.IsGettingOut())
156
return
false
;
157
158
return
true
;
159
}
160
};
BaseCompartmentSlot
Definition
BaseCompartmentSlot.c:2
BaseUserAction::SetCannotPerformReason
void SetCannotPerformReason(string reason)
Definition
BaseUserAction.c:21
ChimeraCharacter
Definition
ChimeraCharacter.c:13
DamageManagerComponent
Definition
DamageManagerComponent.c:13
Faction
Definition
Faction.c:13
GenericComponent
Definition
GenericComponent.c:13
IEntity
Definition
IEntity.c:13
IEntity::FindComponent
proto external Managed FindComponent(typename typeName)
LocalizedString
Definition
LocalizedString.c:22
SCR_CharacterControllerComponent
Definition
SCR_CharacterControllerComponent.c:36
SCR_CharacterControllerComponent::IsLoitering
bool IsLoitering()
Definition
SCR_CharacterControllerComponent.c:1649
SCR_CompartmentUserAction
Definition
SCR_CompartmentUserAction.c:2
SCR_CompartmentUserAction::GetRelevantDoorIndex
int GetRelevantDoorIndex(IEntity caller)
Definition
SCR_CompartmentUserAction.c:46
SCR_EntityHelper
Definition
SCR_EntityHelper.c:2
SCR_EntityHelper::GetMainParent
static IEntity GetMainParent(IEntity entity, bool self=false)
Definition
SCR_EntityHelper.c:325
SCR_GetInUserAction
Definition
SCR_GetInUserAction.c:2
SCR_GetInUserAction::m_ResourceComp
SCR_ResourceComponent m_ResourceComp
Definition
SCR_GetInUserAction.c:7
SCR_GetInUserAction::PerformAction
override void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity)
Definition
SCR_GetInUserAction.c:27
SCR_GetInUserAction::m_DamageManager
DamageManagerComponent m_DamageManager
Definition
SCR_GetInUserAction.c:6
SCR_GetInUserAction::OCCUPIED_BY_SUPPLIES
const LocalizedString OCCUPIED_BY_SUPPLIES
Definition
SCR_GetInUserAction.c:3
SCR_GetInUserAction::Init
override void Init(IEntity pOwnerEntity, GenericComponent pManagerComponent)
Definition
SCR_GetInUserAction.c:11
SCR_GetInUserAction::CanBeShownScript
override bool CanBeShownScript(IEntity user)
Definition
SCR_GetInUserAction.c:130
SCR_GetInUserAction::m_CompartmentManager
SCR_BaseCompartmentManagerComponent m_CompartmentManager
Definition
SCR_GetInUserAction.c:8
SCR_GetInUserAction::m_pLockComp
SCR_BaseLockComponent m_pLockComp
Definition
SCR_GetInUserAction.c:5
SCR_GetInUserAction::CanBePerformedScript
override bool CanBePerformedScript(IEntity user)
Definition
SCR_GetInUserAction.c:55
SCR_ResourceSystemHelper
Definition
SCR_ResourceSystemHelper.c:2
Vehicle
enum EPhysicsLayerPresets Vehicle
Definition
gameLib.c:24
ECharacterLifeState
ECharacterLifeState
Definition
ECharacterLifeState.c:13
EDamageState
EDamageState
Definition
EDamageState.c:13
ECloseDoorAfterActions
ECloseDoorAfterActions
Definition
ECloseDoorAfterActions.c:13
scripts
Game
UserActions
SCR_GetInUserAction.c
Generated by
1.17.0