[Trigger] Ping minimap in a circle doesn't work

Level 6
Joined
Dec 6, 2009
Messages
173
Hello!

I have created a circle using units and that works without any problems. But when I try to ping the same area as the units would spawn in, then it doesn't ping at the same location and it really confuses me as to why since I use the exact same location. Any help is appreciated.

Instead of pinging on the minimap in a circle it pings around one of the locations points in like a oval shape.

Setup Trigger
  • Circle Setup
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set VariableSet Circle_DummyUnit = Outer Ring
      • Set VariableSet Circle_ShrinkSpeed = 10.00
      • Set VariableSet Circle_Center = (Center of (Playable map area))
      • Set VariableSet Circle_MaxRadius = 10000.00
      • Set VariableSet Circle_Radius[1] = 5000.00
      • Set VariableSet Circle_Radius[2] = 2000.00
      • Set VariableSet Circle_Radius[3] = 1000.00
      • Set VariableSet Circle_MinRadius = 500.00
      • Set VariableSet Circle_DummyCount = 200
      • Set VariableSet Circle_OwningPlayer = Player 24 (Peanut)
      • -------- --------- --------
      • Set VariableSet Circle_CurrRadius = Circle_MaxRadius
      • Set VariableSet Circle_DummyAngle = (360.00 / (Real(Circle_DummyCount)))
Circle ping trigger
  • Circle Start Message
    • Events
      • Time - Circle_Timer5 expires
    • Conditions
    • Actions
      • Game - Display to (All players) for 10.00 seconds the text: (The circle starts at + (Quest_String[1] + (: + Quest_String[2])))
      • For each (Integer A) from 1 to Circle_DummyCount, do (Actions)
        • Loop - Actions
          • Set VariableSet Circle_CurrentPoint = (Circle_Center offset by Circle_MaxRadius towards (Circle_DummyAngle x (Real((Integer A)))) degrees.)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (X of Circle_CurrentPoint) Greater than WB_MaxX
                  • (X of Circle_CurrentPoint) Less than WB_MinX
                  • (Y of Circle_CurrentPoint) Greater than WB_MaxY
                  • (Y of Circle_CurrentPoint) Less than WB_MinY
            • Then - Actions
              • Custom script: call RemoveLocation(udg_Circle_CurrentPoint)
            • Else - Actions
              • Unit - Create 1 Circle_DummyUnit for Circle_OwningPlayer at Circle_CurrentPoint facing 0.00 degrees <----------------- This works
              • Set VariableSet Circle_Dummy[(Integer A)] = (Last created unit)
              • Cinematic - Ping minimap for (All players) at Circle_CurrentPoint for 2.00 seconds <------------------- This doesn't work
              • Custom script: call RemoveLocation(udg_Circle_CurrentPoint)
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
Do you receive all 200 pings? That seems like A LOT to create all at once. Since pings are fairly large in size on the minimap you could probably separate their creation to happen say every 5 loop cycles. That way you only create 40 pings instead of 200.

Anyway, here's a revised trigger:
  • Circle Start Message
    • Events
      • Time - Circle_Timer5 expires
    • Conditions
    • Actions
      • Game - Display to (All players) for 10.00 seconds the text: (The circle starts at + (Quest_String[1] + (: + Quest_String[2])))
      • For each (Integer Circle_Loop) from 1 to Circle_DummyCount, do (Actions)
        • Loop - Actions
          • Set VariableSet Circle_CurrentPoint = (Circle_Center offset by Circle_MaxRadius towards (Circle_DummyAngle x (Real(Circle_Loop))) degrees.)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (X of Circle_CurrentPoint) Less than WB_MaxX
              • (X of Circle_CurrentPoint) Greater than WB_MinX
              • (Y of Circle_CurrentPoint) Less than WB_MaxY
              • (Y of Circle_CurrentPoint) Greater than WB_MinY
            • Then - Actions
              • Cinematic - Ping minimap for (All players) at Circle_CurrentPoint for 2.00 seconds
              • Unit - Create 1 Circle_DummyUnit for Circle_OwningPlayer at Circle_CurrentPoint facing 0.00 degrees
              • Set VariableSet Circle_Dummy[Circle_Loop] = (Last created unit)
            • Else - Actions
          • Custom script: call RemoveLocation(udg_Circle_CurrentPoint)
I used my own variable instead of (Integer A), Removed the Point leak once, and restructured the If Then Else logic.

Here's an example of the Ping separation logic using multiples of 5:
  • Then - Actions
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • (Circle_Loop mod 5) Equal to 0
      • Then - Actions
        • Cinematic - Ping minimap for (All players) at Circle_CurrentPoint for 2.00 seconds
      • Else - Actions
    • Unit - Create 1 Circle_DummyUnit for Circle_OwningPlayer at Circle_CurrentPoint facing 0.00 degrees
    • Set VariableSet Circle_Dummy[Circle_Loop] = (Last created unit)
 
Last edited:
Level 6
Joined
Dec 6, 2009
Messages
173
So I found the issue. It seems like if I go over around ~16 pings at the same time then it will not work, then one ping or more will be missing. If I do a ton of pings like I tried to do it goes bananas. I am not sure if they go bananas because they are too close or why.

I actually tried to make it be much less than 200 before I posted but I did still make like 40 circles so the issue remained. Thank you for your kind help and +rep.
 
Top