• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[Spell] Open/Close Gate efficiently + ignore pathfinding for Gates

Status
Not open for further replies.
Level 12
Joined
May 16, 2020
Messages
660
Hi guys,

In my map I will have 6-8 different gates, which I want to open/close when specific units are nearby/are no longer nearby. The two triggers below work for what I want, but since I would need to create 2 triggers for every gate I end up with 12-16 triggers for just this function, which in my opinion is inefficient.

Also, when some of the gates are open and some closed, my hero takes an inefficient path to the gates which are open, instead of through the closest gates which would would open for him.

So 2 questions:
  1. Is it possible to condense these triggers for every door on the map?
  2. Is it possible for units to treat the gate as "open", even when it's closed?

  • Gate Enter
    • Events
      • Unit - A unit enters Gate North <gen>
    • Conditions
      • Gate_Boolean[1] Equal to False
      • Or - Any (Conditions) are true
        • Conditions
          • (Owner of (Triggering unit)) Equal to Player 1 (Red)
          • And - All (Conditions) are true
            • Conditions
              • ((Triggering unit) is A Hero) Equal to True
              • ((Triggering unit) belongs to an ally of Player 1 (Red).) Equal to True
    • Actions
      • Set VariableSet Gate_Boolean[1] = True
      • Destructible - Open Gate[1]
  • Gate Exit
    • Events
      • Unit - A unit leaves Gate North <gen>
    • Conditions
      • Gate_Boolean[1] Equal to True
      • (Number of units in (Units in Gate North <gen>)) Equal to 0
      • Or - Any (Conditions) are true
        • Conditions
          • (Owner of (Triggering unit)) Equal to Player 1 (Red)
          • And - All (Conditions) are true
            • Conditions
              • ((Triggering unit) is A Hero) Equal to True
              • ((Triggering unit) belongs to an ally of Player 1 (Red).) Equal to True
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
        • Then - Actions
          • Set VariableSet Gate_Boolean[1] = False
          • Destructible - Close Gate[1]
        • Else - Actions
 

Uncle

Warcraft Moderator
Level 63
Joined
Aug 10, 2018
Messages
6,457
To treat the gate as open, you would want to remove the pathing from the gate and trigger the pathing with a push effect. A unit enters Gate Region -> If Gate = Closed -> Push unit back.

And to make things more efficient you can store the gate Regions in an Array, and then use a For Loop to detect which Region your entering unit is in.

So you would create the Array:
  • Set GateRegion[1] = Gate North
  • Set GateRegion[2] = Gate South
Then you would add all of the enters Gate Events to a single trigger:
  • Unit - A unit enters Gate North
  • Unit - A unit enters Gate South
Then use a For Loop to detect if "GateRegion[X] contains triggering unit".

Also, Regions have sizing issues that will cause many problems. A solution can be found in my bottom post in this thread:
RectContainsUnit doesn't work
 

Uncle

Warcraft Moderator
Level 63
Joined
Aug 10, 2018
Messages
6,457
It could work as anything, it could even be a special effect if you don't need to click it. You can use pathing blockers to cover the parts of the gate that should always have pathing.
 
Status
Not open for further replies.
Top