Okay, heres the spell: The tinker shoots out a missle that will go towards the target point. If the missle goes within range of a unit, or multiple units, it will choose the unit with the most health and chase after it. It will deal damage depending on level when it hits a enemy unit.
Theres a problem with the distance variable in the trigger though. I know because i put a message after it and i tested it in game. It goes negative after 2 runs of the periodic trigger and finishes the spell.
Heres the code:
\
Helpers will get +rep
Theres a problem with the distance variable in the trigger though. I know because i put a message after it and i tested it in game. It goes negative after 2 runs of the periodic trigger and finishes the spell.
Heres the code:
Code:
Heat Seeking Missle
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Heat Seeking Missle
Actions
Set HSM_Caster = (Triggering unit)
Set HSM_Point = (Position of HSM_Caster)
Set HSM_TargetLoc = (Target point of ability being cast)
Set HSM_Distance = (400.00 + (200.00 x (Real((Level of Heat Seeking Missle for HSM_Caster)))))
Unit - Create 1 HSMDummy for (Owner of HSM_Caster) at HSM_Point facing (Angle from HSM_Point to HSM_TargetLoc) degrees
Set HSM_Missle = (Last created unit)
Unit - Order (Last created unit) to Move To (HSM_Point offset by (600.00 + (200.00 x (Real((Level of Heat Seeking Missle for HSM_Caster))))) towards (Facing of HSM_Missle) degrees)
Trigger - Turn on Heat Seeking Missle Periodic <gen>
Code:
Heat Seeking Missle Periodic
Events
Time - Every 0.06 seconds of game time
Conditions
Actions
Set TempPoint[1] = (Position of HSM_Missle)
Set TempGroup = (Units within (50.00 x (Real((Level of Heat Seeking Missle for HSM_Caster)))) of TempPoint[1] matching (((Matching unit) belongs to an enemy of (Owner of HSM_Caster)) Equal to True))
Set HSM_Distance = (HSM_Distance - (Distance between HSM_Point and TempPoint[1]))
Game - Display to (All players) for 5.00 seconds the text: (String(HSM_Distance))
Custom script: call RemoveLocation(udg_HSM_Point)
Set HSM_Point = TempPoint[1]
Set TempReal = 0.00
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units within (150.00 + (50.00 x (Real((Level of Heat Seeking Missle for HSM_Caster))))) of TempPoint[1] matching (((Matching unit) belongs to an enemy of (Owner of HSM_Caster)) Equal to True)) and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Life of (Picked unit)) Greater than TempReal
Then - Actions
Set TempReal = (Life of (Picked unit))
Set HSM_HighestHealth = (Picked unit)
Else - Actions
Set TempPoint[2] = (Position of HSM_HighestHealth)
Unit - Order HSM_Missle to Move To TempPoint[2]
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
(Number of units in TempGroup) Greater than 0
HSM_Distance Less than or equal to 0.00
Then - Actions
Unit - Cause HSM_Caster to damage (Picked unit), dealing (50.00 + (30.00 x (Real((Level of Heat Seeking Missle for HSM_Caster))))) damage of attack type Spells and damage type Normal
Unit - Kill HSM_Missle
Else - Actions
Do nothing
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
(Number of units in TempGroup) Greater than 0
HSM_Distance Less than or equal to 0.00
Then - Actions
Custom script: call RemoveLocation(udg_TempPoint[1])
Custom script: call RemoveLocation(udg_TempPoint[2])
Custom script: call RemoveLocation(udg_HSM_Point)
Custom script: call RemoveLocation(udg_HSM_TargetLoc)
Custom script: call DestroyGroup(udg_TempGroup)
Trigger - Turn off (This trigger)
Else - Actions
Custom script: call RemoveLocation(udg_TempPoint[1])
Custom script: call RemoveLocation(udg_TempPoint[2])
Custom script: call DestroyGroup(udg_TempGroup)
Helpers will get +rep