necr 1.2-1.3
8 removals
170 lines
11 additions
173 lines
Scriptname hzNECRAliasScript extends ReferenceAlias
Scriptname hzNECRAliasScript extends ReferenceAlias
Actor Property PlayerRef Auto
Actor Property PlayerRef Auto
Ammo Property hzNECRDummyArrow Auto
Ammo Property hzNECRDummyArrow Auto
GlobalVariable Property hzNECRBoltLoaded Auto
GlobalVariable Property hzNECRBoltLoaded Auto
GlobalVariable Property hzNECRAutoReload Auto
GlobalVariable Property hzNECRAutoReload Auto
GlobalVariable Property hzNECRStaminaMult Auto
GlobalVariable Property hzNECRStaminaMult Auto
MagicEffect Property hzNECRStaminaPerkME Auto
MagicEffect Property hzNECRStaminaPerkME Auto
Message Property hzNECRInitMsg Auto
Message Property hzNECRInitMsg Auto
Message Property hzNECRInitDelayedMsg Auto
Message Property hzNECRInitDelayedMsg Auto
Message Property hzNECRRaceSwitchMsgBox Auto
Message Property hzNECRRaceSwitchMsgBox Auto
Spell Property hzNECRStaminaDrainSpell Auto
Spell Property hzNECRStaminaDrainSpell Auto
Ammo LastAmmo
Ammo LastAmmo
Bool bSKSE
Bool bSKSE
Float fStaminaCost
;--INIT STATE--
;--INIT STATE--
Event OnInit()
Event OnInit()
if PlayerRef.GetEquippedItemType(0) == 12
if PlayerRef.GetEquippedItemType(0) == 12
GoToState("Main")
GoToState("Main")
else
else
hzNECRInitDelayedMsg.Show()
hzNECRInitDelayedMsg.Show()
endif
endif
EndEvent
EndEvent
Event OnObjectEquipped(Form akBaseObject, ObjectReference akReference)
Event OnObjectEquipped(Form akBaseObject, ObjectReference akReference)
if akBaseObject as Weapon && PlayerRef.GetEquippedItemType(0) == 12
if akBaseObject as Weapon && PlayerRef.GetEquippedItemType(0) == 12
GoToState("Main")
GoToState("Main")
endif
endif
EndEvent
EndEvent
;--MAIN STATE--
;--MAIN STATE--
State Main
State Main
Event OnBeginState()
Event OnBeginState()
Utility.Wait(0.1)
Utility.Wait(0.1)
PlayerRef.AddItem(hzNECRDummyArrow, 1, 1)
PlayerRef.AddItem(hzNECRDummyArrow, 1, 1)
Utility.Wait(0.5)
Utility.Wait(0.5)
PlayerRef.EquipItem(hzNECRDummyArrow, 0, 1)
PlayerRef.EquipItem(hzNECRDummyArrow, 0, 1)
Utility.Wait(0.5)
Utility.Wait(0.5)
PlayerRef.RemoveItem(hzNECRDummyArrow, 1, 1)
PlayerRef.RemoveItem(hzNECRDummyArrow, 1, 1)
RegisterForAnimationEvent(PlayerRef, "arrowRelease")
RegisterForAnimationEvent(PlayerRef, "arrowRelease")
RegisterForAnimationEvent(PlayerRef, "reload")
RegisterForAnimationEvent(PlayerRef, "reload")
RegisterForAnimationEvent(PlayerRef, "ReloadFast")
RegisterForAnimationEvent(PlayerRef, "ReloadFast")
RegisterForAnimationEvent(PlayerRef, "reloadStop")
RegisterForAnimationEvent(PlayerRef, "reloadStop")
RegisterForAnimationEvent(PlayerRef, "arrowAttach")
RegisterForAnimationEvent(PlayerRef, "arrowAttach")
RegisterForAnimationEvent(PlayerRef, "WeapEquip_Out")
RegisterForAnimationEvent(PlayerRef, "WeapEquip_Out")
SKSECheck()
SKSECheck()
hzNECRInitMsg.Show()
hzNECRInitMsg.Show()
EndEvent
EndEvent
Event OnRaceSwitchComplete()
Event OnRaceSwitchComplete()
Utility.Wait(0.1)
Utility.Wait(0.1)
UnRegisterForAnimationEvent(PlayerRef, "arrowRelease")
UnRegisterForAnimationEvent(PlayerRef, "arrowRelease")
UnRegisterForAnimationEvent(PlayerRef, "reload")
UnRegisterForAnimationEvent(PlayerRef, "reload")
UnRegisterForAnimationEvent(PlayerRef, "ReloadFast")
UnRegisterForAnimationEvent(PlayerRef, "ReloadFast")
UnRegisterForAnimationEvent(PlayerRef, "reloadStop")
UnRegisterForAnimationEvent(PlayerRef, "reloadStop")
UnRegisterForAnimationEvent(PlayerRef, "arrowAttach")
UnRegisterForAnimationEvent(PlayerRef, "arrowAttach")
UnRegisterForAnimationEvent(PlayerRef, "WeapEquip_Out")
UnRegisterForAnimationEvent(PlayerRef, "WeapEquip_Out")
Utility.Wait(0.1)
Utility.Wait(0.1)
RegisterForAnimationEvent(PlayerRef, "arrowRelease")
RegisterForAnimationEvent(PlayerRef, "arrowRelease")
RegisterForAnimationEvent(PlayerRef, "reload")
RegisterForAnimationEvent(PlayerRef, "reload")
RegisterForAnimationEvent(PlayerRef, "ReloadFast")
RegisterForAnimationEvent(PlayerRef, "ReloadFast")
RegisterForAnimationEvent(PlayerRef, "reloadStop")
RegisterForAnimationEvent(PlayerRef, "reloadStop")
RegisterForAnimationEvent(PlayerRef, "arrowAttach")
RegisterForAnimationEvent(PlayerRef, "arrowAttach")
RegisterForAnimationEvent(PlayerRef, "WeapEquip_Out")
RegisterForAnimationEvent(PlayerRef, "WeapEquip_Out")
if PlayerRef.GetAnimationVariableInt("i1stPerson") == 1
if PlayerRef.GetAnimationVariableInt("i1stPerson") == 1
hzNECRRaceSwitchMsgBox.Show()
hzNECRRaceSwitchMsgBox.Show()
endif
endif
EndEvent
EndEvent
Event OnAnimationEvent(ObjectReference akSource, string asEventName)
Event OnAnimationEvent(ObjectReference akSource, string asEventName)
if PlayerRef.GetEquippedItemType(0) == 12
if PlayerRef.GetEquippedItemType(0) == 12
if PlayerRef.GetAnimationVariableBool("IsEquipping")
if PlayerRef.GetAnimationVariableBool("IsEquipping")
if asEventName == "arrowAttach" && ReloadCondition()
if asEventName == "arrowAttach" && ReloadCondition()
PlayerRef.UnequipItem(LastAmmo, 0, 1)
PlayerRef.UnequipItem(LastAmmo, 0, 1)
Utility.Wait(0.01)
Utility.Wait(0.01)
PlayerRef.EquipItem(LastAmmo, 0, 1)
PlayerRef.EquipItem(LastAmmo, 0, 1)
elseif asEventName == "WeapEquip_Out"
elseif asEventName == "WeapEquip_Out"
AutoReload()
AutoReload()
endif
endif
else
else
if hzNECRBoltLoaded.GetValueInt() != 0 && asEventName == "arrowRelease"
if hzNECRBoltLoaded.GetValueInt() != 0 && asEventName == "arrowRelease"
hzNECRBoltLoaded.SetValueInt(0)
hzNECRBoltLoaded.SetValueInt(0)
Debug.SendAnimationEvent(PlayerRef, "attackStop")
Debug.SendAnimationEvent(PlayerRef, "attackStop")
AutoReload()
AutoReload()
; debug.messagebox("shot")
; debug.messagebox("shot")
elseif asEventName == "reload" || asEventName == "ReloadFast"
elseif asEventName == "reload" || asEventName == "ReloadFast"
hzNECRBoltLoaded.SetValueInt(0)
hzNECRBoltLoaded.SetValueInt(0)
if bSKSE
if bSKSE
CalculateStaminaCost()
hzNECRStaminaDrainSpell.SetNthEffectMagnitude(0, StaminaCost())
hzNECRStaminaDrainSpell.SetNthEffectMagnitude(0, fStaminaCost)
endif
endif
hzNECRStaminaDrainSpell.Cast(PlayerRef, PlayerRef)
hzNECRStaminaDrainSpell.Cast(PlayerRef, PlayerRef)
; debug.messagebox("reload start")
; debug.messagebox("reload start")
elseif asEventName == "reloadStop"
elseif asEventName == "reloadStop"
hzNECRBoltLoaded.SetValueInt(1)
hzNECRBoltLoaded.SetValueInt(1)
PlayerRef.DispelSpell(hzNECRStaminaDrainSpell)
PlayerRef.DispelSpell(hzNECRStaminaDrainSpell)
; debug.messagebox("reloaded")
; debug.messagebox("reloaded")
endif
endif
endif
endif
endif
endif
EndEvent
EndEvent
Event OnObjectEquipped(Form akBaseObject, ObjectReference akReference)
Event OnObjectEquipped(Form akBaseObject, ObjectReference akReference)
if akBaseObject as Ammo
if akBaseObject as Ammo
LastAmmo = akBaseObject as Ammo
LastAmmo = akBaseObject as Ammo
endif
endif
EndEvent
EndEvent
Event OnObjectUnEquipped(Form akBaseObject, ObjectReference akReference)
Event OnObjectUnEquipped(Form akBaseObject, ObjectReference akReference)
if akBaseObject as Weapon
if akBaseObject as Weapon
PlayerRef.DispelSpell(hzNECRStaminaDrainSpell)
PlayerRef.DispelSpell(hzNECRStaminaDrainSpell)
endif
endif
EndEvent
EndEvent
Event OnPlayerLoadGame()
Event OnPlayerLoadGame()
SKSECheck()
SKSECheck()
if ReloadCondition()
if ReloadCondition()
Debug.SendAnimationEvent(PlayerRef, "reloadStart")
Debug.SendAnimationEvent(PlayerRef, "reloadStart")
endif
endif
EndEvent
EndEvent
EndState
EndState
;--FUNCTIONS--
;--FUNCTIONS--
Function SKSECheck()
Function SKSECheck()
bSKSE = False
bSKSE = False
if SKSE.GetVersion()
if SKSE.GetVersion()
bSKSE = True
bSKSE = True
endif
endif
EndFunction
EndFunction
Function AutoReload()
Function AutoReload()
if hzNECRAutoReload.GetValueInt() == 1 && ReloadCondition()
if hzNECRAutoReload.GetValueInt() == 1 && ReloadCondition()
Utility.Wait(0.25)
Utility.Wait(0.25)
Debug.SendAnimationEvent(PlayerRef, "reloadStart")
Debug.SendAnimationEvent(PlayerRef, "reloadStart")
endif
endif
EndFunction
EndFunction
Function CalculateStaminaCost()
float Function StaminaCost()
fStaminaCost = PlayerRef.GetEquippedWeapon().GetWeight()
Float fStaminaCost = PlayerRef.GetEquippedWeapon().GetWeight()
if PlayerRef.HasMagicEffect(hzNECRStaminaPerkME)
if PlayerRef.HasMagicEffect(hzNECRStaminaPerkME)
fStaminaCost = fStaminaCost*0.7
fStaminaCost = fStaminaCost*0.7
endif
endif
fStaminaCost = (fStaminaCost - ((fStaminaCost/200)*PlayerRef.GetAv("Marksman")))*hzNECRStaminaMult.GetValue()
Int iSkill = PlayerRef.GetAv("Marksman") as Int
if iSkill > 100
iSkill = 100
endif
fStaminaCost = (fStaminaCost - ((fStaminaCost/200)*iSkill))*hzNECRStaminaMult.GetValue()
; debug.notification("Stamina cost is "+ fStaminaCost +"")
; debug.notification("Stamina cost is "+ fStaminaCost +"")
return fStaminaCost
EndFunction
EndFunction
bool Function ReloadCondition()
bool Function ReloadCondition()
if hzNECRBoltLoaded.GetValueInt() == 0 && PlayerRef.GetEquippedItemType(0) == 12 && PlayerRef.IsEquipped(LastAmmo)
if hzNECRBoltLoaded.GetValueInt() == 0 && PlayerRef.GetEquippedItemType(0) == 12 && PlayerRef.IsEquipped(LastAmmo)
return True
return True
else
else
return False
return False
endif
endif
EndFunction
EndFunction