2025-10-20 17:47:36 +08:00
|
|
|
# File generated by Wizard 2.9.0 on Oct 20, 2025.
|
2025-10-22 09:27:03 +08:00
|
|
|
include_once signatures/vehicle_signature.txt
|
2025-10-20 17:47:36 +08:00
|
|
|
processor COMMON_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 = "";
|
|
|
|
|
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("MakeAssignments ");
|
|
|
|
|
Array<WsfPlatform> firer = Array<WsfPlatform>();
|
|
|
|
|
Array<WsfPlatform> mover = Array<WsfPlatform>();
|
|
|
|
|
Array<WsfPlatform> waiter = Array<WsfPlatform>();
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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, "FIRE", firer[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end_script
|
|
|
|
|
|
|
|
|
|
# -------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
evaluation_interval DETECTED 20.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 20.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 COMMON_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 <local:master>
|
|
|
|
|
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 COMMON_CMDR_TASK_MGR
|
|
|
|
|
operating_level ENGAGE 1
|
|
|
|
|
|
|
|
|
|
end_processor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end_platform_type
|