I'm not particularly fond of these scripts of mine as I find them really messy and I believe there are better ways of doing this, but they should do it.
First you must place two groups of police officers and change their side to West as you wanted by editing the mission.sqm file. I believe you already know how to do this so I won't go into detail on it. Splitting them into two different groups makes this whole thing a lot simpler. Type the following into both of the group leaders' init fields, but make sure to change the variable searchparty1 into searchparty2 for the second group:
searchparty1 = group this; {_x moveInCargo heli4} forEach units this
You also need to have a game logic named server in your mission as these are supposed to be run by the server only.
Add para = 0 into your init.sqs script; it initializes a variable that's used to check when a group has been parachuted, so the helicopter won't parachute them all at once.
Here come the scripts themselves. First off is the script for the helicopter. I set it up so it'll wait at a position named heliWait until there are any units in its cargo, so you'll need a game logic named like that. It then goes to the position of the killer(s) and parachutes the search parties to hunt them. If either one of the killers doesn't exist, it also parachutes the other search party too at the position of the other killer. To activate it, you need to type [] exec "heli.sqs" whenever you want the hunt to begin.
heli.sqs
?! local server : exit
#loop
?! alive heli4 : exit
heli4 flyInHeight 150
heli4 move getPos heliWait
@ count crew heli4 > 2
;paradrop1
? format ["%1", killer1] == "scalar bool array string 0xfcffffef" || count crew heli4 <= 2 : goto "paradrop2"
_parapos = "Logic" camCreate [getPos killer1 select 0, getPos killer1 select 1, 150]
heli4 move getPos _parapos
@ heli4 distance _parapos < 150
deleteVehicle _parapos
[units searchparty1] exec "paradrop.sqs"
@ para == 1
para = 0
? format ["%1", killer2] != "scalar bool array string 0xfcffffef" : goto "paradrop2"
[units searchparty2] exec "paradrop.sqs"
@ para == 1
para = 0
#paradrop2
? format ["%1", killer2] == "scalar bool array string 0xfcffffef" || count crew heli4 <= 2 : goto "loop"
_parapos = "Logic" camCreate [getPos killer2 select 0, getPos killer2 select 1, 150]
heli4 move getPos _parapos
@ heli4 distance _parapos < 150
deleteVehicle _parapos
[units searchparty2] exec "paradrop.sqs"
@ para == 1
para = 0
? format ["%1", killer1] != "scalar bool array string 0xfcffffef" : goto "loop"
[units searchparty1] exec "paradrop.sqs"
@ para == 1
para = 0
goto "loop"
This is the parachuting script. It's run by the heli script above:
paradrop.sqs
?! local server : exit
_paras = _this select 0
_count = 0
#loop
_para = (_paras select _count)
_para action ["Eject", vehicle _para]
unassignVehicle _para
_count = _count + 1
? _count >= count _paras : goto "end"
~0.5
goto "loop"
#end
para=1
exit
And finally the script for the search parties. It takes care of the search for the killer(s) and respawns them whenever they've been killed. To activate it, you need to type the following for the first group:
[searchparty1, killer1, killer2] exec "search.sqs";
And for the second group:
[searchparty2, killer2, killer1] exec "search.sqs";
The first parameter in the array is the group name obviously. The second parameter is their primary target. If the primary target doesn't exist, then they revert to their secondary target, which is the third parameter. These are reversed for both of the search parties, so in case either one of the killers doesn't exist, both of the groups will go after the same target, and if both killers do exist, then they go after both of them respectively.
search.sqs
?! local server : exit
_group = _this select 0
_killer1 = _this select 1
_killer2 = _this select 2
_killer = objNull
_count = 0
if (format ["%1", _killer1] == "scalar bool array string 0xfcffffef") then {_killer = _killer2} else {_killer = _killer1}
#loop
?! alive heli4 : exit
? {alive _x} count units _group == 0 : goto "respawn"
(leader _group) move getPos _killer
~10
goto "loop"
#respawn
"Civilian11" createUnit [getPos heli4, _group, "loon = this"]
loon moveInCargo heli4
loon = nil
_count = _count + 1
? _count >= 6 : goto "loop"
goto "respawn"
I might have overlooked something important, so let me know if there are any problems.