Guest User

RDE - Test 2

a guest
Jul 10th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. Projectile Property RDE_Projectile Auto
  9. { the projectile object of the RDE to blow up }
  10.  
  11. bool ammoJustRemoved = false
  12.  
  13. Function Detonate(ObjectReference RDE)
  14. RDE.DamageObject(100.0)
  15. EndFunction
  16.  
  17. Function AmmoRemoved()
  18. ammoJustRemoved = true
  19. StartTimer(0.5, 100)
  20. EndFunction
  21.  
  22. Event OnTimer(int aiTimerID)
  23. If (aiTimerID == 100)
  24. ammoJustRemoved = false
  25. EndIf
  26. EndEvent
  27.  
  28. Event OnEquipped(Actor akActor)
  29. If (akActor == Game.GetPlayer())
  30. RegisterForAnimationEvent(akActor, "WeaponFire")
  31. RegisterForRemoteEvent(akActor, "OnItemRemoved")
  32. EndIf
  33. EndEvent
  34.  
  35. Event OnUnequipped(Actor akActor)
  36. If (akActor == Game.GetPlayer())
  37. UnregisterForAnimationEvent(akActor, "WeaponFire")
  38. UnregisterForRemoteEvent(akActor, "OnItemRemoved")
  39. CancelTimer(100)
  40. EndIf
  41. EndEvent
  42.  
  43. Event OnAnimationEvent(ObjectReference akSource, string asEventName)
  44. If (asEventName == "WeaponFire")
  45. Debug.Trace("Detonator triggered!")
  46. Wait(0.1) ; wait before next check in case removing ammo take some time
  47. If !(ammoJustRemoved)
  48. Debug.Trace("Blowing up RDEs")
  49. ObjectReference[] RDEsToExplode = akSource.FindAllReferencesOfType(RDE_Projectile as Form, WorkingRadius)
  50. int i = 0
  51. While (i < RDEsToExplode.Length)
  52. Detonate(RDEsToExplode[i])
  53. i += 1
  54. EndWhile
  55. Else
  56. Debug.Trace("Boom blocked!")
  57. EndIf
  58. EndIf
  59. EndEvent
  60.  
  61. Event Actor.OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer)
  62. If (akBaseItem == RDE_Mine.GetAmmo())
  63. Debug.Trace("Ammo removed event received!")
  64. AmmoRemoved()
  65. EndIf
  66. EndEvent
Add Comment
Please, Sign In to add comment