Smart Calculators

Smart

Calculators

Калькулятор грузового дохода OpenTTD

Узнайте, сколько на самом деле приносит каждый рейс в OpenTTD. Выберите груз, задайте расстояние в клетках и дни в пути — калькулятор покажет £ за рейс, £ за клетку, £ за день и самый прибыльный груз для маршрута.

Рассчитать доход за одну доставку.

Определяет, какие грузы появятся в выпадающем списке. Выберите тот же климат, что и в вашем сохранении OpenTTD.

Груз, который везёт ваш поезд, корабль, самолёт или грузовик. У каждого груза свой коэффициент оплаты и кривая свежести.

пассажиров

клеток

дн.

Накладная №1
Доход · за поездку
£3,508
100 клеток · 100 пассажиров · 60 дн. · Пассажиры
£ за клетку
£35.08
доход ÷ расстояние
£ в день
£58.47
доход ÷ дни в пути
Фактор времени
231 / 255
Свежесть груза — 90,6%

Как получено это число

Фактор времени
255 − 24 − 2·0 → 231
Половина расстояния
100 ÷ 2 → 50
Шаг 1 (>> 7)
50 × 231 × 100 ÷ 128 → 9 023
Умножить на стоимость груза
× 3 185
Разделить на 8192 (>> 13)
÷ 8192
Доход
£3,508
Шпаргалка по грузам · Умеренный
ГрузСтоимость грузаЛучше при расстоянииПортится через
Драгоценности7 509≤ 75 клеток33 периодов
Товары6 144≤ 375 клеток33 периодов
Уголь5 916≤ 525 клеток
Сталь5 688≤ 525 клеток
Железная руда5 120≤ 675 клеток
Древесина5 005≤ 1 125 клеток
Зерно4 778≤ 300 клеток44 периодов
Почта4 550≤ 1 500 клеток110 периодов
Нефть4 437≤ 1 875 клеток
Скот4 322≤ 300 клеток22 периодов
Пассажиры3 185любая дистанция24 периодов
Формула проверена · исходники OpenTTD

Vanilla OpenTTD 14.x и JGRPP. Наборы NewGRF переопределяют стандартные ставки и пока не поддерживаются. Доход показан в ценах базового года (1950); инфляция в вашем сохранении масштабирует значения пропорционально.

09·МАЯ·2026

Калькулятор грузового дохода OpenTTD. £ за поездку из груза, расстояния и дней в пути.

Калькулятор грузового дохода OpenTTD возвращает точное £ за одну доставку в vanilla 14.x или JGRPP. Введите тип груза, количество, манхэттенское расстояние в клетках и календарные дни в пути — инструмент прогоняет целочисленную формулу из economy.cpp и выводит £ за поездку, £ за клетку, £ в день и фактор времени (0–255).

Что такое калькулятор грузового дохода OpenTTD?

Калькулятор грузового дохода OpenTTD — это веб-инструмент, который по типу груза, количеству, манхэттенскому расстоянию в клетках и календарным дням в пути возвращает внутриигровое значение в фунтах стерлингов (£) за одну доставку. Он бит-в-бит воспроизводит функцию GetTransportedGoodsIncome() из src/economy.cpp: тот же сдвиг вправо на 21 разряд, тот же нижний предел фактора времени на 31, те же пороги дни1 и дни2 для каждого из 31 уникального названия грузов в vanilla (всего 33 строки — Древесина и Нефть имеют отдельную субтропическую запись с собственной стоимостью). Знак £ — это просто метка внутриигровой валюты, не настоящие британские фунты; OpenTTD позволяет переключиться на $ или €, но формула всегда считается во внутреннем £ и переформатируется на экране.
Калькулятор покрывает все четыре климата (умеренный, субарктический, субтропический, игрушечный) и автоматически переключает выпадающий список грузов при смене климата. По умолчанию целью стоит vanilla OpenTTD 14.x, но формула и таблица оплаты побайтово совпадают с JGR’s Patch Pack и с классическим Transport Tycoon Deluxe — код грузового дохода не менялся с релиза 1995 года. Игроки в Steam, GOG, в прямой загрузке с openttd.org и в JGRPP видят одни и те же числа.
Страница `wiki.openttd.org/ru/Manual/Game Mechanics/Грузовой доход` описывает формулу словами и приводит таблицу «волшебных чисел», но без ни одного развёрнутого расчёта на бумаге. Самый известный сторонний инструмент `citymania.org/tools/profit` сам у себя на странице признаётся: «numbers may not be exactly accurate (they should be pretty close though)». Этот калькулятор закрывает три пробела, которых нет ни у вики, ни у CityMania: показывает точное £ за поездку, которое можно сверить с исходным кодом, выводит панель «как получено это число» со всеми промежуточными значениями (периоды транспортировки, periodsOverDays1, periodsOverDays2, фактор времени, числитель, сдвиг) и даёт шпаргалку из 33 строк, отсортированную по стоимости груза, чтобы было видно, какой груз выгоден на какой длине маршрута.

