modded class ArmaReforgerScripted
{
 protected float m_ERRNext,m_ERRStarted=-1,m_ERRLog,m_ERRDiag;

 protected bool m_ERRDone,m_ERRThreat;

 protected SCR_AIGroup m_ERRTargets;

 override void OnUpdate(BaseWorld world,float timeslice)
 {
  super.OnUpdate(world,timeslice);
ERR_GameMode mode=ERR_GameMode.Get();

  if(m_ERRDone || !world || !Replication.IsServer() || !mode || !mode.Active())return;

  float now=world.GetWorldTime();
if(now<m_ERRNext)return;
m_ERRNext=now+1000;

  if(mode.Phase()==ERR_Phase.PRISON)mode.Transition(ERR_Phase.RADIO_SEARCH);

  ERR_HQ hq=ERR_HQ.Get();
if(now>=m_ERRDiag){m_ERRDiag=now+15000;
PrintFormat("ERR CONVOY DIAG: phase=%1 command=%2 hq=%3",mode.Phase(),mode.Command(),hq);
}
  if (!hq) { return;
 }
  Print("ERR CONVOY CALL");

  hq.ERR_ConvoySceneTick(now);

  hq.Journal().Flush();

  if(!hq.Convoys() || hq.Convoys().Count()<1)return;

  ERR_SupplyConvoyTask task=ERR_SupplyConvoyTask.Cast(hq.Convoys().At(0));
if(!task || !task.Ready)return;

  if(m_ERRStarted<0){m_ERRStarted=now;
Print("ERR CONVOY SCENE START");
}
  float elapsed=now-m_ERRStarted;

  if(!m_ERRThreat && elapsed>180000)
  {
   m_ERRThreat=true;
vector center=ERR_Actors.Ground(task.Vehicles[2].Entity.GetOrigin()+"160 0 100");

   m_ERRTargets=SCR_AIGroup.Cast(ERR_Actors.Spawn("{84E5BBAB25EA23E5}Prefabs/Groups/BLUFOR/Group_US_FireTeam.et",center));

   if(m_ERRTargets){m_ERRTargets.SetPermanentLOD(0);
m_ERRTargets.ActivateAI();
AIWaypoint hold=AIWaypoint.Cast(ERR_Actors.Spawn(ERR_Resources.DefendWaypoint(),center));
if(hold)m_ERRTargets.AddWaypoint(hold);
}
   PrintFormat("ERR CONVOY SCENE THREAT: pos=%1; labelled synthetic initial contact",center);
   task.Tactics.Report(center, now, now);

  }
  if(m_ERRTargets){array<AIAgent>a={};
m_ERRTargets.GetAgents(a);
foreach(AIAgent agent:a)if(agent && agent.GetControlledEntity()){agent.SetPermanentLOD(0);
agent.ActivateAI();
DamageManagerComponent dmg=DamageManagerComponent.Cast(agent.GetControlledEntity().FindComponent(DamageManagerComponent));
if(dmg)dmg.EnableDamageHandling(false);
}}
  foreach(ERR_ConvoyVehicle car:task.Vehicles)foreach(IEntity man:car.Members)if(man){DamageManagerComponent dmg=DamageManagerComponent.Cast(man.FindComponent(DamageManagerComponent));
if(dmg)dmg.EnableDamageHandling(false);
}
  foreach(ERR_SupplyTeam team:task.Teams)foreach(IEntity man:team.Members)if(man){DamageManagerComponent dmg=DamageManagerComponent.Cast(man.FindComponent(DamageManagerComponent));
if(dmg)dmg.EnableDamageHandling(false);
}
  if(now>=m_ERRLog)
  {
   m_ERRLog=now+5000;

   PrintFormat("ERR CONVOY SCENE STATE: t=%1 state=%2 stopped=%3",elapsed/1000,task.Tactics.State(),task.Stopped);

   foreach(ERR_ConvoyVehicle car:task.Vehicles){vector goal;
if(car.Waypoint)goal=car.Waypoint.GetOrigin();
PrintFormat("ERR CONVOY SCENE CAR: t=%1 id=%2 pos=%3 goal=%4 released=%5",elapsed/1000,car.Index,car.Entity.GetOrigin(),goal,car.Released);
}
   int i;
foreach(ERR_SupplyTeam team:task.Teams){int n;
foreach(IEntity man:team.Members){if(man)PrintFormat("ERR CONVOY SCENE MAN: t=%1 team=%2 man=%3 pos=%4 mounted=%5",elapsed/1000,i,n,man.GetOrigin(),CompartmentAccessComponent.GetVehicleIn(man)!=null);
n++;
}i++;
}
  }
  if(elapsed>300000){m_ERRDone=true;
Print("ERR SCENE COMPLETE");
}
 }
}
modded class ERR_HQ
{
 protected float m_ERRConvoyDiag;

 void ERR_ConvoySceneTick(float now)
 {
  if(now>=m_ERRConvoyDiag){m_ERRConvoyDiag=now+15000;
PrintFormat("ERR CONVOY HQ BEFORE: stopping=%1 mode=%2 now=%3",m_Stopping,m_Mode,now);
}
  super.Tick(now);

 }
}
