necr 1.2-1.3

Created Diff never expires
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