arunsundibob Posted December 31, 2012 Posted December 31, 2012 Hi I've been trying to add custom enchantments to armor through the CK. Specifically, I want to use scripts attached to magic effects to automatically cast spells while worn and not cast those spells when not worn. Then I want to be able to apply conditions (IsSneaking, IsInCombat etc.) to the effects in the Enchantment. This is what I have as my script for casting Candlelight when the item is worn:Scriptname NEWCandlelight extends activemagiceffect SPELL Property Candlelight Auto Event OnEffectStart(Actor akTarget, Actor akCaster) Candlelight.Cast(akTarget, akCaster) EndEvent In this case the property is the candlelight spell, but a correct script should work for any spell I define as the property (i think) Does anyone have suggestions for my script/ know a way to to this that works?
arunsundibob Posted January 1, 2013 Author Posted January 1, 2013 Attempt 2 using ObjectReference instead: Scriptname ARUNCandlelight extends ObjectReference SPELL property ActiveEffect Auto Event OnEquip(Actor akActor) if akActor == Game.GetPlayer() ActiveEffect.cast(akActor) endIf EndEvent Event OnUnequip(ObjectReference akActor) if akActor == Game.GetPlayer() ActiveEffect.Interruptcast(akActor) endIf endEvent It won't compile because Interruptcast can't be used. Is there another equivalent function to end the effect? (or is the first script better for this?)
steve40 Posted January 1, 2013 Posted January 1, 2013 (edited) Your first script looks correct. Some of the vanilla scripts do it that way. Edited January 1, 2013 by steve40
steve40 Posted January 1, 2013 Posted January 1, 2013 (edited) Scriptname ARUNCandlelight extends ObjectReference SPELL property ActiveEffect Auto Actor Property PlayerREF auto Event OnEquip(Actor akActor) if akActor == PlayerREF ActiveEffect.cast(akActor) endIf EndEvent Event OnUnequip(Actor akActor) if akActor == PlayerREF akActor.Interruptcast() akActor.DispelSpell(ActiveEffect) endIf endEvent Edited January 1, 2013 by steve40
arunsundibob Posted January 1, 2013 Author Posted January 1, 2013 Scriptname ARUNCandlelight extends ObjectReference SPELL property ActiveEffect Auto Actor Property PlayerREF auto Event OnEquip(Actor akActor) if akActor == PlayerREF ActiveEffect.cast(akActor) endIf EndEvent Event OnUnequip(Actor akActor) if akActor == PlayerREF akActor.Interruptcast() akActor.DispelSpell(ActiveEffect) endIf endEvent Thanks! It compiled but when i used the enchanted item in game there was still no effect. Perhaps its due to how I've set it up in the CK? I've various different changes to those with no signs of it working. I tested it with both a candlelight spell and a ward spell.
steve40 Posted January 1, 2013 Posted January 1, 2013 You have the duration set to zero. That won't make spells like candlelight last forever, it will literally make their duration be zero, so you won't get any effect :tongue:
arunsundibob Posted January 3, 2013 Author Posted January 3, 2013 (edited) It's working, thanks for the scripting help! Turns out that I forgot to change the enchantment on the weapon to the one using the newer script haha... Also, you may be interested to know that the duration of the enchantment CAN be zero. Only tested it with candlelight but I guess that should apply to all similarly scripted enchantments. Now, moving on, i don't suppose there's a way to reliably convert the conditions found in the CK to a script? (like IsSneaking, IsInCombat etc.) EDIT: Scratch that, orb of light shows up but doesn't actually light up the area so the effect works, just not the script attached to it. Edited January 4, 2013 by arunsundibob
Recommended Posts