Und bei deinem Code murrt das CS nicht?
du kannst keine Funktion als CallingActor verwenden. Wenn, dann müsst es heißen reference.AddSpell.
Da die Reference aber hier das gleiche ist wie GetSelf kann man die auch einfach weglassen, AddSpell [Dein Spruch] würde da vollkommend ausreichen.
Zu deinem Problem: Zauber werden wie du richtig bemerkt hast in das Zauberbuch des Ziels verschoben, so dass er ihn selbst verwenden kann (falls er die Entsprechenden Fähigkeiten hat). Damit es Wirkung zeigt musst es eine Eigenschaft sein, da ist dann aber das Problem, dass die Ewig draufbleibt, wenn man sie nicht entfernt. Krankheiten scheinen laut deiner Beobachtung auch zu funktionieren, damit hab ich mich aber nicht beschäftigt.
Gibt der Eigenschaft doch einfach zusätzlich einen ScriptEffect, der sie vom Ziel nach einer gewissen Zeit wieder entfernt...oder pack in der ScriptEffectFinish-Block der Verzauberung einfach noch ein RemoveSpell hinein. Da kommt man aber dann an das Problem mit dem gleichen verwendeten Script.