Get Nearest Unit (GNU)

Leazy

You can change this now in User CP.
Reaction score
50
Hello! I'm trying to make a trigger which easily allows me to get the nearest unit. This is what I've done, but it doesn't seem to work:

Trigger:
  • Get Nearest Unit
    • Events
    • Conditions
    • Actions
      • Set GNU_Unit = No unit
      • For each (Integer GNU_Loop) from 1 to (Integer((GNU_Range / 20.00))), do (Actions)
        • Loop - Actions
          • Set GNU_Group[2] = (Units within ((Real(GNU_Loop)) x 20.00) of GNU_Point matching (((Matching unit) is in GNU_Group[1]) Equal to True))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (GNU_Group[2] is empty) Equal to False
            • Then - Actions
              • Set GNU_Group[3] = (Random 1 units from GNU_Group[2])
              • Unit Group - Pick every unit in GNU_Group[3] and do (Set GNU_Unit = (Picked unit))
              • Special Effect - Create a special effect attached to the overhead of GNU_Unit using Abilities\Spells\Human\DispelMagic\DispelMagicTarget.mdl
              • Special Effect - Destroy (Last created special effect)
            • Else - Actions
          • Custom script: call DestroyGroup(udg_GNU_Group[1])
          • Custom script: call DestroyGroup(udg_GNU_Group[2])
          • Custom script: call DestroyGroup(udg_GNU_Group[3])
      • Custom script: call RemoveLocation (udg_GNU_Point)


Test trigger:
Trigger:
  • Untitled Trigger 001
    • Events
      • Player - Player 1 (Red) skips a cinematic sequence
    • Conditions
    • Actions
      • Set GNU_Point = (Position of Demon Hunter 0000 <gen>)
      • Set GNU_Range = 800.00
      • Set GNU_Group[1] = (Units within GNU_Range of GNU_Point matching ((((Matching unit) belongs to an enemy of (Owner of Demon Hunter 0000 <gen>)) Equal to True) and (((Matching unit) is alive) Equal to True)))
      • Trigger - Run Get Nearest Unit <gen> (checking conditions)


The problem is that no unit is picked.
 

Accname

2D-Graphics enthusiast
Reaction score
1,462
1). Pick all units in a certain range and save them in a unit group.
2). Select a random unit from that group and set it to be the nearest unit.
3). Iterate through all units in the group and compare the distances.
4). when you find a unit which is even closer set this unit to be the new "nearest" unit.
5). After the first iteration through the group you got what you are looking for.
 

DrEvil

FCRI Associate!
Reaction score
111
Accname's suggested way is the most common to find the closest unit.

Just to further explain to Leazy, some pseudo-code as to what is described:


Code:
//GNU_Unit =null;
GNU_Curdist=800;
// set it to the max range, this way you don't have to pick a random unit, and therefore not compare it to itself later on.
For(Each unit in GNU_group){
    GNU_Distance = Distance from (Original Point and 'Picked Unit'(?))
    if(GNU_Distance<GNU_Curdist)
        GNU_Unit='Picked Unit'
        GNU_Curdist=GNU_Distance
}
//GNU_Curdist should equal the distance from the center point and GNU_Unit
 

Leazy

You can change this now in User CP.
Reaction score
50
Ah yeah that idea is much better than mine, thanks Accname!


No worries, I know how to do it, thanks anyway though DrEvil :)
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top