Got a problem with "Finding nearest enemy"

Smygarn777

Member
Reaction score
6
Hello. Im making a map which features a mix of melee and custom games. An altered melee you could say.

For Starters, it has 4 Players each in their corners of the map, with the standard melee goal. Eliminate each other. They start with a goldmine and easy access to a second goldmine.
The difference between melee and non melee maps begin here though, there are no creeps on the entire map! What took their place is the Custom undead i have developed for the map, and they play out like a custom ai with a proper base etc.

These undead are situated in middle to isolate the players from each other, and they also have 2 graveyards adjacent to each player. The undead in the base remains rather defensive, the real offense from the undead that comes from the graveyards. They will spawn periodically and in attack groups move off to attack the players.

This is where i need help. I want the undead groups to attack the nearest "enemy" structure instead of following a region pointed out for them. These undead are simple in mind after all. The problem is, i dont know how to make them start moving towards the nearest enemy structure, and nobody i asked for help knows how to either.

Let me show you a picture of what im after:
Image.jpg


First, we have the Undead graveyard in the bottom left, and the Undead Base at the top left. There is a goldmine between these two points and then we have the Player Starting Location at the right side. I want the undead group that spawns from the graveyard to attack purple's closest structure, not merely move to a region thats placed at Purple's starting location beacon.
(Note that there is not only Purple, but for Blue, Red and Teal as well i will be using this trigger).

Im puzzled and i dont know how to solve this, please help me.
 

cleeezzz

The Undead Ranger.
Reaction score
268
Code:
set Distance = 999999999.
set TempGroup = Units in region matching Owning Player of Matching Unit belongs to an enemy of (Undead Player)
Pick all units in TempGroup and do actions
    set TempReal = Distance between Graveyard and Picked unit
    if TempReal is less than Distance then
         set Distance = TempReal
         set ClosestUnit = Picked Unit
    endif
Custom Script: call DestroyGroup(udg_TempGroup)


free hand, you will need to remove the leaks created from checking the distance between two locations
 

Smygarn777

Member
Reaction score
6
That code is complicated.

Units in region matching owning player of matching unit belongs to enemy player. This puzzles me. I dont understand the triggering very much sorry. Could you explain how each of these are done?
 

Komaqtion

You can change this now in User CP.
Reaction score
469
This might be a better written one ;)

Trigger:
  • Get Nearest Unit
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Animate Dead
    • Actions
      • Set CurrentDistance = 1000000000.00
      • Set DistanceGroup = (Units in (Playable map area) matching ((((Matching unit) is A structure) Equal to True) and (((Matching unit) is alive) Equal to True)))
      • Set CasterPosition = (Position of (Triggering unit))
      • Unit Group - Pick every unit in DistanceGroup and do (Actions)
        • Loop - Actions
          • Set NearestPosition = (Position of (Picked unit))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between CasterPosition and NearestPosition) Less than CurrentDistance
            • Then - Actions
              • Set CurrentDistance = (Distance between CasterPosition and NearestPosition)
              • Set NearestUnit = (Picked unit)
            • Else - Actions
          • Custom script: call RemoveLocation(udg_NearestPosition)
      • Custom script: call RemoveLocation(udg_CasterPosition)
      • Custom script: call DestroyGroup(udg_DistanceGroup)


Ok, so for the concept of this way of getting the nearest unit (Structure).
So, we first set a "Real" variable to some very high value (This needs to be higher than the maximum distance possible in your map ;)) because this is what we're going to use to keep track of if one unit is nearer the caster (In this case) than the next.
Then we need to pick all structures in the map to be able to get their position etc.
That's what this line is for:
Trigger:
  • Set DistanceGroup = (Units in (Playable map area) matching ((((Matching unit) is A structure) Equal to True) and (((Matching unit) is alive) Equal to True)))


Then we need to check if the distance between the current unit is smaller than the previously saved distance (CurrentDistance variable ;)), and if it is, set a "Unit" variable to that unit, so we know which unit it was later on :D

Then you should just order the ghouls to "Attack-Move" to that structure, and you're good :D
 

Smygarn777

Member
Reaction score
6
Set Caster Position = Position of triggering unit

Sorry, but how do you set it to "Position of triggering unit"? Btw, they are spawned, not created by another unit. They're created in another trigger.
 

Komaqtion

You can change this now in User CP.
Reaction score
469
That variable is a "Point" variable, but you should use a point where the ghouls are spawned instead :D
Where are they spawneed exactly ? :S
Is there a building or so where they are spawned at ?
Like the "Starting Location" ?

Well, if you're creating them in another trigger, then save them as a Unit Group, and implement my actions into it ;)

Then just do "Unit Group - Issue order targetting an object" (Or whatever it's called :S) for that unit group ;)
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    New recipe is another summer dessert Berry and Peach Cheesecake - https://www.thehelper.net/threads/recipe-berry-and-peach-cheesecake.194169/

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top