DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Plastic_Explosive.c
См. документацию.
2{
3 protected const string SLOT_TRIGGER = "TriggerRemoteDetonator_Receiver";
4 protected const string ANIM_PHASE_TRIGGER_REMOTE = "TriggerRemote";
5
6 protected bool m_UsedAsCharge;
7
9
11 {
13
14 SetAmmoType("Plastic_Explosive_Ammo");
16
17 RegisterNetSyncVariableInt("m_RAIB.m_PairDeviceNetIdLow");
18 RegisterNetSyncVariableInt("m_RAIB.m_PairDeviceNetIdHigh");
19 }
20
21 override void EOnInit(IEntity other, int extra)
22 {
23 if (!g_Game.IsMultiplayer())
25 }
26
28 override void EEKilled(Object killer)
29 {
30 //analytics (behaviour from EntityAI)
32 }
33
34 override bool HasLockedTriggerSlots()
35 {
36 return GetInventory().GetSlotLock(InventorySlots.GetSlotIdFromString(SLOT_TRIGGER));
37 }
38
39 override void LockTriggerSlots()
40 {
41 GetInventory().SetSlotLock(InventorySlots.GetSlotIdFromString(SLOT_TRIGGER), true);
42 }
43
44 override void UnlockTriggerSlots()
45 {
46 GetInventory().SetSlotLock(InventorySlots.GetSlotIdFromString(SLOT_TRIGGER), false);
47 }
48
49 override bool OnStoreLoad(ParamsReadContext ctx, int version)
50 {
51 if (!super.OnStoreLoad(ctx, version))
52 return false;
53
54 if (version <= 134) // up to 1.21
55 {
57 bool locked = GetInventory().GetSlotLock(slotId);
58 while (locked)
59 {
60 GetInventory().SetSlotLock(slotId, false);
61 locked = GetInventory().GetSlotLock(slotId);
62 }
63 }
64
65 return true;
66 }
67
69 {
70 super.OnStoreSave(ctx);
71
73 }
74
76 {
77 super.OnVariablesSynchronized();
78
79 if (m_RAIB)
80 {
81 m_RAIB.OnVariableSynchronized();
82 }
83
85 UpdateVisuals(GetInventory().FindAttachment(slotId));
86 }
87
88 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
89 {
90 super.EEItemLocationChanged(oldLoc, newLoc);
91
92 if (m_RAIB)
93 {
94 m_RAIB.Pair();
95 }
96 }
97
98 override bool CanReceiveAttachment(EntityAI attachment, int slotId)
99 {
101 GetInventory().GetCurrentInventoryLocation(il);
102 if (il.GetType() != InventoryLocationType.GROUND)
103 {
104 return false;
105 }
106
107 ClockBase timer = ClockBase.Cast(attachment);
108 if (timer && !timer.IsAlarmOn())
109 {
110 return false;
111 }
112
113 return !GetArmed();
114 }
115
116 override bool CanDisplayAttachmentSlot(int slot_id)
117 {
118 string slotName = InventorySlots.GetSlotName(slot_id);
119
120 switch (slotName)
121 {
122 case SLOT_TRIGGER:
123 return FindAttachmentBySlotName(slotName) != null;
124 break;
125 }
126
127 return true;
128 }
129
130 override bool IsTakeable()
131 {
132 return !GetArmed() && super.IsTakeable();
133 }
134
135 override bool IsDeployable()
136 {
137 return !GetArmed();
138 }
139
140 override void SetActions()
141 {
142 super.SetActions();
143
146 }
147
148 override void OnWasAttached(EntityAI parent, int slot_id)
149 {
150 super.OnWasAttached(parent, slot_id);
151
152 m_UsedAsCharge = false;
153
154 if (parent && parent.IsInherited(ExplosivesBase))
155 {
156 m_UsedAsCharge = true;
157 }
158 }
159
160 override void OnWasDetached(EntityAI parent, int slot_id)
161 {
162 super.OnWasDetached(parent, slot_id);
163
164 if (parent && !parent.IsInherited(ExplosivesBase))
165 {
166 m_UsedAsCharge = false;
167 }
168 }
169
170 override bool EEOnDamageCalculated(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
171 {
173 if (damageType == DamageType.EXPLOSION)
174 {
175 return !m_UsedAsCharge;
176 }
177
178 return true;
179 }
180
181 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
182 {
183 super.EEHealthLevelChanged(oldLevel, newLevel, zone);
184
185 if (GetGame().IsServer())
186 {
187 if (newLevel == GameConstants.STATE_RUINED)
188 {
189 for (int attachmentIdx = 0; attachmentIdx < GetInventory().AttachmentCount(); attachmentIdx++)
190 {
191 ItemBase attachment = ItemBase.Cast(GetInventory().GetAttachmentFromIndex(attachmentIdx));
192 if (attachment)
193 {
194 attachment.UnlockFromParent();
195 attachment.SetHealth("", "", 0.0);
196 }
197 }
198
199 SetArmed(false);
200 SetTakeable(true);
201 }
202 }
203 }
204
209
210 override void PairRemote(notnull EntityAI trigger)
211 {
212 m_RAIB.Pair(trigger);
213 }
214
215
217 {
218 return m_RAIB.GetPairDevice();
219 }
220
221 override bool CanBeArmed()
222 {
223 if (!super.CanBeArmed())
224 {
225 return false;
226 }
227
228 return HasLockedTriggerSlots() && !GetArmed();
229 }
230
231 override bool CanBeDisarmed()
232 {
233 return GetArmed();
234 }
235
236 override void OnActivatedByItem(notnull ItemBase item)
237 {
238 if (GetGame().IsServer())
239 {
240 if (GetHealthLevel("") == GameConstants.STATE_RUINED)
241 {
242 return;
243 }
244
245 if (item == this)
246 {
247 SetHealth("", "", 0.0);
249 return;
250 }
251
252 if (m_RAIB.IsPaired() && GetArmed())
253 {
254 if (GetPairDevice() == item)
255 {
256 SetHealth("", "", 0.0);
258 }
259 }
260 }
261 }
262
263 override void OnDisarmed(bool pWithTool)
264 {
265 super.OnDisarmed(pWithTool);
266
267 UnpairRemote();
268 UpdateVisuals(null);
269
270 for (int att = 0; att < GetInventory().AttachmentCount(); att++)
271 {
272 ItemBase attachment = ItemBase.Cast(GetInventory().GetAttachmentFromIndex(att));
273 if (attachment)
274 {
275 attachment.UnlockFromParent();
276 if (attachment.IsInherited(RemoteDetonator))
277 {
278 if (pWithTool)
279 {
280 GetInventory().DropEntity(InventoryMode.SERVER, this, attachment);
281 attachment.SetHealth("", "", 0.0);
282 }
283 else
284 {
285 attachment.Delete();
286 }
287 }
288 }
289 }
290
292 SetTakeable(true);
293 }
294
295 override void EEItemAttached(EntityAI item, string slot_name)
296 {
297 super.EEItemAttached(item, slot_name);
298
299 if (slot_name == SLOT_TRIGGER)
300 OnTriggerAttached(item);
301 }
302
303 override void EEItemDetached(EntityAI item, string slot_name)
304 {
305 super.EEItemDetached(item, slot_name);
306
307 if (slot_name == SLOT_TRIGGER)
308 OnTriggerDetached(item);
309 }
310
311 override void UpdateLED(int pState)
312 {
313 RemoteDetonatorReceiver receiver = RemoteDetonatorReceiver.Cast(FindAttachmentBySlotName(SLOT_TRIGGER));
314 if (receiver)
315 {
316 receiver.UpdateLED(pState, true);
317 }
318 }
319
320 protected void OnTriggerAttached(EntityAI entity)
321 {
322 Arm();
323 UpdateVisuals(entity);
325
326 for (int att = 0; att < GetInventory().AttachmentCount(); att++)
327 {
328 ItemBase attachment = ItemBase.Cast(GetInventory().GetAttachmentFromIndex(att));
329 if (attachment)
330 {
331 attachment.LockToParent();
332 }
333 }
334 }
335
336 protected void OnTriggerDetached(EntityAI entity)
337 {
338 UpdateVisuals(null);
340 }
341
342 protected void UpdateVisuals(EntityAI entity)
343 {
344 if (entity)
345 {
346 SetAnimationPhase(ANIM_PHASE_TRIGGER_REMOTE, 0.0);
347 }
348 else
349 {
350 SetAnimationPhase(ANIM_PHASE_TRIGGER_REMOTE, 1.0);
351 }
352 }
353
354 override string GetDeploySoundset()
355 {
356 return "placePlasticExplosive_SoundSet";
357 }
358
359 override string GetLoopDeploySoundset()
360 {
361 return "plasticexplosive_deploy_SoundSet";
362 }
363
364 override string GetArmSoundset()
365 {
366 return "plasticexplosive_deploy_SoundSet";
367 }
368
369 override string GetDisarmSoundset()
370 {
371 return "ImprovisedExplosive_disarm_SoundSet";
372 }
373
374}
375
376class Plastic_Explosive_Placing : Plastic_Explosive {}
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
Определения Inventory.c:22
PlaceObjectActionReciveData ActionReciveData ActionDeployObject()
Определения ActionDeployObject.c:9
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
PlayerSpawnPreset slotName
void ClockBase()
Определения ClockBase.c:27
void UpdateVisuals()
Определения Construction.c:188
DamageType
exposed from C++ (do not change)
Определения DamageSystem.c:11
DayZGame g_Game
Определения DayZGame.c:3868
void SetArmed(bool state)
Определения ExplosivesBase.c:271
void InitiateExplosion()
Определения ExplosivesBase.c:190
bool GetArmed()
Определения ExplosivesBase.c:266
void SetParticleExplosion(int particle)
Определения ExplosivesBase.c:324
override void UnpairRemote()
Определения ExplosivesBase.c:127
void Arm()
Определения ExplosivesBase.c:237
void SetAmmoType(string pAmmoType)
Определения ExplosivesBase.c:313
void ExplosivesBase()
Определения ExplosivesBase.c:42
InventoryLocationType
types of Inventory Location
Определения InventoryLocation.c:4
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
override void SetTakeable(bool pState)
Определения ItemBase.c:9042
RemoteDetonatorTrigger RemoteDetonator RemoteDetonatorReceiver()
Определения RemoteDetonator.c:227
ERemoteDetonatorLEDState
Определения RemoteDetonator.c:2
void OnEntityKilled(Object killer, EntityAI target)
Определения AnalyticsManagerServer.c:48
AnalyticsManagerServer GetAnalyticsServer()
Определения Game.c:1508
Определения Building.c:6
Определения constants.c:659
Определения EnEntity.c:165
proto native int GetType()
returns type of InventoryLocation
InventoryLocation.
Определения InventoryLocation.c:29
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
static proto native owned string GetSlotName(int id)
converts slot_id to string
provides access to slot configuration
Определения InventorySlots.c:6
Определения InventoryItem.c:731
Определения ObjectTyped.c:2
static const int PLASTIC_EXPLOSION
Определения ParticleList.c:329
Определения ParticleList.c:12
override bool EEOnDamageCalculated(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
Определения Plastic_Explosive.c:170
override void OnStoreSave(ParamsWriteContext ctx)
Определения Plastic_Explosive.c:68
override void EEItemAttached(EntityAI item, string slot_name)
Определения Plastic_Explosive.c:295
override void UpdateLED(int pState)
Определения Plastic_Explosive.c:311
void OnTriggerDetached(EntityAI entity)
Определения Plastic_Explosive.c:336
override EntityAI GetPairDevice()
Определения Plastic_Explosive.c:216
override bool CanBeArmed()
Определения Plastic_Explosive.c:221
override void OnActivatedByItem(notnull ItemBase item)
Определения Plastic_Explosive.c:236
bool m_UsedAsCharge
Определения Plastic_Explosive.c:6
override void OnDisarmed(bool pWithTool)
Определения Plastic_Explosive.c:263
override void LockTriggerSlots()
Определения Plastic_Explosive.c:39
override bool CanBeDisarmed()
Определения Plastic_Explosive.c:231
void OnTriggerAttached(EntityAI entity)
Определения Plastic_Explosive.c:320
override bool CanReceiveAttachment(EntityAI attachment, int slotId)
Определения Plastic_Explosive.c:98
override void PairRemote(notnull EntityAI trigger)
Определения Plastic_Explosive.c:210
override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
Определения Plastic_Explosive.c:88
override string GetDisarmSoundset()
Определения Plastic_Explosive.c:369
override bool IsTakeable()
Определения Plastic_Explosive.c:130
override void EOnInit(IEntity other, int extra)
Определения Plastic_Explosive.c:21
override void OnVariablesSynchronized()
Определения Plastic_Explosive.c:75
void UpdateVisuals(EntityAI entity)
Определения Plastic_Explosive.c:342
override void EEKilled(Object killer)
special behaviour - do not call super from ExplosivesBase
Определения Plastic_Explosive.c:28
const string ANIM_PHASE_TRIGGER_REMOTE
Определения Plastic_Explosive.c:4
override bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения Plastic_Explosive.c:49
override void OnWasDetached(EntityAI parent, int slot_id)
Определения Plastic_Explosive.c:160
override bool CanDisplayAttachmentSlot(int slot_id)
Определения Plastic_Explosive.c:116
override void EEItemDetached(EntityAI item, string slot_name)
Определения Plastic_Explosive.c:303
override bool IsDeployable()
Определения Plastic_Explosive.c:135
override string GetDeploySoundset()
Определения Plastic_Explosive.c:354
override string GetLoopDeploySoundset()
Определения Plastic_Explosive.c:359
override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
Определения Plastic_Explosive.c:181
override void OnWasAttached(EntityAI parent, int slot_id)
Определения Plastic_Explosive.c:148
override RemotelyActivatedItemBehaviour GetRemotelyActivatedItemBehaviour()
Определения Plastic_Explosive.c:205
override void UnlockTriggerSlots()
Определения Plastic_Explosive.c:44
const string SLOT_TRIGGER
Определения Plastic_Explosive.c:3
override void SetActions()
Определения Plastic_Explosive.c:140
override string GetArmSoundset()
Определения Plastic_Explosive.c:364
void Plastic_Explosive()
Определения Plastic_Explosive.c:10
ref RemotelyActivatedItemBehaviour m_RAIB
Определения Plastic_Explosive.c:8
override bool HasLockedTriggerSlots()
Определения Plastic_Explosive.c:34
Определения DamageSystem.c:2
Определения EnConvert.c:106
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
const int STATE_RUINED
Определения constants.c:846