Scriptname ELEM_Earth_Shock_Effect_Script extends activemagiceffect{Shockwave Effect that staggers all enemies within a large radius with a delay based on the distance};--=== Imports ===--Import UtilityImport Game;--=== Properties ===--Activator Property FXEmptyActivator autoActor Property PlayerRef AutoExplosion Property FXdustDropMedExplosion AutoImpactDataSet Property FXDragonLandingImpactSet AutoImpactDataSet Property VOCShoutPush01ImpactSet Auto;--=== Variables ===--Actor Player;--=== Events ===--Event OnInit()Player = PlayerRefEndEventEvent onEffectStart(Actor akTarget, Actor akCaster);Debug.Trace(self + ": started!")ObjectReference PushPoint = akTarget.PlaceAtMe(FXEmptyActivator)Float WaitTime; 1 km = ~70000 units, so say the shockwave travels at 0.1km/s (1/50 the speed in real life)Float Distance = akTarget.GetDistance(akCaster); Debug.Trace(self + ": Distance: " + Distance)WaitTime = Distance / 7000; Debug.Trace(self + ": Wait: " + WaitTime)Float StaggerMag = ((21333.333 - Distance) / 21333.333)Float PushMag = StaggerMag * 5; Debug.Trace(self + ": PushMag: " + PushMag)Wait(WaitTime)akTarget.PlaceAtMe(FXdustDropMedExplosion)PushPoint.MoveTo(akTarget)PushPoint.KnockAreaEffect(StaggerMag,50)PushPoint.MoveTo(akTarget,0,0,50)PushPoint.PlaceAtMe(FXdustDropMedExplosion)PushPoint.Delete()EndEventEvent onEffectFinish(Actor akTarget, Actor akCaster);Debug.Trace(self + ": Finished!")EndEvent
PushPoint.KnockAreaEffect(StaggerMag,50)with
PushPoint.PushActorAway(akTarget,PushMag)
Scriptname ELEMPushActorBlastScript extends ActiveMagicEffect{Pushes actors away based on radius.}Float Property AreaOfEffect autoInt Property PushForce autoBool Property KnockOut = False autoFloat Property KnockOutTime = 1.5 autoSpell Property ELEM_Cond_Stunned AutoActor TargetActor CasterBool Finished = FalseEvent OnEffectStart(actor akTarget, actor akCaster)Target = akTargetCaster = akCasterIf Target == Game.GetPlayer() ReturnEndIfFloat Radius = AreaOfEffect / 2Radius = Radius * 21.33333 ; Convert Feet to UnitsFloat Distance = Caster.GetDistance(Target)If Distance < Radius Float PushMag = ((Radius - Distance) / Radius) * PushForce Debug.Trace(self + ": Blast Radius is " + Radius + ". Distance to target" + Target + " is " + Distance + ". Applying PushMag " + PushMag + ".") Caster.PushActorAway(Target, PushForce) If KnockOut RegisterForSingleUpdate(KnockOutTime) Target.AddSpell(ELEM_Cond_Stunned) EndIfElse Debug.Trace(self + ": Blast Radius is " + Radius + ". Distance to target" + Target + " is " + Distance + ". No force applied.")EndIfEndEventEvent onUpdate()Finished = TrueEndEventEvent OnEffectFinish(actor akTarget, actor akCaster)Finished = TrueEndEvent