1
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.
 
 
 

143 lines
4.5 KiB

Scriptname _00E_ChestAndDoorLockScript extends ObjectReference
Event OnLoad()
BlockActivation(True)
EndEvent
Int Property LOCK_LEVEL_NOVICE = 1 AutoReadOnly
Int Property LOCK_LEVEL_APPRENTICE = 25 AutoReadOnly
Int Property LOCK_LEVEL_ADEPT = 50 AutoReadOnly
Int Property LOCK_LEVEL_EXPERT = 75 AutoReadOnly
Int Property LOCK_LEVEL_MASTER = 254 AutoReadOnly
Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
If akAggressor != PlayerREF || IsLocked() == False
Return
EndIf
Int projectileLevel = 0
If akProjectile == _00E_UnlockProjectile_Novice
projectileLevel = LOCK_LEVEL_NOVICE
ElseIf akProjectile == _00E_UnlockProjectile_Apprentice
projectileLevel = LOCK_LEVEL_APPRENTICE
ElseIf akProjectile == _00E_UnlockProjectile_Adept
projectileLevel = LOCK_LEVEL_ADEPT
ElseIf akProjectile == _00E_UnlockProjectile_Expert
projectileLevel = LOCK_LEVEL_EXPERT
ElseIf akProjectile == _00E_UnlockProjectile_Master
projectileLevel = LOCK_LEVEL_MASTER
ElseIf akSource
Formlist unlockSpells = Game.GetFormFromFile(0x00044EE4, "Skyrim.esm") as Formlist
If unlockSpells.HasForm(akSource)
If akSource == unlockSpells.GetAt(0) as Explosion
projectileLevel = LOCK_LEVEL_APPRENTICE
ElseIf akSource == unlockSpells.GetAt(1) as Explosion
projectileLevel = LOCK_LEVEL_ADEPT
ElseIf akSource == unlockSpells.GetAt(2) as Explosion
projectileLevel = LOCK_LEVEL_EXPERT
ElseIf akSource == unlockSpells.GetAt(3) as Explosion
projectileLevel = LOCK_LEVEL_MASTER
EndIf
EndIf
EndIf
If projectileLevel > 0
Int lockLevel = self.GetLockLevel()
If lockLevel > LOCK_LEVEL_MASTER
_00E_sDoorLocked.Show()
WPNTG06ControlStaffShootFailM.Play(Self)
ElseIf projectileLevel >= lockLevel
; Unlock
Self.Lock(False)
_00E_UILockpickingUnlockM.Play(Self)
_00E_Ability_Antimagic_FXSShader.Play(Self)
self.PlaceAtMe(_00E_UnlockLockExplosion, 1)
EndIf
EndIf
EndEvent
Bool Function _IsInSuntemple()
If _00E_SuntempleLocations
Location curLoc = GetCurrentLocation()
If curLoc && _00E_SuntempleLocations.HasForm(curLoc)
Return True
EndIf
EndIf
Return False
EndFunction
Bool Function _IsInSiege()
Quest qSiegeQuest = Game.GetForm(0x0002EBAD) as Quest
Int siegeStage = qSiegeQuest.GetCurrentStageID()
Return (siegeStage >= 5 && siegeStage <= 125)
EndFunction
Bool Function _PlayerHasKey()
Key myKey = GetKey()
Return (myKey && PlayerREF.GetItemCount(myKey) > 0)
EndFunction
Event OnActivate(ObjectReference akActionRef)
If akActionRef == PlayerREF
If _IsInSiege() && (Self.GetBaseObject().GetType() != 29 || _IsInSuntemple() == False)
_00E_sDoorLocked.Show()
ElseIf IsActivationBlocked()
If IsLocked() && _PlayerHasKey() == False
Bool bPlayerCanActivate = False
Int iLockLevel = GetLockLevel()
If iLockLevel <= LOCK_LEVEL_APPRENTICE
bPlayerCanActivate = True
ElseIf iLockLevel <= LOCK_LEVEL_ADEPT
bPlayerCanActivate = (PlayerREF.HasPerk(_00E_Class_Trickery_P04b_) || PlayerREF.GetActorValue("Lockpicking") >= 25)
ElseIf iLockLevel <= LOCK_LEVEL_EXPERT
bPlayerCanActivate = (PlayerREF.HasPerk(_00E_Class_Trickery_P07_) || PlayerREF.GetActorValue("Lockpicking") >= 50)
ElseIf iLockLevel <= LOCK_LEVEL_MASTER
bPlayerCanActivate = (PlayerREF.HasPerk(_00E_Class_Trickery_P10_) || PlayerREF.GetActorValue("Lockpicking") >= 75)
Else
bPlayerCanActivate = True
EndIf
If bPlayerCanActivate
Activate(PlayerREF, True)
Else
_00E_Game_UnlockNeedsSkill.Show()
EndIf
Else
BlockActivation(False)
Activate(PlayerREF, True)
EndIf
EndIf
Else
Activate(akActionRef, True)
EndIf
EndEvent
Formlist Property _00E_SuntempleLocations Auto
Projectile Property _00E_UnlockProjectile_Novice Auto
Projectile Property _00E_UnlockProjectile_Apprentice Auto
Projectile Property _00E_UnlockProjectile_Adept Auto
Projectile Property _00E_UnlockProjectile_Expert Auto
Projectile Property _00E_UnlockProjectile_Master Auto
Message Property _00E_sDoorLocked Auto
Perk Property _00E_Class_Trickery_P04b_ Auto ; Unlock adept locks perk
Perk Property _00E_Class_Trickery_P07_ Auto ; Unlock expert locks
Perk Property _00E_Class_Trickery_P10_ Auto ; Unlock master locks
Sound Property _00E_UILockpickingUnlockM Auto
Sound Property WPNTG06ControlStaffShootFailM Auto
EffectShader Property _00E_Ability_Antimagic_FXSShader Auto
Explosion Property _00E_UnlockLockExplosion Auto
Actor Property PlayerREF Auto
Message Property _00E_Game_UnlockNeedsSkill Auto