- Joined
- Dec 22, 2008
- Messages
- 207
Okay, so it's pretty basic. I'm using a missile system by Kingz and I wanted to implement terrain height detection. I'm probably over-thinking things, but I can't seem to get it to work properly.
Breakdown: I'm trying to get missiles that don't have a parabola (since one can choose if a missile will have a parabola or not), to descend or ascend according to the z-height of the target point terrain.
Right now however, the projectiles are handled through ONLY their flying height (so not according to terrain height).
Note: The missiles have to be flying in a straight line towards the z height of the target terrain. In the test map they can be seen 'hopping' over ditches and slightly ascending as they reach hills. This is obviously not what I meant to do.
EDIT:
Added triggers
Take note; the only thing I changed in the "Initialize" and "Loop" triggers are anything 'z height' related.
Please help. Anyone. <3
Breakdown: I'm trying to get missiles that don't have a parabola (since one can choose if a missile will have a parabola or not), to descend or ascend according to the z-height of the target point terrain.
Right now however, the projectiles are handled through ONLY their flying height (so not according to terrain height).
Note: The missiles have to be flying in a straight line towards the z height of the target terrain. In the test map they can be seen 'hopping' over ditches and slightly ascending as they reach hills. This is obviously not what I meant to do.
EDIT:
Added triggers
-
Events
- Unit - A unit Starts the effect of an ability
-
Conditions
- (Ability being cast) Equal to Fire
-
Actions
- Set MS_dmg_source = (Casting unit)
- Set MS_owner = (Owner of (Casting unit))
- Set MS_create_point = (Position of (Casting unit))
- Set MS_target_point = (MS_create_point offset by 4000.00 towards (Angle from MS_create_point to (Target point of ability being cast)) degrees)
- Set MS_damage = 30.00
- Set MS_seconds_to_reach = 2.50
- Set MS_angle = (Angle from MS_create_point to MS_target_point)
- Set MS_distance = (Distance between MS_create_point and MS_target_point)
- Set MS_missile_gfx = war3mapImported\HighSpeedProjectile_ByEpsilon.mdl
- Set MS_impact_gfx = Abilities\Weapons\Rifle\RifleImpact.mdl
- Set MS_unit_hit_eff = Abilities\Weapons\HydraliskImpact\HydraliskImpact.mdl
- Set MS_effect = 1
- Set MS_arcs = False
- -------- If MS_arc = true aply the following settings --------
- Set MS_arc_dist = 200.00
- Set MS_arc_type = (Integer A)
- -------- --- --------
- Set MS_parabola = False
- -------- If MS_parabola = true aply the following settings --------
- Set MS_parabola_height = 650.00
- -------- --- --------
- Trigger - Run MS init <gen> (ignoring conditions)
- Custom script: call RemoveLocation(udg_MS_create_point)
- Custom script: call RemoveLocation(udg_MS_target_point)
- Events
- Conditions
-
Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_index[1] Equal to 0
-
Then - Actions
- Set MS_dyn_index = 0
- Trigger - Turn on MS loop <gen>
- Else - Actions
-
If - Conditions
- Set MS_index[1] = (MS_index[1] + 1)
- Set MS_index_selected = False
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_dyn_index Less than MS_index[2]
- MS_dyn_index Not equal to 0
- MS_empty_index[MS_dyn_index] Equal to True
-
Then - Actions
- Set MS_index_selected = True
-
Else - Actions
-
For each (Integer MS_index[0]) from 1 to MS_index[2], do (Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_empty_index[MS_index[0]] Equal to True
- MS_index_selected Equal to False
-
Then - Actions
- Set MS_dyn_index = MS_index[0]
- Set MS_index_selected = True
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_index_selected Equal to False
-
Then - Actions
- Set MS_index[2] = (MS_index[2] + 1)
- Set MS_dyn_index = MS_index[2]
- Else - Actions
-
If - Conditions
-
For each (Integer MS_index[0]) from 1 to MS_index[2], do (Actions)
-
If - Conditions
- Set MS_empty_index[MS_dyn_index] = False
- Unit - Create 1 Dummy/Missile for MS_owner at MS_create_point facing MS_angle degrees
- Unit - Add Storm Crow Form to (Last created unit)
- Unit - Remove Storm Crow Form from (Last created unit)
- Unit - Turn collision for (Last created unit) Off
- Unit - Move (Last created unit) instantly to MS_create_point
- Special Effect - Create a special effect attached to the chest of (Last created unit) using MS_missile_gfx
- Set MS_missile_eff[MS_dyn_index] = (Last created special effect)
- Set MS_missile[MS_dyn_index] = (Last created unit)
- Set MS_dmg_source_ex[MS_dyn_index] = MS_dmg_source
- Set MS_distance_max[MS_dyn_index] = MS_distance
- Set MS_angle_ex[MS_dyn_index] = MS_angle
- Set MS_speed_ex[MS_dyn_index] = ((MS_distance_max[MS_dyn_index] / MS_seconds_to_reach) x 0.03)
- Set MS_player_check[MS_dyn_index] = MS_owner
- Set MS_damage_ex[MS_dyn_index] = MS_damage
- Set MS_arcs_ex[MS_dyn_index] = MS_arcs
- Set MS_parabola_ex[MS_dyn_index] = MS_parabola
- Set MS_impact_gfx_ex[MS_dyn_index] = MS_impact_gfx
- Set MS_unit_hit_eff_ex[MS_dyn_index] = MS_unit_hit_eff
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_effect Equal to 1
-
Then - Actions
- Set MS_effect_ex[MS_dyn_index] = MS_effect
- Animation - Change (Last created unit)'s size to (20.00%, 20.00%, 20.00%) of its original size
- Custom script: set udg_MS_calc_real[1] = GetLocationZ(udg_MS_create_point)
- Animation - Change (Last created unit) flying height to (MS_calc_real[1] + 45.00) at 0.00
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_arc_type Equal to 1
-
Then - Actions
- Set MS_arc_core_angle[MS_dyn_index] = (MS_angle_ex[MS_dyn_index] + 90.00)
- Set MS_arc_distance_ex[MS_dyn_index] = MS_arc_dist
-
Else - Actions
- Set MS_arc_core_angle[MS_dyn_index] = (MS_angle_ex[MS_dyn_index] - 90.00)
- Set MS_arc_distance_ex[MS_dyn_index] = MS_arc_dist
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_parabola Equal to True
-
Then - Actions
- Set MS_parabola_height_ex[MS_dyn_index] = MS_parabola_height
-
Else - Actions
- Set MS_parabola_height_ex[MS_dyn_index] = (Current flying height of MS_missile[MS_dyn_index])
-
If - Conditions
- Set MS_distance_current[MS_dyn_index] = 0.00
- Set MS_calc_real[1] = (X of MS_create_point)
- Set MS_calc_real[2] = (Y of MS_create_point)
- Set MS_calc_real[3] = (X of MS_target_point)
- Set MS_calc_real[4] = (Y of MS_target_point)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_calc_real[1] Equal to MS_calc_real[3]
- MS_calc_real[2] Equal to MS_calc_real[4]
-
Then - Actions
- Set MS_speed_ex[MS_dyn_index] = 10.00
- Set MS_distance_max[MS_dyn_index] = MS_speed_ex[MS_dyn_index]
- Else - Actions
-
If - Conditions
- Set MS_build_point[MS_dyn_index] = (Position of MS_missile[MS_dyn_index])
- Set MS_get_X[MS_dyn_index] = (X of MS_build_point[MS_dyn_index])
- Set MS_get_Y[MS_dyn_index] = (Y of MS_build_point[MS_dyn_index])
- Custom script: call RemoveLocation(udg_MS_build_point[udg_MS_dyn_index])
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Events
- Time - Every 0.03 seconds of game time
- Conditions
-
Actions
-
For each (Integer MS_index[3]) from 1 to MS_index[2], do (Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_missile[MS_index[3]] Not equal to No unit
-
Then - Actions
- Set MS_temp_point[0] = (Point(MS_get_X[MS_index[3]], MS_get_Y[MS_index[3]]))
- Set MS_temp_point[1] = (Position of MS_missile[MS_index[3]])
- Set MS_distance_current[MS_index[3]] = (MS_distance_current[MS_index[3]] + MS_speed_ex[MS_index[3]])
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_arcs_ex[MS_index[3]] Equal to True
-
Then - Actions
- Set MS_calc_real[1] = MS_arc_distance_ex[MS_index[3]]
- Set MS_calc_real[2] = MS_distance_max[MS_index[3]]
- Set MS_calc_real[3] = MS_distance_current[MS_index[3]]
- Custom script: set udg_MS_calc_real[4] = ( 4 * udg_MS_calc_real[1] / udg_MS_calc_real[2] ) * ( udg_MS_calc_real[2] - udg_MS_calc_real[3] ) * ( udg_MS_calc_real[3] / udg_MS_calc_real[2] )
- Set MS_temp_point[2] = (MS_temp_point[0] offset by MS_speed_ex[MS_index[3]] towards MS_angle_ex[MS_index[3]] degrees)
- Set MS_temp_point[3] = (MS_temp_point[2] offset by MS_calc_real[4] towards MS_arc_core_angle[MS_index[3]] degrees)
- Set MS_calc_real[5] = (Angle from MS_temp_point[1] to MS_temp_point[3])
- Unit - Move MS_missile[MS_index[3]] instantly to MS_temp_point[3], facing MS_calc_real[5] degrees
- Set MS_build_point[MS_index[3]] = (MS_temp_point[0] offset by MS_speed_ex[MS_index[3]] towards MS_angle_ex[MS_index[3]] degrees)
- Set MS_get_X[MS_index[3]] = (X of MS_build_point[MS_index[3]])
- Set MS_get_Y[MS_index[3]] = (Y of MS_build_point[MS_index[3]])
- Custom script: call RemoveLocation(udg_MS_temp_point[2])
- Custom script: call RemoveLocation(udg_MS_temp_point[3])
- Custom script: call RemoveLocation(udg_MS_build_point[udg_MS_index[3]])
-
Else - Actions
- Set MS_temp_point[2] = (MS_temp_point[1] offset by MS_speed_ex[MS_index[3]] towards MS_angle_ex[MS_index[3]] degrees)
- Unit - Move MS_missile[MS_index[3]] instantly to MS_temp_point[2], facing MS_angle_ex[MS_index[3]] degrees
- Custom script: call RemoveLocation(udg_MS_temp_point[2])
-
If - Conditions
- Custom script: set udg_MS_calc_real[1] = GetLocationZ(udg_MS_temp_point[1])
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_calc_real[1] Greater than MS_last_zheight_ex[MS_index[3]]
-
Then - Actions
- Set MS_calc_real[2] = (MS_calc_real[1] - MS_last_zheight_ex[MS_index[3]])
- Animation - Change MS_missile[MS_index[3]] flying height to ((Current flying height of MS_missile[MS_index[3]]) - MS_calc_real[2]) at 0.00
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_calc_real[1] Less than MS_last_zheight_ex[MS_index[3]]
-
Then - Actions
- Set MS_calc_real[2] = (MS_last_zheight_ex[MS_index[3]] - MS_calc_real[1])
- Animation - Change MS_missile[MS_index[3]] flying height to ((Current flying height of MS_missile[MS_index[3]]) + MS_calc_real[2]) at 0.00
- Else - Actions
-
If - Conditions
- Custom script: set udg_MS_last_zheight_ex[udg_MS_index[3]] = GetLocationZ(udg_MS_temp_point[1])
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_parabola_ex[MS_index[3]] Equal to True
-
Then - Actions
- Set MS_calc_real[1] = MS_parabola_height_ex[MS_index[3]]
- Set MS_calc_real[2] = MS_distance_max[MS_index[3]]
- Set MS_calc_real[3] = MS_distance_current[MS_index[3]]
- Custom script: set udg_MS_calc_real[4] = ( 4 * udg_MS_calc_real[1] / udg_MS_calc_real[2] ) * ( udg_MS_calc_real[2] - udg_MS_calc_real[3] ) * ( udg_MS_calc_real[3] / udg_MS_calc_real[2] )
- Animation - Change MS_missile[MS_index[3]] flying height to MS_calc_real[4] at 0.00
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (Current flying height of MS_missile[MS_index[3]]) Less than or equal to 2.00
-
Then - Actions
- Set MS_distance_current[MS_index[3]] = MS_distance_max[MS_index[3]]
- Else - Actions
-
If - Conditions
- Set MS_temp_point[4] = (Position of MS_missile[MS_index[3]])
- Custom script: if udg_MS_temp_group[udg_MS_index[3]] == null then
- Custom script: set udg_MS_temp_group[udg_MS_index[3]] = CreateGroup()
- Custom script: endif
- Set MS_temp_group[MS_index[3]] = (Units within 40.00 of MS_temp_point[4] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of MS_player_
-
Unit Group - Pick every unit in MS_temp_group[MS_index[3]] and do (Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- ((Current flying height of MS_missile[MS_index[3]]) - (Current flying height of (Picked unit))) Less than 50.00
- ((Current flying height of MS_missile[MS_index[3]]) - (Current flying height of (Picked unit))) Greater than -50.00
-
Then - Actions
- Unit - Cause MS_dmg_source_ex[MS_index[3]] to damage (Picked unit), dealing MS_damage_ex[MS_index[3]] damage of attack type Spells and damage type Normal
- Special Effect - Create a special effect attached to the chest of (Picked unit) using MS_unit_hit_eff_ex[MS_index[3]]
- Special Effect - Destroy (Last created special effect)
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (MS_temp_group[MS_index[3]] is empty) Equal to False
-
Then - Actions
- Set MS_distance_current[MS_index[3]] = MS_distance_max[MS_index[3]]
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_distance_current[MS_index[3]] Greater than or equal to MS_distance_max[MS_index[3]]
-
Then - Actions
- Custom script: set udg_MS_last_zheight_ex[udg_MS_index[3]] = 0.0
- Special Effect - Destroy MS_missile_eff[MS_index[3]]
- Special Effect - Create a special effect at MS_temp_point[4] using MS_impact_gfx_ex[MS_index[3]]
- Special Effect - Destroy (Last created special effect)
- Unit - Remove MS_missile[MS_index[3]] from the game
- Custom script: set udg_MS_missile[udg_MS_index[3]] = null
- Set MS_index[1] = (MS_index[1] - 1)
- Set MS_empty_index[MS_index[3]] = True
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_index_selected Equal to False
-
Then - Actions
- Set MS_dyn_index = MS_index[3]
- Set MS_index_selected = True
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_index[3] Equal to MS_index[2]
- MS_index[1] Not equal to 0
-
Then - Actions
- Set MS_index[2] = (MS_index[2] - 1)
- Else - Actions
-
If - Conditions
- Else - Actions
-
If - Conditions
- Custom script: call DestroyGroup(udg_MS_temp_group[udg_MS_index[3]])
- Custom script: set udg_MS_temp_group[udg_MS_index[3]] = null
- Custom script: call RemoveLocation(udg_MS_temp_point[0])
- Custom script: call RemoveLocation(udg_MS_temp_point[1])
- Custom script: call RemoveLocation(udg_MS_temp_point[4])
-
Else - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_index[3] Equal to MS_index[2]
- MS_index[1] Not equal to 0
-
Then - Actions
- Set MS_index[2] = (MS_index[2] - 1)
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- MS_index[1] Equal to 0
-
Then - Actions
- Set MS_index[2] = 0
- Set MS_dyn_index = 0
- Trigger - Turn off (This trigger)
- Else - Actions
-
If - Conditions
-
For each (Integer MS_index[3]) from 1 to MS_index[2], do (Actions)
Take note; the only thing I changed in the "Initialize" and "Loop" triggers are anything 'z height' related.
Please help. Anyone. <3
Attachments
Last edited: