Here's a revised version of your work.
Create a Unit-Type array - but before you do, you need to keep in mind you need multiple arrays for multiple types of monsters per wave.
So, say you want 3 monster types per wave (or more).
Check ''Array'' box and each one won't have an initial value when you make them.
Make sure the variable is set to 'Unit-Type'
Create an Integer Array variable. Simply put, this is a Integer variable with the ''Array'' checked.
Keep in mind, you need 1 Integer array for each type of monster.
You need to create a ''point'' array variable from the down down list.
Make sure it's checked as an ''Array''.
You need to create a ''Increment'' integer and a ''Level'' integer to determine which level you're on. (these are NOT an array).
You also need to create a ''Timer'' Variable to Countdown which level you're on. (this one is NOT an array).
Lets start off by setting Unit-Type variables and Unit-Amount variables for each wave, and set starting variables for any easy-to-do TD map.
Okay, let me explain this trigger. Basically, we just set it up so that the unit types for level 1 are a Zombie, Skeleton Warrior, and Ghoul, on the second level the unit-types change (because it's harder).
Since we're going to setup the level's to use multiple units of each type, you can increase difficulty without changing the base unit by simply adding MORE units per wave.
Also keep in mind everytime you set the next level up, you need to change the [#] inside the [#] box next to each array, this relates to the level integer variable we're about to setup for you.
In the example above I put in 1, or 2, or 3 amounts for the corresponding amount of units spawn for each type. So, each Unit-type, matches it's Unit-amount integer.
Next.. Setup the Time elapsed trigger, and then the Countdown timer window trigger.
Time - Elapsed game time is 25.00 seconds
This trigger uses multiple concatenate strings and uses the String - Integer conversion to put in the Wave number you're on.
Time - roundwindow expires
This sets it up so when it expires it hides the window till all of player 12's units are dead, once they're dead it starts the timer back up for the next wave to be created. This is similar to how we also spawn units in the aspect that it revolves around an expiring one-shot timer (further down).
Next... We'll deal with setting Regions = to the ''point'' (aka location) variable integer.
NOTE: Make sure you set the array values = to the amount of types, for unit-types, to the amount of levels for unit-amounts, and to the amount of regions you wish to spawn from, for your Location_Var.
In the example above I set the Location's Variable = to 1 through 4 for regions 1-4.
Okay this next trigger is where it gets complicated.
This create's (#) of units you specified for (Unit-type) you specified, at the 1st location (Increment = 1, remember?) you also set previously, facing default degrees. It then increases the Increment Variable per loop (4 times for 4 regions).
Finally, after the loop is over it increases the Level_Variable so that next time it pulls from the array variables it pulls from the  group you set in the first trigger above.
NOTE1: that at the start of the Trigger we set Increment = 1 so that it reset's the variable to spawn at each of the 4 regions we had setup all over again.
NOTE2: when you setup the 'time expires' event, you can tell it to add gold per level there (by pick every player function). etc. You can also base it on an amount you set just like monster variables.
I hope this elaborates (and works out) issues for some of you. I just tested these triggers exactly as I wrote them (unless I have misswritten them), and everything seems to work perfectly. Good Luck!