enderalse/scripts/source/_00e_class_perkscript.psc
2021-10-06 00:59:59 +02:00

240 lines
8.1 KiB
Plaintext

Scriptname _00E_Class_PerkScript extends ObjectReference
Import Game
;=====================================================================================
; EVENTS
;=====================================================================================
Event onActivate(ObjectReference akActionRef)
int iButton
iButton = __Config_DisplayMessage.Show()
If __Config_MultipleLevelsConfirm
__Config_MultipleLevels=true
EndIf
If (__Config_MultipleLevels) && !(__Config_MultipleLevelsTwoLevels)
If iButton < 3
If (__Config_TeachesTalent)
TeachTalent()
Elseif !(__Config_TeachesTalent)
TeachPerk()
EndIf
TalentPoints.SetValue(TalentPoints.GetValueInt() - 1)
PlayerREF.SetAV("dragonsouls", TalentPoints.GetValueInt())
PlayVisuals()
EndIf
ElseIf (__Config_MultipleLevels) && (__Config_MultipleLevelsTwoLevels)
If iButton < 2
TeachPerk()
TalentPoints.SetValue(TalentPoints.GetValueInt() - 1)
PlayerREF.SetAV("dragonsouls", TalentPoints.GetValueInt())
PlayVisuals()
EndIf
Elseif !__Config_MultipleLevels
If iButton == 0
PlayerREF.AddPerk(__Config_PerkToTeach1)
If __Config_QuestToStart != None
__Config_QuestToStart.Start()
EndIf
If ( AdditionalPerk )
PlayerREF.AddPerk(AdditionalPerk)
EndIf
If sendModEventOnUnlock
SendModEvent(modEventName)
Endif
TalentPoints.SetValue(TalentPoints.GetValueInt() - 1)
PlayerREF.SetAV("dragonsouls", TalentPoints.GetValueInt())
PlayVisuals()
EndIf
EndIf
EndEvent
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function TeachPerk()
if !(PlayerREF.HasPerk(__Config_PerkToTeach1))
PlayerREF.AddPerk(__Config_PerkToTeach1)
If __Config_QuestToStart != None
__Config_QuestToStart.start()
EndIf
if sendModEventOnUnlock
SendModEvent(modEventName)
Endif
if ( AdditionalPerk )
PlayerREF.AddPerk(AdditionalPerk)
endif
elseif (PlayerREF.HasPerk(__Config_PerkToTeach1)) && !(PlayerREF.HasPerk(__Config_PerkToTeach2))
PlayerREF.AddPerk(__Config_PerkToTeach2)
else
PlayerREF.AddPerk(__Config_PerkToTeach3)
endif
EndFunction
Function TeachTalent()
if !(Game.IsWordUnlocked(__Config_WordToTeach1))
PlayerREF.AddShout(__Config_TalentToTeach)
WordToTeach = __Config_WordToTeach1
PlayerREF.AddPerk(__Config_PerkToTeach1)
If __Config_QuestToStart != None
__Config_QuestToStart.start()
EndIf
if sendModEventOnUnlock
SendModEvent(modEventName)
Endif
elseif (Game.IsWordUnlocked(__Config_WordToTeach1)) && !(Game.IsWordUnlocked(__Config_WordToTeach2))
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 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() as Int)
ObjectReference MemoryPoint = Self.GetLinkedRef()
MAGConjureImpact.Play(PlayerREF)
MemoryPoint.PlayAnimation("PlayAnim02")
if( MemoryPoint.GetLinkedRef(TestLine) )
MemoryPoint.GetLinkedRef(TestLine).PlayAnimation("Unlock")
endif
if( MemoryPoint.GetLinkedRef(__PerkLine01) )
MemoryPoint.GetLinkedRef(__PerkLine01).PlayAnimation("Unlock")
endif
if( MemoryPoint.GetLinkedRef(__PerkLine02) )
MemoryPoint.GetLinkedRef(__PerkLine02).PlayAnimation("Unlock")
endif
if( MemoryPoint.GetLinkedRef(__PerkLine03) )
MemoryPoint.GetLinkedRef(__PerkLine03).PlayAnimation("Unlock")
endif
if( MemoryPoint.GetLinkedRef(__PerkLine04) )
MemoryPoint.GetLinkedRef(__PerkLine04).PlayAnimation("Unlock")
endif
if( MemoryPoint.GetLinkedRef(__PerkLine05) )
MemoryPoint.GetLinkedRef(__PerkLine05).PlayAnimation("Unlock")
endif
if( MemoryPoint.GetLinkedRef(__PerkLine06) )
MemoryPoint.GetLinkedRef(__PerkLine06).PlayAnimation("Unlock")
endif
Sound unlockSound = Game.GetForm(0x0003A1E7) 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
;=====================================================================================
; 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