DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Roadflare.c
См. документацию.
1/*
2 Author: Boris Vacula
3 Description: The flare has 3 burning states during which it uses different particle effects while illumnatingthe environment. After it burns up, it still releases smoke for a while.
4 When the flare is dropped while its burning, it is stood up on its stands. This makes the shadows, illumination and particles stand out better.
5*/
6
15
23
25{
26 // Burning
27 static protected const int INITIAL_BURNING_STATE_TIME = 5;
28 static protected const int FINAL_BURNING_STATE_TIME = 60;
29 static protected vector m_FlameLocalPos = "0 0.285 0";
30 private int m_BurningState = RoadflareBurningState.NOT_BURNING;
31
32 // Light
33 RoadflareLight m_Light;
34
35 // Particles
40
45
46 // Sounds
49 static protected const string BURNING_SOUND = "roadflareLoop_SoundSet";
50 static protected const string IGNITE_SOUND = "roadflareTurnOn_SoundSet";
51 static protected const int BURNING_NOISE_RANGE = 30;
52
53 // Timers
55
56 // Ignition states
57 private int m_ModelState = RoadflareModelStates.DEFAULT;
58
59 // Selections
60 static const string STANDS_FOLDED = "Sticks_Flare_Folded";
61 static const string STANDS_UNFOLDED = "Sticks_Flare_Unfolded";
62 static const string FLARE_CAP = "Flare_cap";
63 static const string UNIGNITED_TIP = "Pristine";
64 static const string IGNITED_TIP = "Burning";
65 static const string EXTINGUISHED_TIP = "Burned_out";
66
67 static const int SELECTION_Burning = 0;
68 static const int SELECTION_Burned_out = 1;
69 static const int SELECTION_Pristine = 2;
70 static const int SELECTION_All = 3;
71
72 static const string DEFAULT_TEXTURE = "dz\\gear\\consumables\\data\\road_flare_co.paa";
73 static const string BURNING_TEXTURE = "dz\\gear\\consumables\\data\\road_flare_e_co.paa";
74
75 static const string DEFAULT_MATERIAL = "dz\\gear\\consumables\\data\\road_flare.rvmat";
76 static const string BURNING_MATERIAL = "dz\\gear\\consumables\\data\\road_flare_on.rvmat";
77
78 // Noise
80 private float m_NoiseTimer;
81
82 void Roadflare()
83 {
84 RegisterNetSyncVariableInt("m_BurningState");
85 }
86
87 // Use RoadflareModelStates enum
88 void SetModelState(int enum_state)
89 {
90 m_ModelState = enum_state;
92 }
93
94 override void EEDelete(EntityAI parent)
95 {
96 super.EEDelete(parent);
97
98 if ( g_Game )
99 {
102 delete m_FinalSmokeTimer;
103 }
104
106
107 if (m_Light)
108 m_Light.FadeOut(0);
109 }
110
112 {
113 super.OnStoreSave(ctx);
114
115 ctx.Write( m_ModelState );
116 }
117
118 override bool OnStoreLoad(ParamsReadContext ctx, int version)
119 {
120 if ( !super.OnStoreLoad(ctx, version) )
121 return false;
122
123 int state;
124 if ( !ctx.Read(state) )
125 state = RoadflareModelStates.DEFAULT;
126
127 SetModelState(state);
128
129 return true;
130 }
131
133 {
134 switch (m_ModelState)
135 {
136 case RoadflareModelStates.DEFAULT:
137
138 ShowSelection(FLARE_CAP);
139 ShowSelection(UNIGNITED_TIP);
140
141 HideSelection(IGNITED_TIP);
142 HideSelection(EXTINGUISHED_TIP);
143
144 SetObjectTexture(SELECTION_Pristine, DEFAULT_TEXTURE);
145 SetObjectMaterial(SELECTION_Pristine, DEFAULT_MATERIAL);
146
147 break;
148
149 case RoadflareModelStates.UNCAPPED_UNIGNITED:
150
151 ShowSelection(UNIGNITED_TIP);
152
153 HideSelection(FLARE_CAP);
154 HideSelection(IGNITED_TIP);
155 HideSelection(EXTINGUISHED_TIP);
156
157 SetObjectTexture(SELECTION_Pristine, DEFAULT_TEXTURE);
158 SetObjectMaterial(SELECTION_Pristine, DEFAULT_MATERIAL);
159
160 break;
161
162 case RoadflareModelStates.UNCAPPED_IGNITED:
163
164 ShowSelection(IGNITED_TIP);
165
166 HideSelection(UNIGNITED_TIP);
167 HideSelection(FLARE_CAP);
168 HideSelection(EXTINGUISHED_TIP);
169
170 // No texture/material change here because the model already contains them
171
172 break;
173
174 case RoadflareModelStates.UNCAPPED_BURNED_OUT:
175
176 ShowSelection(EXTINGUISHED_TIP);
177
178 HideSelection(UNIGNITED_TIP);
179 HideSelection(FLARE_CAP);
180 HideSelection(IGNITED_TIP);
181
182 SetObjectTexture(SELECTION_Burned_out, DEFAULT_TEXTURE);
183 SetObjectMaterial(SELECTION_Burned_out, DEFAULT_MATERIAL);
184
185 break;
186 }
187 }
188
189 // When the flare starts burning
190 override void OnWorkStart()
191 {
192 if ( !g_Game.IsServer() || !g_Game.IsMultiplayer() )
193 {
194 PlaySoundSetLoop( m_BurningSound, BURNING_SOUND, 0.5, 0 );
195 PlaySoundSet( m_IgniteSound, IGNITE_SOUND, 0, 0 );
196
197 m_Light = RoadflareLight.Cast( ScriptedLightBase.CreateLight( RoadflareLight, Vector(0,0,0) ) );
198 m_Light.AttachOnMemoryPoint( this, m_Light.m_MemoryPoint );
199 }
200
202 SetModelState( RoadflareModelStates.UNCAPPED_IGNITED );
203 }
204
205 // Insert RoadflareBurningState enum index as parameter
206 void SetBurningState(int state_number)
207 {
208 m_BurningState = state_number;
209 }
210
211 // Insert RoadflareBurningState enum index as parameter. Activates server -> client synchronization
212 void SetBurningStateSynchronized(int state_number)
213 {
214 if ( g_Game.IsServer() )
215 {
216 m_BurningState = state_number;
217 SetSynchDirty();
218 }
219 }
220
221 // Every second of the flare burning
222 override void OnWork(float consumed_energy)
223 {
224 if ( g_Game.IsServer() )
225 {
226 float burning_time = GetCompEM().GetEnergyMax() - GetCompEM().GetEnergy();
227
228 // Update burning states
229 if (m_BurningState == RoadflareBurningState.INITIAL_BURN)
230 {
231 if (burning_time >= INITIAL_BURNING_STATE_TIME)
232 {
234 }
235 }
236 else if ( m_BurningState == RoadflareBurningState.MAIN_BURN )
237 {
238
239 if ( burning_time >= GetCompEM().GetEnergyMax() - FINAL_BURNING_STATE_TIME )
240 {
242 }
243 }
244
245 // Burn containers of this roadflare. This might be removed if lit roadflare can't be put into inventory.
246 /*EntityAI container_EAI = GetHierarchyParent();
247
248 if ( container_EAI && container_EAI.IsInherited(ItemBase) && !container_EAI.IsInherited(TripwireTrap) )
249 {
250 ItemBase container_IB = ItemBase.Cast( container_EAI );
251
252 int c_size = container_IB.GetItemSize();
253 if (c_size == 0)
254 c_size = 1;
255
256 container_IB.AddHealth("","",-10/c_size);
257 }*/
258 }
259
261 }
262
263 // When the flare stops burning
264 override void OnWorkStop()
265 {
266 if ( g_Game.IsMissionMainMenu() ) // This is singleplayer main menu so no synchronization here!
267 {
270 }
271 else
272 {
273 if ( g_Game.IsServer() )
274 {
275 //Safeguard if item is turned off by another event than running out of energy
276 if (GetCompEM().GetEnergy() > 0)
277 {
278 if (m_Light)
279 {
280 m_Light.FadeOut();
281 }
283 return;
284 }
286 SetHealth("","",0);
287 }
288
291 m_FinalSmokeTimer.Run(60, this, "StopSmoking", NULL, false);
292 }
293
294
295 if ( m_BurningSound )
296 StopSoundSet( m_BurningSound );
297
298 if (m_Light)
299 m_Light.FadeOut();
300
301 SetModelState( RoadflareModelStates.UNCAPPED_BURNED_OUT );
302 }
303
304 // Updates all (in)active particles
306 {
307 if ( g_Game.IsDedicatedServer() )
308 return;
309
310 switch (m_BurningState)
311 {
312 case RoadflareBurningState.NOT_BURNING:
313
315 break;
316
317 case RoadflareBurningState.INITIAL_BURN:
318
319 if (!m_ParInitialFire)
320 {
322 m_ParInitialFire = ParticleManager.GetInstance().PlayOnObject( PARTICLE_INIT_FIRE, this, m_FlameLocalPos);
323 m_ParInitialFire.SetWiggle( 10, 0.3 );
324 }
325 break;
326
327 case RoadflareBurningState.MAIN_BURN:
328
329 if (!m_ParMainFire)
330 {
331 m_ParMainFire = ParticleManager.GetInstance().PlayOnObject( PARTICLE_MAIN_FIRE, this, m_FlameLocalPos);
332 m_ParMainFire.SetWiggle( 7, 0.3 );
333 }
334
336
337 break;
338
339 case RoadflareBurningState.FINAL_BURN:
340
341 if (!m_ParFinalFire)
342 {
344 m_ParFinalFire = ParticleManager.GetInstance().PlayOnObject( PARTICLE_FINAL_FIRE, this, m_FlameLocalPos);
345 m_ParFinalFire.SetWiggle( 4, 0.3 );
346 }
347 break;
348
349 case RoadflareBurningState.SMOKE_ONLY:
350
351 if (!m_ParJustSmoke)
352 {
354 m_ParJustSmoke = ParticleManager.GetInstance().PlayOnObject( PARTICLE_FINAL_SMOKE, this, m_FlameLocalPos);
355 m_ParJustSmoke.SetWiggle( 2, 0.3 );
356 }
357 break;
358 }
359 }
360
361 // Destroys the given particle
363 {
364 if (p)
365 {
366 p.SetWiggle(0,0);
367 p.Stop();
368 }
369 }
370
372 {
374 p = null;
375 }
376
377 // Destroys all particles
385
386 // Stop releasing final smoke
392
393 // Inventory manipulation
394 override void OnInventoryExit(Man player)
395 {
396 super.OnInventoryExit(player);
397
398 if (m_BurningState != RoadflareBurningState.NOT_BURNING)
399 {
400 HideSelection(STANDS_FOLDED);
401 ShowSelection(STANDS_UNFOLDED);
402
403 if (player)
404 {
405 vector ori_rotate = player.GetOrientation();
406 ori_rotate = ori_rotate + Vector(180, 32, 0);
407 SetOrientation(ori_rotate);
408 }
409 }
410 }
411
412 override bool CanPutInCargo( EntityAI parent )
413 {
414 if ( !super.CanPutInCargo(parent) )
415 return false;
416
417 if ( parent && parent.IsInherited( FireplaceBase ) )
418 return true;
419
420 if ( m_BurningState != RoadflareBurningState.NOT_BURNING )
421 return false;
422
423 return true;
424 }
425
426 override void OnInventoryEnter(Man player)
427 {
428 super.OnInventoryEnter(player);
429
430 HideSelection(STANDS_UNFOLDED);
431 ShowSelection(STANDS_FOLDED);
432 }
433
434 override void OnActivatedByItem(notnull ItemBase item)
435 {
436 if (item.IsInherited(TripwireTrap))
437 {
438 GetCompEM().SwitchOn();
439 }
440 }
441
442 override bool CanIgniteItem(EntityAI ignite_target = NULL)
443 {
444 return GetCompEM().IsWorking();
445 }
446
448 {
449 super.OnVariablesSynchronized();
450
452 }
453
454 override void SetActions()
455 {
456 super.SetActions();
457
462 }
463};
AttachActionData ActionData ActionAttach()
Определения ActionAttach.c:9
void ActionDetach()
Определения ActionDetach.c:10
ActionLightItemOnFireCB ActionContinuousBaseCB ActionLightItemOnFire()
Определения ActionLightItemOnFire.c:11
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
DayZGame g_Game
Определения DayZGame.c:4074
float GetEnergy()
Определения ItemBase.c:3613
class NoiseSystem NoiseParams()
Определения Noise.c:18
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
Определения ParticleManager.c:88
RoadflareModelStates
Определения Roadflare.c:17
@ UNCAPPED_UNIGNITED
Определения Roadflare.c:19
@ UNCAPPED_BURNED_OUT
Определения Roadflare.c:21
@ UNCAPPED_IGNITED
Определения Roadflare.c:20
RoadflareBurningState
Определения Roadflare.c:8
@ SMOKE_ONLY
Определения Roadflare.c:13
@ MAIN_BURN
Определения Roadflare.c:11
@ FINAL_BURN
Определения Roadflare.c:12
@ INITIAL_BURN
Определения Roadflare.c:10
@ NOT_BURNING
Определения Roadflare.c:9
void TripwireTrap()
Определения Trap_TripWire.c:23
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
void SetWiggle(float random_angle, float random_interval)
Makes the particle change direction by random_angle every random_interval seconds.
Определения Particle.c:775
void Stop()
Legacy function for backwards compatibility with 1.14 and below.
Определения Particle.c:266
Legacy way of using particles in the game.
Определения Particle.c:7
static const int ROADFLARE_BURNING_INIT
Определения ParticleList.c:91
static const int ROADFLARE_BURNING_SMOKE
Определения ParticleList.c:94
static const int ROADFLARE_BURNING_ENDING
Определения ParticleList.c:93
static const int ROADFLARE_BURNING_MAIN
Определения ParticleList.c:92
Определения ParticleList.c:12
void DestroyParticle(Particle p)
Определения Roadflare.c:362
override bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения Roadflare.c:118
const int FINAL_BURNING_STATE_TIME
Определения Roadflare.c:28
int PARTICLE_INIT_FIRE
Определения Roadflare.c:41
override bool CanPutInCargo(EntityAI parent)
Определения Roadflare.c:412
void DestroyAllParticles()
Определения Roadflare.c:378
override void SetActions()
Определения Roadflare.c:454
static const string EXTINGUISHED_TIP
Определения Roadflare.c:65
static const int SELECTION_Pristine
Определения Roadflare.c:69
void UpdateActiveParticles()
Определения Roadflare.c:305
override void OnStoreSave(ParamsWriteContext ctx)
Определения Roadflare.c:111
static const string DEFAULT_TEXTURE
Определения Roadflare.c:72
void StopSmoking()
Определения Roadflare.c:387
void SetModelState(int enum_state)
Определения Roadflare.c:88
EffectSound m_BurningSound
Определения Roadflare.c:47
static const int SELECTION_Burned_out
Определения Roadflare.c:68
static const string UNIGNITED_TIP
Определения Roadflare.c:63
const int BURNING_NOISE_RANGE
Определения Roadflare.c:51
static const int SELECTION_All
Определения Roadflare.c:70
void Roadflare()
Определения Roadflare.c:82
vector m_FlameLocalPos
Определения Roadflare.c:29
void SetBurningStateSynchronized(int state_number)
Определения Roadflare.c:212
ref NoiseParams m_NoisePar
Определения Roadflare.c:79
void UpdateModelSelections()
Определения Roadflare.c:132
static const string IGNITED_TIP
Определения Roadflare.c:64
override void OnWorkStart()
Определения Roadflare.c:190
static const int SELECTION_Burning
Определения Roadflare.c:67
override void OnVariablesSynchronized()
Определения Roadflare.c:447
const string IGNITE_SOUND
Определения Roadflare.c:50
static const string BURNING_TEXTURE
Определения Roadflare.c:73
void DestroyParticleEx(out Particle p)
Определения Roadflare.c:371
int m_ModelState
Определения Roadflare.c:57
Particle m_ParMainFire
Определения Roadflare.c:37
override bool CanIgniteItem(EntityAI ignite_target=NULL)
Определения Roadflare.c:442
void SetBurningState(int state_number)
Определения Roadflare.c:206
const int INITIAL_BURNING_STATE_TIME
Определения Roadflare.c:27
RoadflareLight m_Light
Определения Roadflare.c:33
override void EEDelete(EntityAI parent)
Определения Roadflare.c:94
int PARTICLE_FINAL_FIRE
Определения Roadflare.c:43
static const string BURNING_MATERIAL
Определения Roadflare.c:76
float m_NoiseTimer
Определения Roadflare.c:80
const string BURNING_SOUND
Определения Roadflare.c:49
override void OnInventoryEnter(Man player)
Определения Roadflare.c:426
static const string DEFAULT_MATERIAL
Определения Roadflare.c:75
override void OnInventoryExit(Man player)
Определения Roadflare.c:394
static const string STANDS_FOLDED
Определения Roadflare.c:60
static const string FLARE_CAP
Определения Roadflare.c:62
int PARTICLE_FINAL_SMOKE
Определения Roadflare.c:44
override void OnActivatedByItem(notnull ItemBase item)
Определения Roadflare.c:434
int m_BurningState
Определения Roadflare.c:30
override void OnWorkStop()
Определения Roadflare.c:264
EffectSound m_IgniteSound
Определения Roadflare.c:48
override void OnWork(float consumed_energy)
Определения Roadflare.c:222
Particle m_ParFinalFire
Определения Roadflare.c:38
Particle m_ParJustSmoke
Определения Roadflare.c:39
ref Timer m_FinalSmokeTimer
Определения Roadflare.c:54
Particle m_ParInitialFire
Определения Roadflare.c:36
int PARTICLE_MAIN_FIRE
Определения Roadflare.c:42
static const string STANDS_UNFOLDED
Определения Roadflare.c:61
static void DestroyEffect(Effect effect)
Unregisters, stops and frees the Effect.
Определения EffectManager.c:280
Manager class for managing Effect (EffectParticle, EffectSound)
Определения EffectManager.c:6
proto bool Write(void value_out)
proto bool Read(void value_in)
Определения DayZPlayerImplement.c:39
Определения EnConvert.c:119
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16
@ DEFAULT
Определения DebugTextFlags.c:9
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
const int CALL_CATEGORY_SYSTEM
Определения 3_Game/DayZ/tools/tools.c:8