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.
 
 
 

256 lines
7.6 KiB

Scriptname _00E_SkillControl extends Quest Hidden
import Utility
int function _GetScriptVersion() Global
return 1
endFunction
Function _ReadSkillBook(String skillName, Int skillTopLimit, Form bookItem, Message msgSkillIncrease, GlobalVariable availablePoints, Message msgNoPoints)
Message failMsg = None
While _SkillBookReadLocked
WaitMenuMode(0.1)
EndWhile
_SkillBookReadLocked = True
; DO NOT FORGET TO FALSE _SkillBookReadLocked ON RETURN
If availablePoints.GetValue() >= 1
Int curSkill = PlayerREF.GetBaseActorValue(skillName) as Int
If curSkill >= skillTopLimit
failMsg = _00E_Levelsystem_sSkillTooWellDeveloped
ElseIf curSkill >= (skillTopLimit - 25) || (_00E_SkillbookWarning.Show() == 0) ; If cur. skill is within the book's limit or the player says "Yes"
; Do skill increase
curSkill += 1
PlayerREF.SetActorValue(skillName, curSkill)
availablePoints.Mod(-1)
_SkillBookReadLocked = False
msgSkillIncrease.Show(1, curSkill)
Return
EndIf
Else ; availablePoints < 1
failMsg = msgNoPoints
EndIf
; Processing failed read
_SkillBookReadLocked = False
If failMsg != None
failMsg.Show()
EndIf
PlayerREF.AddItem(bookItem, 1, True)
EndFunction
Function ReadPrimarySkillBook(String skillName, Int skillTopLimit, Form bookItem, Message msgSkillIncrease)
_ReadSkillBook(skillName, skillTopLimit, bookItem, msgSkillIncrease, Lernpunkte, _00E_Levelsystem_sNoMoreLearningPoints)
EndFunction
Function ReadCraftingSkillBook(String skillName, Int skillTopLimit, Form bookItem, Message msgSkillIncrease)
_ReadSkillBook(skillName, skillTopLimit, bookItem, msgSkillIncrease, Handwerkspunkte, _00E_Levelsystem_sNoMoreCraftingPoints)
EndFunction
Function ReadMemorySkillBook(String sClass, Int iTier, Message talentMessage, float fRecoveryTime02, float fRecoveryTime03, Potion PotionItem, Shout TaughtTalent, WordOfPower Word01, WordOfPower Word02, WordOfPower Word03, Perk Perk01, Perk Perk02, Perk Perk03)
While _MemoryBookReadLocked
WaitMenuMode(0.1)
EndWhile
_MemoryBookReadLocked = True
int iButton = talentMessage.Show()
if iButton == 0
if iTier == 1
iRequiredPoints = iPointRequirementTier01
Elseif iTier == 2
iRequiredPoints = iPointRequirementTier02
Else
iRequiredPoints = iPointRequirementTier03
EndIf
if RequirementsMetMemoryBook(iTier, Perk01, Perk02, Perk03, sClass)
TeachTalent(iTier, TaughtTalent, Perk01, Perk02, Perk03, Word01, Word02, Word03, fRecoveryTime02, fRecoveryTime03)
Else
if bValidSkilllevel
Message messageToShow = _00E_FS_A3_sMageClassName
if sClass == "Rogue"
messageToShow = _00E_FS_A3_sRogueClassName
Elseif sClass == "Warrior"
messageToShow = _00E_FS_A3_sWarriorClassName
EndIf
if SKSE.GetVersion()
Debug.Notification(_00E_FS_A3_sYouNeedSkillpoints.GetName() + " " + iRequiredPoints + _00E_FS_A3_sIn.GetName() + messageToShow.GetName() + _00E_FS_A3_sToUnlockThisClass.GetName())
else
Debug.Notification("You need to have at least " + iRequiredPoints + " talent points in the class.")
endif
EndIf
PlayerREF.AddItem(PotionItem, 1, true)
EndIf
_MemoryBookReadLocked = False
Else
PlayerREF.AddItem(PotionItem, 1, true)
_MemoryBookReadLocked = False
Return
EndIf
EndFunction
bool Function RequirementsMetMemoryBook(int iTier, Perk Perk01, Perk Perk02, Perk Perk03, string sClass)
Formlist ClassFormList01
Formlist ClassFormList02
Formlist ClassFormList03
if (iTier == 3 && !PlayerREF.HasPerk(Perk02)) || (iTier == 2 && !PlayerREF.HasPerk(Perk01))
_00E_FS_A3_NeedToLearnOtherLevels.Show()
bValidSkilllevel = False
Return False
Elseif (iTier == 1 && PlayerREF.HasPerk(Perk01)) || (iTier == 2 && PlayerREF.HasPerk(Perk02)) || (iTier == 3 && PlayerREF.HasPerk(Perk03))
_00E_FS_A3_AlreadyKnowThisLevel.Show()
bValidSkilllevel = False
Return False
Else
bValidSkilllevel = True
if sClass == "Rogue"
ClassFormList01 = EspionagePerks
ClassFormList02 = TrickeryPerks
ClassFormList03 = VagabondPerks
Elseif sClass == "Warrior"
ClassFormList01 = BastionPerks
ClassFormList02 = DerwishPerks
ClassFormList03 = RagePerks
Elseif sClass == "Mage"
ClassFormList01 = ElementalismPerks
ClassFormList02 = LifeAndDeathPerks
ClassFormList03 = ManipulationPerks
EndIf
int iTotalPointsInRequiredClass = (_00E_Func_GetPointsInClass.Run(ClassFormList01) + _00E_Func_GetPointsInClass.Run(ClassFormList02) + _00E_Func_GetPointsInClass.Run(ClassFormList03))
if iTotalPointsInRequiredClass >= iRequiredPoints
Return True
Else
Return False
EndIf
EndIf
EndFunction
Function TeachTalent(int iLevel, Shout TaughtTalent, Perk Perk01, Perk Perk02, Perk Perk03, WordOfPower Word01, WordOfPower Word02, WordOfPower Word03, float fRecoveryTime02, float fRecoveryTime03)
if iLevel == 1
PlayerREF.AddPerk(Perk01)
PlayerREF.AddShout(TaughtTalent)
Game.UnlockWord(Word01)
Game.TeachWord(Word01)
Elseif iLevel == 2
PlayerREF.AddPerk(Perk02)
Game.UnlockWord(Word02)
Game.TeachWord(Word02)
SetRecoveryTimeMemoryBook(2, TaughtTalent, fRecoveryTime02, fRecoveryTime03)
Else
PlayerREF.AddPerk(Perk03)
Game.UnlockWord(Word03)
Game.TeachWord(Word03)
SetRecoveryTimeMemoryBook(3, TaughtTalent, fRecoveryTime02, fRecoveryTime03)
EndIf
TalentPoints.Mod(-1)
Steam.UnlockAchievement("END_TALENT_BOOK_01")
EndFunction
Function SetRecoveryTimeMemoryBook(int iWord, Shout TaughtTalent, float fRecoveryTime02, float fRecoveryTime03)
{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 iWord == 2
TaughtTalent.SetNthRecoveryTime(0, fRecoveryTime02)
TaughtTalent.SetNthRecoveryTime(1, fRecoveryTime02)
Else
TaughtTalent.SetNthRecoveryTime(0, fRecoveryTime03)
TaughtTalent.SetNthRecoveryTime(1, fRecoveryTime03)
TaughtTalent.SetNthRecoveryTime(2, fRecoveryTime03)
EndIf
EndFunction
Function ShowSynergyMessage()
_00E_Levelsystem_sSynergyDiscovered.Show()
_00E_EPHandler.GiveEP(150)
If !bUnlockedSynergyAchievement
Steam.UnlockAchievement("END_SYNERGY_01")
bUnlockedSynergyAchievement = true
EndIf
EndFunction
int iPointRequirementTier01 = 5
int iPointRequirementTier02 = 10
int iPointRequirementTier03 = 15
int iRequiredPoints
bool bValidSkilllevel
bool bUnlockedSynergyAchievement
Bool _SkillBookReadLocked = False
Bool _MemoryBookReadLocked = False
actor Property PlayerRef Auto
Message Property _00E_SkillbookWarning Auto
Message Property _00E_Levelsystem_sSkillTooWellDeveloped Auto
Message Property _00E_FS_A3_sMageClassName Auto
Message Property _00E_FS_A3_sRogueClassName Auto
Message Property _00E_FS_A3_sWarriorClassName Auto
Message Property _00E_FS_A3_sYouNeedSkillpoints Auto
Message Property _00E_FS_A3_sIn Auto
Message Property _00E_FS_A3_sToUnlockThisClass Auto
Message Property _00E_FS_A3_NeedToLearnOtherLevels Auto
Message Property _00E_FS_A3_AlreadyKnowThisLevel Auto
FormList Property EspionagePerks Auto
FormList Property TrickeryPerks Auto
FormList Property VagabondPerks Auto
FormList Property BastionPerks Auto
FormList Property DerwishPerks Auto
FormList Property RagePerks Auto
FormList Property ElementalismPerks Auto
FormList Property LifeAndDeathPerks Auto
FormList Property ManipulationPerks Auto
GlobalVariable Property Handwerkspunkte Auto
GlobalVariable Property Lernpunkte Auto
GlobalVariable Property TalentPoints Auto
Message Property _00E_Levelsystem_sNoMoreCraftingPoints Auto
Message Property _00E_Levelsystem_sNoMoreLearningPoints Auto
Message Property _00E_Levelsystem_sSynergyDiscovered Auto