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);
            }
        }