It's actually awkward, but it works. Basically, in DnD magic missiles are handled by two spells, one which takes time to cast and fills your inventory with magic missiles, and one that casts them at someone. The first spell adds several MiscObjects, each of which has a script like so:
Scriptname DnDMMissileScript extends activemagiceffectFaction Property DnDMageLevel autoMiscObject Property DnDMMissileLight autoSpell Property DnDMMissileFireSpell autoevent OnEffectStart(Actor akTarget, Actor akCaster)int MageLevel = akCaster.GetFactionRank(DnDMageLevel) as int if MageLevel >=9 MageLevel=9endIfMageLevel = ((MageLevel +-1)/2) + 1akCaster.addItem(DnDMMissileLight, MageLevel) akCaster.addSpell(DnDMMissileFireSpell)endEvent
The Item's script:
Scriptname DnDMMissileLightScript extends ObjectReference ReferenceAlias Property DnDMMissileTarget autoEvent OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) if akNewContainer==None (self as ObjectReference).MoveTo(akOldContainer, Utility.RandomInt(-100,100), 60)endIfendEventevent OnTranslationComplete()(self as ObjectReference).SplineTranslateToRefNode(DnDMMissileTarget.GetReference(), "NPC Spine1 [Spn1]", 2.0, 300.00, 0.0)Self.RegisterForSingleUpdate(0.01)endEventevent OnUpdate() Actor HitActor = DnDMMissileTarget.GetReference() as actor int MMissileDam = Utility.RandomInt(2,5) HitActor.DamageAV("Health", MMissileDam) self.disable() Utility.Wait(5) DnDMMissileTarget.Clear()endEventThe casting spell fills SomeAlias, and force drops the items from inventory like so:
Scriptname DnDMMIssileFireScript extends activemagiceffectReferenceAlias Property DnDMMissileTarget autoMiscObject Property DnDMMissileLight autoSpell Property DnDMMissileFireSPell autoevent OnEffectStart(Actor akTarget, Actor akCaster) DnDMMissileTarget.ForceRefTo(akTarget as ObjectReference) int MMissileCount = akCaster.GetItemCount(DnDMMissileLight) int MissileDropper = 0 while MissileDropper<= MMissileCount akCaster.DropObject(DnDMMissileLight) MissileDropper = MissileDropper+1 Utility.Wait(0.35) endWhile akCaster.RemoveSpell(DnDMMissileFireSpell)endEvent