116 lines
3.1 KiB
Plaintext
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
|