--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c +++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c @@ -628,7 +628,7 @@ // Logistics owners retain their exact tokens until their own submitted // inventory operations settle. Removing that quarantine here is unsafe. if (unit.PendingConvoyOrder) unit.CancelPending(); - ReleaseRecovery(group); + unit.ReservedForSupport = false; return true; } return false; --- a/tests/test_convoy_survivors.py +++ b/tests/test_convoy_survivors.py @@ -24,7 +24,6 @@ # On the baseline the new helper is absent and never called; execute the old # release methods unchanged so the red control fails a gameplay assertion. retain=translate(body(hq,'bool ReleaseConvoySurvivors(')) if 'bool ReleaseConvoySurvivors(' in hq.read_text() else 'bool ReleaseConvoySurvivors(SCR_AIGroup*){return false;}' -recovery=translate(body(ROOT/'addons/core/Scripts/Game/ERR/10_AI/ERR_BodyRecovery.c','void ReleaseRecovery(')) claims=translate(body(hq,'void ReleaseLogistics(')) eligible=translate(body(hq,'bool Eligible(ERR_GameMode mode)')).replace('bool survivor;','bool survivor=false;') vehicle=translate(body(ai/'ERR_ConvoyService.c','void Release(ERR_GameMode mode)')) @@ -54,7 +53,7 @@ }; struct ERR_HQ{bool m_Stopping=false;ERR_GameMode*m_Mode=nullptr;Arraym_Units;int unregistrations=0,registrations=0,equipmentStops=0; void UnregisterGroup(SCR_AIGroup*g){unregistrations++;equipmentStops++;for(auto u:m_Units)if(u->Group==g){u->Group=nullptr;u->Utility=nullptr;u->reports=false;}} -'''+recovery+claims+retain+r''' +'''+claims+retain+r''' }; struct VehicleOwner{bool Released=false,Registered=true;void*InterceptOrder=nullptr;SCR_AIGroup*Group=nullptr;void*Entity=this;struct{bool Held=true;}Combat;int SupplyToken=101;bool SupplyHeld=true;int clears=0,intercepts=0; void ClearIntercept(void*){intercepts++;}void ClearOrder(){clears++;}