View difference between Paste ID: 9eidHiC5 and RT3yBDzM
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