Capture current mission, AI, map and administration development

Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
2026-10-13 22:52:53 +02:00
parent a951a96edc
commit 6a667d8deb
8104 changed files with 2124945 additions and 2061 deletions
@@ -0,0 +1,226 @@
--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_CivilianTraffic.c
+++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_CivilianTraffic.c
@@ -33,6 +33,13 @@
float HiddenSince = -1;
float ProgressAt;
vector ProgressPosition;
+ ref SCR_AIVehicleBehavior Boarding;
+ float NextBoarding;
+ void CancelBoarding()
+ {
+ ERR_VehicleBehaviorCleanup.Complete(Boarding, Driver);
+ Boarding = null;
+ }
void Report(string state)
{
if (Status == state) return;
@@ -40,7 +47,7 @@
vector position; if (Car) position = Car.GetOrigin();
ERR_HQ.Event("CIVILIAN TRAFFIC", string.Format("car %1 prefab=%2 at %3: %4", Number, Prefab, position, state));
}
- void Finish(string reason) { Finished = true; Report(reason); }
+ void Finish(string reason) { Finished = true; CancelBoarding(); Report(reason); }
void Protect(bool protectedFromCleanup)
{
IEntity entity = Car; if (!entity) entity = Driver;
@@ -62,7 +69,7 @@
void Release()
{
if (Released) return;
- Released = true; ClearOrders(); Protect(false);
+ Released = true; CancelBoarding(); ClearOrders(); Protect(false);
if (Group)
{
Group.SetPermanentLOD(-1);
@@ -255,8 +262,19 @@
}
protected bool Prepare(ERR_CivilianCar traffic)
{
- if (!traffic.Car || !traffic.Group || !traffic.Seat || traffic.Seat.GetOccupant() != traffic.Driver || !ERR_Actors.CanFight(traffic.Driver))
- { traffic.Report("waiting for living seated driver"); return false; }
+ // Compartment spawning is asynchronous. Distant agents must be awake BEFORE
+ // waiting for their seat; otherwise readiness and activation wait on each other.
+ if (traffic.Group)
+ {
+ traffic.Group.SetPermanentLOD(0); traffic.Group.ActivateAI();
+ array<AIAgent> agents = {}; traffic.Group.GetAgents(agents);
+ foreach (AIAgent agent : agents) if (agent) { agent.SetPermanentLOD(0); agent.ActivateAI(); }
+ }
+ if (!traffic.Car || !traffic.Group || !traffic.Seat || !ERR_Actors.CanFight(traffic.Driver))
+ {
+ bool seated = traffic.Seat && traffic.Driver && traffic.Seat.GetOccupant() == traffic.Driver;
+ traffic.Report(string.Format("waiting for driver: present=%1 fit=%2 seated=%3", traffic.Driver != null, ERR_Actors.CanFight(traffic.Driver), seated)); return false;
+ }
if (ERR_Actors.Group(traffic.Driver) != traffic.Group || traffic.Group.GetAgentsCount() != 1)
{ traffic.Report("waiting for native AI group admission"); return false; }
SCR_AIGroupUtilityComponent utility = traffic.Group.GetGroupUtilityComponent();
@@ -264,6 +282,26 @@
if (!utility || !utility.m_VehicleMgr || !usage || !utility.m_VehicleMgr.TryAddVehicle(usage))
{ traffic.Report("waiting for native vehicle registration"); return false; }
utility.AddUsableVehicle(usage);
+ if (traffic.Seat.GetOccupant() != traffic.Driver)
+ {
+ // Recover the original driver if native compartment admission stalled or
+ // the driver got out before route assignment. Never replace or teleport him.
+ if (Foreign(traffic)) { traffic.Release(); return false; }
+ SCR_ChimeraAIAgent driver = SCR_ChimeraAIAgent.Cast(SCR_AIUtils.GetAIAgent(traffic.Driver));
+ float now = GetGame().GetWorld().GetWorldTime();
+ if (driver && driver.m_UtilityComponent && now >= traffic.NextBoarding && !traffic.Seat.GetOccupant() && !CompartmentAccessComponent.GetVehicleIn(traffic.Driver))
+ {
+ array<ref AIActionBase> actions = {}; driver.m_UtilityComponent.GetActions(actions);
+ if (!traffic.Boarding || !actions.Contains(traffic.Boarding))
+ {
+ traffic.CancelBoarding(); traffic.NextBoarding = now + 10000;
+ traffic.Boarding = new SCR_AIGetInVehicle(driver.m_UtilityComponent, null, traffic.Car, traffic.Seat, EAICompartmentType.Pilot, 1000);
+ driver.m_UtilityComponent.AddAction(traffic.Boarding);
+ }
+ }
+ traffic.Report("waiting for original driver to board; native boarding recovery active"); return false;
+ }
+ traffic.CancelBoarding();
if (!GiveRoute(traffic)) { traffic.Report("waiting for route waypoints"); return false; }
traffic.Ready = true;
traffic.ProgressAt = GetGame().GetWorld().GetWorldTime(); traffic.ProgressPosition = traffic.Car.GetOrigin();
--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_HunterService.c
+++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_HunterService.c
@@ -78,6 +78,7 @@
protected ref array<ref ERR_HunterVehicle> m_Hunters = {};
protected float m_NextHunter;
protected float m_NextSpawn;
+ protected float m_NextSummary;
protected int m_Target = 3;
protected ref ERR_HunterOpeningPlan m_Opening;
protected ref ERR_HunterCoordination m_Coordination;
@@ -283,7 +284,7 @@
protected bool Coordinated(vector position) { return m_Coordination && m_Coordination.Covered(position); }
protected void QueueDestination(ERR_HunterVehicle unit, ERR_HQ hq, float now)
{
- array<ref ERR_HQReport> reports = {}; hq.SupportContacts(reports, now);
+ array<ref ERR_HQReport> reports = {}; hq.HunterContacts(reports, now);
ERR_HQBelief best;
foreach (ERR_HQReport report : reports)
{
@@ -309,8 +310,10 @@
unit.LastContact = best.ObservedAt; unit.NextContactOrder = now + 5000;
return;
}
- if (!ERR_SupplyConvoySystem.ApproachDirected(best.PredictedPosition, destination, angles, 250)) return;
- unit.SourceMessage = best.MessageId; reason = "intercept last delivered sighting; confidence=" + best.Confidence.ToString();
+ if (!ERR_SupplyConvoySystem.ApproachDirected(best.PredictedPosition, destination, angles, 250))
+ { ERR_HQ.Event("HUNTER ROUTE", unit.Source + ": delivered sector has no usable approach road; retaining orders", best.MessageId); return; }
+ unit.SourceMessage = best.MessageId;
+ reason = string.Format("investigate last delivered sighting; age=%1s confidence=%2 uncertainty=%3m", (now - best.ObservedAt) / 1000, best.Confidence, best.Radius);
}
else
{
@@ -356,6 +359,12 @@
m_NextHunter = now + 1000;
ERR_HQ hq = ERR_HQ.Cast(m_Mode.Command()); if (!hq) return;
m_Target = hq.Watch().HunterTarget();
+ if (now >= m_NextSummary)
+ {
+ m_NextSummary = now + 60000;
+ array<ref ERR_HQReport> searches = {}; hq.HunterContacts(searches, now);
+ ERR_HQ.Event("HUNTER STATUS", string.Format("active=%1 deployed=%2 allowance=%3 identified bodies=%4 searchable delivered sectors=%5; lost vehicles are not replaced", ActiveHunters(), Deployed(), m_Target, hq.Watch().IdentifiedBodies(), searches.Count()));
+ }
if (!m_Opening)
{
array<IEntity> openingPlayers = {}; ERR_Actors.Players(openingPlayers);
--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_HunterTactics.c
+++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_HunterTactics.c
@@ -14,6 +14,7 @@
// delivered sector. Support availability is not a claim of suppressing fire.
return armedCover && now >= waitingUntil - 30000;
}
+ static bool DismountRange(float range) { return range >= 140 && range <= 450; }
static bool Fresh(float observed, float now) { return observed >= 0 && now >= observed && now - observed <= 60000; }
static vector Offset(vector contact, vector forward, int role, int phase)
{
@@ -84,6 +85,7 @@
protected float m_ApproachStarted;
protected float m_ApproachProgress;
protected vector m_ApproachPosition;
+ protected bool m_UnsupportedSearch;
protected ERR_GameMode m_Mode;
void ERR_HunterTactics(ERR_GameMode mode, ERR_HunterVehicle unit, ERR_HunterAttack attack, int role)
{
@@ -322,8 +324,11 @@
{ m_ApproachProgress = now; m_ApproachPosition = Unit.Entity.GetOrigin(); }
bool near = vector.DistanceXZ(Unit.Entity.GetOrigin(), Stage) <= 55;
bool local = ERR_HunterCombat.Active(Unit.Group) && vector.DistanceXZ(Position(), Attack.ReportPosition) <= 400;
+ // A road can pass close to the reported sector and then loop kilometres
+ // around it to reach the ideal staging point. Continue that last leg on foot.
+ bool onFootReach = ERR_HunterAttackRules.DismountRange(vector.DistanceXZ(Unit.Entity.GetOrigin(), Attack.ReportPosition));
if (Role == 0 && near) { Clear(); State = 3; Note("in covering position; native gunner owns target acquisition and fire"); }
- else if (Role > 0 && (near || local) && Board(false)) { State = 2; Deadline = now + 45000; NextRetry = now + 15000; Note("dismounting original crew"); }
+ else if (Role > 0 && (near || local || onFootReach) && Board(false)) { State = 2; Deadline = now + 45000; NextRetry = now + 15000; Note("within infantry approach range; dismounting original crew"); }
else if (now >= Deadline)
{
if (ERR_HunterAttackRules.ExtendApproach(m_ApproachStarted, m_ApproachProgress, now))
@@ -341,20 +346,22 @@
{
bool visualCover = Attack.CoverReady();
bool investigate = ERR_HunterAttackRules.AdvanceWithoutVisualCover(Attack.CoverAlive(), Deadline, now);
- if ((visualCover || investigate) && Move(Approach, 20))
- {
+ bool unsupported = !Attack.CoverAlive() && now >= Deadline;
+ if ((visualCover || investigate || unsupported) && Move(Approach, 20))
+ {
+ m_UnsupportedSearch = unsupported;
State = 4; Deadline = now + ERR_HunterAttackRules.ManeuverBudget(m_TravelDistance);
if (visualCover) Note("cover established; moving around flank via " + Approach.ToString());
+ else if (unsupported) Note("cover lost; bounded infantry investigation of delivered sector via " + Approach.ToString());
else Note("armed support in position without visual contact; investigating reported flank via " + Approach.ToString());
}
else if (now >= Deadline)
{
- // Do not advance without a surviving, armed support crew in position.
- Note("cover unavailable; holding native combat and returning to vehicle");
+ Note("infantry approach could not be assigned; regrouping original survivors");
State = 6; Deadline = now + 90000; Board(true);
}
}
- if (State == 4 && !Attack.CoverAlive())
+ if (State == 4 && !m_UnsupportedSearch && !Attack.CoverAlive())
{ Clear(); State = 3; Deadline = now + 45000; Note("covering crew or mounted ammunition unavailable; manoeuvre paused"); }
if (State == 4 && vector.DistanceXZ(Position(), Approach) <= 30)
{
@@ -391,7 +398,14 @@
bool Covered(vector position)
{
foreach (ERR_HunterAttack attack : m_Attacks)
- if (vector.DistanceXZ(position, attack.ReportPosition) < 300) return true;
+ {
+ if (vector.DistanceXZ(position, attack.ReportPosition) >= 300) continue;
+ int active;
+ foreach (ERR_HunterTactics team : attack.Teams) if (!team.Stopped && team.Living()) active++;
+ // A failed/finished partner must not reserve the entire encounter and
+ // prevent an available hunter receiving a fresh HQ interception order.
+ if (active >= 2) return true;
+ }
return false;
}
void Tick(ERR_HQ hq, array<ref ERR_HunterVehicle> hunters, float now)
--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c
+++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c
@@ -466,6 +466,20 @@
contacts.Clear();
foreach (ERR_HQReport contact : m_Contacts)
if (ERR_MortarPrediction.Fresh(contact, now)) contacts.Insert(contact.Snapshot());
+ }
+ // A ground search takes longer than a mortar fire solution remains valid.
+ // Read delivered memory, including its decaying confidence/uncertainty, never
+ // the target entity's current position. A five-minute old sector is the limit.
+ void HunterContacts(out array<ref ERR_HQReport> contacts, float now)
+ {
+ contacts.Clear();
+ for (int index = 0; index < m_Memory.Count(); index++)
+ {
+ ERR_HQBelief belief = m_Memory.At(index);
+ if (!belief || !belief.Report || !belief.Actionable() || belief.TravelMode == "aircraft" || belief.Radius > 500) continue;
+ if (belief.ObservedAt < 0 || now < belief.ObservedAt || now - belief.ObservedAt > 300000) continue;
+ contacts.Insert(belief.Report.Snapshot());
+ }
}
ERR_HQWatch Watch() { return m_Watch; }
@@ -0,0 +1,55 @@
modded class ERR_CivilianTraffic
{
protected ref array<ref ERR_CivilianCar> m_ProbeCars = {};
void ProbeSpawn()
{
for (int index = 0; index < 3; index++)
{
ERR_CivilianCar traffic = new ERR_CivilianCar(); traffic.Number = index;
vector position, angles;
if (!ERR_SupplyConvoySystem.ApproachDirected(Vector(6500 + index * 400, 0, 3600), position, angles, 500)) { Print("ERR CIVILIAN NATIVE: no road"); continue; }
traffic.Car = Vehicle.Cast(ERR_Actors.Spawn(CarPrefab(index), position, angles));
traffic.Group = SCR_AIGroup.Cast(ERR_Actors.Spawn(ERR_ConvoyResources.GroupPrefab(), position));
Faction civilian = GetGame().GetFactionManager().GetFactionByKey("CIV");
traffic.Group.SetFaction(civilian); traffic.Group.SetDeleteWhenEmpty(false); ERR_Actors.SetFaction(traffic.Car, civilian);
array<BaseCompartmentSlot> seats = {}; ERR_ConvoyRules.CollectSeats(traffic.Car, seats);
foreach (BaseCompartmentSlot seat : seats) if (seat.GetType() == ECompartmentType.PILOT) { traffic.Seat = seat; break; }
traffic.Group.SetPermanentLOD(AIAgent.GetMaxLOD()); traffic.Group.DeactivateAI();
AIGroup group = traffic.Group;
if (index == 0) traffic.Driver = traffic.Seat.SpawnCharacterInCompartment(DriverPrefab(), group, ERR_ConvoyResources.GroupPrefab());
else { traffic.Driver = ERR_Actors.Spawn(DriverPrefab(), position + "2 0 0"); traffic.Group.AddAIEntityToGroup(traffic.Driver); }
ERR_Actors.SetFaction(traffic.Driver, civilian);
AIControlComponent control = AIControlComponent.Cast(traffic.Driver.FindComponent(AIControlComponent));
AIAgent agent = control.GetControlAIAgent(); agent.SetPermanentLOD(AIAgent.GetMaxLOD()); agent.DeactivateAI();
vector middle, destination, unused;
ERR_SupplyConvoySystem.ApproachDirected(position + "250 0 250", middle, unused, 500);
ERR_SupplyConvoySystem.ApproachDirected(position + "500 0 500", destination, unused, 500);
traffic.Route = {position, middle, destination};
m_ProbeCars.Insert(traffic);
}
GetGame().GetCallqueue().CallLater(ProbePrepare, 5000, true);
}
void ProbePrepare()
{
foreach (ERR_CivilianCar traffic : m_ProbeCars)
{
bool ready = traffic.Ready; if (!ready) ready = Prepare(traffic);
PrintFormat("ERR CIVILIAN NATIVE: car=%1 ready=%2 fit=%3 seated=%4 agents=%5 own=%6 position=%7", traffic.Number, ready, ERR_Actors.CanFight(traffic.Driver), traffic.Seat.GetOccupant() == traffic.Driver, traffic.Group.GetAgentsCount(), ERR_Actors.Group(traffic.Driver) == traffic.Group, traffic.Car.GetOrigin());
}
}
}
modded class ArmaReforgerScripted
{
protected ref ERR_CivilianTraffic m_ERRCivProbe;
protected float m_ERRCivProbeAge;
protected bool m_ERRCivProbeDone;
override void OnUpdate(BaseWorld world, float timeslice)
{
super.OnUpdate(world, timeslice);
if (!ERR_GameMode.Get() || !ERR_GameMode.Get().EnemyFaction()) return;
m_ERRCivProbeAge += timeslice;
if (m_ERRCivProbeAge > 60 && !m_ERRCivProbeDone) { m_ERRCivProbeDone = true; Print("ERR CIVILIAN COMPLETE"); }
if (m_ERRCivProbe || m_ERRCivProbeAge < 4) return;
m_ERRCivProbe = new ERR_CivilianTraffic(ERR_GameMode.Get()); m_ERRCivProbe.ProbeSpawn();
}
}
@@ -0,0 +1,34 @@
15:16:54.528 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6820.54,10.1692,3541.51>
15:16:54.529 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:16:54.529 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:16:59.522 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6820.54,10.1649,3541.47>
15:16:59.522 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:16:59.522 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:04.522 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6826.83,11.9348,3550.07>
15:17:04.522 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:17:04.522 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7316.31,195.964,3773.56>
15:17:09.521 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6854.83,21.0693,3577.49>
15:17:09.521 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6889.04,29.1277,3593.88>
15:17:09.521 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7311.35,195.638,3775.47>
15:17:14.522 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6869.77,27.5024,3604.51>
15:17:14.522 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6888.32,29.4367,3586.87>
15:17:14.522 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7309.04,195.352,3778.19>
15:17:19.521 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6885.78,28.9081,3597.26>
15:17:19.521 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6884.48,29.2108,3585.51>
15:17:19.521 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7249.23,179.954,3791.55>
15:17:24.554 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6908.01,32.7168,3550.89>
15:17:24.554 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6891.52,29.8927,3581.63>
15:17:24.554 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7224.21,170.696,3824.6>
15:17:29.554 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6922.17,36.9398,3493.3>
15:17:29.554 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6908.15,32.7451,3550.6>
15:17:29.554 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7246.95,175.327,3867.84>
15:17:34.555 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6924.17,37.8258,3438.27>
15:17:34.555 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6922.21,36.9557,3492.43>
15:17:34.555 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7287.37,177.692,3908.14>
15:17:39.555 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6941.81,40.3966,3374.97>
15:17:39.555 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6925.61,38.2755,3421.37>
15:17:39.555 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7331.03,183.579,3945.82>
15:17:44.554 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6968.01,45.2508,3403.14>
15:17:44.554 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=1 fit=1 seated=1 agents=1 own=1 position=<6948.34,40.8768,3374.69>
15:17:44.554 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=1 fit=1 seated=1 agents=1 own=1 position=<7368.3,188.798,3972.41>
15:17:45.536 SCRIPT : ERR CIVILIAN COMPLETE
@@ -0,0 +1,34 @@
15:16:43.913 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6820.54,10.1692,3541.51>
15:16:43.913 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:16:43.913 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:16:48.938 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6820.53,10.1644,3541.46>
15:16:48.938 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:16:48.938 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:16:53.972 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6827.39,12.0983,3550.55>
15:16:53.972 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:16:53.972 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:16:58.971 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6855.2,21.2471,3578.22>
15:16:58.971 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:16:58.971 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:03.971 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6870.19,27.5586,3604.6>
15:17:03.971 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:17:03.971 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:08.972 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6882.74,28.665,3601.7>
15:17:08.972 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1303,3593.85>
15:17:08.972 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:13.971 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6896.27,30.45,3576.08>
15:17:13.971 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1288,3593.88>
15:17:13.971 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:18.972 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6916.91,35.1461,3528.02>
15:17:18.972 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1288,3593.88>
15:17:18.972 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:23.971 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6922.7,37.3081,3466.66>
15:17:23.971 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1288,3593.88>
15:17:23.971 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:29.005 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6927.47,38.7887,3404.03>
15:17:29.005 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1288,3593.88>
15:17:29.005 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:34.038 SCRIPT : ERR CIVILIAN NATIVE: car=0 ready=1 fit=1 seated=1 agents=1 own=1 position=<6959.16,42.2702,3380.65>
15:17:34.038 SCRIPT : ERR CIVILIAN NATIVE: car=1 ready=0 fit=1 seated=0 agents=1 own=1 position=<6889.08,29.1288,3593.88>
15:17:34.038 SCRIPT : ERR CIVILIAN NATIVE: car=2 ready=0 fit=1 seated=0 agents=1 own=1 position=<7316.34,195.965,3773.56>
15:17:34.904 SCRIPT : ERR CIVILIAN COMPLETE
@@ -0,0 +1,82 @@
{
"server": "RKS #2",
"log": "logs_2026-10-05_12-31-11",
"workshop_build": "0.0.68",
"findings": [
"HQ received player sightings and coordinated three UAZs at mission time 405.4s.",
"A distant flank exhausted its five-minute approach and resumed objective patrol at 708.1s; a nearby flank regrouped when cover died.",
"Hunter destination intake incorrectly shared the 60-second mortar sighting cutoff.",
"No BODY REPORT/AGGRESSION events; finite deployment allowance remained at its initial three vehicles.",
"All six civilian cars failed readiness waiting for a seated living driver. Existing logs cannot isolate which predicate failed."
],
"changes": [
"Ground search reads delivered HQ memory up to 300s and 500m uncertainty; mortar rules unchanged.",
"Flank crews can dismount 140-450m from the reported sector instead of completing a long road loop.",
"Cover loss allows bounded infantry investigation after 45s; failed movement still regroups.",
"Only at least two living active teams reserve an encounter against additional hunter interception.",
"Activate civilians before seating checks, register the vehicle, and recover the original unseated driver using native boarding. Cancel recovery at readiness/release/retirement.",
"Throttled hunter allowance/search status, road failure and detailed civilian readiness logging."
],
"native": {
"before": {
"result": {
"reason": "complete",
"exit": -15
},
"script_errors": 0,
"cars": {
"0": {
"ready": 1,
"seated": 1,
"displacement_m": 212.35
},
"1": {
"ready": 0,
"seated": 0,
"displacement_m": 0.03
},
"2": {
"ready": 0,
"seated": 0,
"displacement_m": 0.0
}
}
},
"after": {
"result": {
"reason": "complete",
"exit": -15
},
"script_errors": 0,
"cars": {
"0": {
"ready": 1,
"seated": 1,
"displacement_m": 202.22
},
"1": {
"ready": 1,
"seated": 1,
"displacement_m": 227.03
},
"2": {
"ready": 1,
"seated": 1,
"displacement_m": 205.53
}
}
}
},
"regressions_passed": 18,
"limitations": [
"Exact initial cause of live civilian seating failure was not reproduced. Native forced-incomplete-boarding comparison confirms recovery.",
"Hunter tactical changes validated by production-method tests and native compilation, not a new live multiplayer hunt.",
"No live server config changes, restart or Workshop publication."
],
"source_sha256": {
"addons/core/Scripts/Game/ERR/10_AI/ERR_CivilianTraffic.c": "ee8e5f0483ad738f6254adcd66e71ad4872fd000c92f44405c4dcc0453a40308",
"addons/core/Scripts/Game/ERR/10_AI/ERR_HunterService.c": "38f82c6a256e965c9b837d6c2c950402a6b19aab177f84e9c6c508c9ef334d3e",
"addons/core/Scripts/Game/ERR/10_AI/ERR_HunterTactics.c": "18b75a36ce59d03aad4b56c4af3cc73a2fc63e4f562ee9d3a4f2c3d0aded6648",
"addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c": "bbd9f4f1acb8e20376f093c5f0b3d97d32fa2b7ed72ac942650df3e4a1afa36b"
}
}
@@ -0,0 +1,95 @@
#240 t=386.4s M0 HUNTER SPAWN aggression-uaz-1 identified bodies=0 aggression=0/30 allowance=3/15 base=prison-opening position=<6827.04,5.95999,3172.57> crew=3 [session=1791203586-2]
#301 t=388.4s M0 HUNTER SPAWN aggression-uaz-2 identified bodies=0 aggression=0/30 allowance=3/15 base=prison-opening position=<7796.65,206.631,4541.53> crew=3 [session=1791203586-2]
#360 t=390.3s M0 HUNTER SPAWN aggression-uaz-3 identified bodies=0 aggression=0/30 allowance=3/15 base=prison-opening position=<8208.85,6.31875,3098.99> crew=3 [session=1791203586-2]
#397 t=391.3s M40 CONTACT REPORT X=7568 Z=3595: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: pistol; vector X/Z=unknown (2s ago) [session=1791203586-2]
#487 t=394.4s M0 HUNTER ORDER aggression-uaz-2 radio delivered; destination=<6365.08, 6.1, 2766.74> [session=1791203586-2]
#516 t=397.4s M40 BELIEF delivered report M40 retained; tracks=1 [session=1791203586-2]
#517 t=397.4s M42 CONTACT REPORT X=7568 Z=3595: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: pistol; vector X/Z=unknown (4s ago) [session=1791203586-2]
#617 t=400.4s M40 HUNTER ORDER aggression-uaz-1 radio delivered; destination=<7608.02, 6.1, 3462.74> [session=1791203586-2]
#619 t=400.4s M40 HUNTER ORDER aggression-uaz-2 radio delivered; destination=<7608.02, 6.1, 3462.74> [session=1791203586-2]
#621 t=400.4s M40 HUNTER ORDER aggression-uaz-3 radio delivered; destination=<7608.02, 6.1, 3462.74> [session=1791203586-2]
#642 t=403.4s M42 BELIEF delivered report M42 retained; tracks=1 [session=1791203586-2]
#643 t=403.4s M50 CONTACT REPORT X=7567 Z=3593: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (2s ago) [session=1791203586-2]
#658 t=405.4s M42 HUNTER COORDINATION 3 nearby crews available for delivered contact=<7567.91,6.04,3595.21> [session=1791203586-2]
#673 t=407.4s M42 HUNTER TACTICS aggression-uaz-1 left flank: radio delivered; separate approach=<7716.64, 6.1, 3338.26> [session=1791203586-2]
#674 t=407.4s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<6827.01,5.88297,3172.59> stage distance=904.933m crew aboard=3 armed support=0 visual cover=0 remaining=240s [session=1791203586-2]
#676 t=407.4s M42 HUNTER TACTICS aggression-uaz-2 right flank: radio delivered; separate approach=<7853.23, 6.1625, 3525.73> [session=1791203586-2]
#677 t=407.4s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<7794.32,206.556,4542.95> stage distance=1018.92m crew aboard=3 armed support=0 visual cover=0 remaining=240s [session=1791203586-2]
#679 t=407.4s M42 HUNTER TACTICS aggression-uaz-3 cover: radio delivered; separate approach=<7726.25, 6.1, 3495.68> [session=1791203586-2]
#680 t=407.4s M42 HUNTER TACTICS aggression-uaz-3 cover: state=1 position=<8208.85,6.246,3098.99> stage distance=624.715m crew aboard=3 armed support=0 visual cover=0 remaining=240s [session=1791203586-2]
#688 t=409.4s M50 BELIEF delivered report M50 retained; tracks=1 [session=1791203586-2]
#701 t=415.5s M54 BELIEF delivered report M54 retained; tracks=2 [session=1791203586-2]
#755 t=418.3s M0 CIVILIAN TRAFFIC car 1 created at <6507.06,251.14,4494.51>; fixed route via <7378.97,6.73513,3234.77> to <6568.38,6.1,2248.09> [session=1791203586-2]
#756 t=418.3s M83 CONTACT REPORT X=7576 Z=3584: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: pistol; vector X/Z=unknown (1s ago) [session=1791203586-2]
#822 t=424.2s M0 CIVILIAN TRAFFIC car 1 prefab={23B8C20ACAEC164B}Prefabs/Vehicles/Wheeled/S1203/S1203_transport_white.et at <6507.07,251.043,4494.51>: waiting for living seated driver [session=1791203586-2]
#833 t=425.2s M83 BELIEF delivered report M83 retained; tracks=2 [session=1791203586-2]
#834 t=425.2s M90 CONTACT REPORT X=7576 Z=3584: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: pistol; vector X/Z=unknown (6s ago) [session=1791203586-2]
#956 t=433s M90 BELIEF delivered report M90 retained; tracks=2 [session=1791203586-2]
#957 t=433s M106 CONTACT REPORT X=7577 Z=3585: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: pistol; vector X/Z=unknown (6s ago) [session=1791203586-2]
#1063 t=438s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<6894.92,7.91292,3061.57> stage distance=867.056m crew aboard=3 armed support=0 visual cover=0 remaining=209.386s [session=1791203586-2]
#1064 t=438s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<7530.6,216.598,4616.68> stage distance=1137.65m crew aboard=3 armed support=0 visual cover=0 remaining=209.386s [session=1791203586-2]
#1065 t=438s M42 HUNTER TACTICS aggression-uaz-3 cover: state=1 position=<8025.2,6.6396,3167.95> stage distance=443.598m crew aboard=3 armed support=0 visual cover=0 remaining=209.386s [session=1791203586-2]
#1232 t=452.1s M0 CIVILIAN TRAFFIC car 2 created at <6091.11,48.2686,3660.7>; fixed route via <7545.41,6.58483,3113.86> to <9335.08,199.793,3581.25> [session=1791203586-2]
#1237 t=457.1s M0 CIVILIAN TRAFFIC car 2 prefab={23B8C20ACAEC164B}Prefabs/Vehicles/Wheeled/S1203/S1203_transport_white.et at <6091.19,48.1656,3660.67>: waiting for living seated driver [session=1791203586-2]
#1259 t=468.2s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<6673.78,6.02686,2859.56> stage distance=1147.48m crew aboard=3 armed support=0 visual cover=0 remaining=179.208s [session=1791203586-2]
#1260 t=468.2s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<7206.5,199.879,4587.17> stage distance=1242.95m crew aboard=3 armed support=0 visual cover=0 remaining=179.208s [session=1791203586-2]
#1261 t=468.2s M42 HUNTER TACTICS aggression-uaz-3 cover: state=1 position=<7945.89,5.56577,3303.33> stage distance=291.961m crew aboard=3 armed support=0 visual cover=0 remaining=179.208s [session=1791203586-2]
#1264 t=483.3s M0 CIVILIAN TRAFFIC car 3 created at <6464.26,6.1,2379.27>; fixed route via <7813.63,6.1,3311.48> to <8781.06,120.942,4873.95> [session=1791203586-2]
#1266 t=488.3s M0 CIVILIAN TRAFFIC car 3 prefab={8EB38BBD860DA06E}Prefabs/Vehicles/Wheeled/S105/S105_lightblue.et at <6464.26,5.97798,2379.28>: waiting for living seated driver [session=1791203586-2]
#1268 t=497.4s M42 HUNTER TACTICS aggression-uaz-3 cover: in covering position; native gunner owns target acquisition and fire [session=1791203586-2]
#1269 t=498.4s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<6851.42,6.02675,2620.36> stage distance=1124.27m crew aboard=3 armed support=1 visual cover=0 remaining=149.05s [session=1791203586-2]
#1270 t=498.4s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<6919.19,185.928,4389.23> stage distance=1272.03m crew aboard=3 armed support=1 visual cover=0 remaining=149.05s [session=1791203586-2]
#1271 t=498.4s M42 HUNTER TACTICS aggression-uaz-3 cover: state=3 position=<7694.69,6.03109,3459.25> stage distance=48.1904m crew aboard=3 armed support=1 visual cover=0 remaining=149.05s [session=1791203586-2]
#1273 t=528.6s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<7074.34,6.0273,2518.81> stage distance=1041.18m crew aboard=3 armed support=1 visual cover=0 remaining=118.783s [session=1791203586-2]
#1274 t=528.6s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<6752.42,158.777,4048.97> stage distance=1218.84m crew aboard=3 armed support=1 visual cover=0 remaining=118.783s [session=1791203586-2]
#1275 t=528.6s M42 HUNTER TACTICS aggression-uaz-3 cover: state=3 position=<7694.67,6.02722,3459.42> stage distance=48.0794m crew aboard=3 armed support=1 visual cover=0 remaining=118.783s [session=1791203586-2]
#1277 t=538.8s M0 CIVILIAN TRAFFIC car 1 prefab={23B8C20ACAEC164B}Prefabs/Vehicles/Wheeled/S1203/S1203_transport_white.et at <6507.07,251.043,4494.51>: retiring: readiness timed out; waiting for living seated driver [session=1791203586-2]
#1280 t=545.8s M332 CONTACT REPORT X=7653 Z=3610: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (0s ago) [session=1791203586-2]
#1286 t=551.9s M332 BELIEF delivered report M332 retained; tracks=2 [session=1791203586-2]
#1287 t=551.9s M339 CONTACT REPORT X=7662 Z=3611: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (2s ago) [session=1791203586-2]
#1292 t=557.9s M339 BELIEF delivered report M339 retained; tracks=2 [session=1791203586-2]
#1293 t=557.9s M352 CONTACT REPORT X=7663 Z=3615: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (1s ago) [session=1791203586-2]
#1294 t=558.9s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<7276.29,6.02703,2671.99> stage distance=798.639m crew aboard=3 armed support=1 visual cover=1 remaining=88.4986s [session=1791203586-2]
#1295 t=558.9s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<6448.5,96.2094,3799.9> stage distance=1431.24m crew aboard=3 armed support=1 visual cover=1 remaining=88.4986s [session=1791203586-2]
#1296 t=558.9s M42 HUNTER TACTICS aggression-uaz-3 cover: state=3 position=<7694.67,6.02722,3459.42> stage distance=48.0794m crew aboard=3 armed support=1 visual cover=1 remaining=88.4986s [session=1791203586-2]
#1452 t=574.1s M0 CIVILIAN TRAFFIC car 2 prefab={23B8C20ACAEC164B}Prefabs/Vehicles/Wheeled/S1203/S1203_transport_white.et at <6091.19,48.1656,3660.67>: retiring: readiness timed out; waiting for living seated driver [session=1791203586-2]
#1481 t=590.2s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<7498.28,4.65223,2998.6> stage distance=403.803m crew aboard=3 armed support=0 visual cover=0 remaining=57.2437s [session=1791203586-2]
#1482 t=590.2s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<6397.17,48.5593,3467.85> stage distance=1457.21m crew aboard=3 armed support=0 visual cover=0 remaining=57.2437s [session=1791203586-2]
#1493 t=599.3s M447 CONTACT REPORT X=7685 Z=3515: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: rifle; vector X/Z=unknown (4s ago) [session=1791203586-2]
#1497 t=604.3s M0 CIVILIAN TRAFFIC car 3 prefab={8EB38BBD860DA06E}Prefabs/Vehicles/Wheeled/S105/S105_lightblue.et at <6464.26,5.97798,2379.28>: retiring: readiness timed out; waiting for living seated driver [session=1791203586-2]
#1502 t=607.3s M447 BELIEF delivered report M447 retained; tracks=2 [session=1791203586-2]
#1503 t=607.3s M450 CONTACT REPORT X=7687 Z=3505: at least 1 spotted nearby; on foot; off road; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (6s ago) [session=1791203586-2]
#1559 t=615.4s M450 BELIEF delivered report M450 retained; tracks=2 [session=1791203586-2]
#1601 t=620.5s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<7674.97,5.41909,3158.89> stage distance=184.15m crew aboard=3 armed support=0 visual cover=0 remaining=26.9764s [session=1791203586-2]
#1602 t=620.5s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<6439.24,20.0512,3188.64> stage distance=1453.61m crew aboard=3 armed support=0 visual cover=0 remaining=26.9764s [session=1791203586-2]
#1614 t=620.5s M466 BELIEF delivered report M466 retained; tracks=3 [session=1791203586-2]
#1689 t=634.6s M0 CIVILIAN TRAFFIC unclaimed distant car retired after 60 seconds out of sight [session=1791203586-2]
#1690 t=634.6s M0 CIVILIAN TRAFFIC car 4 created at <6727.74,6.1,2415.31>; fixed route via <7972.25,6.78365,3174.26> to <8840.93,119.133,4898.04> [session=1791203586-2]
#1691 t=639.6s M0 CIVILIAN TRAFFIC car 4 prefab={AD80FB47D868C775}Prefabs/Vehicles/Wheeled/S105/S105_green.et at <6727.74,5.97798,2415.3>: waiting for living seated driver [session=1791203586-2]
#1700 t=644.7s M0 CIVILIAN TRAFFIC unclaimed distant car retired after 60 seconds out of sight [session=1791203586-2]
#1707 t=647.7s M42 HUNTER TACTICS aggression-uaz-1 left flank: approach still progressing; allowing another bounded route interval [session=1791203586-2]
#1708 t=647.7s M42 HUNTER TACTICS aggression-uaz-2 right flank: approach still progressing; allowing another bounded route interval [session=1791203586-2]
#1713 t=650.7s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=1 position=<7969.36,6.02652,3249.91> stage distance=267.714m crew aboard=3 armed support=0 visual cover=0 remaining=26.966s [session=1791203586-2]
#1714 t=650.7s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<6556.62,6.022,2856.56> stage distance=1459.11m crew aboard=3 armed support=0 visual cover=0 remaining=26.966s [session=1791203586-2]
#1716 t=650.7s M525 BELIEF delivered report M525 retained; tracks=3 [session=1791203586-2]
#1719 t=664.8s M0 CIVILIAN TRAFFIC unclaimed distant car retired after 60 seconds out of sight [session=1791203586-2]
#1720 t=664.8s M0 CIVILIAN TRAFFIC car 5 created at <7239.89,6.13125,2201.67>; fixed route via <8039.34,5.8709,3347.53> to <8164.28,159.64,5267.55> [session=1791203586-2]
#1722 t=669.8s M0 CIVILIAN TRAFFIC car 5 prefab={AD80FB47D868C775}Prefabs/Vehicles/Wheeled/S105/S105_green.et at <7239.89,6.00923,2201.67>: waiting for living seated driver [session=1791203586-2]
#1724 t=678.9s M42 HUNTER TACTICS aggression-uaz-1 left flank: dismounting original crew [session=1791203586-2]
#1725 t=678.9s M42 HUNTER TACTICS aggression-uaz-2 right flank: approach still progressing; allowing another bounded route interval [session=1791203586-2]
#1726 t=680.9s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=2 position=<7738.39,6.02731,3309.24> stage distance=36.262m crew aboard=3 armed support=0 visual cover=0 remaining=42.9922s [session=1791203586-2]
#1727 t=680.9s M42 HUNTER TACTICS aggression-uaz-2 right flank: state=1 position=<6700.46,6.02677,2761.64> stage distance=1383m crew aboard=3 armed support=0 visual cover=0 remaining=26.4999s [session=1791203586-2]
#1728 t=687s M42 HUNTER TACTICS aggression-uaz-1 left flank: on foot; waiting for covering team [session=1791203586-2]
#1731 t=695s M0 CIVILIAN TRAFFIC car 6 created at <7474.89,219.956,4778.53>; fixed route via <7238.31,6.1,3304.95> to <5864.09,93.0056,3141.96> [session=1791203586-2]
#1732 t=700s M0 CIVILIAN TRAFFIC car 6 prefab={8EB38BBD860DA06E}Prefabs/Vehicles/Wheeled/S105/S105_lightblue.et at <7474.9,219.833,4778.55>: waiting for living seated driver [session=1791203586-2]
#1734 t=708.1s M42 HUNTER TACTICS aggression-uaz-2 right flank: approach made no recent progress or exhausted five-minute budget; release this assignment [session=1791203586-2]
#1739 t=710.1s M0 HUNTER ORDER aggression-uaz-2 radio delivered; destination=<4579.61, 323.438, 8793.14> [session=1791203586-2]
#1740 t=711.1s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=3 position=<7738.39,6.02725,3309.24> stage distance=36.262m crew aboard=0 armed support=0 visual cover=0 remaining=20.8254s [session=1791203586-2]
#1744 t=732.3s M42 HUNTER TACTICS aggression-uaz-1 left flank: cover unavailable; holding native combat and returning to vehicle [session=1791203586-2]
#1746 t=741.3s M42 HUNTER TACTICS aggression-uaz-1 left flank: state=6 position=<7738.39,6.02725,3309.24> stage distance=36.262m crew aboard=0 armed support=0 visual cover=0 remaining=80.9551s [session=1791203586-2]
#1898 t=755.4s M0 CIVILIAN TRAFFIC car 4 prefab={AD80FB47D868C775}Prefabs/Vehicles/Wheeled/S105/S105_green.et at <6727.74,5.97798,2415.3>: retiring: readiness timed out; waiting for living seated driver [session=1791203586-2]
#1925 t=785.6s M0 CIVILIAN TRAFFIC car 5 prefab={AD80FB47D868C775}Prefabs/Vehicles/Wheeled/S105/S105_green.et at <7239.89,6.00923,2201.67>: retiring: readiness timed out; waiting for living seated driver [session=1791203586-2]
#2089 t=815.9s M0 CIVILIAN TRAFFIC car 6 prefab={8EB38BBD860DA06E}Prefabs/Vehicles/Wheeled/S105/S105_lightblue.et at <7474.9,219.833,4778.55>: retiring: readiness timed out; waiting for living seated driver [session=1791203586-2]
#2115 t=982.2s M0 CIVILIAN TRAFFIC unclaimed distant car retired after 60 seconds out of sight [session=1791203586-2]
#2116 t=982.2s M0 CIVILIAN TRAFFIC unclaimed distant car retired after 60 seconds out of sight [session=1791203586-2]
#2117 t=982.2s M0 CIVILIAN TRAFFIC unclaimed distant car retired after 60 seconds out of sight [session=1791203586-2]