Due to the 5 minute wait my units spend some time standing around twiddling their thumbs before they head off around the map again, assuming they weren't delayed by getting in a fight. Since I've used a real time value that period will be even longer (relatively) when playing the game at max speed. I was trying to think of a more efficient way of doing this and this morning I came up with an idea. I wanted to run it past you guys before changing all my triggers, which took me ages to get working since this is my first map. The idea is for the unit to patrol the map in a circuit, and when he dies another unit is spawned. This process rotates through 6 diff units until the map is completed. My new idea is roughly this:
WHILE unit is alive:
IF unit location is point 1
THEN: my series of attack point actions to get it to patrol in a circuit
ELSE: leave this blank
I assume this IF statement nested in the while action will just keep looping until the unit dies, only giving the attack commands when he returns to his original position. Will this work?
Ok, that didn't work....and I thought I was onto something. I just get the "Execution took too long" error. Anyone know why? I would have thought it wouldn't reissue the attack commands until the unit returned. Here's the code I tried.
That's because it is looping infinitely, and very fast.
Here's what you should do. Split it into two triggers. The first orders the unit to patrol. Only put the orders you have here once, and have it retrigger whenever the enters Point 004.
The second will do what your current trigger does minus the patrolling.
Make your while loop wait 0.1seconds, then check if the unit is still alive. If yes, keep looping, if not, then run Ghost 22, and exit out of the trigger.
I don't understand why it's looping infinitely or why it's issuing the orders every loop. The way it reads to me it should only loop until the condition is no longer met, which would be when the unit dies, not infinitely. And the orders in the IF statement should only be issued when the unit is at point 004. Can you explain to me why it's not functioning the way I expect it to? I must be misunderstanding something about how it works.
Sorry my bad, I didn't mean infinite per say, but rather very fast in a very short amount of time, hogging up all the pc's power and that's what causing the error. It might be running the trigger million of times in less than a second or millisecond.
I didn't say it was giving the order more than once, but rather I said that in a new trigger specific for the orders, don't make a loop for the order, but rather have it retrigger when the unit rereaches the point 004.
You can add a Wait 0.1 seconds for this trigger instead of making 2 new ones, and that will remove the error. But I think that then there's the possibility that the unit won't be exactly at point 4 when the If condition is tested, although I'm not quite sure. You will have to do some testing to see if it works.
So it's not that it's issuing the orders repeatedly, it's just because the WHILE is looping so fast? I assumed it was overloading on attack actions. *slaps forehead*
If I'd realised I could have fixed it myself by adding the wait to my WHILE. If the unit isn't quite at point 004 when it loops it shouldn't matter, i'll only have to wait 0.1 seconds.
Due to the 5 minute wait my units spend some time standing around twiddling their thumbs before they head off around the map again, assuming they weren't delayed by getting in a fight. Since I've used a real time value that period will be even longer (relatively) when playing the game at max speed. I was trying to think of a more efficient way of doing this and this morning I came up with an idea. I wanted to run it past you guys before changing all my triggers, which took me ages to get working since this is my first map. The idea is for the unit to patrol the map in a circuit, and when he dies another unit is spawned. This process rotates through 6 diff units until the map is completed. My new idea is roughly this:
WHILE unit is alive: IF unit location is point 1 THEN: my series of attack point actions to get it to patrol in a circuit ELSE: leave this blank
I assume this IF statement nested in the while action will just keep looping until the unit dies, only giving the attack commands when he returns to his original position. Will this work?
Ok, that didn't work....and I thought I was onto something. I just get the "Execution took too long" error. Anyone know why? I would have thought it wouldn't reissue the attack commands until the unit returned. Here's the code I tried.
I'm not sure have you solved sound problem but I'm linking this tutorial while I think its best tutorial for how-to-do-new-unit http://forums.sc2mapster.com/resources/tutorials/8361-data-creating-units-weapons-and-more/
Yeah I got that working thanks. My triggers issue is the only problem left now.
@clawcity:
That's because it is looping infinitely, and very fast.
Here's what you should do. Split it into two triggers. The first orders the unit to patrol. Only put the orders you have here once, and have it retrigger whenever the enters Point 004.
The second will do what your current trigger does minus the patrolling.
Make your while loop wait 0.1seconds, then check if the unit is still alive. If yes, keep looping, if not, then run Ghost 22, and exit out of the trigger.
I don't understand why it's looping infinitely or why it's issuing the orders every loop. The way it reads to me it should only loop until the condition is no longer met, which would be when the unit dies, not infinitely. And the orders in the IF statement should only be issued when the unit is at point 004. Can you explain to me why it's not functioning the way I expect it to? I must be misunderstanding something about how it works.
@clawcity: Go
Sorry my bad, I didn't mean infinite per say, but rather very fast in a very short amount of time, hogging up all the pc's power and that's what causing the error. It might be running the trigger million of times in less than a second or millisecond.
I didn't say it was giving the order more than once, but rather I said that in a new trigger specific for the orders, don't make a loop for the order, but rather have it retrigger when the unit rereaches the point 004.
You can add a Wait 0.1 seconds for this trigger instead of making 2 new ones, and that will remove the error. But I think that then there's the possibility that the unit won't be exactly at point 4 when the If condition is tested, although I'm not quite sure. You will have to do some testing to see if it works.
So it's not that it's issuing the orders repeatedly, it's just because the WHILE is looping so fast? I assumed it was overloading on attack actions. *slaps forehead* If I'd realised I could have fixed it myself by adding the wait to my WHILE. If the unit isn't quite at point 004 when it loops it shouldn't matter, i'll only have to wait 0.1 seconds.
@clawcity: Go
I hope it's working now :)
It's ALIVE!!!
If anyone would like to try the finished product it's on battle.net as a melee map titled "Where Spirits Walk"