NexusComa Posted November 10, 2016 Share Posted November 10, 2016 (edited) Bool Cast = true Event OnInit() Cast = trueEndEvent Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, Bool abPowerAttack, Bool abSneakAttack, Bool abBashAttack, Bool abHitBlocked) PercentHealth = self.GetTargetActor().GetAVPercentage("Health") if (PercentHealth < 0.200000) if(Cast == true) Debug.SendAnimationEvent (Caster as ObjectReference, "Shout Start") voicecallsofia.Cast(self.GetTargetActor() as ObjectReference, none) RegisterForUpdate(10.0) ; enter cooldown time here in seconds Cast = false endif else Cast = true endIfEndEvent Event OnUpdate() Cast = true UnregisterForUpdate()EndEvent ... Edit ... with an added cooldown Edited November 10, 2016 by NexusComa Link to comment Share on other sites More sharing options...
ReDragon2013 Posted November 10, 2016 Share Posted November 10, 2016 (edited) Maybe the following script could be useful. It's different to your source. Scriptname _Follower20P extends ActiveMagicEffect {rewritten by ReDragon 2016} Spell PROPERTY Voicecallsofia auto ; the follower will cast if under 20% health ;Spell PROPERTY FollowerSummon auto ; the spell you cast or the ability the follower should have MagicEffect PROPERTY MGE_FollowerSummon auto ; the magicEffect of this script Float PROPERTY waitTimer auto ; fill with your desired time Actor target ; for speed and make persistent Float fHealth ; take it out of event ; ********************************************************************** ; You wrote: "My aim was to force a follower to summon another character ; when her health had dropped below 20% during combat." ; ********************************************************************** ; -- EVENTs -- 3 + "Waiting" ; Event received when this effect is first started (OnInit may not have been run yet!) EVENT OnEffectStart(Actor akTarget, Actor akCaster) Debug.Trace("Summon: OnEffectStart() - target = " +akTarget+ ", caster = " +akCaster) ; remove this line if you do not need it anymore IF akTarget.HasMagicEffect(MGE_FollowerSummon) || !akTarget.IsPlayerTeammate() self.Dispel() RETURN ; - STOP - follower already has this magiceffect or is not by your side ENDIF ;--------------------- target = akTarget ; == self.GetTargetActor() ENDEVENT ; Event received when this effect is finished (effect may already be deleted, calling functions on this effect will fail) EVENT OnEffectFinish(Actor akTarget, Actor akCaster) Debug.Trace("Summon: OnEffectFinish() - target = " +akTarget+ ", caster = " +akCaster) ; a bit info, remove the whole event if all is fine ;;; target = None ; use with caution !!! ENDEVENT EVENT OnHit(ObjectReference akAggressor, Form akSource, Projectile akProj, Bool b1, Bool b2, Bool b3, Bool b4) IF (akAggressor as Actor) && (target) ELSE RETURN ; - STOP - safety first ENDIF ;--------------------- fHealth = target.GetAVPercentage("Health") IF (fHealth > 0.2) RETURN ; - STOP - health is higher than 20% ENDIF ;--------------------- gotoState("Waiting") ; ### STATE ### go out of empty state until OnUpdate() is running myF_Cast() RegisterForSingleUpdate(120.0) ; 2 min, summoned creature should be max alive, casting cool down Utility.Wait(waitTimer) ; wait until idle is over, which is running on the follower ENDEVENT FUNCTION myF_Cast() ;------------------ IF ( target ) Debug.SendAnimationEvent(target as ObjectReference, "Shout Start") ; let the follower doing a special idle, hopefully the right string voicecallsofia.Cast(target as ObjectReference, None) ; follower is casting the summon spell ENDIF ENDFUNCTION ;========================== state Waiting ; already Waiting ;============ EVENT OnUpdate() IF (target) && target.Is3DLoaded() gotoState("") ; ### STATE ### go back to empty state, OnHit() above is available again ENDIF ENDEVENT EVENT OnHit(ObjectReference akAggressor, Form akSource, Projectile akProj, Bool b1, Bool b2, Bool b3, Bool b4) ENDEVENT ;======= endState Edited November 10, 2016 by ReDragon2013 Link to comment Share on other sites More sharing options...
Recommended Posts