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

51 lines
2.3 KiB
C

modded class ERR_HunterService
{
bool ProbePatrol(ERR_HunterVehicle unit)
{
vector destination, angles;
bool found = OpeningPatrolPoint(unit, destination, angles);
PrintFormat("ERR RADIUS PATROL: truck=%1 found=%2 homeDistance=%3 travel=%4", unit.TroopTransport, found, vector.DistanceXZ(destination, unit.PatrolHome), vector.DistanceXZ(destination, unit.Entity.GetOrigin()));
return found && vector.DistanceXZ(destination, unit.PatrolHome) <= 500 && vector.DistanceXZ(destination, unit.Entity.GetOrigin()) >= 100;
}
}
modded class ArmaReforgerScripted
{
protected ref ERR_HunterOpeningPlan m_RadiusPlan;
protected ref ERR_HunterService m_RadiusService;
protected int m_RadiusStage;
protected float m_RadiusNext;
override void OnUpdate(BaseWorld world, float timeslice)
{
super.OnUpdate(world, timeslice);
ERR_GameMode mode = ERR_GameMode.Get();
if (!mode || mode.Phase() < ERR_Phase.PRISON || m_RadiusStage >= 2) return;
float now = world.GetWorldTime(); if (now < m_RadiusNext) return; m_RadiusNext = now + 1000;
int radius = 1000; if (m_RadiusStage == 1) radius = 1800;
if (!m_RadiusPlan) m_RadiusPlan = new ERR_HunterOpeningPlan(mode.PrisonPosition(), radius);
array<IEntity> players = {}; m_RadiusPlan.Step(players);
if (!m_RadiusPlan.Done()) return;
bool valid = m_RadiusPlan.Ready();
foreach (vector point : m_RadiusPlan.Positions)
{
bool band = ERR_HunterOpeningRules.InBand(m_RadiusPlan.Center, point, radius); valid = valid && band;
PrintFormat("ERR RADIUS POSITION: target=%1 actual=%2 band=%3", radius, vector.DistanceXZ(point, m_RadiusPlan.Center), band);
}
if (valid)
{
m_RadiusService = new ERR_HunterService(mode, null);
ERR_HunterVehicle unit = new ERR_HunterVehicle(); unit.PatrolHome = m_RadiusPlan.Positions[0];
unit.Entity = Vehicle.Cast(ERR_Actors.Spawn(ERR_HunterFleetRules.VehiclePrefab(0), unit.PatrolHome, m_RadiusPlan.Angles[0]));
if (!unit.Entity) valid = false;
else
{
valid = m_RadiusService.ProbePatrol(unit) && valid;
unit.TroopTransport = true; valid = m_RadiusService.ProbePatrol(unit) && valid;
ERR_Actors.DeleteSpawned(unit.Entity);
}
}
PrintFormat("ERR RADIUS RESULT: radius=%1 valid=%2 positions=%3", radius, valid, m_RadiusPlan.Positions.Count());
m_RadiusStage++; m_RadiusPlan = null;
if (m_RadiusStage == 2) Print("ERR RADIUS COMPLETE");
}
}