I too don't think the OnHit block will work the way you use it. Have you considered using OBSE's onhit event handler function?
Once set it will trigger anytime an actor is hit. You can write your code in the function to determine who was hit and if the Auriel shield was equipped at the time.
It's pretty straightforward to use:
First create the event handler function, (make sure to set it as an object script):
Scn aaNerevairineOnHitFunction
ref target
ref attacker
ref Pref
begin function { target, attacker }
set Pref to PlayerRef
If target != Pref ;exit early if it's not the player that was hit
Return
EndIf
If target.GetEquipped aaKOTNRAurielsShield != 1 ;exit early if player doesn't have Auriels shield equipped.
Return
EndIf
If (target.IsBlocking) && (BlockedTimes < 15)
set BlockedTimes to BlockedTimes + 1 ;increment the BlockedTimes global variable
EndIf
end ;end of function
Now register the function by using SetEventHandler, for example you could put this code in the GameMode block of your Quest script:
If getgameloaded ;needs to be declared only once when the game is loaded
;set handlers
seteventhandler "onhit" aaNerevairineOnHitFunction
EndIf
You don't need any script on the shield or player.
This is just a rough outline, I didn't test the code and I may not have fully understood all the details of what you want to do so it may not do exactly what you want as is. Hope it helps you.
Edited by Tharkun221, 14 September 2020 - 12:00 am.