Dafür könnte man ein paar Abfragen einbauen:

Code:
scn xyz

Begin OnMagicEffectstart
 if ( GetLocked )
  Message "Die Tür ist schon verschlossen."
 elseif ( GetOpenKey )
  Message "Die Tür hat einen eigenen Schlüssel."
  ;Jetzt mit unendlich zu schließen ist nicht ratsam, da der Spieler den Schlüssel ja nicht unbedingt haben muss.
  ;Maximal kommt hier also ein Lock 99 in Frage.
 else
  Lock 100
  SetOpenKey meinschluessel
 endif
End

PS:
Das reference. war nicht nur unnötig (ohne extra angegebene CallingReference wird das Ziel als CallingReference angenommen), sondern führt auch im CS zu einer Fehlermeldung. Wenn, dann muss man es auch als Ref-Variable definieren, der man vorher GetSelf zuweist.
Oder man ersetzt es durch eine ID, dann benötigt man aber für jede Tür ein eigenes Script.