2023-12-04 15:02:58 +00:00
|
|
|
Scriptname defaultFireWeaponScript extends ObjectReference
|
|
|
|
{Script for firing projectiles from FireWeaponMarker
|
|
|
|
-The default setting is to fire whatever weapon/ammo you choose infintely, every 4-6 seconds, if the marker is enabled
|
|
|
|
-If you just want it to fire once then set MinWaitTime to 0.0, MaxWaitTime to 0.1, and TimesFired to 1}
|
|
|
|
|
|
|
|
import utility
|
|
|
|
import weapon
|
|
|
|
import debug
|
|
|
|
|
|
|
|
|
|
|
|
;---------------------------
|
|
|
|
;--Hidden Properties
|
|
|
|
;---------------------------
|
|
|
|
int Property TimesFired Auto Hidden
|
|
|
|
{How many times i've already fired}
|
|
|
|
|
|
|
|
bool Property Looping auto hidden
|
|
|
|
{If true I should keep firing}
|
|
|
|
|
|
|
|
float Property WaitTimer Auto hidden
|
|
|
|
{Rand wait time generated based on the Min and Max wait times}
|
|
|
|
|
|
|
|
|
|
|
|
;---------------------------
|
|
|
|
;--Editable Properties
|
|
|
|
;---------------------------
|
|
|
|
int Property TimesToFire = -1 Auto
|
|
|
|
{Maximum number of times you want this to fire once it's enabled. (-1 = until disabled)}
|
|
|
|
|
|
|
|
float Property MaxWaitTime = 6.0 auto
|
|
|
|
{Maximum wait between refire, Default = 6.0}
|
|
|
|
|
|
|
|
float Property MinWaitTime = 4.0 auto
|
|
|
|
{Minimum wait between refire, Default = 4.0}
|
|
|
|
|
|
|
|
weapon Property WeaponType Auto
|
|
|
|
{Type of weapon you want to fire, (ie. "HuntingBow")}
|
|
|
|
|
|
|
|
ammo Property Ammotype Auto
|
|
|
|
{Type of ammo you would like to fire, (ie. "IronArrow")}
|
|
|
|
|
|
|
|
quest Property myQuest Auto
|
|
|
|
{Quest you want to check the stage of}
|
|
|
|
|
|
|
|
int Property StageToStartFire = -1 Auto
|
|
|
|
{Stage of myQuest you want to start firing at}
|
|
|
|
|
|
|
|
int Property StageToStopFire = -1 Auto
|
|
|
|
{Stage of myQuest you want to stop firing at (-1 = until disabled)}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Event OnLoad()
|
|
|
|
; I'm loaded, or have been enabled, so start the fire loop
|
|
|
|
Looping = TRUE
|
|
|
|
GoToState("FireLoop")
|
|
|
|
endEVENT
|
|
|
|
|
|
|
|
Event OnUnload()
|
|
|
|
; I've been unloaded, or disabled. Stop firing
|
|
|
|
Looping = FALSE
|
|
|
|
GoToState("Waiting")
|
|
|
|
endEVENT
|
|
|
|
|
|
|
|
|
|
|
|
auto state Waiting
|
|
|
|
; The state I hang out in while I'm waiting for something to happen.
|
|
|
|
endstate
|
|
|
|
|
|
|
|
|
|
|
|
state FireLoop
|
|
|
|
EVENT OnBeginState()
|
|
|
|
|
|
|
|
While(Looping)
|
|
|
|
;trace(self + "I'm looping...")
|
|
|
|
; Set up what our next wait time will be before firing
|
|
|
|
waitTimer = randomFloat(MinWaitTime, MaxWaitTime)
|
|
|
|
|
|
|
|
wait(waitTimer)
|
|
|
|
|
|
|
|
if (myQuest)
|
|
|
|
; There is a quest set, lets see if it's running
|
|
|
|
if (myQuest.IsRunning())
|
|
|
|
; There is a quest running, lets see if we should be firing
|
2024-01-10 14:08:24 +00:00
|
|
|
if (myQuest.GetCurrentStageID() >= StageToStopFire)
|
2023-12-04 15:02:58 +00:00
|
|
|
;trace(self + " The done stage has been hit. No longer going to fire. Also dropping out of loop")
|
|
|
|
; The quest is at the stop firing stage, so don't fire
|
|
|
|
Looping = False
|
2024-01-10 14:08:24 +00:00
|
|
|
elseif (myQuest.GetCurrentStageID() >= StageToStartFire)
|
2023-12-04 15:02:58 +00:00
|
|
|
;trace(self + " The correct stage is set, I'm going to fire.")
|
|
|
|
; The quest isn't at the stop firing stage yet, but is at the firing stage, so see if we are enabled
|
|
|
|
if (self as ObjectReference).IsEnabled()
|
|
|
|
; We're enabled, start firing
|
|
|
|
;trace(self + " is firing.")
|
|
|
|
WeaponType.fire( self as objectReference, Ammotype) ;I'm enabled so fire.
|
|
|
|
TimesFired += 1
|
|
|
|
else
|
|
|
|
; We're not enabled, so don't fire
|
|
|
|
endif
|
|
|
|
if (TimesToFire != -1)
|
|
|
|
; There is a fire limit set, check to see if we've reached it
|
|
|
|
;trace(self + " has a firing limit of " + TimesToFire + " and has fired " + TimesFired + " so far.")
|
|
|
|
if (TimesFired == TimesToFire)
|
|
|
|
; We've reached our fire limit, stop firing
|
|
|
|
;trace(self + " has reached it's firing limit of " + TimesToFire + ". Stopping fire and while loop.")
|
|
|
|
Looping = False
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
;trace(self + " Has a quest but the start/stop stages aren't set yet.")
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
; The quest isn't running, wait for a bit then check again
|
|
|
|
wait(8)
|
|
|
|
endif
|
|
|
|
|
|
|
|
else
|
|
|
|
; There's no quest set so I'm just going to continue without worrying about quests/stages
|
|
|
|
if (self as ObjectReference).IsEnabled()
|
|
|
|
; I'm enabled, so I'm going to fire
|
|
|
|
WeaponType.fire( self as objectReference, Ammotype)
|
|
|
|
TimesFired += 1
|
|
|
|
else
|
|
|
|
; I'm not enabled, so I'm going to stop firing
|
|
|
|
Looping = False
|
|
|
|
endif
|
|
|
|
if (TimesToFire != -1)
|
|
|
|
; I have a firing limit set, lets see if I've reached it
|
|
|
|
if (TimesFired == TimesToFire)
|
|
|
|
; I've reached my limit, stop firing
|
|
|
|
Looping = False
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
endWhile
|
|
|
|
|
|
|
|
; I'm no longer in the fireloop, time to wait
|
|
|
|
goToState("Waiting")
|
|
|
|
endEvent
|
|
|
|
endstate
|
|
|
|
|