Калькулятор грузового дохода OpenTTD
Узнайте, сколько на самом деле приносит каждый рейс в OpenTTD. Выберите груз, задайте расстояние в клетках и дни в пути — калькулятор покажет £ за рейс, £ за клетку, £ за день и самый прибыльный груз для маршрута.
Рассчитать доход за одну доставку.
Определяет, какие грузы появятся в выпадающем списке. Выберите тот же климат, что и в вашем сохранении OpenTTD.
Груз, который везёт ваш поезд, корабль, самолёт или грузовик. У каждого груза свой коэффициент оплаты и кривая свежести.
пассажиров
клеток
дн.
Как получено это число
- Фактор времени
- 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 периодов |
Vanilla OpenTTD 14.x и JGRPP. Наборы NewGRF переопределяют стандартные ставки и пока не поддерживаются. Доход показан в ценах базового года (1950); инфляция в вашем сохранении масштабирует значения пропорционально.
Калькулятор грузового дохода OpenTTD. £ за поездку из груза, расстояния и дней в пути.
Что такое калькулятор грузового дохода OpenTTD?
Как рассчитать грузовой доход OpenTTD (и как это делает калькулятор)
Грузовой доход — целочисленная формула из economy.cpp
- = Доход во внутриигровых £ за одну доставку (целое число, которое возвращает калькулятор)
- = Манхэттенское расстояние в клетках между станциями отправления и назначения — $|x_{src} - x_{dst}| + |y_{src} - y_{dst}|$
- = Фактор времени (0–255), 255 = идеально свежий груз, нижний предел MIN_TIME_FACTOR = 31
- = Количество доставленного груза (пассажиры, тонны, мешки, литры, штуки)
- = Базовая стоимость груза из таблицы _default_cargo в economy.cpp — 3185 у пассажиров, 5916 у угля, 7964 у субтропической древесины (рекорд), 7509 у драгоценностей (рекорд среди не-древесины)
- = Периоды транспортировки — календарные дни, делённые на 2,5 и округлённые вниз. Один период = 2,5 внутриигровых дня
- = Порог дни1 для груза — ранний рубеж распада свежести в периодах транспортировки. 0 у пассажиров и продуктов, 1 у драгоценностей, 7 у угля, 25 у нефти, 30 у пластика и газировки
- = Порог дни2 для груза — поздний рубеж распада. 24 у пассажиров, 32 у драгоценностей, 40 у зерна, 255 у угля (фактически бесконечный)
Примеры с полной раскладкой
Контрольный пример вики — 27 пассажиров, 100 клеток, 60 дней, умеренный климат
Уголь на дальнюю дистанцию — 200 тонн, 300 клеток, 200 дней, субарктика
Драгоценности на сверхкоротком плече — 50 шт., 50 клеток, 5 дней, умеренный климат
Субтропическая древесина — 100 тонн, 200 клеток, 80 дней
Сравнение двух поездок — уголь против драгоценностей на одном маршруте 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