public static bool Prefix(TransferManager.TransferReason material, ref TransferManager.TransferOffer offer) { Logger.LogMaterial($"TransferManager::AddIncomingOffer: {Utils.ToString(ref offer, material)}!", material); // Inactive outside connections should not be adding offers ... if (OutsideConnectionInfo.IsInvalidIncomingOutsideConnection(offer.Building)) { Logger.LogMaterial($"TransferManager::AddIncomingOffer: Disallowing outside connection B{offer.Building} because of missing cargo buildings!", material); return(false); } if (!(TransferManagerInfo.IsDistrictOffer(material) || TransferManagerInfo.IsSupplyChainOffer(material))) { // Fix for certain assets that have sub buildings that should not be making offers ... if (offer.Building != 0 && BuildingManager.instance.m_buildings.m_buffer[offer.Building].m_parentBuilding != 0) { if (material == TransferManager.TransferReason.ParkMaintenance) { Logger.LogMaterial($"TransferManager::AddIncomingOffer: Filtering out subBuilding {Utils.ToString(ref offer, material)}!", material); return(false); } } return(true); } if (material == TransferManager.TransferReason.Taxi && offer.Citizen != 0) { var instance = CitizenManager.instance.m_citizens.m_buffer[offer.Citizen].m_instance; var targetBuilding = CitizenManager.instance.m_instances.m_buffer[instance].m_targetBuilding; var targetPosition = BuildingManager.instance.m_buildings.m_buffer[targetBuilding].m_position; if (!TaxiMod.CanUseTaxis(offer.Position, targetPosition)) { Logger.LogMaterial($"TransferManager::AddIncomingOffer: Filtering out {Utils.ToString(ref offer, material)}!", material); var instanceId = CitizenManager.instance.m_citizens.m_buffer[offer.Citizen].m_instance; CitizenManager.instance.m_instances.m_buffer[instanceId].m_flags &= ~CitizenInstance.Flags.WaitingTaxi; CitizenManager.instance.m_instances.m_buffer[instanceId].m_flags |= CitizenInstance.Flags.BoredOfWaiting; CitizenManager.instance.m_instances.m_buffer[instanceId].m_flags |= CitizenInstance.Flags.CannotUseTaxi; CitizenManager.instance.m_instances.m_buffer[instanceId].m_waitCounter = byte.MaxValue; return(false); } } TransferManagerAddOffer.ModifyOffer(material, ref offer); return(true); }
public static bool Prefix(ref TransferManager.TransferReason material, ref TransferManager.TransferOffer offer) { Logger.LogMaterial($"TransferManager::AddOutgoingOffer: {Utils.ToString(ref offer, material)}!", material); // Inactive outside connections should not be adding offers ... if (OutsideConnectionInfo.IsInvalidOutgoingOutsideConnection(offer.Building)) { Logger.LogMaterial($"TransferManager::AddOutgoingOffer: Disallowing outside connection B{offer.Building} because of missing cargo buildings!", material); return(false); } // Change these offers ... a bug in the base game. Citizens should not offer health care services. if ((material == TransferManager.TransferReason.ElderCare || material == TransferManager.TransferReason.ChildCare) && offer.Citizen != 0) { offer.Active = true; TransferManager.instance.AddIncomingOffer(material, offer); return(false); } // Too many requests for helicopters ... if (material == TransferManager.TransferReason.Sick2) { if (Singleton <SimulationManager> .instance.m_randomizer.Int32(10U) != 0) { material = TransferManager.TransferReason.Sick; } } if (!(TransferManagerInfo.IsDistrictOffer(material) || TransferManagerInfo.IsSupplyChainOffer(material))) { // Fix for certain assets that have sub buildings that should not be making offers ... if (offer.Building != 0 && BuildingManager.instance.m_buildings.m_buffer[offer.Building].m_parentBuilding != 0) { if (material == TransferManager.TransferReason.ParkMaintenance) { Logger.LogMaterial($"TransferManager::AddOutgoingOffer: Filtering out subBuilding {Utils.ToString(ref offer, material)}!", material); return(false); } } return(true); } TransferManagerAddOffer.ModifyOffer(material, ref offer); return(true); }