public int GetTicketPrice(ushort vehicleID, ref Vehicle vehicleData) { if (vehicleData.m_transportLine == 0) { return(ticketPriceForPrefix(vehicleID, ref vehicleData)); } DistrictManager instance = Singleton <DistrictManager> .instance; byte district = instance.GetDistrict(vehicleData.m_targetPos3); DistrictPolicies.Services servicePolicies = instance.m_districts.m_buffer[(int)district].m_servicePolicies; DistrictPolicies.Event @event = instance.m_districts.m_buffer[(int)district].m_eventPolicies & Singleton <EventManager> .instance.GetEventPolicyMask(); if ((servicePolicies & DistrictPolicies.Services.FreeTransport) != DistrictPolicies.Services.None) { District[] expr_80_cp_0 = instance.m_districts.m_buffer; byte expr_80_cp_1 = district; expr_80_cp_0[(int)expr_80_cp_1].m_servicePoliciesEffect = (expr_80_cp_0[(int)expr_80_cp_1].m_servicePoliciesEffect | DistrictPolicies.Services.FreeTransport); return(0); } if ((@event & DistrictPolicies.Event.ComeOneComeAll) != DistrictPolicies.Event.None) { District[] expr_AC_cp_0 = instance.m_districts.m_buffer; byte expr_AC_cp_1 = district; expr_AC_cp_0[(int)expr_AC_cp_1].m_eventPoliciesEffect = (expr_AC_cp_0[(int)expr_AC_cp_1].m_eventPoliciesEffect | DistrictPolicies.Event.ComeOneComeAll); return(0); } if ((servicePolicies & DistrictPolicies.Services.HighTicketPrices) != DistrictPolicies.Services.None) { District[] expr_D8_cp_0 = instance.m_districts.m_buffer; byte expr_D8_cp_1 = district; expr_D8_cp_0[(int)expr_D8_cp_1].m_servicePoliciesEffect = (expr_D8_cp_0[(int)expr_D8_cp_1].m_servicePoliciesEffect | DistrictPolicies.Services.HighTicketPrices); return((int)ticketPriceForPrefix(vehicleID, ref vehicleData) * 5 / 4); } return(ticketPriceForPrefix(vehicleID, ref vehicleData)); }
private static bool ticketPriceForPrefix(ushort vehicleID, ref Vehicle vehicleData, ref int __result) { var def = TransportSystemDefinition.from(vehicleData.Info); if (def == default(TransportSystemDefinition)) { return(true); } DistrictManager instance = Singleton <DistrictManager> .instance; byte district = instance.GetDistrict(vehicleData.m_targetPos3); DistrictPolicies.Services servicePolicies = instance.m_districts.m_buffer[(int)district].m_servicePolicies; DistrictPolicies.Event @event = instance.m_districts.m_buffer[(int)district].m_eventPolicies & Singleton <EventManager> .instance.GetEventPolicyMask(); float multiplier; if (vehicleData.Info.m_class.m_subService == ItemClass.SubService.PublicTransportTours) { multiplier = 1; } else { if ((servicePolicies & DistrictPolicies.Services.FreeTransport) != DistrictPolicies.Services.None) { __result = 0; return(false); } if ((@event & DistrictPolicies.Event.ComeOneComeAll) != DistrictPolicies.Event.None) { __result = 0; return(false); } if ((servicePolicies & DistrictPolicies.Services.HighTicketPrices) != DistrictPolicies.Services.None) { District[] expr_114_cp_0 = instance.m_districts.m_buffer; byte expr_114_cp_1 = district; expr_114_cp_0[(int)expr_114_cp_1].m_servicePoliciesEffect = (expr_114_cp_0[(int)expr_114_cp_1].m_servicePoliciesEffect | DistrictPolicies.Services.HighTicketPrices); multiplier = 5f / 4f; } else { multiplier = 1; } } if (vehicleData.m_transportLine == 0) { __result = (int)(def.GetTransportExtension().GetDefaultTicketPrice(0) * multiplier); return(false); } else { if (TLMTransportLineExtension.instance.IsUsingCustomConfig(vehicleData.m_transportLine)) { __result = (int)(TLMTransportLineExtension.instance.GetTicketPrice(vehicleData.m_transportLine) * multiplier); } else { __result = (int)(def.GetTransportExtension().GetTicketPrice(TLMLineUtils.getPrefix(vehicleData.m_transportLine)) * multiplier); } return(false); } }