Files
jakub 6a667d8deb Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
2026-10-13 22:52:53 +02:00

108 lines
3.5 KiB
Plaintext

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);
}
}