# File generated by Wizard 2.9.0 on Oct 11, 2025. include_once signatures/vehicle_signature.txt processor TG3_CMDR_TASK_MGR WSF_TASK_PROCESSOR number_of_servers 5 track_update_interval 5.0 sec #script_debug_writes true #show_state_transitions #show_task_messages script_variables int MAX_SAMS_PER_TARGET = 2; int MAX_ASSIGNMENTS_PER_SAM = 4; string WEAPON_NAME = "sam"; end_script_variables // determine if TRACK is assignable script bool IsAssignable() #writeln(TRACK); if ((! TRACK.IFF_Friend()) && (TRACK.TimeSinceUpdated() < 30.0)) { #writeln("find enermy"); return true; } return false; end_script // determine if the subordinate and/or his subordinates have weapons remaining script bool WeaponsAvailable(WsfPlatform aAssignee) bool weaponsAvailable = false; int quantity = 0; WsfWeapon weapon = aAssignee.Weapon(WEAPON_NAME); if (weapon.IsTurnedOn()) { quantity = quantity + weapon.QuantityRemaining(); } if (quantity > 0) { weaponsAvailable = true; } return weaponsAvailable; end_script # ------------------------------------------------------------------------- script void sendMessage() #writeln("MakeAssignments "); Array firer = Array(); Array mover = Array(); Array waiter = Array(); foreach (WsfPlatform sub in PLATFORM.Subordinates()) { if (sub.Type() == "TG3_MISSILE") { #writeln("is LARGE_SAM_LAUNCHER"); if (WeaponsAvailable(sub) && (TasksAssignedTo(sub) < MAX_ASSIGNMENTS_PER_SAM) && (TasksAssignedTo(sub, TRACK.TrackId()) < 1) && (TRACK.WithinZoneOf(sub, "battalion_sector"))&& (TRACK.Altitude()>500)) { #writeln("can fire"); writeln("*** Adding ", sub.Name(), " to firer"); firer.PushBack(sub); } } } int i; int numAssignments = (int)MATH.Min(firer.Size(), MAX_SAMS_PER_TARGET); for (int i=0; i < numAssignments; i = i + 1) { writeln("assign fire"); WsfControlMessage msg = WsfControlMessage(); msg.SetAuxData("track",TRACK); msg.SetAuxData("task","FIRE"); PLATFORM.Comm("sub_net").SendMessage(msg,firer[i].Name(),"cmdr_net"); AssignTask(TRACK, "ENGAGE", firer[i]); } end_script # ------------------------------------------------------------------------- evaluation_interval DETECTED 10.0 sec time_to_evaluate DETECTED 5.0 secs state DETECTED next_state ASSIGNED if (! IsAssignable()) return false; sendMessage(); return true; end_next_state end_state evaluation_interval ASSIGNED 10.0 sec time_to_evaluate ASSIGNED 1.0 secs state ASSIGNED next_state DETECTED if (! IsAssignable()) { return true; } sendMessage(); return false; end_next_state end_state end_processor platform_type TG3_CMDR WSF_PLATFORM icon C4I infrared_signature VEHICLE_INFRARED_SIGNATURE optical_signature VEHICLE_OPTICAL_SIGNATURE radar_signature VEHICLE_RADAR_SIGNATURE mover WSF_GROUND_MOVER end_mover comm sub_net DATALINK network_name internal_link data_mgr internal_link task_mgr end_comm processor data_mgr WSF_TRACK_PROCESSOR purge_interval 60 sec end_processor processor task_mgr TG3_CMDR_TASK_MGR operating_level ENGAGE 1 end_processor end_platform_type