Как рассчитать грузовой доход OpenTTD (и как это делает калькулятор)

Грузовой доход в OpenTTD сводится к четырём входным значениям и одной целочисленной формуле. Калькулятор сверху прогоняет её за вас; ручная версия ниже — та, которую ветераны tt-forums и завсегдатаи Steam используют, чтобы прикинуть маршрут, прежде чем закладывать магистраль на 200 клеток.
Через инструмент
1. Выберите климат вашего сохранения (Умеренный по умолчанию — около 60% всех vanilla-карт).
2. Выберите груз. Список фильтруется по тем грузам, которые легальны в этом климате (Уголь — только Умеренный или Субарктический, Алмазы — только Субтропический, Игрушки — только Игрушечный и так далее).
3. Введите количество доставленного (по умолчанию 100 — пассажиров, тонн, мешков, литров или штук в зависимости от груза).
4. Введите манхэттенское расстояние в клетках между станциями отправления и назначения. Это НЕ длина путей — это диагональное расстояние по сетке, $|x1 - x2| + |y1 - y2|$. Маршрут, который вьётся вокруг гор, может быть на 30% длиннее своего манхэттенского расстояния.
5. Введите календарные дни, которые груз провёл внутри транспорта (по умолчанию 60). Дальние товарные поезда обычно показывают 80–200 дней в пути; корабли — часто 300+.
Герой-результат — £ за одну доставку. Под ним калькулятор печатает £ за клетку, £ в день, фактор времени (из 255) и процент свежести. Панель разбора показывает перевод календарных дней в периоды транспортировки, оба значения periodsOverDays, итоговый фактор времени с учётом нижнего предела и финальное целочисленное деление — те же шесть строк, которые вы написали бы на бумаге.
Руками
1. Переведите календарные дни в периоды транспортировки: $tp = \lfloor daystransit / 2{,}5 \rfloor$. Вики на странице грузового дохода особо подчёркивает: один «день» в её формулах — это 2,5 внутриигровых дня. OpenTTD хранит время в пути в одном байте (максимум 255), и единица измерения в 2,5 дня нужна, чтобы счётчик дотягивал до длинных морских маршрутов.
2. Возьмите из таблицы дни1 и дни2 для груза: пассажиры (0, 24), уголь (7, 255), драгоценности (1, 32) — и так для всех 33 строк vanilla (31 уникальное название грузов, Древесина и Нефть имеют отдельную субтропическую запись).
3. Посчитайте periodsOverDays1: $\max(tp - days1, 0)$. Это число периодов транспортировки сверх первого порога свежести.
4. Посчитайте periodsOverDays2: $\max(periodsOverDays1 - days2, 0)$. Дополнительные периоды сверх второго порога.
5. Посчитайте фактор времени: $\max(255 - periodsOverDays1 - periodsOverDays2, 31)$. Нижний предел 31 — это константа MIN_TIME_FACTOR в economy.cpp; именно она запрещает доходу полностью обнулиться у застоявшегося груза.
6. Примените формулу дохода: $income = \lfloor (distance \cdot timeFactor \cdot amount \cdot paymentRate) / 2\,097\,152 \rfloor$. Знаменатель $2^{21}$ соответствует сдвигу `BigMulS(..., 21)` в economy.cpp.
Контрольный пример из вики: 27 пассажиров, 100 клеток, 60 календарных дней, умеренный климат. tp = 24, periodsOverDays1 = 24 − 0 = 24, periodsOverDays2 = max(24 − 24, 0) = 0, timeFactor = 255 − 24 = 231, числитель = 100 × 231 × 27 × 3185 = 1 986 484 500, доход = floor(1 986 484 500 / 2 097 152) = £947 за поездку. Это число совпадает с внутриигровым графиком оплаты грузов на 60 днях для пассажиров (в пределах квантования графика) и используется как эталон в QA-тестах калькулятора.

