4
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

236 lines
7.5 KiB

Scriptname _00E_Class_PerkScript extends ObjectReference
Import Game
;=====================================================================================
; EVENTS
;=====================================================================================
Event OnActivate(ObjectReference akActionRef)
If akActionRef != PlayerREF
Return
EndIf
GoToState("DoNothing")
Int iButton = __Config_DisplayMessage.Show()
If __Config_MultipleLevelsConfirm
__Config_MultipleLevels = True
EndIf
If __Config_MultipleLevels
If __Config_MultipleLevelsTwoLevels
If iButton < 2
TeachPerk()
FinalizeUnlock()
Return
EndIf
Else ; __Config_MultipleLevelsTwoLevels == False
If iButton < 3
If __Config_TeachesTalent
TeachTalent()
Else
TeachPerk()
EndIf
FinalizeUnlock()
Return
EndIf
EndIf
Else ; __Config_MultipleLevels == False
If iButton == 0
TeachFirstPerk()
FinalizeUnlock()
Return
EndIf
EndIf
GoToState("")
EndEvent
State DoNothing
Event OnActivate(ObjectReference akActionRef)
; Do nothing
EndEvent
EndState
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function TeachPerk()
If PlayerREF.HasPerk(__Config_PerkToTeach1) == False
TeachFirstPerk()
ElseIf PlayerREF.HasPerk(__Config_PerkToTeach2) == False
PlayerREF.AddPerk(__Config_PerkToTeach2)
Else
PlayerREF.AddPerk(__Config_PerkToTeach3)
EndIf
EndFunction
Function TeachTalent()
If Game.IsWordUnlocked(__Config_WordToTeach1) == False
PlayerREF.AddShout(__Config_TalentToTeach)
WordToTeach = __Config_WordToTeach1
TeachFirstPerk(False)
ElseIf Game.IsWordUnlocked(__Config_WordToTeach2) == False
WordToTeach = __Config_WordToTeach2
PlayerREF.AddPerk(__Config_PerkToTeach2)
Else
WordToTeach = __Config_WordToTeach3
PlayerREF.AddPerk(__Config_PerkToTeach3)
EndIf
Game.UnlockWord(WordToTeach)
Game.TeachWord(WordToTeach)
SetRecoveryTime(WordToTeach)
EndFunction
Function TeachFirstPerk(Bool bTeachAdditionalPerk = True)
PlayerREF.AddPerk(__Config_PerkToTeach1)
If __Config_QuestToStart
__Config_QuestToStart.Start()
EndIf
If AdditionalPerk && bTeachAdditionalPerk
PlayerREF.AddPerk(AdditionalPerk)
EndIf
If sendModEventOnUnlock
SendModEvent(modEventName)
EndIf
EndFunction
Function SetRecoveryTime(WordOfPower WordToTeach)
{This function handles the issue of cooldowns not depending on the value in the CK but on the duration the player presses the [Shout] key on his keyboard.}
If WordToTeach == __Config_WordToTeach2
__Config_TalentToTeach.SetNthRecoveryTime(0, fRecoveryTime02)
__Config_TalentToTeach.SetNthRecoveryTime(1, fRecoveryTime02)
ElseIf WordToTeach == __Config_WordToTeach3
__Config_TalentToTeach.SetNthRecoveryTime(0, fRecoveryTime03)
__Config_TalentToTeach.SetNthRecoveryTime(1, fRecoveryTime03)
__Config_TalentToTeach.SetNthRecoveryTime(2, fRecoveryTime03)
EndIf
EndFunction
Function PlayVisuals()
;Fix for ERB-1355, somehow _00E_TalentpointsRemaining was not filled in that save game on all perk activators
If _00E_TalentpointsRemaining == None
_00E_TalentpointsRemaining = Game.GetFormFromFile(0x000431FB, "Skyrim.esm") as Message
EndIf
_00E_TalentpointsRemaining.Show(TalentPoints.GetValueInt())
ObjectReference MemoryPoint = Self.GetLinkedRef()
MAGConjureImpact.Play(PlayerREF)
MemoryPoint.PlayAnimation("PlayAnim02")
PlayUnlockAnimationOnLinkedRef(MemoryPoint, TestLine)
PlayUnlockAnimationOnLinkedRef(MemoryPoint, __PerkLine01)
PlayUnlockAnimationOnLinkedRef(MemoryPoint, __PerkLine02)
PlayUnlockAnimationOnLinkedRef(MemoryPoint, __PerkLine03)
PlayUnlockAnimationOnLinkedRef(MemoryPoint, __PerkLine04)
PlayUnlockAnimationOnLinkedRef(MemoryPoint, __PerkLine05)
PlayUnlockAnimationOnLinkedRef(MemoryPoint, __PerkLine06)
GoToState("") ; Time to unlock OnActivate
Sound unlockSound = Game.GetFormFromFile(0x0003A1E7, "Skyrim.esm") as Sound
unlockSound.Play(PlayerREF)
MAGDragonPowerAbsorbManEffect.Play(PlayerREF, 8, MemoryPoint)
_00E_UnlockClassIMOD.Apply()
Utility.Wait(0.1)
_00E_Class_MemoryAbsorbFXS.Play(PlayerREF)
Utility.Wait(3)
_00E_Class_MemoryAbsorbFXS.Stop(PlayerREF)
Utility.Wait(2)
MAGDragonPowerAbsorbManEffect.Stop(PlayerREF)
EndFunction
Function PlayUnlockAnimationOnLinkedRef(ObjectReference MemoryPoint, Keyword linkedKwd)
ObjectReference ref = MemoryPoint.GetLinkedRef(linkedKwd)
If ref
ref.PlayAnimation("Unlock")
EndIf
EndFunction
Function FinalizeUnlock()
TalentPoints.Mod(-1)
PlayerREF.SetAV("dragonsouls", TalentPoints.GetValueInt())
PlayVisuals()
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
bool Property __Config_bValue01 = False Auto
{Whether the talent this perk teaches needs one value (for example, magnitude). Usually true.}
bool Property __Config_bValue02 = False Auto
{Whether the talent this perk teaches needs a second value (for example, duration).}
bool Property __Config_bValue03 = False Auto
{Whether the talent this perk teaches needs third value (for example, distance).}
bool Property sendModEventOnUnlock = False Auto
String Property modEventName = "" Auto
bool Property __Config_MultipleLevels Auto
{Does this perk have multiple levels to teach? ALWAYS true for Talents! Max: 3}
bool Property __Config_MultipleLevelsTwoLevels Auto
{Does this multiple level perk only have two two ranks?}
bool Property __Config_TeachesTalent Auto
{Does this perk/memory teach a talent?}
float Property fRecoveryTime02 Auto
{Set this to the cooldown of the second talent.}
float Property fRecoveryTime03 Auto
{Set this to the cooldown of the third talent.}
Message Property __Config_DisplayMessage Auto
{The corresponding MessageBox to display when this perk is selected}
Perk Property __Config_PerkToTeach1 Auto
{Perk/First rank perk this memory teaches. Always fill!}
Perk Property __Config_PerkToTeach2 Auto
{Second rank of the perk this memory star teaches}
Perk Property __Config_PerkToTeach3 Auto
{Third rank of the perk this memory star teaches}
Perk Property AdditionalPerk Auto
Shout Property __Config_TalentToTeach Auto
{Talent this perk teaches. Leave empty if this perk doesn't teach a talent.}
Quest Property __Config_QuestToStart = None Auto
{When the first perk is added to the player, this quest is started, too}
WordOfPower Property __Config_WordToTeach1 Auto
{1st level of Talent this perk/memory teaches. Leave empty if this perk doesn't teach a talent.}
WordOfPower Property __Config_WordToTeach2 Auto
{2nd level of Talent this perk/memory teaches. Leave empty if this perk doesn't teach a talent.}
WordOfPower Property __Config_WordToTeach3 Auto
{3rd of Talent this perk/memory teaches. Leave empty if this perk doesn't teach a talent.}
WordOfPower Property WordToTeach Auto Hidden
Keyword Property TestLine Auto
Keyword Property __PerkLine01 Auto
Keyword Property __PerkLine02 Auto
Keyword Property __PerkLine03 Auto
Keyword Property __PerkLine04 Auto
Keyword Property __PerkLine05 Auto
Keyword Property __PerkLine06 Auto
Message Property _00E_TalentpointsRemaining Auto
GlobalVariable Property TalentPoints Auto
VisualEffect Property MAGDragonPowerAbsorbManEffect Auto
EffectShader Property _00E_Class_MemoryAbsorbFXS Auto
ImagespaceModifier Property _00E_UnlockClassIMOD Auto
Sound Property MAGConjureImpact Auto
Actor Property PlayerREF Auto
bool Property __Config_MultipleLevelsConfirm Auto