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_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>90000) { 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){arraya={}; 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>270000){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); } }