Грузовой доход — целочисленная формула из economy.cpp

I=DTAP221,T=max ⁣(255max(tpd1,0)max(max(tpd1,0)d2,0), 31),tp=daystransit2,5I = \left\lfloor \dfrac{D \cdot T \cdot A \cdot P}{2^{21}} \right\rfloor, \quad T = \max\!\left(255 - \max(tp - d_1, 0) - \max(\max(tp - d_1, 0) - d_2, 0),\ 31\right), \quad tp = \left\lfloor \dfrac{days_{transit}}{2{,}5} \right\rfloor
  • II = Доход во внутриигровых £ за одну доставку (целое число, которое возвращает калькулятор)
  • DD = Манхэттенское расстояние в клетках между станциями отправления и назначения — $|x_{src} - x_{dst}| + |y_{src} - y_{dst}|$
  • TT = Фактор времени (0–255), 255 = идеально свежий груз, нижний предел MIN_TIME_FACTOR = 31
  • AA = Количество доставленного груза (пассажиры, тонны, мешки, литры, штуки)
  • PP = Базовая стоимость груза из таблицы _default_cargo в economy.cpp — 3185 у пассажиров, 5916 у угля, 7964 у субтропической древесины (рекорд), 7509 у драгоценностей (рекорд среди не-древесины)
  • tptp = Периоды транспортировки — календарные дни, делённые на 2,5 и округлённые вниз. Один период = 2,5 внутриигровых дня
  • d1d_1 = Порог дни1 для груза — ранний рубеж распада свежести в периодах транспортировки. 0 у пассажиров и продуктов, 1 у драгоценностей, 7 у угля, 25 у нефти, 30 у пластика и газировки
  • d2d_2 = Порог дни2 для груза — поздний рубеж распада. 24 у пассажиров, 32 у драгоценностей, 40 у зерна, 255 у угля (фактически бесконечный)
Знаменатель $2^{21} = 2 097 152$ — это сдвиг `BigMulS(..., 21)` в функции GetTransportedGoodsIncome() (src/economy.cpp). Словесная формула на вики использует два последовательных сдвига (`>> 7`, затем `>> 13`); алгебраически они эквивалентны, потому что $2^{7} \cdot 2^{13} \cdot 2 = 2^{21}$ — ведущее деление на 2 в формуле вики свёртывается в общий знаменатель. В JavaScript мы повторяем сдвиг C++ одной операцией `Math.floor(numerator / 2_097_152)`, потому что все промежуточные произведения умещаются в Number.MAX_SAFE_INTEGER при ограничениях ввода калькулятора (расстояние ≤ 2048, количество ≤ 9999, стоимость груза ≤ 7964). BigInt не нужен; ошибки на единицу против движка нет.

Примеры с полной раскладкой

Контрольный пример вики — 27 пассажиров, 100 клеток, 60 дней, умеренный климат

tp = floor(60 / 2,5) = 24. У пассажиров дни1 = 0, дни2 = 24, стоимость груза = 3185. periodsOverDays1 = max(24 − 0, 0) = 24. periodsOverDays2 = max(24 − 24, 0) = 0. Фактор времени = max(255 − 24 − 0, 31) = 231. Числитель = 100 × 231 × 27 × 3185 = 1 986 484 500. Доход = floor(1 986 484 500 / 2 097 152) = £947 за поездку, фактор времени 231/255 (свежесть 90,6%), £9,47 за клетку, £15,78 в день. Это контрольное число §5.5 из ТЗ калькулятора и сверка QA с внутриигровым графиком оплаты грузов.

Уголь на дальнюю дистанцию — 200 тонн, 300 клеток, 200 дней, субарктика

