Could I get some help fixing this memory leak?

Nureru

New Member
Reaction score
1
Everything I've tried has broken the trigger, and I'm getting frustrated.

Code:
Set Did_Chain_Propagate = False
Unit Group - Pick every unit in Chain and do (Actions)
    Loop - Actions
        Player Group - Pick every player in team and do (Actions)
            Loop - Actions
                Set chainlocation = (Position of (Picked unit))
                Unit Group - Pick every unit in (Units owned by (Owner of (Triggering unit)) matching (((Unit-type of (Matching unit)) Not equal to Builder) and ((((Matching unit) is in Chain) Equal to False) and ((Distance between chainlocation and (Position of (Matching unit))) Less than 182.00)))) and do (Actions)
                    Loop - Actions
                        Unit Group - Add (Picked unit) to Chain
                        If ((Y of chainlocation) Less than Chain_min_y) then do (Set Chain_min_y = (Y of chainlocation)) else do (Do nothing)
                        If ((Y of chainlocation) Greater than Chain_max_y) then do (Set Chain_max_y = (Y of chainlocation)) else do (Do nothing)
                        Set Did_Chain_Propagate = True
Custom script:   call RemoveLocation( udg_chainlocation )
If (Did_Chain_Propagate Equal to True) then do (Trigger - Run (This trigger) (checking conditions)) else do (Trigger - Run Chain finished propagating <gen> (checking conditions))

I know using the Position of (Matching Unit) is bad, but I can't figure out how to set that manually before I need to use it there.
 

vypur85

Hibernate
Reaction score
803
Code:
Set Did_Chain_Propagate = False
Unit Group - Pick every unit in Chain and do (Actions)
    Loop - Actions
        Player Group - Pick every player in team and do (Actions)
            Loop - Actions
                Set chainlocation = (Position of (Picked unit))
                Unit Group - Pick every unit in (Units owned by (Owner of (Triggering unit)) matching (((Unit-type of (Matching unit)) Not equal to Builder) and ((((Matching unit) is in Chain) Equal to False) and [del]((Distance between chainlocation and (Position of (Matching unit))) Less than 182.00))))[/del] and do (Actions)
                    Loop - Actions
                       [B]Set SomePoint = Position of (Picked unit)[/B]
                       If then else
                          Condition
                             ((Distance between chainlocation and [B]SomePoint[/B]) Less than 182.00))))
                          Then - Actions
                             Unit Group - Add (Picked unit) to Chain
                             If ((Y of chainlocation) Less than Chain_min_y) then do (Set Chain_min_y = (Y of chainlocation)) else do (Do nothing)
                             If ((Y of chainlocation) Greater than Chain_max_y) then do (Set Chain_max_y = (Y of chainlocation)) else do (Do nothing)
                             Set Did_Chain_Propagate = True
                          Else - Actions
                       [B]Custom script:  call RemoveLocation...[/B]
                Custom script:   call RemoveLocation( udg_chainlocation )
If (Did_Chain_Propagate Equal to True) then do (Trigger - Run (This trigger) (checking conditions)) else do (Trigger - Run Chain finished propagating <gen> (checking conditions))

Try not to use any potentially leaky stuff in the filter function (not in GUI). You need to set the point in the loop itself. Then filter again using ITE.
 

Nureru

New Member
Reaction score
1
I guess I fixed it by doing it like this

Trigger:
  • Unit Group - Pick every unit in (Units owned by (Owner of (Triggering unit)) matching (((Unit-type of (Matching unit)) Not equal to Builder) and (((Matching unit) is in Chain) Equal to False))) and do (Actions)
    • Loop - Actions
      • Set matchlocation = (Position of (Picked unit))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Distance between chainlocation and matchlocation) Less than 182.00
        • Then - Actions
          • Unit Group - Add (Picked unit) to Chain
          • If ((Y of chainlocation) Less than Chain_min_y) then do (Set Chain_min_y = (Y of chainlocation)) else do (Do nothing)
          • If ((Y of chainlocation) Greater than Chain_max_y) then do (Set Chain_max_y = (Y of chainlocation)) else do (Do nothing)
          • Set Did_Chain_Propagate = True
        • Else - Actions


