modded class ERR_HQ
{
 void ERR_SearchFixtureReports(ERR_HQReport first, ERR_HQReport second = null)
 {
  m_Contacts.Clear();
  if (first) m_Contacts.Insert(first);
  if (second) m_Contacts.Insert(second);
 }
}
modded class ERR_ReconFlightComponent
{
 protected bool ERR_SearchCheck(bool ok, string label)
 {
  if (ok) Print("ERR SEARCH PASS: " + label);
  else Print("ERR SEARCH FAIL: " + label, LogLevel.ERROR);
  return ok;
 }
 bool ERR_SearchFixture(Vehicle aircraft, IEntity target)
 {
  m_Aircraft = aircraft;
  float now = 1000000;
  vector newestPosition = "3000 50 5000";
  vector olderPosition = "5000 50 5000";
  aircraft.SetOrigin(newestPosition + Vector(1446, 100, 0));
  ERR_HQReport newest = new ERR_HQReport(); newest.Target = target; newest.Position = newestPosition; newest.ObservedAt = now - 1000; newest.MessageId = 101;
  ERR_HQReport older = new ERR_HQReport(); older.Target = target; older.Position = olderPosition; older.ObservedAt = now - 5000; older.MessageId = 102;
  ERR_HQ.Get().ERR_SearchFixtureReports(newest, older);
  Search(now);
  if (!ERR_SearchCheck(m_Center == newestPosition && m_HQSearch.Active, "newest observation wins over array insertion order")) return false;
  Search(now + 90000);
  if (!ERR_SearchCheck(m_Center == newestPosition && m_HQSearch.Active && m_HQSearch.SearchedMs == 0, "60-second expiry and 90-second sector timer cannot abort distant approach")) return false;
  Search(now + 270000);
  if (!ERR_SearchCheck(m_Center == newestPosition && m_HQSearch.Active, "cached scalar destination survives several minutes without fresh support report")) return false;
  aircraft.SetOrigin(newestPosition + Vector(300, 100, 0));
  for (int i = 1; i <= 119; i++) Search(now + 270000 + i * 1000);
  if (!ERR_SearchCheck(m_Center == newestPosition && m_HQSearch.Active && m_HQSearch.SearchedMs == 119000, "two-minute local search starts only after reaching area")) return false;
  Search(now + 390000);
  if (!ERR_SearchCheck(!m_HQSearch.Active && m_Reason == "searching island sector", "exhausted HQ area returns to random sector search")) return false;
  newest.ObservedAt = now + 395000; newest.Position = "4000 50 5000";
  Search(now + 395000);
  if (!ERR_SearchCheck(m_Center == newest.Position && m_HQSearch.Active, "new report interrupts random sector within five seconds")) return false;
  m_HQSearch.Cancel(now + 396000);
  Search(now + 400000);
  if (!ERR_SearchCheck(!m_HQSearch.Active, "older HQ report cannot override more recent direct crew sighting")) return false;
  ERR_HQ.Get().ERR_SearchFixtureReports(null);
  return true;
 }
}
modded class ArmaReforgerScripted
{
 protected bool m_ERRSearchDone;
 override void OnUpdate(BaseWorld world, float timeslice)
 {
  super.OnUpdate(world, timeslice);
  if (m_ERRSearchDone || !world || !Replication.IsServer()) return;
  ERR_GameMode mode = ERR_GameMode.Get();
  if (!mode || !mode.Active() || !ERR_HQ.Get()) return;
  m_ERRSearchDone = true;
  EntitySpawnParams params = new EntitySpawnParams(); params.TransformMode = ETransformMode.WORLD; params.Transform[3] = "4400 150 5000";
  Vehicle aircraft = Vehicle.Cast(SpawnEntityPrefab(Resource.Load("{C31F210ABE078192}Prefabs/ERR/ReconHelicopter.et"), world, params));
  if (!aircraft) { Print("ERR SEARCH FAIL: fixture aircraft spawn", LogLevel.ERROR); return; }
  ERR_ReconFlightComponent flight = ERR_ReconFlightComponent.Cast(aircraft.FindComponent(ERR_ReconFlightComponent));
  if (!flight || !flight.ERR_SearchFixture(aircraft, mode)) return;
  Print("ERR SEARCH COMPLETE: native production search integration");
 }
}
