esto de embestir siempre me fue un problema...
Bueno, algo así:

A unit comienza el efecto de una habilidad

Ability being cast = tu habilidad
(las variables evitan imprevistos, pero no se borrarlas con el custom script asi que tu vez)

set temp_position_1: position of casting unit

set temp_position_2: position of target of ability being cast

set temp_caster: casting unit

set temp_target: target of ability being casted

set temp_colision: temp_caster colision size (es un real o integer)
(la siguiente parte es estetica y opcional, aunque la recomiendo. Aunque no puedes remover locust expeto por custom script. Esto hace a tu unidad inseleccionable, pero aun puede sufrir dano.)

add locust to temp_caster

Remove invulnerabilidad de temp_caster
(esto si o si tienes que tenerlo.

set temp_caster movement speed 9.00 of original speed

set temp_caster colision size to 0 (esto no es necesario si usas locust)

Order temp_caster to walk to temp_position_2

Make temp_caster deal X damage to temp_target dealing X damage of type normal (?)

Order temp_caster to walk to temp_position_1

set temp_caster movement speed 1.00 of original speed

set temp_caster colision size to temp_colision
(aca abajo deberian ir todos los custom scrips para borrar valores. Para que borrarlos? las variables consumen ram, aca abajo tambien deberia ir el custom script para borrar el locust)

Custom_script: Call DestroyVariable (?) (remove temp_position_1)

Custom_script: Call DestroyVariable (?) (remove temp_position_2)

Custom_script: Call DestroyVariable (?) (remove temp_caster)

Custom_script: Call DestroyVariable (?) (remove temp_target)

Custom_script: Call DestroyVariable (?) (remove temp_colision)

Custom_script: Call UnitRemoveAbility(udg_temp_casting, 'Aloc')