У угля дни1 = 7, дни2 = 255 (фактически бесконечная стойкость). tp = floor(200 / 2,5) = 80. periodsOverDays1 = 80 − 7 = 73. periodsOverDays2 = max(73 − 255, 0) = 0. Фактор времени = max(255 − 73 − 0, 31) = 182. Числитель = 300 × 182 × 200 × 5916 = 64 602 720 000. Доход = floor(64 602 720 000 / 2 097 152) = £30 804 за поездку, £102,68 за клетку, £154,02 в день. Уголь платит 5916 базовой ставки — не рекорд по таблице — но пара 7/255 означает, что даже поезд, идущий 200 дней, продолжает зарабатывать на 71% от скорости свежего груза. Именно поэтому уголь — канонический «поставил магистраль в 1949-м и забыл» груз на русскоязычных Steam-гайдах и в обсуждениях на tt-forums.

Драгоценности на сверхкоротком плече — 50 шт., 50 клеток, 5 дней, умеренный климат

У драгоценностей самая высокая стоимость груза среди не-древесины (£7509) и самое узкое окно свежести (дни1 = 1, дни2 = 32). tp = floor(5 / 2,5) = 2. periodsOverDays1 = max(2 − 1, 0) = 1. periodsOverDays2 = max(1 − 32, 0) = 0. Фактор времени = max(255 − 1 − 0, 31) = 254 (свежесть 99,6%). Числитель = 50 × 254 × 50 × 7509 = 4 768 215 000. Доход = floor(4 768 215 000 / 2 097 152) = £2 273 за поездку, £45,46 за клетку, £454,60 в день. Это самый высокий показатель «£ в день» в игре — но только на коротких плечах. Растяните ту же поездку до 50 дней, и фактор времени упадёт до 236, доход — примерно на 7%; при 200 днях фактор уже 129 (доход почти вдвое меньше — £1 154); и только примерно на 325 днях фактор упирается в нижний предел 31 — там тот же маршрут платит уже всего £277.

Субтропическая древесина — 100 тонн, 200 клеток, 80 дней

Субтропическая древесина тихо является грузом с самой высокой базовой ставкой во всей vanilla — £7964 (против £5005 у умеренной/субарктической древесины — наценка в 59% за тот же по сути груз, просто другой климат). дни1 = 15, дни2 = 255. tp = floor(80 / 2,5) = 32. periodsOverDays1 = 32 − 15 = 17. periodsOverDays2 = 0. Фактор времени = 255 − 17 = 238. Числитель = 200 × 238 × 100 × 7964 = 37 908 640 000. Доход = floor(37 908 640 000 / 2 097 152) = £18 076 за поездку, £90,38 за клетку. На субтропическом сохранении древесина обгоняет лесозаготовительные маршруты умеренного климата на 60% при той же поездке. Большинство гайдов для новичков это упускают, потому что название груза одно и то же. Именно поэтому таблица 33 строк vanilla содержит Древесину дважды (и Нефть дважды): записи умеренного/субарктического и субтропического имеют одинаковое имя, но разные стоимости груза. Русская вики OpenTTD прямо называет древесину «наиболее ценным грузом из всех возможных в субтропическом климате».

Сравнение двух поездок — уголь против драгоценностей на одном маршруте 100 клеток

Те же 100 клеток, те же 60 дней, те же 100 единиц. Поездка A: уголь, стоимость 5916, дни1 = 7, дни2 = 255. tp = 24, periodsOverDays1 = 17, periodsOverDays2 = 0, фактор времени = 238. Числитель угля = 100 × 238 × 100 × 5916 = 14 080 080 000. Доход угля = floor(14 080 080 000 / 2 097 152) = £6 713. Поездка B: драгоценности, стоимость 7509, дни1 = 1, дни2 = 32. periodsOverDays1 = 23, periodsOverDays2 = 0, фактор времени = 232. Числитель драгоценностей = 100 × 232 × 100 × 7509 = 17 420 880 000. Доход драгоценностей = floor(17 420 880 000 / 2 097 152) = £8 306 (+£1 593 к углю). Драгоценности выигрывают за поездку — но банк отгружает 1–8 драгоценностей в месяц против 100+ тонн на угольной шахте. По доходу в месяц уголь обыгрывает драгоценности на порядок, если у вас не сеть из десятка банковских маршрутов.

