Jeff Skyrunner: You should post your capx in a topic of your own.
The actual informations you are giving are not enough at all to help explaining what is going on.
You mention a wrong number of instances being spawned, that apparently has to do with the value of iNumLaser, since it is used as boundary in your loop, but we don't know where it is coming from.
And when you delay, you are actually using the wrong "iTargetX" value, since you delayed the command, but the actual ShipSelected coordinates used is not delayed.
Either save the actual coordinates to use with the same time offset (like in an array in wich you would push coordinates, and read them when the wait command has finished kicking in.)
Maydie: Unfortunately, I'm afraid you can't really prevent the freeze caused by numerous instances being created/destroyed in a single tick.
A way to cheat, is to have the spawn occur over several ticks instead of a single one, but I'm very unclear on what you are exactly attempting to do in the first place;, so I'm not sure this would fit.
Nevertheless, it is a bad design in the first place to destroy/Create a lot of instances in a single tick, and you should modify this idea first in order to be able to implement something more appropriate.