The problem is that there is no way to recieve an on hit(object reference) event in papyrus as part of the spell.
It only works with actors.
So you have no possibility to check if you hit something if it isn't an actor.
There is an Unlock effect in the ck (like Modify Attribute) but it does not seem to do anything.
One workaround that works is to apply a script to every container in game to check if it got hit by an unlock spell
Other ideas we are currently investigating are a bit complex like spawning a marker at the spell destination. Selecting that marker via getClosestRef then search for the closestChestAround that marker and unlock it.
Not really nice either

The tower woks by using the perk system to hook into the activate event, but displays something like a decision message box (not what we want)
Whats makes it even worse is, that there is definately detection for object hit. An empty spell with a hit "glow" targeted on a chest/door etc will make it show up as hit
Lol... I could have been reading the forums and i wouldn't have spent the last 3 hours fooling around ...
After testing weird things and having dozens of tabs opened in browser, I've created a formlist with outside doors from Whiterun and used FindClosestReferenceOfAnyTypeInListFromRef. It does work...
This is what I have as a target on self
scriptName ShanaOpenSelfTestScript extends ActiveMagicEffect{Scripted magic effect blablabla.}import utilityimport gameFormList property ShanaThingsOpenable auto;======================================================================================;; VARIABLES /;=============/objectReference CastFromHereRef;======================================================================================;; EVENTS /;=============/Event OnEffectStart(Actor Target, Actor Caster)Debug.Trace(" Effect Started")CastFromHereRef = CasterDebug.Trace(" Looking for doors...hopefully")ObjectReference closestDoor = Game.FindClosestReferenceOfAnyTypeInListFromRef(ShanaThingsOpenable, CastFromHereRef, 100.0)if ( closestDoor == None) Debug.Trace("There is no door near!") Debug.Notification("There is no door near!")else Debug.Trace("The closest door is: " + closestDoor) if( closestDoor.isLocked() ) Debug.Trace("Opening door!!!") Debug.Notification("Opening door!!!") closestDoor.Lock(false) endifendifEndEventThe idea was spawning an activator at target location and do the same instead of using, but I've simplified it into this one due to my "error prone programming style" lol
Also, note that when a door unlocks you will get the notification, but if you are heading to it it will still say Locked until you turn around and back ( but you can just press space and go in)
Let's see if we can find some cooler way hehe. I will check again after I get some sleep