Советы по планированию доходов для ветеранов tt-forums и новичков из Steam

  • Уголь даёт 5916 базы — не рекорд по таблице — но пара дни1/дни2 в 7 и 255 означает, что он держит почти полную стоимость даже на сетях через всю карту в 2000 клеток. Уголь — груз, на котором можно строить кривые пути и всё равно быть в плюсе. Драгоценности дают 7509 базы, но при дни1 = 1 и дни2 = 32 всё, что дольше 80 календарных дней (32 периода транспортировки), валит фактор времени к нижнему пределу 31. Драгоценности — на маршруты до 50 клеток, уголь — на всё остальное.
  • Расстояние — это манхэттенское расстояние в клетках, не длина путей. Формула дохода считает $|x1 - x2| + |y1 - y2|$ между двумя станциями, сколько бы поворотов ни было на трассе. Серпантин через горы зарабатывает столько же, сколько прямая, при тех же координатах станций. Это № 1 заблуждение на русскоязычных форумах: игроки считают, что 200 клеток путей на манхэттенском маршруте в 100 клеток приносят 200 клеток дохода. Не приносят. Размещайте станции по дальним краям предприятий, чтобы максимизировать манхэттенское расстояние.
  • Один «день» на вики-странице грузового дохода — это 2,5 ваших календарных дня в сохранении. OpenTTD хранит время в пути в одном байте 0–255, единица в 2,5 дня нужна, чтобы счётчик дотягивал до длинных морских маршрутов. Калькулятор сверху принимает календарные дни (то, что показывает окно транспорта в игре) и сам делит внутри — но если вы тащите числа прямо со словесной формулы вики, не забудьте умножить или разделить на 2,5 руками.
  • Фактор времени упирается в 31, не в ноль. MIN_TIME_FACTOR = 31 в src/economy.cpp означает: даже груз, который провёл в пути несколько игровых лет, продолжает платить около 31/255 ≈ 12% от свежей стоимости. Игроки иногда жалуются «мой груз перестал что-то приносить» — обычно это потому, что число £ маленькое (один пассажир на 2000-клеточном корабле за 4000 дней даёт floor(2000 × 31 × 1 × 3185 / 2 097 152) = £94), но это никогда не строгий ноль, если только расстояние или количество не нулевые.
  • Субтропическая древесина платит £7964 базы — рекорд среди всех vanilla-грузов, выше драгоценностей (£7509) и сравнима только с газировкой (£6250) на коротких плечах. Тот же ярлык «Древесина», что и на умеренной (£5005), но цена выше на 59%. Если ваше сохранение субтропическое, ставьте древесину выше товаров на каждом адекватном маршруте лесопилка → лесопилка-приёмник. Русская вики OpenTTD прямо называет её «наиболее ценным грузом из всех возможных в субтропическом климате» — не пропустите.
  • JGR’s Patch Pack использует ту же формулу. Код грузового дохода в JGRPP побайтово совпадает с vanilla — единственная разница в экономике это настройка скорости старения груза (по умолчанию 100% и там, и там, но в JGRPP она настраиваемая). Числа из этого калькулятора переносятся 1-в-1 в JGRPP-сохранение, если вы явно не меняли economy.cargo_aging_rate. Наборы NewGRF (FIRS, ECS, YETI) переопределяют таблицу оплаты и не поддерживаются; для NewGRF-сохранения берите выдачу калькулятора как vanilla-эталон и масштабируйте на коэффициент, опубликованный авторами набора.
  • Инфляция масштабирует результат пропорционально. Калькулятор показывает значение в ценах базового года (1950) — ту же калибровку, что использует внутриигровой график оплаты грузов. Стандартный множитель инфляции OpenTTD (~1,5%/год) одновременно масштабирует расходы и доходы, поэтому ваш относительный доход против эксплуатационных затрат не меняется. £ калькулятора — это не реальное £ в банке к 2050 году в вашем сохранении, но соотношение между двумя поездками сохраняется ровно.
  • Загляните в шпаргалку под калькулятором ДО того, как класть пути. Она сортирует все 33 строки vanilla (31 уникальное название груза плюс отдельные строки для субтропической Древесины и Нефти) по стоимости груза и помечает каждую строкой «лучше при расстоянии ≤ N клеток» по эвристике дни1 × 75 (30 км/ч × 2,5 дня/период ≈ 75 клеток за период на типичных скоростях поездов 1950-х). Грузы с дни2 = 255 получают метку «фактически без предела» — они не уходят в критическое старение на сухопутных маршрутах.

