Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
108 lines
3.5 KiB
Plaintext
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);
|
|
|
|
}
|
|
}
|