Here are the basic ways:
-Use a seperate index in an array for each unit
-Have no waits in your spell, or pass variables using something like custom values, or ability levels
Well firstly, if you don't use timed actions, none of the Event variables (Which in general are globals) that you use will be overwritten, so it will always be mui.
For example:
Unit casts Blah
Make dummy
Add generic expiration timer to last created
Order dummy to cast "Blah"
That is mui, because there are no waits, it all happens instantly with the correct details at the time.
You can also use unit custom data to pass on information like levels of abilities etc, rather than using a global integer.
Another way to make something MUI is to use unit groups.
Unit casts ability
Add unit to ability Unit Group
Every 3.00 seconds of gametime
Pick every unit in Ability Unit group
Do something.
Finally there are arrays. Normally they are used to make spells etc MPI, meaning multi-player rather than multi-unit, which means you can only have one unit per play cast the ability at any one time.
What that does is go set array[Player Number(Owner of triggering unit)] = blah
and works from that basis.
Using Unit Groups can be good too, for durational spells with buff.
You can check the units with that buff every sometime and do something with them, then remove them from the unit group if they don't have the buff anymore.
Here's an MUI spell I made in GUI - Black Arrow. I used an increasing integer variable (which increases everytime the ability is cast), and assigned the variable to a dummy unit's custom value and added the dummy to a unit group only used for dummy units. Casting unit, target points, angles etc (anything with a variable array basically) had the array value set to the current integer variable's value.
Then in my movement trigger, I picked all units in the dummy unit group, and moved them towards <Angle variable>[Array index - Custom value of picked unit]. Each unit's current distance, angle, and additional stuff (damage counters etc) was stored in variable arrays.
I took a long way around when making that spell (I created another dummy which was placed at a random point on the map, set its custom value to the picked unit's (the used dummy) custom value. That allowed me to use a different unit group loop (for AoE damage), but still refer back to the original picked unit's (the used dummy) custom value to access the variables. If you understood all of this, I hope it helps (and Black Arrow is the less-cluttered spell to work with ^^, my Frozen Orb ability is much larger imo)
I'm on a page about incorrect corrections, and spent the better part of like two hours trying to get someone to understand that -5^2 = -25, not 25, and then that post had comments get reposted because that group is self sustaining, and that person was in turn trying to explain what I just explained to them. And I'm taking that as a victory
I will be AFK for a couple of days you guys hold down the fort while I am gone. I will be checking in on my phone but that will severly limit me. Be back saturday!