Калькулятор грузового дохода OpenTTD — частые вопросы

Какая формула грузового дохода в OpenTTD?

Доход = floor(расстояние × фактор_времени × количество × стоимость_груза / 2 097 152), где фактор_времени = max(255 − max(tp − дни1, 0) − max(max(tp − дни1, 0) − дни2, 0), 31), а tp = floor(дни_в_пути / 2,5). Константы 2 097 152 = 2^21, 255 = MAX_TIME_FACTOR, 31 = MIN_TIME_FACTOR — все из функции GetTransportedGoodsIncome() в src/economy.cpp. Формула одна и та же в vanilla 14.x, JGRPP и в классическом Transport Tycoon Deluxe — она не менялась с 1995 года.

Как считается расстояние для грузового дохода?

Расстояние — это манхэттенское расстояние между станциями отправления и назначения в клетках: $|xsrc - xdst| + |ysrc - ydst|$. Это НЕ длина путей. Прямая трасса в 200 клеток и петляющая в 350 клеток приносят одинаковый доход, если станции стоят на тех же двух координатах. Размещайте станции на дальних краях предприятий, чтобы максимизировать манхэттенское расстояние — известный приём сообщества, который не требует длиннее путей.

Почему один «день» на вики на самом деле 2,5 дня в игре?

OpenTTD хранит возраст груза в одном байте (0–255), счётчик тикает раз в 2,5 календарных дня. Словесная формула вики использует эти «периоды транспортировки» напрямую; калькулятор принимает календарные дни — те же, что показывает окно транспорта в игре — и делит на 2,5 за вас.

Какой груз самый прибыльный в OpenTTD?

По базовой стоимости — субтропическая древесина (£7964), затем драгоценности (£7509), газировка (£6250), товары и конфеты (£6144), уголь (£5916). На дальних маршрутах лучший — уголь: дни2 = 255 удерживают фактор времени около максимума даже при 1500 клетках. По доходу в месяц (с учётом производительности предприятия) обычно выигрывает уголь, потому что угольная шахта выдаёт 100+ тонн/месяц, а банк — 1–8 драгоценностей/месяц. Используйте режим «Сравнить две поездки», чтобы увидеть, на каком плече драгоценности обгоняют уголь именно в вашем сохранении.

Работает ли калькулятор с JGR’s Patch Pack?

Да — код грузового дохода побайтово совпадает между vanilla OpenTTD 14.x и JGR’s Patch Pack. Единственная разница в экономике — настройка скорости старения груза (по умолчанию 100% в обоих, в JGRPP вынесена в economy.cargo_aging_rate). Таблица из 33 строк (31 уникальное название груза плюс отдельные субтропические Древесина и Нефть) и сама целочисленная формула не менялись. Если вы явно не трогали скорость старения, числа из калькулятора переносятся 1-в-1 в JGRPP-сохранение.

А с наборами NewGRF — FIRS, ECS, YETI?

Нет. Наборы NewGRF переопределяют таблицу _default_cargo своими собственными значениями стоимости груза, дни1 и дни2. Калькулятор содержит только vanilla-определения (31 уникальное название грузов, 33 строки вместе с субтропическими Древесиной и Нефтью) — на FIRS-сохранении он даст правильную формулу, но неверные константы. Для NewGRF-сохранения берите выдачу калькулятора как vanilla-эталон и масштабируйте на коэффициент из README набора.

Почему мой груз показывает «£0» на длинном морском маршруте?

