DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Land_WarheadStorage_Main.c
См. документацию.
2{
3 protected bool m_HasPowerPrev;
4 protected bool m_IsLowEnergy;
5 protected WarheadStorageLight m_StorageDoorLights[4];
9
10 protected const float DOOR_AUTOCLOSE_TIME = 12;//how long before the outer door auto-close after being opened
11 protected const int SOURCES_COUNT = 4; // storage lights, side vents, lamps
12
13 protected const string WARHEAD_BUNKER_TRIGGER = "UndergroundBunkerTrigger";
14
15 protected const string ALARM_POS_MEMPOINT = "underground";
16 protected const string VENT_MAIN_POS_MEMPOINT = "Ventilation_main";
17 protected const string VENT_POS_MEMPOINT = "Ventilation";
18
19 protected const string ALARM_DOOR_OPEN_SOUND = "UndergroundDoor_Alarm_Start_SoundSet";
20 protected const string ALARM_DOOR_OPEN_LOOP_SOUND = "UndergroundDoor_Alarm_Loop_SoundSet";
21 protected const string ALARM_DOOR_CLOSE_SOUND = "UndergroundDoor_Alarm_End_SoundSet";
22 protected const string VENTILATION_SOUND = "Bunker_Ventilation_SoundSet";
23 protected const string LAMPS_SOUND = "Bunker_Lamp_Hum_SoundSet";
24 protected const string ELECTRICITY_ON_SOUND = "Bunker_bunker_electricity_on_SoundSet";
25 protected const string ELECTRICITY_OFF_SOUND = "Bunker_bunker_electricity_off_SoundSet";
26
27 protected const string LAMP_SELECTION = "GlassLamp";
28 protected const string MAIN_DOOR_SELECTION1 = "maindoor1_outer";
29 protected const string MAIN_DOOR_SELECTION2 = "maindoor2_outer";
30
31 protected const string COLOR_LAMP_OFF = "DZ\\structures_sakhal\\military\\storage\\data\\Warhead_Storage_Lamp_Glass_int.rvmat";
32 protected const string COLOR_LAMP_ON = "DZ\\structures_sakhal\\military\\storage\\data\\Warhead_Storage_Lamp_Glass_e_int.rvmat";
33
34 // sync
35 protected bool m_HasPower;
36 protected bool m_LeverStatesBits;
37
39 {
40 RegisterNetSyncVariableBool("m_HasPower");
41 RegisterNetSyncVariableInt("m_LeverStatesBits");
42 RegisterNetSyncVariableInt("m_IsLowEnergy");
43
45 #ifndef SERVER
47 #endif
48 }
49
51 {
53
54 for (int i; i < 4; i++)
55 {
57 m_StorageDoorLights[i].Destroy();
58 }
59 }
60
61 override void DeferredInit()
62 {
64
65 if (GetGame().IsServer())
66 {
67 UpdateDoorStateServer(); // init closed state - code randomization? of opened state messes with doors in general
68 for (int i = 0; i < 12; i++)
69 {
70 if (IsBunkerDoor(i))
72 }
73 }
74 }
75
76 void SetPowerServer(bool hasPower)
77 {
78 m_HasPower = hasPower;
79 SetSynchDirty();
80 }
81
82 void SetLeverStatesServer(int leverBits)
83 {
84 m_LeverStatesBits = leverBits;
85 SetSynchDirty();
86
88 }
89
90 void SetLowEnergyStateServer(bool state)
91 {
92 m_IsLowEnergy = state;
93 SetSynchDirty();
94 }
95
97 {
98 return m_IsLowEnergy;
99 }
100
101 protected void OnPowerOnClient()
102 {
103 EffectSound soundEff;
104 PlaySoundSetAtMemoryPoint(soundEff, VENTILATION_SOUND, VENT_MAIN_POS_MEMPOINT, true, 0.5, 0.5);
105 m_PoweredSoundEffects.Insert(soundEff);
106 soundEff.SetAutodestroy(true);
107
108 PlaySoundSetAtMemoryPoint(soundEff, ELECTRICITY_ON_SOUND, VENT_MAIN_POS_MEMPOINT, false);
109 soundEff.SetAutodestroy(true);
110
111 for (int i; i < SOURCES_COUNT; i++)
112 {
113 PlaySoundSetAtMemoryPoint(soundEff, VENTILATION_SOUND, VENT_POS_MEMPOINT + (i+1).ToString(), true, 0.5, 0.5);
114 m_PoweredSoundEffects.Insert(soundEff);
115 soundEff.SetAutodestroy(true);
116 PlaySoundSetAtMemoryPoint(soundEff, LAMPS_SOUND, "lamp" + (i+1).ToString() + "_pos", true, 0.1, 0.1);
117 m_PoweredSoundEffects.Insert(soundEff);
118 soundEff.SetAutodestroy(true);
119 }
120 }
121
122 protected void OnPowerOffClient()
123 {
124 foreach (EffectSound soundEff : m_PoweredSoundEffects)
125 {
126 if (soundEff)
127 soundEff.Stop();
128 }
129
130 PlaySoundSetAtMemoryPoint(soundEff, ELECTRICITY_OFF_SOUND, VENT_MAIN_POS_MEMPOINT, false);
131 soundEff.SetAutodestroy(true);
132
133 m_PoweredSoundEffects.Clear();
134 }
135
136
137 override void OnDoorOpenStart(DoorStartParams params)
138 {
139 #ifndef SERVER
140 if (IsBunkerDoor(params.param1))
141 {
142 EffectSound sound;
143 PlaySoundSetAtMemoryPoint(sound, ALARM_DOOR_OPEN_SOUND, ALARM_POS_MEMPOINT, false, 0, 0);
144 sound.SetAutodestroy(true);
145
146 int effectID = GetBunkerEffectIndexByDoor(params.param1);
147 PlaySoundSetAtMemoryPoint(sound, ALARM_DOOR_OPEN_LOOP_SOUND, ALARM_POS_MEMPOINT, true, 0, 0);
148 m_SoundDoorLoop[effectID] = sound;
149 m_SoundDoorLoop[effectID].SetAutodestroy(true);
150 }
151 #endif
152
153 if (!IsBunkerDoor(params.param1))
154 return;
155
158
159 Timer doorTimer = new Timer();
160 doorTimer.Run(DOOR_AUTOCLOSE_TIME, this, "AutoCloseDoor", new Param1<int>(params.param1));
161 m_AutoCloseTimers.Set(params.param1, doorTimer);
162 }
163
164 override void OnDoorOpenFinish(DoorFinishParams params)
165 {
166 #ifndef SERVER
167 if (IsBunkerDoor(params.param1))
168 {
169 int effectID = GetBunkerEffectIndexByDoor(params.param1);
170 if (m_SoundDoorLoop[effectID] && m_SoundDoorLoop[effectID].IsPlaying())
171 {
172 EffectSound sound = m_SoundDoorLoop[effectID];
173 StopSoundSet(sound);
174 }
175 }
176 #endif
177 }
178
179 protected void RemoveDoorTimer(int doorIndex)
180 {
181 if (!IsBunkerDoor(doorIndex))
182 return;
183
185 {
186 m_AutoCloseTimers.Remove(doorIndex);
187 }
188 }
189
190 override void OnDoorCloseStart(DoorStartParams params)
191 {
192 #ifndef SERVER
193 if (IsBunkerDoor(params.param1))
194 {
195 EffectSound sound;
196 int effectID = GetBunkerEffectIndexByDoor(params.param1);
197 if (m_SoundDoorLoop[effectID] && m_SoundDoorLoop[effectID].IsPlaying()) // in case events fire in wrong order
198 {
199 sound = m_SoundDoorLoop[effectID];
200 StopSoundSet(sound);
201 }
202
203 PlaySoundSetAtMemoryPoint(sound, ALARM_DOOR_OPEN_LOOP_SOUND, ALARM_POS_MEMPOINT, true, 0, 0);
204 m_SoundDoorLoop[effectID] = sound;
205 m_SoundDoorLoop[effectID].SetAutodestroy(true);
206 }
207 #endif
208
209 RemoveDoorTimer(params.param1);
210 }
211
213 {
214 #ifndef SERVER
215 if (IsBunkerDoor(params.param1))
216 {
217 EffectSound sound;
218 PlaySoundSetAtMemoryPoint(sound, ALARM_DOOR_CLOSE_SOUND, ALARM_POS_MEMPOINT, false, 0, 0);
219 sound.SetAutodestroy(true);
220
221 int effectID = GetBunkerEffectIndexByDoor(params.param1);
222 if (m_SoundDoorLoop[effectID] && m_SoundDoorLoop[effectID].IsPlaying())
223 {
224 sound = m_SoundDoorLoop[effectID];
225 StopSoundSet(sound);
226 }
227 }
228 #endif
229 }
230
231 void AutoCloseDoor(int doorIndex)
232 {
233 CloseDoor(doorIndex);
234 RemoveDoorTimer(doorIndex);
235 }
236
238 {
239 for (int index = 1; index <= 4; index++)
240 {
241 int bit = 1 << (index - 1);
242 int doorIndex = GetDoorIndexByLeverIndex(index);
243
244 if ( ((bit & m_LeverStatesBits) != 0) && m_HasPower )
245 {
246 if (!IsDoorOpen(doorIndex))
247 OpenDoor(doorIndex);
248 }
249 else
250 {
251 if (IsDoorOpen(doorIndex))
252 CloseDoor(doorIndex);
253 }
254 }
255 }
256
258 {
259 for (int index = 1; index <= 4; index++)
260 {
261 int bit = 1 << (index - 1);
262 int doorIndex = GetDoorIndexByLeverIndex(index);
263 int lightId = GetStorageLightIndexByDoor(doorIndex);
264
265 if ( ((bit & m_LeverStatesBits) != 0) && m_HasPower )
266 {
267 if (!m_StorageDoorLights[lightId])
268 {
269 m_StorageDoorLights[lightId] = WarheadStorageLight.Cast(ScriptedLightBase.CreateLightAtObjMemoryPoint(WarheadStorageLight, this, "lamp" + (lightId + 1).ToString() + "_pos"));
270 m_StorageDoorLights[lightId].SetSelectionID(GetHiddenSelectionIndex(LAMP_SELECTION + (lightId + 1).ToString()));
271 m_StorageDoorLights[lightId].UpdateLightSourceMaterial(WarheadStorageLight.LIGHT_MAT_ON);
272 }
273 }
274 else
275 {
276 if (m_StorageDoorLights[lightId])
277 {
278 m_StorageDoorLights[lightId].UpdateLightSourceMaterial(WarheadStorageLight.LIGHT_MAT_OFF);
279 m_StorageDoorLights[lightId].Destroy();
280 }
281 }
282 }
283 }
284
285 protected int GetStorageLightIndexByDoor(int doorIndex)
286 {
287 return doorIndex - 8;
288 }
289
290 protected int GetDoorIndexByLeverIndex(int LeverIndex)
291 {
292 switch (LeverIndex)
293 {
294 case 1:
295 return 8;
296
297 case 2:
298 return 9;
299
300 case 3:
301 return 10;
302
303 case 4:
304 return 11;
305 }
306 return -1;
307 }
308
309 override bool CanDoorBeOpened(int doorIndex, bool checkIfLocked = false)
310 {
311 if (!super.CanDoorBeOpened(doorIndex, checkIfLocked))
312 return false;
313
314 switch (doorIndex)
315 {
316 case 4:
317 return IsDoorClosed(4) && IsDoorClosed(5);
318 case 5:
319 return IsDoorClosed(4) && IsDoorClosed(5);
320 case 6:
321 return IsDoorClosed(6) && IsDoorClosed(7);
322 case 7:
323 return IsDoorClosed(6) && IsDoorClosed(7);
324 case 8:
325 case 9:
326 case 10:
327 case 11:
328 return false;
329 }
330 return true;
331 }
332
333 override bool CanDoorBeLocked(int doorIndex)
334 {
335 if (IsStorageDoor(doorIndex) || IsBunkerDoor(doorIndex))
336 return false;
337 return super.CanDoorBeLocked(doorIndex);
338 }
339
340 protected int GetBunkerEffectIndexByDoor(int doorIndex)
341 {
342 return doorIndex - 4;
343 }
344
345 protected bool IsBunkerDoor(int doorIndex)
346 {
347 return (doorIndex >= 4 && doorIndex <= 7);
348 }
349
350 protected bool IsStorageDoor(int doorIndex)
351 {
352 return (doorIndex >= 8 && doorIndex <= 11);
353 }
354
355 override bool CanDoorBeClosed(int doorIndex)
356 {
357 if (IsStorageDoor(doorIndex))
358 return false;
359
360 if (IsBunkerDoor(doorIndex))
361 return IsDoorOpen(doorIndex) && !IsDoorOpening(doorIndex);
362
363 return super.CanDoorBeClosed(doorIndex);
364 }
365
367 {
369 //memory point naming start at 1
370 for (int i = 1; i < count + 1; i++)
371 {
373 string memoryPointNameMin = "darkness_" +i+"_min";
374 string memoryPointNameMax = "darkness_" +i+"_max";
375 vector memPosMin = GetMemoryPointPos(memoryPointNameMin);
376 vector memPosMax = GetMemoryPointPos(memoryPointNameMax);
377 vector triggerSize = memPosMax - memPosMin;
378 vector triggerPosLocal = memPosMin + (triggerSize * 0.5);
379 EUndergroundTriggerType type = EUndergroundTriggerType.INNER;
380 string linkeDoorSelection = "";
381 if (i == 4)
382 {
383 type = EUndergroundTriggerType.TRANSITIONING;
384 linkeDoorSelection = MAIN_DOOR_SELECTION1;
385 }
386 else if (i == 5)
387 {
388 type = EUndergroundTriggerType.TRANSITIONING;
389 linkeDoorSelection = MAIN_DOOR_SELECTION2;
390 }
391
392 data.m_Position = triggerPosLocal;
393 data.m_Size = triggerSize;
394 data.m_Type = type;
395 data.m_LinkedDoorSelection = linkeDoorSelection;
396
397 dataArr.Insert(data);
398 }
399 return dataArr;
400 }
401
402 protected void SpawnTriggers(int count)
403 {
405
406 foreach (UndergroundBunkerTriggerData data:dataArr)
407 {
408 //Debug.DrawSphere(pos , 0.1,Colors.GREEN, ShapeFlags.NOZBUFFER);
409 UndergroundBunkerTrigger trigger = UndergroundBunkerTrigger.Cast(GetGame().CreateObjectEx(WARHEAD_BUNKER_TRIGGER, data.m_Position, ECE_LOCAL ));
410 if (trigger)
411 {
412 vector extMax = data.m_Size * 0.5;
413 vector extMin = -extMax;
414 #ifdef DIAG_DEVELOPER
415 trigger.m_Local = true;
416 #endif
417 AddChild(trigger,-1);
418 trigger.SetExtents(extMin, extMax);
419 trigger.Init(data);
420 }
421 }
422 }
423
424 override string GetDebugText()
425 {
426 string debug_output;
427
428 if( GetGame().IsServer())
429 {
430 debug_output = "IsDoorOpen(4) " + IsDoorOpen(4)+ "\n";
431 debug_output += "IsDoorOpen(5) " + IsDoorOpen(5)+ "\n";
432 debug_output += "IsDoorOpen(6) " + IsDoorOpen(6)+ "\n";
433 debug_output += "IsDoorOpen(7) " + IsDoorOpen(7)+ "\n";
434 }
435 else
436 {
437 debug_output = "this is client";
438 }
439 return debug_output;
440 }
441
442
444 {
445 super.OnVariablesSynchronized();
448 else if(!m_HasPower && m_HasPowerPrev)
450
452
454 }
455}
Param1< int > DoorStartParams
Определения Building.c:1
Param2< int, bool > DoorFinishParams
Определения Building.c:2
const int ECE_LOCAL
Определения CentralEconomy.c:24
map
Определения ControlsXboxNew.c:4
bool IsPlaying()
Returns true when the Effect is playing, false otherwise.
Определения Effect.c:195
proto string ToString()
proto native bool RegisterNetworkStaticObject(Object object)
Static objects cannot be replicated by default (there are too many objects on the map)....
override void SetAutodestroy(bool auto_destroy)
Sets whether Effect automatically cleans up when it stops.
Определения EffectSound.c:603
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
void House()
Определения Building.c:3
override void OnDoorOpenStart(DoorStartParams params)
Определения Land_WarheadStorage_Main.c:137
const string WARHEAD_BUNKER_TRIGGER
Определения Land_WarheadStorage_Main.c:13
void Land_WarheadStorage_Main()
Определения Land_WarheadStorage_Main.c:38
const string ELECTRICITY_OFF_SOUND
Определения Land_WarheadStorage_Main.c:25
const string MAIN_DOOR_SELECTION1
Определения Land_WarheadStorage_Main.c:28
override bool CanDoorBeClosed(int doorIndex)
Определения Land_WarheadStorage_Main.c:355
void SetLeverStatesServer(int leverBits)
Определения Land_WarheadStorage_Main.c:82
const string ELECTRICITY_ON_SOUND
Определения Land_WarheadStorage_Main.c:24
const float DOOR_AUTOCLOSE_TIME
Определения Land_WarheadStorage_Main.c:10
void AutoCloseDoor(int doorIndex)
Определения Land_WarheadStorage_Main.c:231
void ~Land_WarheadStorage_Main()
Определения Land_WarheadStorage_Main.c:50
const string ALARM_DOOR_OPEN_SOUND
Определения Land_WarheadStorage_Main.c:19
void RemoveDoorTimer(int doorIndex)
Определения Land_WarheadStorage_Main.c:179
override bool CanDoorBeOpened(int doorIndex, bool checkIfLocked=false)
Определения Land_WarheadStorage_Main.c:309
override void DeferredInit()
Определения Land_WarheadStorage_Main.c:61
bool IsStorageDoor(int doorIndex)
Определения Land_WarheadStorage_Main.c:350
ref map< int, ref Timer > m_AutoCloseTimers
Определения Land_WarheadStorage_Main.c:8
const string ALARM_POS_MEMPOINT
Определения Land_WarheadStorage_Main.c:15
int GetBunkerEffectIndexByDoor(int doorIndex)
Определения Land_WarheadStorage_Main.c:340
override void OnDoorOpenFinish(DoorFinishParams params)
Определения Land_WarheadStorage_Main.c:164
array< ref UndergroundBunkerTriggerData > GetTriggersData(int count)
Определения Land_WarheadStorage_Main.c:366
EffectSound m_SoundDoorLoop[4]
Определения Land_WarheadStorage_Main.c:6
override bool CanDoorBeLocked(int doorIndex)
Определения Land_WarheadStorage_Main.c:333
void SetLowEnergyStateServer(bool state)
Определения Land_WarheadStorage_Main.c:90
const string COLOR_LAMP_ON
Определения Land_WarheadStorage_Main.c:32
override void OnVariablesSynchronized()
Определения Land_WarheadStorage_Main.c:443
const string LAMP_SELECTION
Определения Land_WarheadStorage_Main.c:27
const string ALARM_DOOR_CLOSE_SOUND
Определения Land_WarheadStorage_Main.c:21
const string LAMPS_SOUND
Определения Land_WarheadStorage_Main.c:23
const string MAIN_DOOR_SELECTION2
Определения Land_WarheadStorage_Main.c:29
void SetPowerServer(bool hasPower)
Определения Land_WarheadStorage_Main.c:76
override void OnDoorCloseStart(DoorStartParams params)
Определения Land_WarheadStorage_Main.c:190
int GetStorageLightIndexByDoor(int doorIndex)
Определения Land_WarheadStorage_Main.c:285
const string ALARM_DOOR_OPEN_LOOP_SOUND
Определения Land_WarheadStorage_Main.c:20
override void OnDoorCloseFinish(DoorFinishParams params)
Определения Land_WarheadStorage_Main.c:212
const string VENT_POS_MEMPOINT
Определения Land_WarheadStorage_Main.c:17
WarheadStorageLight m_StorageDoorLights[4]
Определения Land_WarheadStorage_Main.c:5
const string VENTILATION_SOUND
Определения Land_WarheadStorage_Main.c:22
int GetDoorIndexByLeverIndex(int LeverIndex)
Определения Land_WarheadStorage_Main.c:290
override string GetDebugText()
Определения Land_WarheadStorage_Main.c:424
const string COLOR_LAMP_OFF
Определения Land_WarheadStorage_Main.c:31
ref array< EffectSound > m_PoweredSoundEffects
Определения Land_WarheadStorage_Main.c:7
const string VENT_MAIN_POS_MEMPOINT
Определения Land_WarheadStorage_Main.c:16
const int SOURCES_COUNT
Определения Land_WarheadStorage_Main.c:11
bool IsBunkerDoor(int doorIndex)
Определения Land_WarheadStorage_Main.c:345
void SpawnTriggers(int count)
Определения Land_WarheadStorage_Main.c:402
static void UnregisterBunker(Land_WarheadStorage_Main bunker)
static void RegisterBunker(Land_WarheadStorage_Main bunker)
Определения DayZPlayerImplement.c:63
void Init(UndergroundBunkerTriggerData data)
Определения UndergroundBunkerTrigger.c:13
EUndergroundTriggerType m_Type
Определения UndergroundBunkerTrigger.c:5
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения EnConvert.c:106
proto native CGame GetGame()
proto native void AddChild(Widget child, bool immedUpdate=true)