modded class ERR_HunterService { protected ref ERR_HunterVehicle m_ERRProbeTruck; void ERR_CheckTruckCrew(Vehicle vehicle) { ERR_HunterVehicle unit = new ERR_HunterVehicle(); unit.Entity = vehicle; unit.TroopTransport = true; unit.Group = SCR_AIGroup.Cast(ERR_Actors.Spawn(ERR_ConvoyResources.GroupPrefab(), vehicle.GetOrigin())); bool filled = unit.Group && FillCrew(unit); m_ERRProbeTruck = unit; PrintFormat("ERR HUNTER FLEET NATIVE CREW QUEUED: filled=%1 members=%2 seats=%3", filled, unit.Members.Count(), unit.Seats.Count()); GetGame().GetCallqueue().CallLater(ERR_FinishTruckProbe, 2000, false); } void ERR_FinishTruckProbe() { ERR_HunterVehicle unit = m_ERRProbeTruck; int occupied; for (int i = 0; i < unit.Seats.Count() && i < unit.Members.Count(); i++) if (unit.Seats[i].GetOccupant() == unit.Members[i]) occupied++; PrintFormat("ERR HUNTER FLEET NATIVE CREW: filled=%1 members=%2 seats=%3 occupied=%4", unit.Group.GetAgentsCount() == 15, unit.Members.Count(), unit.Seats.Count(), occupied); foreach (IEntity actor : unit.Members) if (actor) SCR_EntityHelper.DeleteEntityAndChildren(actor); if (unit.Group) SCR_EntityHelper.DeleteEntityAndChildren(unit.Group); if (unit.Entity) SCR_EntityHelper.DeleteEntityAndChildren(unit.Entity); m_ERRProbeTruck = null; } } modded class ArmaReforgerScripted { protected ref ERR_HunterService m_ERRTruckService; protected bool m_ERRTruckSeatsChecked; protected float m_ERRTruckProbeAge; override void OnUpdate(BaseWorld world, float timeslice) { super.OnUpdate(world, timeslice); if (m_ERRTruckSeatsChecked || !m_ERRPresentedTerrainHeader) return; m_ERRTruckProbeAge += timeslice; if (m_ERRTruckProbeAge < 4 || !ERR_GameMode.Get() || !ERR_GameMode.Get().EnemyFaction()) return; m_ERRTruckSeatsChecked = true; for (int ordinal = 0; ordinal < 3; ordinal++) { IEntity vehicle = ERR_Actors.Spawn(ERR_HunterFleetRules.VehiclePrefab(ordinal), ERR_Actors.Ground(Vector(3000 + ordinal * 30, 0, 3000))); array seats = {}; bool collected = vehicle && ERR_ConvoyRules.CollectSeats(vehicle, seats); int drivers, turrets, cargo; foreach (BaseCompartmentSlot seat : seats) { if (seat.GetType() == ECompartmentType.PILOT) drivers++; if (seat.GetType() == ECompartmentType.TURRET) turrets++; if (seat.GetType() == ECompartmentType.CARGO) cargo++; } bool valid = collected && ERR_HunterFleetRules.Seats(ERR_HunterFleetRules.Transport(ordinal), drivers, turrets, cargo, seats.Count()); PrintFormat("ERR HUNTER FLEET NATIVE: slot=%1 transport=%2 driver=%3 turrets=%4 cargo=%5 total=%6 valid=%7", ordinal, ERR_HunterFleetRules.Transport(ordinal), drivers, turrets, cargo, seats.Count(), valid); if (ordinal == 2 && valid) { m_ERRTruckService = new ERR_HunterService(ERR_GameMode.Get(), null); m_ERRTruckService.ERR_CheckTruckCrew(Vehicle.Cast(vehicle)); continue; } if (vehicle) SCR_EntityHelper.DeleteEntityAndChildren(vehicle); } } }