Нижний предел MIN_TIME_FACTOR = 31 означает, что застоявшийся груз всё равно платит хотя бы 31/255 ≈ 12% от свежей стоимости — итог не должен буквально равняться нулю, если только расстояние или количество не нулевые. Если видите £0, проверьте: (а) расстояние не ноль (доставка на ту же станцию платит ноль), (б) количество не ноль, (в) стоимость груза не ноль (некоторые NewGRF-наборы зануляют грузы, которые не хотят возить). На корабле 2000 клеток × 4000 дней с одним пассажиром доход будет маленький (£94 — floor(2000 × 31 × 1 × 3185 / 2 097 152)), но не ноль.

Почему CityMania и внутриигровой график дают чуть разные числа?

Инструмент CityMania (citymania.org/tools/profit) сам у себя на странице признаётся: «numbers may not be exactly accurate (they should be pretty close though)» — он использует приближение и округляет промежуточные значения. Внутриигровой график оплаты грузов считает ту же целочисленную формулу, что и наш калькулятор, но квантует ось Y с низким разрешением, поэтому глазомер может ошибиться на ±5%. Числа этого калькулятора совпадают с движком до единицы, потому что мы дословно повторяем сдвиг битов. Если ваше внутриигровое £ отличается больше, чем на пару единиц — перепроверьте, что введённые «дни в пути» действительно равны тому, что показывает груз транспорта (значение продолжает расти, пока груз ждёт на станции).

Меняет ли инфляция результат?

Калькулятор возвращает £ в ценах базового года (1950) — ровно ту же калибровку, что у внутриигрового графика оплаты грузов. Стандартный множитель инфляции OpenTTD (~1,5%/год) одновременно масштабирует расходы и доходы, поэтому ваш реальный банковский доход к 2050 году будет примерно в 4,4 раза больше выдачи калькулятора — но относительный доход (эта поездка против той, этот груз против того, это расстояние против того) сохраняется ровно. Калькулятор намеренно не показывает скорректированное £ за год, потому что вики, внутриигровой график и сама economy.cpp откалиброваны на базовом 1950-м.

Насколько точен этот калькулятор по сравнению с самой игрой?

Бит-в-бит для vanilla 14.x и JGRPP — пакет из 40 QA-тестов сверяет каждый выход с C++-формулой в src/economy.cpp. Калькулятор не моделирует обратные вызовы NewGRF (некоторые наборы добавляют множитель через cargo callback), цепочки кормилок с отрицательным доходом и старение груза за пределами лимита ввода в 4000 дней. В этих рамках £ совпадает с тем, что движок зачисляет вам на счёт при разгрузке транспорта.

В чём разница между дни1 и дни2?

дни1 — ранний порог распада: сколько периодов транспортировки груз может ехать, прежде чем его фактор времени начнёт падать. дни2 — поздний порог сверх дни1; после дни1 + дни2 фактор времени падает вдвое быстрее (формула вычитает и periodsOverDays1, и periodsOverDays2). Груз с дни2 = 255 (уголь, нефть, железная руда, сталь, древесина, медная руда, сахар, игрушки, пластик) фактически не дотягивает до зоны крутого падения ни на каком разумном маршруте. Пассажиры (0, 24) распадаются сразу; драгоценности (1, 32) — почти так же быстро и имеют самый крутой совокупный спад в игре.

Калькулятор бесплатный?

Панель разбора и шпаргалка по грузам открыты по умолчанию — без аккаунта, без регистрации, без ограничений и без рекламы на самой странице расчёта. Каждое промежуточное значение (периоды транспортировки, фактор времени, числитель) видно с первого рендера.

Как сравнить два маршрута бок о бок?

Используйте вкладку «Сравнить две поездки» в верхней части калькулятора. Климат общий (сравнивать маршруты в разных климатах не имеет смысла), а груз, количество, расстояние и дни в пути независимы для поездки A и поездки B. Калькулятор печатает оба £ плюс разницу (B − A) с зелёным или красным баннером. По умолчанию стоит уголь против пассажиров на одном и том же маршруте 100 клеток × 60 дней — каноническое «какой груз везти?» сравнение.

Влияет ли скорость на доход или только дни в пути?

