public static IEnumerable <int> GetPrefabs(ushort buildingId) { var info = BuildingManager.instance.m_buildings.m_buffer[buildingId].Info; var service = info.GetService(); var subService = info.GetSubService(); var level = info.GetClassLevel(); var service2 = info.GetService(); var subService2 = ItemClass.SubService.None; var level2 = ItemClass.Level.None; // Special handling for player industry ... follows logic in WarehouseAI::GetTransferVehicleService. bool ignoreLevel = false; if (info.GetAI() is PostOfficeAI) { ignoreLevel = true; } else if (info.GetAI() is CargoStationAI cargoStationAI) { if (cargoStationAI.m_transportInfo != null && cargoStationAI.m_transportInfo.m_netSubService == ItemClass.SubService.PublicTransportTrain) { subService2 = ItemClass.SubService.PublicTransportTrain; level2 = ItemClass.Level.Level4; } } else if (service == ItemClass.Service.PlayerIndustry) { service = ItemClass.Service.Industrial; subService = ItemClass.SubService.None; var material = TransferManagerInfo.GetSupplyBuildingOutputMaterial(buildingId); switch (material) { case TransferManager.TransferReason.Oil: case TransferManager.TransferReason.Petroleum: case TransferManager.TransferReason.Plastics: subService = ItemClass.SubService.IndustrialOil; break; case TransferManager.TransferReason.Ore: case TransferManager.TransferReason.Coal: case TransferManager.TransferReason.Glass: case TransferManager.TransferReason.Metals: subService = ItemClass.SubService.IndustrialOre; break; case TransferManager.TransferReason.Logs: case TransferManager.TransferReason.Paper: case TransferManager.TransferReason.PlanedTimber: subService = ItemClass.SubService.IndustrialForestry; break; case TransferManager.TransferReason.Grain: case TransferManager.TransferReason.Flours: subService = ItemClass.SubService.IndustrialFarming; break; case TransferManager.TransferReason.Goods: subService = ItemClass.SubService.IndustrialGeneric; break; case TransferManager.TransferReason.AnimalProducts: service = ItemClass.Service.PlayerIndustry; subService = ItemClass.SubService.PlayerIndustryFarming; break; case TransferManager.TransferReason.LuxuryProducts: service = ItemClass.Service.PlayerIndustry; ignoreLevel = true; break; default: if (material != TransferManager.TransferReason.Petrol) { if (material != TransferManager.TransferReason.Food) { if (material != TransferManager.TransferReason.Lumber) { service = ItemClass.Service.None; break; } goto case TransferManager.TransferReason.Logs; } else { goto case TransferManager.TransferReason.Grain; } } else { goto case TransferManager.TransferReason.Oil; } } } // Spit out the prefab names ... foreach (var prefabIndex in PrefabNames.Keys) { var prefab = PrefabCollection <VehicleInfo> .GetPrefab((uint)prefabIndex); if (prefab.m_class.m_service == service && prefab.m_class.m_subService == subService && (prefab.m_class.m_level == level || ignoreLevel)) { yield return(prefabIndex); } else if (prefab.m_class.m_service == service2 && prefab.m_class.m_subService == subService2 && prefab.m_class.m_level == level2) { yield return(prefabIndex); } } }