link182 Posted Friday at 05:55 AM Share Posted Friday at 05:55 AM Note: sorry for cluttering this forum with a second request, I managed to find a way around my last issue and with this I don’t really know where else to turn. I assumed it would be straightforward to have a staff drain your magicka when you cast a fireball spell, and boy have I learned how wrong I was. It’s become clear that a magic effect that isn’t on self cannot see itself being activated unless you actually hit a target, meaning when you miss you’ll not lose any magicka (or in my case stamina too) I spent 4 hours learning that, and then realised that means it’s even harder to find a solution for staffs to cost Magicka. I’m really not sure what to do here, it’s sort of essential to the mod I’ve been working on for over a month that this fireball spell drains your own stamina and Magicka in massive prepositions on cast, can anyone think of a way to do this from a staff? I’m out of ideas. Link to comment Share on other sites More sharing options...
dylbill Posted Friday at 08:15 AM Share Posted Friday at 08:15 AM Are you using SKSE? If so you can use my mod Dylbill's Papyrus Functions which includes DbSkseEvents. https://www.nexusmods.com/skyrimspecialedition/mods/65410?tab=posts&jump_to_comment=147667121 Something like this: Enchantment Property StaffEnchFireball Auto weapon property StaffFireball auto Event Oninit() PlayerRef.AddItem(StaffFireball) PlayerRef.EquipItem(StaffFireball) DbSkseEvents.RegisterFormForGlobalEvent("OnActorSpellFireGlobal", Self, StaffFireball, 1) ;compare StaffFireball with 'Source'. Register for when any actor fires a spell from the StaffFireball. DbSkseEvents.RegisterFormForGlobalEvent("OnHitGlobal", Self, StaffEnchFireball, 2) ;compare StaffEnchFireball with 'Source'. Register for when anything is hit with a StaffEnchFireball enchantment. EndEvent Event OnActorSpellFireGlobal(Actor Caster, Form Source, int slot) Debug.MessageBox("Caster = " + Caster.getDisplayName() + " " + Caster + "\nSource = " + Source.GetName() + " " + Source + "\nslot = " + slot) Endevent Event OnHitGlobal(ObjectReference Attacker, ObjectReference Target, Form Source, Ammo akAmmo, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) Debug.MessageBox("Attacker = " + Attacker.getDisplayName() + " " + Attacker + "\nTarget = " + Target.GetDisplayName() + " " + Target + "\nSource = " + \ Source.GetName() + " " + Source + "\nAmmo = " + akAmmo.getName() + " " + akAmmo + "\nProjectile = " + akProjectile.getName() + " " + akProjectile) EndEvent If you're not using skse, it may be possible to use an animation event. Link to comment Share on other sites More sharing options...
link182 Posted Friday at 12:31 PM Author Share Posted Friday at 12:31 PM 4 hours ago, dylbill said: Are you using SKSE? If so you can use my mod Dylbill's Papyrus Functions which includes DbSkseEvents. https://www.nexusmods.com/skyrimspecialedition/mods/65410?tab=posts&jump_to_comment=147667121 Something like this: Enchantment Property StaffEnchFireball Auto weapon property StaffFireball auto Event Oninit() PlayerRef.AddItem(StaffFireball) PlayerRef.EquipItem(StaffFireball) DbSkseEvents.RegisterFormForGlobalEvent("OnActorSpellFireGlobal", Self, StaffFireball, 1) ;compare StaffFireball with 'Source'. Register for when any actor fires a spell from the StaffFireball. DbSkseEvents.RegisterFormForGlobalEvent("OnHitGlobal", Self, StaffEnchFireball, 2) ;compare StaffEnchFireball with 'Source'. Register for when anything is hit with a StaffEnchFireball enchantment. EndEvent Event OnActorSpellFireGlobal(Actor Caster, Form Source, int slot) Debug.MessageBox("Caster = " + Caster.getDisplayName() + " " + Caster + "\nSource = " + Source.GetName() + " " + Source + "\nslot = " + slot) Endevent Event OnHitGlobal(ObjectReference Attacker, ObjectReference Target, Form Source, Ammo akAmmo, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) Debug.MessageBox("Attacker = " + Attacker.getDisplayName() + " " + Attacker + "\nTarget = " + Target.GetDisplayName() + " " + Target + "\nSource = " + \ Source.GetName() + " " + Source + "\nAmmo = " + akAmmo.getName() + " " + akAmmo + "\nProjectile = " + akProjectile.getName() + " " + akProjectile) EndEvent If you're not using skse, it may be possible to use an animation event. Sadly I can’t use Skse since I’m also making this for Xbox. I’m not experienced with animation events, how would that work exactly? Link to comment Share on other sites More sharing options...
dylbill Posted Friday at 04:49 PM Share Posted Friday at 04:49 PM Here is an example for animation events. Listen for when the staff is equipped, find which hand it's equipped in then register for the appropriate animation event. Also unregister for the event when the staff is unequipped. Here's all the animation events fyi. https://ck.uesp.net/wiki/Animation_Events Event Oninit() RegisterForAnimationEvent(PlayerRef, "MRh_SpellFire_Event") ;for right hand RegisterForAnimationEvent(PlayerRef, "MLh_SpellFire_Event") ;for left hand EndEvent Event OnAnimationEvent(ObjectReference akSource, string asEventName) Debug.MessageBox("akSource = " + akSource + \ "\nEvent = " + asEventName) EndEvent Link to comment Share on other sites More sharing options...
link182 Posted Friday at 05:28 PM Author Share Posted Friday at 05:28 PM 37 minutes ago, dylbill said: Here is an example for animation events. Listen for when the staff is equipped, find which hand it's equipped in then register for the appropriate animation event. Also unregister for the event when the staff is unequipped. Here's all the animation events fyi. https://ck.uesp.net/wiki/Animation_Events Event Oninit() RegisterForAnimationEvent(PlayerRef, "MRh_SpellFire_Event") ;for right hand RegisterForAnimationEvent(PlayerRef, "MLh_SpellFire_Event") ;for left hand EndEvent Event OnAnimationEvent(ObjectReference akSource, string asEventName) Debug.MessageBox("akSource = " + akSource + \ "\nEvent = " + asEventName) EndEvent Thanks a bunch for this, think I have a good idea which direction to go in now, I’ll be sure to post how it goes. 1 Link to comment Share on other sites More sharing options...
Recommended Posts