# File generated by Wizard 2.9.0 on Oct 23, 2025. include_once signatures/vehicle_signature.txt processor SSM_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 = ""; string IS_MOVE = "true"; 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; string weapon_name=aAssignee->weapon_name; 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("sendMessage"); Array firer = Array(); Array mover = Array(); Array waiter = Array(); Array net_mover = Array(); foreach (WsfPlatform sub in PLATFORM.Subordinates()) { if (sub.Type() == "MORTAR") { #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); } } if(sub.Type() == "NET_DETECT_GROUP") { writeln("is NET_DETECT_GROUP"); if(IS_MOVE=="true") { IS_MOVE="false"; writeln("*** Adding ", sub.Name(), " to net_mover"); net_mover.PushBack(sub); } } } int i; int numAssignments = (int)MATH.Min(firer.Size(), MAX_SAMS_PER_TARGET); int num=(int)net_mover.Size(); 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, "FIRE", firer[i]); } for(int i=0;i 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 SSM_CMDR_TASK_MGR end_processor end_platform_type