But it's behaving a bit quirky. It works now, but when I check the length of the chain with this trigger
Trigger:
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • (Chain_max_y - Chain_min_y) Greater than or equal to 1024.00
    • Then - Actions
      • Set walleffect = (Position of (Triggering unit))
      • Special Effect - Create a special effect at walleffect using Abilities\Spells\Human\DispelMagic\DispelMagicTarget.mdl
      • Special Effect - Destroy (Last created special effect)
      • Custom script: call RemoveLocation( udg_walleffect )
      • Unit - Remove (Triggering unit) from the game
      • Player - Add (((Point-value of (Triggering unit)) x 125) / 100) to (Owner of (Triggering unit)) Current gold
      • Game - Display to (All players) for 5.00 seconds the text: (Pipeline blocked; chain length = + (String((Chain_max_y - Chain_min_y))))
    • Else - Actions
      • Game - Display to (All players) for 5.00 seconds the text: (No blocking yet; vertical chain length is only + (String((Chain_max_y - Chain_min_y))))


it takes three towers before it starts increasing the length. Since it works I suppose it's probably nothing to worry about, but any idea why it might be doing that?
 

Defi4nc3

Developer of DORPG
Reaction score
20
No you didn't fix it, your missing the most obvious... Unit Groups cause Leaks, you need a Unit Group Variable~

call DestroyGroup(udg_YourUnitGroup) = Remove Unit Groups

call DestroyForce(udg_team) = Removing your Player Group

Your initial Unit Group trigger is not a variable...

Set UnitGroup = (Units owned by (Owner of (Triggering unit)) matching (((Unit-type of (Matching unit)) Not equal to Builder) and (((Matching unit) is in Chain) Equal to False))) and do (Actions)

etc... for your start...
 

Nureru

New Member
Reaction score
1
How's this
Trigger:
  • Actions
    • Set Did_Chain_Propagate = False
    • Unit Group - Pick every unit in Chain and do (Actions)
      • Loop - Actions
        • Player Group - Pick every player in team and do (Actions)
          • Loop - Actions
            • Set chainlocation = (Position of (Picked unit))
            • Set unitgroup = (Units owned by (Owner of (Triggering unit)) matching (((Unit-type of (Matching unit)) Not equal to Builder) and (((Matching unit) is in Chain) Equal to False)))
            • Unit Group - Pick every unit in unitgroup and do (Actions)
              • Loop - Actions
                • Set matchlocation = (Position of (Picked unit))
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (Distance between chainlocation and matchlocation) Less than 182.00
                  • Then - Actions
                    • Unit Group - Add (Picked unit) to Chain
                    • If ((Y of chainlocation) Less than Chain_min_y) then do (Set Chain_min_y = (Y of chainlocation)) else do (Do nothing)
                    • If ((Y of chainlocation) Greater than Chain_max_y) then do (Set Chain_max_y = (Y of chainlocation)) else do (Do nothing)
                    • Set Did_Chain_Propagate = True
                  • Else - Actions
    • Custom script: call RemoveLocation( udg_chainlocation )
    • Custom script: call RemoveLocation( udg_matchlocation )
    • Custom script: call DestroyGroup( udg_unitgroup )
    • If (Did_Chain_Propagate Equal to True) then do (Trigger - Run (This trigger) (checking conditions)) else do (Trigger - Run Chain finished propagating &lt;gen&gt; (checking conditions))


I remove the player group in Chain finished propagating
 

vypur85

Hibernate
Reaction score
803
This:
Code:
Actions
    Set Did_Chain_Propagate = False
    Unit Group - Pick every unit in Chain and do (Actions)
        Loop - Actions
            Player Group - Pick every player in team and do (Actions)
                Loop - Actions
                    Set chainlocation = (Position of (Picked unit))
                    Set unitgroup = (Units owned by (Owner of (Triggering unit)) matching (((Unit-type of (Matching unit)) Not equal to Builder) and (((Matching unit) is in Chain) Equal to False)))
                    Unit Group - Pick every unit in unitgroup and do (Actions)
                        Loop - Actions
                            Set matchlocation = (Position of (Picked unit))
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                If - Conditions
                                    (Distance between chainlocation and matchlocation) Less than 182.00
                                Then - Actions
                                    Unit Group - Add (Picked unit) to Chain
                                    If ((Y of chainlocation) Less than Chain_min_y) then do (Set Chain_min_y = (Y of chainlocation)) else do (Do nothing)
                                    If ((Y of chainlocation) Greater than Chain_max_y) then do (Set Chain_max_y = (Y of chainlocation)) else do (Do nothing)
                                    Set Did_Chain_Propagate = True
                                Else - Actions
                            [B]Custom script:   call RemoveLocation( udg_matchlocation )
                    Custom script:   call RemoveLocation( udg_chainlocation )
                    Custom script:   call DestroyGroup( udg_unitgroup )[/B]
    If (Did_Chain_Propagate Equal to True) then do (Trigger - Run (This trigger) (checking conditions)) else do (Trigger - Run Chain finished propagating <gen> (checking conditions))

Anyway, does it not crash? Did you try in-game?
 
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