enderalse/source/scripts/_00e_armorsetscript.psc

116 lines
3.1 KiB
Plaintext

Scriptname _00E_ArmorSetScript extends ObjectReference
;=====================================================================================
; EVENTS
;=====================================================================================
Event OnEquipped(Actor akActor)
If akActor == PlayerREF
;this event won't be sent by SKSE / SkyUI when using he Equip Mode of SkyUI to directly equip an item from another container.
;the same goes for the OnObjectEquipped event, hence we need the work around in OnContainerChanged
UpdateSpells()
EndIf
EndEvent
Event OnUnequipped(Actor akActor)
If akActor == PlayerREF
UpdateSpells()
EndIf
EndEvent
Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer)
If akNewContainer == PlayerREF
; Take All, no need to check for equipped items
If UI.IsMenuOpen("ContainerMenu") == False
return
EndIf
If PlayerREF.IsEquipped(__Config_SetList)
UpdateSpells()
EndIf
EndIf
EndEvent
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function UpdateSpells()
Int iIndex
If Levelsystem == None
Levelsystem = Game.GetFormFromFile(0x00010AA2, "Skyrim.esm") As _00E_Questfunctions
EndIf
Int nEquippedPieces = 0
Form[] setPieces = __Config_SetList.ToArray()
iIndex = 0
While iIndex < setPieces.Length
If PlayerREF.IsEquipped(setPieces[iIndex] as Armor)
nEquippedPieces += 1
EndIf
iIndex += 1
EndWhile
__Config_SetGlobal.SetValueInt(nEquippedPieces)
Int nBonusSpells = nEquippedPieces - 1
Bool bSpellRemoved = False
Bool bSpellAdded = False
Form[] bonusSpells = __Config_SetBonusesList.ToArray()
iIndex = 0
While iIndex < bonusSpells.Length
Spell bonusSpell = bonusSpells[iIndex] as Spell
If iIndex < nBonusSpells
If PlayerREF.HasSpell(bonusSpell) == False
PlayerREF.AddSpell(bonusSpell)
bSpellAdded = True
EndIf
Else ; iIndex >= nBonusSpells
If PlayerREF.HasSpell(bonusSpell)
PlayerREF.RemoveSpell(bonusSpell)
bSpellRemoved = True
EndIf
EndIf
iIndex += 1
EndWhile
If bSpellAdded
Levelsystem.OnArmorSetBonusAdded(nEquippedPieces >= setPieces.Length)
ElseIf bSpellRemoved
Levelsystem.OnArmorSetBonusRemoved()
EndIf
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
Bool Property __Config_5Pieces Auto
{Does this set have five pieces? Default: False}
_00E_Questfunctions Property Levelsystem Auto
GlobalVariable Property __Config_SetGlobal Auto
{The global associated with this set. Example _25E_HSet_FallenOneGlobal.}
Formlist Property __Config_SetBonusesList Auto
{The formlist containing the spell bonuses of the set.}
Formlist Property __Config_SetList Auto
{The formlist containing the set pieces.}
Actor Property PlayerREF Auto