First:
Why do you have variables named after the Waypoints?
OK, you want to be able to do is for every chopper, so you get the vehicle from the array given by ofp to your script.
The variables you create below (the ones with the underscore, "_") are simply integers, which means they contain a single number.
Then you have a "conditional wait", meaning the script will pause until a certain condition is met, in this case, the player being in the chopper.
Now you want to order the chopper to fly to two positions (set by a marker) and then do something?
At this point, note that "move" creates an actual waypoint, meaning the waypoint is added to the groups list of waypoints and made the active waypoint.
Now what your script does is, it creates waypoints and activates them. First the two waypoints outside the loop, then an infinite number of waypoints inside the loop.
BUT you are not waiting for the chopper to reach a waypoint. How could your script know it should wait until the chopper has reached a waypoint? There is an infinite numer of waypoints being created, as fast as your computer can do it.
What you should do is insert an additional "conditional wait" below each "chopper move markerpos ..." part, telling the script to wait until the unit has completed its previous assignment (e.g. reached the waypoint).
For that, you need to add "unitready", which returns the status of the unit (true for "unit is ready" and false for "unit is not ready"). As its a conditional wait, you have to place the "@" character in front of it.
@unitready chopper
which reads: "As soon as unitready is true for the unit _chopper"...
Cheers
PiLLe