Why does my loop die on me?

Bogrim

y hello thar
Reaction score
154
This isn't the first time I've encountered this problem. I use game text messages to track how far the loop goes. In this game, the loop seems to stop at random times which ruins the spell itself.
Trigger:
  • Ability Earthquake begin
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Earthquake ()
    • Actions
      • Custom script: local location l = GetSpellTargetLoc()
      • Custom script: local unit u = GetSpellAbilityUnit()
      • Custom script: set udg_temp_location[0] = l
      • Environment - Create a 22.00 second Normal ripple deformation at temp_location[0] with starting radius 300.00, ending radius 300.00, and depth 40.00, using 1.00 second ripples spaced 150.00 apart
      • Game - Display to (All players) the text: trigger
      • For each (Integer A) from 1 to 20, do (Actions)
        • Loop - Actions
          • Wait 1.00 seconds
          • Custom script: set udg_temp_location[0] = l
          • Custom script: set udg_temp_unit = u
          • Set temp_group = (Units within 300.00 of temp_location[0] matching ((((Matching unit) belongs to an enemy of (Owner of temp_unit)) Equal to True) and (((Matching unit) is alive) Equal to True)))
          • Game - Display to (All players) the text: ((String((Integer A))) + loop)
          • Unit Group - Pick every unit in temp_group and do (Actions)
            • Loop - Actions
              • Unit - Cause temp_unit to damage (Picked unit), dealing ((Real((Integer A))) x 10.00) damage of attack type Spells and damage type Normal
              • Set temp_location[1] = (Position of (Picked unit))
              • Special Effect - Create a special effect at temp_location[1] using Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
              • Custom script: call RemoveLocation(udg_temp_location[1])
              • Set temp_effect = (Last created special effect)
              • Trigger - Run Destroy Special Effect <gen> (ignoring conditions)
      • Custom script: call RemoveLocation(l)

Can someone enlighten me what holy law of loops I have broken? ;(
 

bOb666777

Stand against the ugly world domination face!
Reaction score
117
Would you care to tell us which parts of the loop run and where it stops running (I know you said it stops at random times but still?)?

For example does the message "((String((Integer A))) + loop)" appear?
Does only one unit get damaged?
Does the ImpaleTargetDust.mdl special effect even appear?

It can't really be random there has to be something that repeats or whatever.

What I suggest is really to put a message after every action in the loop.
 

Slapshot136

Divide et impera
Reaction score
471
Thats only in (Pick every unit in blah group). An integer A loop is fine with waits.

no. let me clarify:

there can only be 1 integer A loop going on at once, and only 1 integer B loop going on at once. otherwise errors will occur

you can have 1 integer A loop at the same time as 1 integer B loop

the problem isn't necessarily the wait, but if another trigger uses the integer A loop before that one is done, then it will cause problems - avoiding waits is a simple way to avoid this, as there there cant be 2 going on at the same time if it's instant
 

Bogrim

y hello thar
Reaction score
154
I did some further testing. The only other trigger I had running was a spawn trigger, which also used an integer a loop.
no. let me clarify:

there can only be 1 integer A loop going on at once, and only 1 integer B loop going on at once. otherwise errors will occur

you can have 1 integer A loop at the same time as 1 integer B loop

the problem isn't necessarily the wait, but if another trigger uses the integer A loop before that one is done, then it will cause problems - avoiding waits is a simple way to avoid this, as there there cant be 2 going on at the same time if it's instant
This explains a ton. Of course the trigger started working as soon as I disabled the spawn trigger and tested on some manually placed mobs instead. But how can I avoid spells like that conflicting with each other as some of them require loops with waits in them?

I'm guessing some integer variable array with a number unique to each spell?
 

bOb666777

Stand against the ugly world domination face!
Reaction score
117
Everytime you have to use a wait in a loop, use the Integer variable loop

(In the list you have Integer A, Integer B and Integer Variable)
It lets you use any integer instead of just A or B
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top