enderalse/source/scripts/defaultfireweaponscript.psc

143 lines
4.3 KiB
Plaintext
Raw Normal View History

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
if (myQuest.GetStage() >= StageToStopFire)
;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
elseif (myQuest.GetStage() >= StageToStartFire)
;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