Напрямую — только дни в пути. Формула грузового дохода не читает скорость транспорта; она читает, сколько календарных дней груз провёл в транспорте. Скорость важна только косвенно: быстрый транспорт проезжает то же манхэттенское расстояние за меньшее число дней, что снижает периоды транспортировки и поднимает фактор времени. Поезд на 100 км/ч и поезд на 200 км/ч на одном маршруте дают разный доход именно потому, что второй довозит за вдвое меньше дней. Вики отмечает, что скорость особенно сильно влияет ниже ~50 км/ч и почти выходит на плато выше; удвоение с 200 до 400 даёт куда меньший прирост, чем с 25 до 50.


Глоссарий грузов и экономики OpenTTD

Манхэттенское расстояние

Прямое расстояние между двумя станциями по сетке клеток, $|xsrc - xdst| + |ysrc - ydst|$. Используется в формуле грузового дохода OpenTTD; не равно длине путей, по которым реально едет транспорт.

Период транспортировки

Внутренняя единица времени, в которой OpenTTD считает возраст груза. Один период транспортировки = 2,5 календарных дня. Хранится в однобайтовом счётчике, поэтому максимум — 255 периодов (~637 календарных дней) до того, как фактор времени упрётся в нижний предел MIN_TIME_FACTOR = 31.

Фактор времени

Множитель свежести в формуле дохода, диапазон 0–255 (с нижним пределом 31). 255 — идеально свежий, 31 — нижний пол для застоявшегося. Каждый период сверх дни1 снижает его на 1; каждый период сверх дни1 + дни2 снижает ещё на 1 (итого −2 за период в зоне медленного распада).

дни1

Ранний порог распада груза в периодах транспортировки. До дни1 груз зарабатывает по максимальному фактору времени 255. Примеры: 0 у пассажиров и продуктов, 1 у драгоценностей, 7 у угля, 25 у нефти и игрушек.

дни2

Поздний порог распада, добавляемый сверху. После дни1 + дни2 фактор времени падает вдвое быстрее. Уголь, нефть, железная руда, сталь, древесина, медная руда, сахар, игрушки и пластик — все имеют дни2 = 255 (фактически без предела).

Стоимость груза (paymentRate)

Базовая ставка груза из таблицы _default_cargo в src/economy.cpp. Рекорд — субтропическая древесина (7964), далее драгоценности (7509), газировка (6250), товары и конфеты (6144), уголь (5916). Минимум — фрукты (4209). Хранится в движке как целое в формате Q11.4.

GetTransportedGoodsIncome()

Функция на C++ в src/economy.cpp, которая считает выплату в £ при разгрузке груза транспортом. Реализует ту же целочисленную формулу, которую дословно повторяет этот калькулятор, включая финальный сдвиг BigMulS на 21 разряд.

JGR’s Patch Pack (JGRPP)

Долгоживущий форк OpenTTD от Джонатана Реннисона с сотнями дополнительных функций (реалистичное торможение, программируемые сигналы, городские зоны). Код грузового дохода побайтово совпадает с vanilla — числа из этого калькулятора переносятся 1-в-1.

NewGRF

Формат пользовательского контента OpenTTD для добавления транспорта, предприятий, городских зданий и наборов грузов. Наборы NewGRF (FIRS, ECS, YETI) переопределяют vanilla-таблицу стоимости груза (33 строки: 31 уникальное название плюс отдельные субтропические Древесина и Нефть); этот калькулятор использует только vanilla-ставки.

Климат

Один из четырёх режимов сценария OpenTTD: Умеренный (по умолчанию), Субарктический, Субтропический, Игрушечный. Определяет доступные грузы — Уголь только в умеренном/субарктическом, Алмазы только в субтропическом, Игрушки/Конфеты/Кола только в игрушечном.

Скорость старения груза

Настройка экономики (economy.cargo_aging_rate), масштабирующая, как быстро груз набирает периоды транспортировки. По умолчанию 100% в vanilla и в JGRPP. JGRPP даёт настраивать процентом; vanilla фиксирует на 100.

Инфляция

Годовой множитель OpenTTD, применяемый к расходам и доходам (~1,5%/год по умолчанию). Калькулятор даёт £ в ценах базового года (1950), что совпадает с внутриигровым графиком оплаты грузов; относительные сравнения не меняются от инфляции.


Содержание проверено командой Smart Calculators