Files
EscapistsReintroduced/docs/evidence/mounted-interception-2026-10-02/convoy/review-fixes.py
T
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

25 lines
3.3 KiB
Python

from pathlib import Path
D=Path('/tmp/erri-mounted-intercept-convoy-1247/addons/core/Scripts/Game/ERR/10_AI')
p=D/'ERR_ConvoyService.c';s=p.read_text().replace(' ref ERR_ConvoyInterceptOrder InterceptOrder;', ' ref ERR_ConvoyInterceptOrder InterceptOrder;\n ERR_ConvoyReceipt InterceptReceipt;\n ERR_ForceRecord InterceptRecord;\n ERR_ForceRoute InterceptRoute;')
s=s.replace(' foreach (AIAgent agent : agents) if (!agent || !Members.Contains(agent.GetControlledEntity())) return false;', ' int attributed;\n foreach (AIAgent agent : agents)\n {\n if (!agent || !Members.Contains(agent.GetControlledEntity())) return false;\n if (agent.GetControlledEntity() == Members[i]) attributed++;\n }\n if (attributed != 1) return false;',1)
s=s.replace('InterceptActive = false; InterceptOrder = null;', 'InterceptActive = false; InterceptOrder = null; InterceptReceipt = null; InterceptRecord = null; InterceptRoute = null;',1)
s=s.replace('{ ClearIntercept(InterceptOrder); LegDeadline = now + 600000; return false; }', '{ bool delivered = InterceptActive; ClearIntercept(InterceptOrder); if (delivered) LegDeadline = now + 600000; return false; }',1)
s=s.replace(' if (order.Token < 400001', ' if (!m_Mode.Forces()) return false;\n ERR_HQ hq = ERR_HQ.Cast(m_Mode.Command());\n if (!hq || hq.LogisticsToken(order.Group) != order.Token) return false;\n if (order.Token < 400001',1)
s=s.replace(' foreach (ERR_ConvoyVehicle other : task.Vehicles)', ''' if (record.Group != unit.Group || record.SourceId != task.Receipt.SourceId + "-vehicle-" + unit.Index.ToString()) return false;
if (unit.InterceptOrder && (unit.InterceptReceipt != task.Receipt || unit.InterceptRecord != record || unit.InterceptRoute != task.Route)) return false;
foreach (ERR_ConvoyVehicle other : task.Vehicles)''',1)
s=s.replace(' return task.Vehicles[order.VehicleIndex].ClaimIntercept(m_Mode, order);', ''' ERR_ConvoyVehicle unit = task.Vehicles[order.VehicleIndex];
if (!unit.ClaimIntercept(m_Mode, order)) return false;
unit.InterceptReceipt = task.Receipt; unit.InterceptRecord = m_Mode.Forces().FindGroup(unit.Group); unit.InterceptRoute = task.Route;
return true;''',1)
s=s.replace('if (unit && unit.InterceptMatches(order)) { unit.ClearIntercept(order); unit.LegDeadline = now + 600000; }', 'if (unit && unit.InterceptMatches(order))\n { bool delivered = unit.InterceptActive; unit.ClearIntercept(order); if (delivered) unit.LegDeadline = now + 600000; }',1);p.write_text(s)
p=D/'ERR_SupplyConvoyColumn.c';s=p.read_text().replace(' bool Holding;', ' bool Holding;\n bool InterceptDetached;')
s=s.replace('float largestGap; bool supplyHold;', 'float largestGap; bool supplyHold; bool interceptLive;')
s=s.replace(' if (scan.Released || !scan.Entity || scan.InterceptActive) continue;', ''' if (scan.Released || !scan.Entity) continue;
if (scan.InterceptActive) { m_State[i].InterceptDetached = true; interceptLive = true; continue; }''')
s=s.replace(' if (leader < 0) return false;', ' if (leader < 0) return interceptLive;')
s=s.replace(' promoted.RouteIndex = m_RouteIndex;', ''' if (m_State[leader].InterceptDetached) m_RouteIndex = promoted.RouteIndex;
else promoted.RouteIndex = m_RouteIndex;''')
s=s.replace(' ERR_ConvoyColumnVehicle state = m_State[index];', ' ERR_ConvoyColumnVehicle state = m_State[index];\n state.InterceptDetached = false;')
p.write_text(s)