SHOW:
|
|
- or go back to the newest paste.
1 | ScriptName RDE_DetonationScript extends ObjectReference | |
2 | { Detonation Script for RDE. Attached to detonator } | |
3 | ||
4 | float Property WorkingRadius = 10000.0 Auto | |
5 | { what's the trigger range of the detonator } | |
6 | Weapon Property RDE_Mine Auto | |
7 | { the weapon object of the RDE which should be triggered } | |
8 | - | bool blockTrigger = false |
8 | + | |
9 | - | float safetyDelay = 0.5 |
9 | + | |
10 | ||
11 | bool ammoJustRemoved = false | |
12 | ||
13 | Function Detonate(ObjectReference RDE) | |
14 | RDE.DamageObject(100.0) | |
15 | EndFunction | |
16 | ||
17 | Function AmmoRemoved() | |
18 | - | RegisterForAnimationEvent(akActor, "MineThrowStart") |
18 | + | ammoJustRemoved = true |
19 | StartTimer(0.5, 100) | |
20 | EndFunction | |
21 | ||
22 | Event OnTimer(int aiTimerID) | |
23 | If (aiTimerID == 100) | |
24 | ammoJustRemoved = false | |
25 | - | UnregisterForAnimationEvent(akActor, "MineThrowStart") |
25 | + | |
26 | - | CancelTimer(0) |
26 | + | |
27 | ||
28 | Event OnEquipped(Actor akActor) | |
29 | If (akActor == Game.GetPlayer()) | |
30 | RegisterForAnimationEvent(akActor, "WeaponFire") | |
31 | - | If (aiTimerID == 0) |
31 | + | RegisterForRemoteEvent(akActor, "OnItemRemoved") |
32 | - | blockTrigger = false |
32 | + | |
33 | - | GoToState("Waiting") |
33 | + | |
34 | - | ElseIf |
34 | + | |
35 | Event OnUnequipped(Actor akActor) | |
36 | If (akActor == Game.GetPlayer()) | |
37 | - | State Waiting Auto |
37 | + | |
38 | - | Event OnAnimationEvent(ObjectReference akSource, string asEventName) |
38 | + | UnregisterForRemoteEvent(akActor, "OnItemRemoved") |
39 | - | If (asEventName == "MineThrowStart") |
39 | + | CancelTimer(100) |
40 | - | GoToState("Busy") |
40 | + | |
41 | - | blockTrigger = true |
41 | + | |
42 | - | Debug.Trace("Mine thrown, tried blocking boom.") |
42 | + | |
43 | - | StartTimer(safetyDelay, 0) |
43 | + | Event OnAnimationEvent(ObjectReference akSource, string asEventName) |
44 | - | ElseIf (asEventName == "WeaponFire") |
44 | + | If (asEventName == "WeaponFire") |
45 | - | Debug.Trace("Detonator triggered!") |
45 | + | Debug.Trace("Detonator triggered!") |
46 | - | Wait(0.1) ; wait before next check in case both WeaponFire and MineThrowStart are triggered simultainously, so blockTrigger can be set |
46 | + | Wait(0.1) ; wait before next check in case removing ammo take some time |
47 | - | If (!blockTrigger) |
47 | + | If !(ammoJustRemoved) |
48 | - | Debug.Trace("Blowing up RDEs") |
48 | + | Debug.Trace("Blowing up RDEs") |
49 | - | ObjectReference[] RDEsToExplode = akSource.FindAllReferencesOfType(RDE_Projectile as Form, WorkingRadius) |
49 | + | ObjectReference[] RDEsToExplode = akSource.FindAllReferencesOfType(RDE_Projectile as Form, WorkingRadius) |
50 | - | int i = 0 |
50 | + | int i = 0 |
51 | - | While (i < RDEsToExplode.Length) |
51 | + | While (i < RDEsToExplode.Length) |
52 | - | Detonate(RDEsToExplode[i]) |
52 | + | Detonate(RDEsToExplode[i]) |
53 | - | i += 1 |
53 | + | i += 1 |
54 | - | EndWhile |
54 | + | EndWhile |
55 | - | Else |
55 | + | Else |
56 | - | Debug.Trace("Boom blocked!") |
56 | + | Debug.Trace("Boom blocked!") |
57 | - | EndIf |
57 | + | |
58 | EndIf | |
59 | - | EndEvent |
59 | + | |
60 | - | EndState |
60 | + | |
61 | Event Actor.OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) | |
62 | - | State Busy |
62 | + | If (akBaseItem == RDE_Mine.GetAmmo()) |
63 | - | Event OnAnimationEvent(ObjectReference akSource, string asEventName) |
63 | + | Debug.Trace("Ammo removed event received!") |
64 | - | Debug.Trace(asEventName + " prevented from running.") |
64 | + | AmmoRemoved() |
65 | - | EndEvent |
65 | + | |
66 | - | EndState |
66 | + | EndEvent |