DayZ 1.27
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 ( GetGame() )
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 ( !GetGame().IsServer() || !GetGame().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
201 if ( GetGame().IsServer() )
202 {
203 /*m_NoisePar = new NoiseParams();
204 m_NoisePar.LoadFromPath("cfgVehicles Roadflare NoiseRoadFlare");
205 if ( GetGame().GetWorld().IsNight() )
206 {
207 NoiseSystem noise = GetGame().GetNoiseSystem();
208 if ( noise )
209 {
210 noise.AddNoisePos( this, GetPosition(), m_NoisePar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()) );
211 }
212 }*/
213 }
214
216 SetModelState( RoadflareModelStates.UNCAPPED_IGNITED );
217 }
218
219 // Insert RoadflareBurningState enum index as parameter
220 void SetBurningState(int state_number)
221 {
222 m_BurningState = state_number;
223 }
224
225 // Insert RoadflareBurningState enum index as parameter. Activates server -> client synchronization
226 void SetBurningStateSynchronized(int state_number)
227 {
228 if ( GetGame().IsServer() )
229 {
230 m_BurningState = state_number;
231 SetSynchDirty();
232 }
233 }
234
235 // Every second of the flare burning
236 override void OnWork(float consumed_energy)
237 {
238 if ( GetGame().IsServer() )
239 {
240 float burning_time = GetCompEM().GetEnergyMax() - GetCompEM().GetEnergy();
241
242 // Update burning states
243 if (m_BurningState == RoadflareBurningState.INITIAL_BURN)
244 {
245 if (burning_time >= INITIAL_BURNING_STATE_TIME)
246 {
248 }
249 }
250 else if ( m_BurningState == RoadflareBurningState.MAIN_BURN )
251 {
252 /*if ( GetGame().GetWorld().IsNight() )
253 {
254 NoiseSystem noise = GetGame().GetNoiseSystem();
255 if ( noise )
256 {
257 noise.AddNoisePos( this, GetPosition(), m_NoisePar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
258 }
259 }*/
260
261 if ( burning_time >= GetCompEM().GetEnergyMax() - FINAL_BURNING_STATE_TIME )
262 {
264 }
265 }
266
267 // Burn containers of this roadflare. This might be removed if lit roadflare can't be put into inventory.
268 /*EntityAI container_EAI = GetHierarchyParent();
269
270 if ( container_EAI && container_EAI.IsInherited(ItemBase) && !container_EAI.IsInherited(TripwireTrap) )
271 {
272 ItemBase container_IB = ItemBase.Cast( container_EAI );
273
274 int c_size = container_IB.GetItemSize();
275 if (c_size == 0)
276 c_size = 1;
277
278 container_IB.AddHealth("","",-10/c_size);
279 }*/
280 }
281
283 }
284
285 // When the flare stops burning
286 override void OnWorkStop()
287 {
288 if ( GetGame().IsMissionMainMenu() ) // This is singleplayer main menu so no synchronization here!
289 {
292 }
293 else
294 {
295 if ( GetGame().IsServer() )
296 {
297 //Safeguard if item is turned off by another event than running out of energy
298 if (GetCompEM().GetEnergy() > 0)
299 {
300 if (m_Light)
301 {
302 m_Light.FadeOut();
303 }
305 return;
306 }
308 SetHealth("","",0);
309 }
310
313 m_FinalSmokeTimer.Run(60, this, "StopSmoking", NULL, false);
314 }
315
316
317 if ( m_BurningSound )
318 StopSoundSet( m_BurningSound );
319
320 if (m_Light)
321 m_Light.FadeOut();
322
323 SetModelState( RoadflareModelStates.UNCAPPED_BURNED_OUT );
324 }
325
326 // Updates all (in)active particles
328 {
329 if ( GetGame().IsDedicatedServer() )
330 return;
331
332 switch (m_BurningState)
333 {
334 case RoadflareBurningState.NOT_BURNING:
335
337 break;
338
339 case RoadflareBurningState.INITIAL_BURN:
340
341 if (!m_ParInitialFire)
342 {
344 m_ParInitialFire = ParticleManager.GetInstance().PlayOnObject( PARTICLE_INIT_FIRE, this, m_FlameLocalPos);
345 m_ParInitialFire.SetWiggle( 10, 0.3 );
346 }
347 break;
348
349 case RoadflareBurningState.MAIN_BURN:
350
351 if (!m_ParMainFire)
352 {
353 m_ParMainFire = ParticleManager.GetInstance().PlayOnObject( PARTICLE_MAIN_FIRE, this, m_FlameLocalPos);
354 m_ParMainFire.SetWiggle( 7, 0.3 );
355 }
356
358
359 break;
360
361 case RoadflareBurningState.FINAL_BURN:
362
363 if (!m_ParFinalFire)
364 {
366 m_ParFinalFire = ParticleManager.GetInstance().PlayOnObject( PARTICLE_FINAL_FIRE, this, m_FlameLocalPos);
367 m_ParFinalFire.SetWiggle( 4, 0.3 );
368 }
369 break;
370
371 case RoadflareBurningState.SMOKE_ONLY:
372
373 if (!m_ParJustSmoke)
374 {
376 m_ParJustSmoke = ParticleManager.GetInstance().PlayOnObject( PARTICLE_FINAL_SMOKE, this, m_FlameLocalPos);
377 m_ParJustSmoke.SetWiggle( 2, 0.3 );
378 }
379 break;
380 }
381 }
382
383 // Destroys the given particle
385 {
386 if (p)
387 {
388 p.SetWiggle(0,0);
389 p.Stop();
390 }
391 }
392
394 {
396 p = null;
397 }
398
399 // Destroys all particles
407
408 // Stop releasing final smoke
414
415 // Inventory manipulation
416 override void OnInventoryExit(Man player)
417 {
418 super.OnInventoryExit(player);
419
420 if (m_BurningState != RoadflareBurningState.NOT_BURNING)
421 {
422 HideSelection(STANDS_FOLDED);
423 ShowSelection(STANDS_UNFOLDED);
424
425 if (player)
426 {
427 vector ori_rotate = player.GetOrientation();
428 ori_rotate = ori_rotate + Vector(180, 32, 0);
429 SetOrientation(ori_rotate);
430 }
431 }
432 }
433
434 override bool CanPutInCargo( EntityAI parent )
435 {
436 if ( !super.CanPutInCargo(parent) )
437 return false;
438
439 if ( parent && parent.IsInherited( FireplaceBase ) )
440 return true;
441
442 if ( m_BurningState != RoadflareBurningState.NOT_BURNING )
443 return false;
444
445 return true;
446 }
447
448 override void OnInventoryEnter(Man player)
449 {
450 super.OnInventoryEnter(player);
451
452 HideSelection(STANDS_UNFOLDED);
453 ShowSelection(STANDS_FOLDED);
454 }
455
456 override void OnActivatedByItem(notnull ItemBase item)
457 {
458 if (item.IsInherited(TripwireTrap))
459 {
460 GetCompEM().SwitchOn();
461 }
462 }
463
464 override bool CanIgniteItem(EntityAI ignite_target = NULL)
465 {
466 return GetCompEM().IsWorking();
467 }
468
470 {
471 super.OnVariablesSynchronized();
472
474 }
475
476 override void SetActions()
477 {
478 super.SetActions();
479
484 }
485};
AttachActionData ActionData ActionAttach()
Определения ActionAttach.c:9
void ActionDetach()
Определения ActionDetach.c:10
ActionLightItemOnFireCB ActionContinuousBaseCB ActionLightItemOnFire()
Определения ActionLightItemOnFire.c:11
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
@ DEFAULT
Определения ECrewMemberState.c:3
float GetEnergy()
Определения ItemBase.c:8278
class NoiseSystem NoiseParams()
Определения Noise.c:15
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
Определения Building.c:6
Определения InventoryItem.c:731
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:83
static const int ROADFLARE_BURNING_SMOKE
Определения ParticleList.c:86
static const int ROADFLARE_BURNING_ENDING
Определения ParticleList.c:85
static const int ROADFLARE_BURNING_MAIN
Определения ParticleList.c:84
Определения ParticleList.c:12
void DestroyParticle(Particle p)
Определения Roadflare.c:384
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:434
void DestroyAllParticles()
Определения Roadflare.c:400
override void SetActions()
Определения Roadflare.c:476
static const string EXTINGUISHED_TIP
Определения Roadflare.c:65
static const int SELECTION_Pristine
Определения Roadflare.c:69
void UpdateActiveParticles()
Определения Roadflare.c:327
override void OnStoreSave(ParamsWriteContext ctx)
Определения Roadflare.c:111
static const string DEFAULT_TEXTURE
Определения Roadflare.c:72
void StopSmoking()
Определения Roadflare.c:409
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:226
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:469
const string IGNITE_SOUND
Определения Roadflare.c:50
static const string BURNING_TEXTURE
Определения Roadflare.c:73
void DestroyParticleEx(out Particle p)
Определения Roadflare.c:393
int m_ModelState
Определения Roadflare.c:57
Particle m_ParMainFire
Определения Roadflare.c:37
override bool CanIgniteItem(EntityAI ignite_target=NULL)
Определения Roadflare.c:464
void SetBurningState(int state_number)
Определения Roadflare.c:220
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:448
static const string DEFAULT_MATERIAL
Определения Roadflare.c:75
override void OnInventoryExit(Man player)
Определения Roadflare.c:416
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:456
int m_BurningState
Определения Roadflare.c:30
override void OnWorkStop()
Определения Roadflare.c:286
EffectSound m_IgniteSound
Определения Roadflare.c:48
override void OnWork(float consumed_energy)
Определения Roadflare.c:236
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:271
Manager class for managing Effect (EffectParticle, EffectSound)
Определения EffectManager.c:6
proto bool Write(void value_out)
proto bool Read(void value_in)
Определения DayZPlayerImplement.c:63
Определения EnConvert.c:106
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
const int CALL_CATEGORY_SYSTEM
Определения tools.c:8