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_PickupRequestedTaskEntity.c
Go to the documentation of this file.
1
class
SCR_PickupRequestedTaskEntityClass
:
SCR_BaseRequestedTaskEntityClass
2
{
3
}
4
5
class
SCR_PickupRequestedTaskEntity : SCR_BaseRequestedTaskEntity
6
{
7
[
Attribute
(
"150"
,
UIWidgets
.EditBox,
"Area radius [m]"
,
"0 inf"
)]
8
protected
float
m_fAreaRadius
;
9
10
protected
float
m_fAreaRadiusSq
;
11
protected
RplComponent
m_RplComponent
;
12
protected
SCR_GroupsManagerComponent
m_GroupsManager
;
13
protected
ref array<int>
m_aFilteredRequesters
= {};
14
protected
int
m_iRequestersInVehicle
;
15
16
static
int
PERIODICAL_CHECK_INTERVAL
= 2000;
// ms
17
18
//------------------------------------------------------------------------------------------------
19
protected
void
PeriodicalCheck
()
20
{
21
if
(!
m_GroupsManager
)
22
return
;
23
24
SCR_AIGroup
group =
m_GroupsManager
.FindGroup(
GetRequesterId
());
25
if
(!group)
26
return
;
27
28
array<int> assigneePlayerIDs =
GetTaskAssigneePlayerIDs
();
29
if
(assigneePlayerIDs && !assigneePlayerIDs.IsEmpty() && !
IsAnyPlayerAlive
(assigneePlayerIDs))
30
{
31
// fail - all assigned are dead
32
m_TaskSystem
.SetTaskState(
this
,
SCR_ETaskState
.FAILED);
33
DeleteTask
();
34
return
;
35
}
36
37
PlayerManager
playerManager =
GetGame
().GetPlayerManager();
38
array<int> requesterIDs = group.
GetPlayerIDs
();
39
SCR_ChimeraCharacter requesterCharacter;
40
SCR_ChimeraCharacter assigneeCharacter;
41
vector
taskPosition =
GetTaskPosition
();
42
bool
isAnyRequesterAlive;
43
44
m_iRequestersInVehicle
= 0;
45
46
foreach
(
int
requesterID : requesterIDs)
47
{
48
requesterCharacter =
GetCharacter
(requesterID);
49
if
(!requesterCharacter)
50
continue
;
51
52
isAnyRequesterAlive =
true
;
53
54
if
(!requesterCharacter.IsInVehicle())
55
continue
;
56
57
IEntity
requesterVehicle =
GetVehicle
(requesterCharacter);
58
if
(!requesterVehicle)
59
continue
;
60
61
// check if a requester is inside of the area
62
if
(
vector
.DistanceSqXZ(requesterCharacter.GetOrigin(), taskPosition) <=
m_fAreaRadiusSq
)
63
{
64
if
(!
m_aFilteredRequesters
.Contains(requesterID))
65
m_aFilteredRequesters
.Insert(requesterID);
66
67
continue
;
68
}
69
70
// we need the requester to be in the area at least once.
71
if
(!
m_aFilteredRequesters
.Contains(requesterID))
72
continue
;
73
74
foreach
(
int
assigneePlayerID : assigneePlayerIDs)
75
{
76
assigneeCharacter =
GetCharacter
(assigneePlayerID);
77
if
(!assigneeCharacter || !assigneeCharacter.IsInVehicle())
78
continue
;
79
80
IEntity
assigneeVehicle =
GetVehicle
(assigneeCharacter);
81
82
// check if requester is in vehicle with assignee
83
if
(assigneeVehicle == requesterVehicle)
84
{
85
m_iRequestersInVehicle
++;
86
break
;
87
}
88
}
89
}
90
91
if
(!isAnyRequesterAlive)
92
{
93
// fail - all requesters are dead
94
m_TaskSystem
.SetTaskState(
this
,
SCR_ETaskState
.FAILED);
95
DeleteTask
();
96
}
97
else
if
(
m_iRequestersInVehicle
> 0)
98
{
99
// completed - at least one requester and one assignee are in the vehicle and outside the zone
100
m_TaskSystem
.SetTaskState(
this
,
SCR_ETaskState
.COMPLETED);
101
DeleteTask
();
102
}
103
}
104
105
//------------------------------------------------------------------------------------------------
106
protected
bool
IsAnyPlayerAlive
(notnull array<int> playerIDs)
107
{
108
foreach
(
int
playerID : playerIDs)
109
{
110
if
(!
GetCharacter
(playerID))
111
continue
;
112
113
return
true
;
114
}
115
116
return
false
;
117
}
118
119
//------------------------------------------------------------------------------------------------
120
protected
SCR_ChimeraCharacter
GetCharacter
(
int
playerID)
121
{
122
SCR_ChimeraCharacter character = SCR_ChimeraCharacter.Cast(
GetGame
().GetPlayerManager().GetPlayerControlledEntity(playerID));
123
if
(!character)
124
return
null;
125
126
CharacterControllerComponent charControl = character.GetCharacterController();
127
if
(!charControl || charControl.IsDead())
128
return
null;
129
130
return
character;
131
}
132
133
//------------------------------------------------------------------------------------------------
134
protected
IEntity
GetVehicle
(notnull
IEntity
character)
135
{
136
SCR_CompartmentAccessComponent
compartmentAccess =
SCR_CompartmentAccessComponent
.Cast(character.FindComponent(
SCR_CompartmentAccessComponent
));
137
if
(!compartmentAccess)
138
return
null;
139
140
return
compartmentAccess.
GetVehicle
();
141
}
142
143
//------------------------------------------------------------------------------------------------
144
protected
void
AddXPReward
()
145
{
146
if
(!
m_RplComponent
||
m_RplComponent
.IsProxy())
147
return
;
148
149
SCR_XPHandlerComponent comp = SCR_XPHandlerComponent.Cast(
GetGame
().
GetGameMode
().FindComponent(SCR_XPHandlerComponent));
150
if
(!comp)
151
return
;
152
153
// add XP to all players in the assigned group
154
array<int> assigneePlayerIDs =
GetTaskAssigneePlayerIDs
();
155
if
(!assigneePlayerIDs)
156
return
;
157
158
foreach
(
int
playerID : assigneePlayerIDs)
159
{
160
comp.AwardXP(playerID,
SCR_EXPRewards
.PICKUP_TASK_COMPLETED,
m_iRequestersInVehicle
,
false
);
161
}
162
}
163
164
//------------------------------------------------------------------------------------------------
165
override
void
SetTaskState
(
SCR_ETaskState
state)
166
{
167
if
(state ==
SCR_ETaskState
.COMPLETED)
168
AddXPReward
();
169
170
super.SetTaskState(state);
171
}
172
173
//------------------------------------------------------------------------------------------------
174
override
void
EOnInit
(
IEntity
owner)
175
{
176
super.EOnInit(owner);
177
178
if
(
SCR_Global
.
IsEditMode
(
this
))
179
return
;
180
181
m_fAreaRadiusSq
=
m_fAreaRadius
*
m_fAreaRadius
;
182
m_RplComponent
= RplComponent.Cast(owner.
FindComponent
(RplComponent));
183
m_GroupsManager
=
SCR_GroupsManagerComponent
.GetInstance();
184
185
if
(!
m_RplComponent
||
m_RplComponent
.IsProxy())
186
return
;
187
188
GetGame
().GetCallqueue().CallLater(
PeriodicalCheck
,
PERIODICAL_CHECK_INTERVAL
,
true
);
189
}
190
191
//------------------------------------------------------------------------------------------------
192
// destructor
193
void
~SCR_PickupRequestedTaskEntity
()
194
{
195
GetGame
().GetCallqueue().Remove(
PeriodicalCheck
);
196
}
197
}
GetGame
ArmaReforgerScripted GetGame()
Definition
game.c:1398
DeleteTask
void DeleteTask()
Definition
SCR_AttackTaskEntity.c:298
PeriodicalCheck
void PeriodicalCheck()
Definition
SCR_AttackTaskEntity.c:35
SetTaskState
override void SetTaskState(SCR_ETaskState state)
Definition
SCR_AttackTaskEntity.c:290
m_fAreaRadius
float m_fAreaRadius
Definition
SCR_AttackTaskEntity.c:9
PERIODICAL_CHECK_INTERVAL
SCR_AttackTaskEntityClass PERIODICAL_CHECK_INTERVAL
m_fAreaRadiusSq
float m_fAreaRadiusSq
Definition
SCR_AttackTaskEntity.c:26
GetGameMode
SCR_BaseGameMode GetGameMode()
Definition
SCR_BaseGameModeComponent.c:15
GetRequesterId
int GetRequesterId()
Definition
SCR_BaseRequestedTaskEntity.c:121
m_RplComponent
RplComponent m_RplComponent
Definition
SCR_CampaignBuildingManagerComponent.c:64
GetVehicle
IEntity GetVehicle()
Definition
SCR_CampaignMobileAssemblyStandaloneComponent.c:110
AddXPReward
void AddXPReward()
Definition
SCR_ClearTaskEntity.c:111
SCR_GroupsManagerComponent
void SCR_GroupsManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
Definition
SCR_GroupsManagerComponent.c:1747
IsAnyPlayerAlive
bool IsAnyPlayerAlive(notnull array< int > playerIDs)
Definition
SCR_PickupRequestedTaskEntity.c:106
m_aFilteredRequesters
ref array< int > m_aFilteredRequesters
Definition
SCR_PickupRequestedTaskEntity.c:13
m_iRequestersInVehicle
int m_iRequestersInVehicle
Definition
SCR_PickupRequestedTaskEntity.c:14
m_GroupsManager
SCR_GroupsManagerComponent m_GroupsManager
Definition
SCR_PickupRequestedTaskEntity.c:12
~SCR_PickupRequestedTaskEntity
void ~SCR_PickupRequestedTaskEntity()
Definition
SCR_PickupRequestedTaskEntity.c:193
GetTaskAssigneePlayerIDs
array< int > GetTaskAssigneePlayerIDs()
Definition
SCR_Task.c:458
GetTaskPosition
vector GetTaskPosition()
Definition
SCR_Task.c:1282
SCR_ETaskState
SCR_ETaskState
Definition
SCR_Task.c:3
m_TaskSystem
SCR_TaskSystem m_TaskSystem
Definition
SCR_TaskNotificationComponent.c:11
SCR_EXPRewards
SCR_EXPRewards
Definition
SCR_XPHandlerComponent.c:826
IEntity
Definition
IEntity.c:13
IEntity::FindComponent
proto external Managed FindComponent(typename typeName)
PlayerManager
Definition
PlayerManager.c:13
SCR_AIGroup
Definition
SCR_AIGroup.c:75
SCR_AIGroup::GetPlayerIDs
array< int > GetPlayerIDs()
Definition
SCR_AIGroup.c:978
SCR_BaseRequestedTaskEntityClass
Definition
SCR_BaseRequestedTaskEntity.c:6
SCR_CompartmentAccessComponent
Definition
SCR_CompartmentAccessComponent.c:16
SCR_CompartmentAccessComponent::GetVehicle
IEntity GetVehicle()
Definition
SCR_CompartmentAccessComponent.c:381
SCR_Global
Definition
Functions.c:7
SCR_Global::IsEditMode
static bool IsEditMode()
Definition
Functions.c:1566
SCR_PickupRequestedTaskEntityClass
Definition
SCR_PickupRequestedTaskEntity.c:2
UIWidgets
Definition
attributes.c:40
vector
Definition
vector.c:13
EOnInit
override void EOnInit(IEntity owner)
Definition
SCR_AIConfigComponent.c:87
GetCharacter
proto external SCR_ChimeraCharacter GetCharacter()
Returns the current controlled character.
Attribute
SCR_FieldOfViewSettings Attribute
Definition
SendGoalMessage.c:170
scripts
Game
Tasks
Campaign
SCR_PickupRequestedTaskEntity.c
Generated by
1.17.0