Dayz
Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Toggle main menu visibility
Loading...
Searching...
No Matches
effecttrigger.c
Go to the documentation of this file.
1
// Base class for "Effect triggers"
2
// Registers in TriggerEffectManager and handles parameter setting through cfgEffectArea.json file
3
class
EffectTrigger
:
CylinderTrigger
4
{
5
int
m_AroundPartId
;
// The main particles spawned around player when in trigger
6
int
m_TinyPartId
;
// The smaller particles spawned around player when in trigger
7
int
m_PPERequester
;
// The Post Processing used when player is in trigger
8
float
m_DeltaTime
;
9
float
m_TimeAccuStay
;
10
bool
m_DealDamageFlag
;
11
TriggerEffectManager
m_Manager
;
12
EffectArea
m_EffectArea
;
13
int
m_EffectsPriority
;
14
15
#ifdef DIAG_DEVELOPER
16
Shape
m_DbgShape;
17
bool
m_DebugShapeActive;
18
#endif
19
20
void
EffectTrigger
()
21
{
22
RegisterNetSyncVariableInt(
"m_AroundPartId"
);
23
RegisterNetSyncVariableInt(
"m_TinyPartId"
);
24
RegisterNetSyncVariableInt(
"m_PPERequester"
);
25
RegisterNetSyncVariableInt(
"m_EffectsPriority"
);
26
27
m_Manager
=
TriggerEffectManager
.
GetInstance
();
28
m_Manager
.RegisterTriggerType(
this
);
29
}
30
31
// ----------------------------------------------
32
// CUSTOM EVENTS
33
// ----------------------------------------------
34
35
void
SetLocalEffects
(
int
aroundPartId,
int
tinyPartId,
int
ppeRequesterIdx )
36
{
37
m_AroundPartId
= aroundPartId;
38
m_TinyPartId
= tinyPartId;
39
m_PPERequester
= ppeRequesterIdx;
40
41
SetSynchDirty();
42
}
43
44
EffectArea
GetEffectArea
()
45
{
46
return
m_EffectArea
;
47
}
48
49
void
Init
(EffectArea area,
int
priority)
50
{
51
m_EffectArea
= area;
52
m_EffectsPriority
= priority;
53
}
54
55
int
GetEffectsPriority
()
56
{
57
return
m_EffectsPriority
;
58
}
59
60
string
GetAmbientSoundsetName
()
61
{
62
return
""
;
63
}
64
65
void
SetupClientEffects
(
bool
enable, notnull
PlayerBase
player)
66
{
67
if
( !
m_Manager
.IsPlayerInTriggerType( player,
this
) )
68
{
69
if
(enable)
70
{
71
player.SetContaminatedEffectEx(
true
,
m_PPERequester
,
m_AroundPartId
,
m_TinyPartId
,
GetAmbientSoundsetName
() );
72
}
73
else
74
{
75
player.SetContaminatedEffectEx(
false
,
m_PPERequester
);
76
}
77
}
78
}
79
80
81
// ----------------------------------------------
82
// TRIGGER EVENTS
83
// ----------------------------------------------
84
85
override
void
EOnFrame
(
IEntity
other,
float
timeSlice)
86
{
87
m_DeltaTime
= timeSlice;
88
}
89
90
override
bool
CanAddObjectAsInsider
(
Object
object
)
91
{
92
#ifdef SERVER
93
DayZCreatureAI
creature =
DayZCreatureAI
.Cast(
object
);
94
if
(creature)
95
{
96
return
!creature.ResistContaminatedEffect();
97
}
98
else
99
{
100
PlayerBase
player =
PlayerBase
.Cast(
object
);
101
return
player != null;
102
}
103
#else
104
PlayerBase
player =
PlayerBase
.Cast(
object
);
105
return
(player && player.IsControlledPlayer());
106
#endif
107
}
108
109
override
protected
void
OnStayClientEvent
(
TriggerInsider
insider,
float
deltaTime)
110
{
111
super.OnStayClientEvent(insider, deltaTime);
112
PlayerBase
player =
PlayerBase
.Cast(insider.
GetObject
());
113
if
(player)
114
player.RequestTriggerEffect(
this
,
m_PPERequester
,
m_AroundPartId
,
m_TinyPartId
,
GetAmbientSoundsetName
() );
115
}
116
117
override
void
OnEnterServerEvent
(
TriggerInsider
insider )
118
{
119
super.OnEnterServerEvent( insider );
120
121
// We don't need to test the trigger count as Modifiers handle such cases already
122
if
( insider )
123
{
124
PlayerBase
playerInsider =
PlayerBase
.Cast( insider.
GetObject
() );
125
126
if
(playerInsider)
127
{
128
129
m_Manager
.OnPlayerEnter( playerInsider,
this
);
130
}
131
132
}
133
134
}
135
136
override
void
OnEnterClientEvent
(
TriggerInsider
insider )
137
{
138
super.OnEnterClientEvent( insider );
139
140
if
( insider )
141
{
142
PlayerBase
playerInsider =
PlayerBase
.Cast( insider.
GetObject
() );
143
144
// We will only handle the controlled player, as effects are only relevant to this player instance
145
if
(playerInsider && playerInsider.IsControlledPlayer() )
146
{
147
//SetupClientEffects(true, playerInsider);
148
// We then handle the update of player trigger state in manager
149
m_Manager
.OnPlayerEnter( playerInsider,
this
);
150
}
151
}
152
}
153
154
155
override
void
OnLeaveServerEvent
(
TriggerInsider
insider )
156
{
157
super.OnLeaveServerEvent( insider );
158
159
if
( insider )
160
{
161
PlayerBase
playerInsider =
PlayerBase
.Cast( insider.
GetObject
() );
162
163
if
( playerInsider )
164
m_Manager
.OnPlayerExit( playerInsider,
this
);
165
}
166
}
167
168
169
170
override
void
OnLeaveClientEvent
(
TriggerInsider
insider )
171
{
172
super.OnLeaveClientEvent( insider );
173
174
if
( insider )
175
{
176
// Make sure you pass the set variable for PPE effect
177
// It will not remove the correct one if START and STOP don't point to the same Requester
178
PlayerBase
playerInsider =
PlayerBase
.Cast( insider.
GetObject
() );
179
180
// We will only handle the controlled player, as effects are only relevant to this player instance
181
if
( playerInsider && playerInsider.IsControlledPlayer() )
182
{
183
// We first handle the update of player trigger state in manager
184
m_Manager
.OnPlayerExit( playerInsider,
this
);
185
//SetupClientEffects(false, playerInsider);
186
}
187
}
188
}
189
190
// We remove from trigger update DEAD or RESISTANT entities to limit the amount of entities to update
191
override
bool
ShouldRemoveInsider
(
TriggerInsider
insider )
192
{
193
return
!insider.
GetObject
().IsAlive();
194
}
195
196
// Used to apply the desired effect to all entities present in one trigger of the specified type
197
// NOTE : This is really not optimal, if you want to add new trigger types, you will have to test for them...
198
static
void
TriggerEffect
(
EntityAI
insider,
typename
triggerType ) {}
199
200
#ifdef DIAG_DEVELOPER
201
// overriden so it doesnt refresh the shape every call while keeping the insider coloring functional
202
override
void
DebugDmgTrigger(
vector
pos,
vector
orientation,
vector
min,
vector
max,
float
radius,
string
dmgType,
array<ref TriggerInsider>
insiders)
203
{
204
bool
enableDebug =
DiagMenu
.
GetBool
(
DiagMenuIDs
.TRIGGER_DEBUG);
205
if
(enableDebug)
206
{
207
if
(
g_Game
.IsMultiplayer() &&
g_Game
.IsServer())
208
return
;
209
210
if
(!m_DebugShapeActive)
211
{
212
m_DbgShape =
DrawDebugShape
(pos, min, max, radius,
COLOR_GREEN_A
);
213
m_DebugShapeActive =
true
;
214
}
215
216
if
(
g_Game
.IsMultiplayer() ||
g_Game
.IsServer())
217
m_dbgInsiders = insiders;
218
219
if
(m_dbgInsiders.Count() > 0)
220
m_DbgShape.SetColor(
COLOR_YELLOW_A
);
221
else
222
m_DbgShape.SetColor(
COLOR_GREEN_A
);
223
}
224
else
if
(m_DebugShapeActive)
225
{
226
CleanupDebugShapes
(dbgTargets);
227
m_DebugShapeActive =
false
;
228
}
229
}
230
#endif
231
232
}
DrawDebugShape
void DrawDebugShape()
Definition
bleedingsource.c:176
CylinderTrigger
Trigger with cylinder shape.
Definition
cylindertrigger.c:3
DayZCreatureAI
do not process rotations !
Definition
dayzanimal.c:656
DiagMenu
Definition
endebug.c:241
EffectTrigger
Definition
contaminatedtrigger.c:3
EffectTrigger::TriggerEffect
static void TriggerEffect(EntityAI insider, typename triggerType)
Definition
effecttrigger.c:198
EffectTrigger::SetLocalEffects
void SetLocalEffects(int aroundPartId, int tinyPartId, int ppeRequesterIdx)
Definition
effecttrigger.c:35
EffectTrigger::SetupClientEffects
void SetupClientEffects(bool enable, notnull PlayerBase player)
Definition
effecttrigger.c:65
EffectTrigger::Init
void Init(EffectArea area, int priority)
Definition
effecttrigger.c:49
EffectTrigger::m_PPERequester
int m_PPERequester
Definition
effecttrigger.c:7
EffectTrigger::EffectTrigger
void EffectTrigger()
Definition
effecttrigger.c:20
EffectTrigger::m_DealDamageFlag
bool m_DealDamageFlag
Definition
effecttrigger.c:10
EffectTrigger::OnStayClientEvent
void OnStayClientEvent(TriggerInsider insider, float deltaTime)
Definition
effecttrigger.c:109
EffectTrigger::m_TimeAccuStay
float m_TimeAccuStay
Definition
effecttrigger.c:9
EffectTrigger::m_EffectArea
EffectArea m_EffectArea
Definition
effecttrigger.c:12
EffectTrigger::m_AroundPartId
int m_AroundPartId
Definition
effecttrigger.c:5
EffectTrigger::OnLeaveClientEvent
override void OnLeaveClientEvent(TriggerInsider insider)
Definition
effecttrigger.c:170
EffectTrigger::m_EffectsPriority
int m_EffectsPriority
Definition
effecttrigger.c:13
EffectTrigger::CanAddObjectAsInsider
override bool CanAddObjectAsInsider(Object object)
Definition
effecttrigger.c:90
EffectTrigger::m_TinyPartId
int m_TinyPartId
Definition
effecttrigger.c:6
EffectTrigger::m_DeltaTime
float m_DeltaTime
Definition
effecttrigger.c:8
EffectTrigger::GetAmbientSoundsetName
string GetAmbientSoundsetName()
Definition
effecttrigger.c:60
EffectTrigger::GetAmbientSoundsetName
override string GetAmbientSoundsetName()
Definition
contaminatedtrigger.c:84
EffectTrigger::GetEffectArea
EffectArea GetEffectArea()
Definition
effecttrigger.c:44
EffectTrigger::GetEffectsPriority
int GetEffectsPriority()
Definition
effecttrigger.c:55
EffectTrigger::OnEnterServerEvent
override void OnEnterServerEvent(TriggerInsider insider)
Definition
effecttrigger.c:117
EffectTrigger::m_Manager
TriggerEffectManager m_Manager
Definition
effecttrigger.c:11
EffectTrigger::ShouldRemoveInsider
override bool ShouldRemoveInsider(TriggerInsider insider)
Definition
effecttrigger.c:191
EffectTrigger::OnLeaveServerEvent
override void OnLeaveServerEvent(TriggerInsider insider)
Definition
effecttrigger.c:155
EffectTrigger::EOnFrame
override void EOnFrame(IEntity other, float timeSlice)
Definition
effecttrigger.c:85
EffectTrigger::OnEnterClientEvent
override void OnEnterClientEvent(TriggerInsider insider)
Definition
effecttrigger.c:136
EntityAI
Definition
inventoryitem.c:2
IEntity
Internal ancestor of all Entity implementations.
Definition
enentity.c:165
Object
Definition
objecttyped.c:2
PlayerBase
Definition
playerbaseclient.c:2
TriggerEffectManager
Definition
triggereffectmanager.c:4
TriggerEffectManager::GetInstance
static TriggerEffectManager GetInstance()
Definition
triggereffectmanager.c:21
TriggerInsider
The object which is in a trigger and its metadata.
Definition
trigger.c:3
TriggerInsider::GetObject
Object GetObject()
Definition
trigger.c:28
array
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Definition
isboxcollidinggeometryproxyclasses.c:28
vector
Definition
enconvert.c:119
g_Game
DayZGame g_Game
Definition
dayzgame.c:3942
CleanupDebugShapes
void CleanupDebugShapes(array< Shape > shapesArr)
DEPRECATED.
Definition
dynamicmusicplayer.c:1037
DiagMenuIDs
DiagMenuIDs
Definition
ediagmenuids.c:2
COLOR_YELLOW_A
const int COLOR_YELLOW_A
Definition
constants.c:72
COLOR_GREEN_A
const int COLOR_GREEN_A
Definition
constants.c:70
DiagMenu::GetBool
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
Shape
class DiagMenu Shape
Instance of created debug visualizer.
Games
Dayz
scripts
4_world
entities
scriptedentities
triggers
effecttrigger.c
Generated by
1.17.0