I'm workin on some support scripts that are very similiar to yours. My CAS script works like a charm, I can post it here and maybe you can get some ideas from it. It has 2 parts:
CASHelo\radio_callmission.sqs
_unit = _this select 1
_obj = _this select 0
_ID = _this select 2
? _unit != player : exit
_holder = BD_SPRadioActions select 0
_array = BD_SPRadioActions - [_holder]
{_holder removeaction _X} foreach _array
? cadetmode : hint "Click on the map to select a CAS target.\nThe map click will expire in 30 seconds."
?! cadetmode : hint "Click on the map to select a target."
BD_SPMapClicker = _this select 0
BD_SPMapClick = []
_mapclick = 0
_n = 0
onMapSingleClick {[BD_SPMapClicker,_pos,_units,_shift,_alt] exec "Player\MapClick.sqs"}
#WaitForMapClick
~1
_n = _n + 1
_mapclick = BD_SPMapClicker call BD_SPFmap_click
? _n > 30 : goto "Expired"
? format ["%1",_mapclick] == "[]" : goto "WaitForMapClick"
?! ((secondaryweapon _holder) in BD_SPRadioWeapons) : hint "Cannot transmit message without a radio!"; exit
BD_SPHeloCASCalled = true
[] exec "Player\radio_actions.sqs"
_pos = _mapclick select 1
_units = _mapclick select 2
? format ["%1",_units] == "scalar bool array string 0xfcffffef" : _units = []
_randID = format ["%1",(random(20)-random(20))]
BD_SPRandomIDList = BD_SPRandomIDList + [_randID]
_mission = [_unit,_pos,_randID]
BD_SPCASHeloMissions = BD_SPCASHeloMissions + [[_unit,_pos,_randID]]
publicvariable "BD_SPCASHeloMissions"
_unit sidechat format ["This is %1 requesting clase air support at grid %2. I repeat, this is %1, I need close air support at %2. Over",_unit,_pos call BD_SPFgrid_pos]
? Daytime > 19 || Daytime < 5 : goto "Night"
_newsmokeY = "WeaponHolder" createvehicle (getpos _unit)
_newsmokeY setpos [getpos _unit select 0,getpos _unit select 1,0]
_newsmokeY addmagazinecargo ["BD_M18Yellow",1]
_newsmokeY setdir 90
BD_SPCurrentIDCASHelo = _randID
FiredEHIndexCAS = _unit addeventhandler ["fired",{[_this select 0,_this select 4,BD_SPCurrentIDCASHelo] exec "Player\SmokeEH_CAS.sqs"}]
? cadetmode : hint "Use yellow smoke grenades to mark specific targets for the CAS helo to attack."
?! cadetmode : hint "Use yellow smoke to mark targets."
exit
#Night
_newsmokeY = "WeaponHolder" createvehicle (getpos _unit)
_newsmokeY setpos [getpos _unit select 0,getpos _unit select 1,0]
_newsmokeY addmagazinecargo ["BD_StrobeIR",1]
_newsmokeY setdir 55
BD_SPCurrentIDCASHelo = _randID
FiredEHIndexCAS = _unit addeventhandler ["fired",{[_this select 0,_this select 4,BD_SPCurrentIDCASHelo] exec "Player\SmokeEH_CAS.sqs"}]
? cadetmode : hint "Use IR strobes to mark specific targets for the CAS helo to attack."
?! cadetmode : hint "Use strobes to mark targets."
exit
#Expired
hint "30 seconds has expired with no map click.\nThe radio message was not sent."
?! ((secondaryweapon _unit) in BD_SPRadioWeapons) : exit
[] exec "Player\radio_actions.sqs"
exit
CASHelo\init.sqs
_helo = _this
BD_SPCASHelo = true; Publicvariable "BD_SPCASHelo"
_pos = (getpos _helo)
? _pos select 2 > 20 : goto "Standby"
#Base
_base = "HeliH" createvehicle [_pos select 0,_pos select 1,0]
_base setpos [_pos select 0,_pos select 1,0]
#WaitForMission
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
~3
_missions = BD_SPCASHeloMissions
? count _missions <= 0 : goto "WaitForMission"
_mission = _missions select 0
_caller = _mission select 0
~0.5
? (count BD_SPCASHeloList) == 1 : goto "StartMission"
_distances = [BD_SPCASHeloList,{_X distance _caller}] call BD_SPFcommand_foreach
~0.5
_lowest = _distances call BD_SPFlowest_number
~0.5
_closestnumber = [_distances,_lowest] call BD_SPFarray_number
~0.5
_closest = BD_SPCASHeloList select _closestnumber
~0.5
? _closest != _helo : goto "WaitForMission"
#StartMission
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
_pos = _mission select 1
_ID = _mission select 2
_mission call BD_SPFremove_CASHelo_mission
BD_SPCASHeloList = BD_SPCASHeloList - [_helo]
_helo setbehaviour "CARELESS"
_helo setcombatmode "YELLOW"
_helo setspeedmode "FULL"
_helo flyinheight 50
_logic = "Logic" createvehicle _pos
_logic setpos _pos
~1.5
_helo sidechat format ["Roger %1, this is %2 inbound for close air support at grid %3. Over.",driver _helo,_caller,_pos call BD_SPFgrid_pos]
#MoveToMission
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
? _ID call BD_SPFabort_mission == 1 : goto "Aborted"
_helo domove _pos
~3
? _helo distance _logic > 200 : goto "MoveToMission"
dostop _helo
_helo flyinheight 35
_helo setspeedmode "LIMITED"
_helo setcombatmode "YELLOW"
_helo setbehaviour "COMBAT"
_TOTAL = 0
#RandomCircle
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
? _ID call BD_SPFabort_mission == 1 : goto "Aborted"
? _TOTAL >= 3 : goto "RTB"
_TOTAL = _TOTAL + 1
?! someammo _helo : goto "RTB"
_coef = 1
? random(2) > 1 : _coef = -1
_xpos = (_pos select 0) + ((200+random(50)) * _coef)
_coef = 1
? random(2) > 1 : _coef = -1
_ypos = (_pos select 1) + ((200+random(50)) * _coef)
_t = 0
_helo setspeedmode "LIMITED"
#Circle
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
_helo domove [_xpos,_ypos]
? _ID call BD_SPFabort_mission == 1 : goto "Aborted"
?! someammo _helo : goto "RTB"
~5
_t = _t + 1
? _t >= 3 : goto "RandomCircle"
_smoke = _ID call BD_SPFfind_smoke
? format ["%1",_smoke] == "NoSmoke" : goto "Circle"
#SpotSmoke
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
? _ID call BD_SPFabort_mission == 1 : goto "Aborted"
?! someammo _helo : goto "RTB"
_smokepos = (getpos (_smoke select 1))
_helo sidechat format ["Roger that, I see %1, inbound on specified target!",(_smoke select 2)]
_TN = 0
#RandomTarget
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
? _ID call BD_SPFabort_mission == 1 : goto "Aborted"
?! someammo _helo : goto "RTB"
_targets = ["BD_EdTargetInf","BD_EdTargetArm","BD_EdTargetArm","BD_EdTargetInf","BD_EdTargetInf","BD_EdTargetArm"]
_rand = random ((count _targets)-1)
_rand = (_rand + 0.5) - ((_rand + 0.5) mod 1)
? _rand > ((count _targets)-1) : _rand = ((count _targets)-1)
? _rand < 0 : _rand = 0
_targtype = _targets select _rand
_target = _targtype createvehicle [0,0,0]
_n = 0
_TN = _TN + 1
? _TN > ((count _targets)/3) : _ID call BD_SPFremove_smoke; goto "RandomCircle"
#SmokeMove
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
? _ID call BD_SPFabort_mission == 1 : goto "Aborted"
?! someammo _helo : goto "RTB"
~5
_target setpos [(_smokepos select 0)+(random 15 - random 15),(_smokepos select 1)+(random 15 - random 15),0]
_helo domove (getpos _target)
_helo dotarget _target
_helo dofire _target
~15
_n = _n + 1
? _n > 3 : deletevehicle _target; goto "RandomTarget"
goto "SmokeMove"
exit
#RTB
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
_helo flyinheight 55
_helo setbehaviour "CARELESS"
_helo setcombatmode "BLUE"
_helo sidechat format ["This is %1, guns are dry, returning to base. Out.",driver _helo]
#RTBLoop
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
_helo domove (getpos _base)
~3
? _helo distance _base > 150 : goto "RTBLoop"
~0.5
_helo land "LAND"
@ (getpos _helo select 2) < 7
BD_SPCASHeloList = BD_SPCASHeloList + [_helo]
~5
goto "WaitForMission"
#Aborted
?! (alive _helo) || !(canmove _helo) || (count crew _helo < 1) : goto "OutOfAction"
BD_SPHeloEvacCalled = false
~0.5
_helo sidechat format ["Roger %1, aborting air support mission, %2 returning to base.",_caller,_helo]
_aborted = true
goto "RTBLoop"
#OutOfAction
? _helo in BD_SPCASHeloList : BD_SPCASHeloList = BD_SPCASHeloList - [_helo]; publicvariable "BD_SPCASHeloList"
BD_SPHeloCASCalled = false
exit
Of course I do use alot of my own functions, but this still should help you a bit, no? If all else fails, just wait till I am finished and release this. Its kind of similiar to the RHS/Chaos radio thingy, where it optimizes the use of a squad RTO to call in support options.