DayZ 1.30
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 }
46
48 {
50
51 for (int i; i < 4; i++)
52 {
54 m_StorageDoorLights[i].Destroy();
55 }
56 }
57
58 override void DeferredInit()
59 {
60 g_Game.RegisterNetworkStaticObject(this);
61
62 if (g_Game.IsServer())
63 {
64 UpdateDoorStateServer(); // init closed state - code randomization? of opened state messes with doors in general
65 for (int i = 0; i < 12; i++)
66 {
67 if (IsBunkerDoor(i))
69
70 }
71
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 #ifndef NO_GUI
141 if (IsBunkerDoor(params.param1))
142 {
143 EffectSound sound;
144 PlaySoundSetAtMemoryPoint(sound, ALARM_DOOR_OPEN_SOUND, ALARM_POS_MEMPOINT, false, 0, 0);
145 sound.SetAutodestroy(true);
146
147 int effectID = GetBunkerEffectIndexByDoor(params.param1);
148 PlaySoundSetAtMemoryPoint(sound, ALARM_DOOR_OPEN_LOOP_SOUND, ALARM_POS_MEMPOINT, true, 0, 0);
149 m_SoundDoorLoop[effectID] = sound;
150 m_SoundDoorLoop[effectID].SetAutodestroy(true);
151 }
152 #endif
153 #endif
154
155 if (!IsBunkerDoor(params.param1))
156 return;
157
160
161 Timer doorTimer = new Timer();
162 doorTimer.Run(DOOR_AUTOCLOSE_TIME, this, "AutoCloseDoor", new Param1<int>(params.param1));
163 m_AutoCloseTimers.Set(params.param1, doorTimer);
164 }
165
166 override void OnDoorOpenFinish(DoorFinishParams params)
167 {
168 #ifndef SERVER
169 #ifndef NO_GUI
170 if (IsBunkerDoor(params.param1))
171 {
172 int effectID = GetBunkerEffectIndexByDoor(params.param1);
173 if (m_SoundDoorLoop[effectID] && m_SoundDoorLoop[effectID].IsPlaying())
174 {
175 EffectSound sound = m_SoundDoorLoop[effectID];
176 StopSoundSet(sound);
177 }
178 }
179 #endif
180 #endif
181 }
182
184 {
185 super.OnSpawnByObjectSpawner(item);
186
187 if (item.customString == string.Empty)
188 return;
189
191 if (jsonData && jsonData.Triggers)
192 {
193 foreach (int index, auto triggerData : jsonData.Triggers)
194 {
195 if (triggerData.CustomSpawn)
196 {
197 //JSON: "customString": "undergroundTriggerTag=TAG_NAME"
198 TStringArray customStringData = new TStringArray();
199 item.customString.Split(";", customStringData);
200
201 foreach (string entry : customStringData)
202 {
203 TStringArray optionValuePair = new TStringArray();
204 entry.Split("=", optionValuePair);
205 if (optionValuePair[0] == "undergroundTriggerTag")
206 {
207 if (optionValuePair[1] == triggerData.Tag)
208 {
209 JsonUndergroundTriggers.SpawnTriggerCarrier(this, index, triggerData);
210 }
211 }
212 }
213 }
214 }
215 }
216 }
217
218 protected void RemoveDoorTimer(int doorIndex)
219 {
220 if (!IsBunkerDoor(doorIndex))
221 return;
222
224 {
225 m_AutoCloseTimers.Remove(doorIndex);
226 }
227 }
228
229 override void OnDoorCloseStart(DoorStartParams params)
230 {
231 #ifndef SERVER
232 #ifndef NO_GUI
233 if (IsBunkerDoor(params.param1))
234 {
235 EffectSound sound;
236 int effectID = GetBunkerEffectIndexByDoor(params.param1);
237 if (m_SoundDoorLoop[effectID] && m_SoundDoorLoop[effectID].IsPlaying()) // in case events fire in wrong order
238 {
239 sound = m_SoundDoorLoop[effectID];
240 StopSoundSet(sound);
241 }
242
243 PlaySoundSetAtMemoryPoint(sound, ALARM_DOOR_OPEN_LOOP_SOUND, ALARM_POS_MEMPOINT, true, 0, 0);
244 m_SoundDoorLoop[effectID] = sound;
245 m_SoundDoorLoop[effectID].SetAutodestroy(true);
246 }
247 #endif
248 #endif
249
250 RemoveDoorTimer(params.param1);
251 }
252
254 {
255 #ifndef SERVER
256 #ifndef NO_GUI
257 if (IsBunkerDoor(params.param1))
258 {
259 EffectSound sound;
260 PlaySoundSetAtMemoryPoint(sound, ALARM_DOOR_CLOSE_SOUND, ALARM_POS_MEMPOINT, false, 0, 0);
261 sound.SetAutodestroy(true);
262
263 int effectID = GetBunkerEffectIndexByDoor(params.param1);
264 if (m_SoundDoorLoop[effectID] && m_SoundDoorLoop[effectID].IsPlaying())
265 {
266 sound = m_SoundDoorLoop[effectID];
267 StopSoundSet(sound);
268 }
269 }
270 #endif
271 #endif
272 }
273
274 void AutoCloseDoor(int doorIndex)
275 {
276 CloseDoor(doorIndex);
277 RemoveDoorTimer(doorIndex);
278 }
279
281 {
282 for (int index = 1; index <= 4; index++)
283 {
284 int bit = 1 << (index - 1);
285 int doorIndex = GetDoorIndexByLeverIndex(index);
286
287 if ( ((bit & m_LeverStatesBits) != 0) && m_HasPower )
288 {
289 if (!IsDoorOpen(doorIndex))
290 OpenDoor(doorIndex);
291 }
292 else
293 {
294 if (IsDoorOpen(doorIndex))
295 CloseDoor(doorIndex);
296 }
297 }
298 }
299
301 {
302 for (int index = 1; index <= 4; index++)
303 {
304 int bit = 1 << (index - 1);
305 int doorIndex = GetDoorIndexByLeverIndex(index);
306 int lightId = GetStorageLightIndexByDoor(doorIndex);
307
308 if ( ((bit & m_LeverStatesBits) != 0) && m_HasPower )
309 {
310 if (!m_StorageDoorLights[lightId])
311 {
312 m_StorageDoorLights[lightId] = WarheadStorageLight.Cast(ScriptedLightBase.CreateLightAtObjMemoryPoint(WarheadStorageLight, this, "lamp" + (lightId + 1).ToString() + "_pos"));
313 m_StorageDoorLights[lightId].SetSelectionID(GetHiddenSelectionIndex(LAMP_SELECTION + (lightId + 1).ToString()));
314 m_StorageDoorLights[lightId].UpdateLightSourceMaterial(WarheadStorageLight.LIGHT_MAT_ON);
315 }
316 }
317 else
318 {
319 if (m_StorageDoorLights[lightId])
320 {
321 m_StorageDoorLights[lightId].UpdateLightSourceMaterial(WarheadStorageLight.LIGHT_MAT_OFF);
322 m_StorageDoorLights[lightId].Destroy();
323 }
324 }
325 }
326 }
327
328 protected int GetStorageLightIndexByDoor(int doorIndex)
329 {
330 return doorIndex - 8;
331 }
332
333 protected int GetDoorIndexByLeverIndex(int LeverIndex)
334 {
335 switch (LeverIndex)
336 {
337 case 1:
338 return 8;
339
340 case 2:
341 return 9;
342
343 case 3:
344 return 10;
345
346 case 4:
347 return 11;
348 }
349 return -1;
350 }
351
352 override bool CanDoorBeOpened(int doorIndex, bool checkIfLocked = false)
353 {
354 if (!super.CanDoorBeOpened(doorIndex, checkIfLocked))
355 return false;
356
357 switch (doorIndex)
358 {
359 case 4:
360 return IsDoorClosed(4) && IsDoorClosed(5);
361 case 5:
362 return IsDoorClosed(4) && IsDoorClosed(5);
363 case 6:
364 return IsDoorClosed(6) && IsDoorClosed(7);
365 case 7:
366 return IsDoorClosed(6) && IsDoorClosed(7);
367 case 8:
368 case 9:
369 case 10:
370 case 11:
371 return false;
372 }
373 return true;
374 }
375
376 override bool CanDoorBeLocked(int doorIndex)
377 {
378 if (IsStorageDoor(doorIndex) || IsBunkerDoor(doorIndex))
379 return false;
380 return super.CanDoorBeLocked(doorIndex);
381 }
382
383 protected int GetBunkerEffectIndexByDoor(int doorIndex)
384 {
385 return doorIndex - 4;
386 }
387
388 protected bool IsBunkerDoor(int doorIndex)
389 {
390 return (doorIndex >= 4 && doorIndex <= 7);
391 }
392
393 protected bool IsStorageDoor(int doorIndex)
394 {
395 return (doorIndex >= 8 && doorIndex <= 11);
396 }
397
398 override bool CanDoorBeClosed(int doorIndex)
399 {
400 if (IsStorageDoor(doorIndex))
401 return false;
402
403 if (IsBunkerDoor(doorIndex))
404 return IsDoorOpen(doorIndex) && !IsDoorOpening(doorIndex);
405
406 return super.CanDoorBeClosed(doorIndex);
407 }
408
409 override string GetDebugText()
410 {
411 string debug_output;
412
413 if( g_Game.IsServer())
414 {
415 debug_output = "IsDoorOpen(4) " + IsDoorOpen(4)+ "\n";
416 debug_output += "IsDoorOpen(5) " + IsDoorOpen(5)+ "\n";
417 debug_output += "IsDoorOpen(6) " + IsDoorOpen(6)+ "\n";
418 debug_output += "IsDoorOpen(7) " + IsDoorOpen(7)+ "\n";
419 }
420 else
421 {
422 debug_output = "this is client";
423 }
424 return debug_output;
425 }
426
427
429 {
430 super.OnVariablesSynchronized();
433 else if(!m_HasPower && m_HasPowerPrev)
435
437
439 }
440}
Param1< int > DoorStartParams
Определения 3_Game/DayZ/Entities/Building.c:1
Param2< int, bool > DoorFinishParams
Определения 3_Game/DayZ/Entities/Building.c:2
DayZGame g_Game
Определения DayZGame.c:4074
bool IsPlaying()
Returns true when the Effect is playing, false otherwise.
Определения Effect.c:197
proto string ToString()
override void SetAutodestroy(bool auto_destroy)
Sets whether Effect automatically cleans up when it stops.
Определения EffectSound.c:607
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
string customString
Определения ObjectSpawner.c:107
static void SpawnParentedTriggers(EntityAI parent)
Определения UndergroundAreaLoader.c:5
ref array< ref JsonUndergroundAreaTriggerData > Triggers
Определения UndergroundAreaLoader.c:3
static void SpawnTriggerCarrier(EntityAI parent, int index, JsonUndergroundAreaTriggerData data)
Определения UndergroundAreaLoader.c:24
override void OnSpawnByObjectSpawner(ITEM_SpawnerObject item)
Определения Land_WarheadStorage_Main.c:183
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:398
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:274
void ~Land_WarheadStorage_Main()
Определения Land_WarheadStorage_Main.c:47
const string ALARM_DOOR_OPEN_SOUND
Определения Land_WarheadStorage_Main.c:19
void RemoveDoorTimer(int doorIndex)
Определения Land_WarheadStorage_Main.c:218
override bool CanDoorBeOpened(int doorIndex, bool checkIfLocked=false)
Определения Land_WarheadStorage_Main.c:352
override void DeferredInit()
Определения Land_WarheadStorage_Main.c:58
bool IsStorageDoor(int doorIndex)
Определения Land_WarheadStorage_Main.c:393
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:383
override void OnDoorOpenFinish(DoorFinishParams params)
Определения Land_WarheadStorage_Main.c:166
EffectSound m_SoundDoorLoop[4]
Определения Land_WarheadStorage_Main.c:6
override bool CanDoorBeLocked(int doorIndex)
Определения Land_WarheadStorage_Main.c:376
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:428
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:229
int GetStorageLightIndexByDoor(int doorIndex)
Определения Land_WarheadStorage_Main.c:328
const string ALARM_DOOR_OPEN_LOOP_SOUND
Определения Land_WarheadStorage_Main.c:20
override void OnDoorCloseFinish(DoorFinishParams params)
Определения Land_WarheadStorage_Main.c:253
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:333
override string GetDebugText()
Определения Land_WarheadStorage_Main.c:409
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:388
static void UnregisterBunker(Land_WarheadStorage_Main bunker)
static void RegisterBunker(Land_WarheadStorage_Main bunker)
Определения DayZPlayerImplement.c:39
static JsonUndergroundTriggers GetData()
Определения UndergroundAreaLoader.c:109
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения Transport.c:70
class array< Class T > TStringArray
void Split(string sample, out array< string > output)
Splits string into array of strings separated by 'sample'.
Определения EnString.c:396
static const string Empty
Определения EnString.c:7