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
第一步 (>> 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 源码

原版 OpenTTD 14.x 与 JGRPP。NewGRF 货物模组会覆盖默认费率,目前暂不支持。通胀以基准年(1950 年)数值显示;存档会按年份比例缩放。

09·5·2026

OpenTTD 货物收益计算器。从货物、距离与运输天数算出单次运输 £。

OpenTTD 货物收益计算器返回原版 14.x 或 JGRPP 中一次交付的精确 £ 收益。输入货物类型、数量、曼哈顿格距离与日历运输天数,工具运行 economy.cpp 中的整数公式,输出单次 £、每格 £、每天 £ 与时间因子(0–255)。

什么是 OpenTTD 货物收益计算器?

OpenTTD 货物收益计算器是一款网页工具:给定货物类型、数量、起讫站之间的曼哈顿格距离以及货物在车辆内度过的日历天数,它会返回该次交付在游戏内的英镑(£)收益。它逐位复刻 src/economy.cpp 中的 GetTransportedGoodsIncome() 函数:相同的右移 21 位、相同的时间因子下限 31,以及 31 种原版货物名称(共 33 行——木材与原油在亚热带气候下各有独立运价)各自的 days1 与 days2 阈值。£ 仅是游戏内的货币标签,并非现实英镑——OpenTTD 允许把界面切换为 $ 或 €,但公式始终在内部 £ 单位上运算,最后再按显示偏好重新格式化。
计算器覆盖四种气候(温带、亚寒带、亚热带、玩具大陆),切换气候时货物下拉列表会自动过滤。默认目标是原版 OpenTTD 14.x,但同一公式与运价表在 JGR 的 Patch Pack 与经典 Transport Tycoon Deluxe 中逐字节一致——货物收益代码自 1995 年首发以来从未改动过。Steam、GOG、openttd.org 直接下载与 JGRPP 玩家看到的数字完全相同。
OpenTTD 中文 wiki 的「货物收入」页面目前只有 1% 完成度,主要把读者重定向到英文版;最常被引用的第三方工具 citymania.org/tools/profit 自己页面上也写着「numbers may not be exactly accurate (they should be pretty close though)」。本计算器恰好补齐了 wiki 与 CityMania 都没做的三件事:给出可与源代码逐位核对的单次 £ 数值;展开「这个数字是怎么算出来的」明细面板,列出全部中间值(运输周期、periodsOverDays1、periodsOverDays2、时间因子、分子、移位);提供按运价排序的 33 行货物速查表,让你一眼看出哪种货物在多长的路线上最划算。

如何计算 OpenTTD 货物收益(以及计算器的内部流程)

OpenTTD 的货物收益归结为四个输入与一条整数公式。上方的计算器会替你跑一遍;下面的手算流程是 tt-forums 老玩家与 B 站常客在铺设 200 格干线之前用来核算的版本。
通过工具计算
1. 选择存档的气候(默认温带——约占原版存档的 60%)。
2. 选择货物。下拉列表会按气候过滤合法货物(煤炭仅温带或亚寒带,钻石仅亚热带,玩具仅玩具大陆,依此类推)。
3. 输入交付数量(默认 100——按货物可能是旅客、吨、袋、升或件)。
4. 输入起讫站之间的曼哈顿格距离。这并非实际铁路长度,而是网格对角距离 $|xsrc - xdst| + |ysrc - ydst|$。绕山而行的弯曲铁路实际长度可能比曼哈顿距离多 30%。
5. 输入货物在车辆内度过的日历天数(默认 60)。长途货运列车通常显示 80 至 200 天;船舶往往超过 300 天。
核心结果是这一次交付的 £ 收益。下方还会打印每格 £、每天 £、时间因子(满分 255)与新鲜度百分比。明细面板展示日历天数到运输周期的换算、两个 periodsOverDays 值、最终的时间因子与整除结果——和你在纸上手写的六行计算完全对应。
手动计算
1. 把日历天数换算成运输周期:$tp = \lfloor daystransit / 2{,}5 \rfloor$。wiki 的货物收入页面特别强调:公式中的一个「天」其实等于 2.5 个游戏内日历天。OpenTTD 把货物运输时间存在一个字节(最大 255)里,因此采用 2.5 天为一个单位,让计数能涵盖最长的海运。
2. 在表中查找该货物的 days1 与 days2:旅客(0, 24)、煤炭(7, 255)、贵重品(1, 32),其余 33 行(31 种唯一货物名称,木材与原油在亚热带各占独立行)依此类推。
3. 计算 periodsOverDays1:$\max(tp - days1, 0)$。表示货物已经超过早期保鲜阈值的周期数。
4. 计算 periodsOverDays2:$\max(periodsOverDays1 - days2, 0)$。表示进一步超过晚期保鲜阈值的周期数。
5. 计算时间因子:$\max(255 - periodsOverDays1 - periodsOverDays2, 31)$。下限 31 是 economy.cpp 中的常量 MIN_TIME_FACTOR——它防止陈旧货物收益归零。
6. 套用收益公式:$income = \lfloor (distance \cdot timeFactor \cdot amount \cdot paymentRate) / 2\,097\,152 \rfloor$。分母 $2^{21}$ 对应 economy.cpp 中的 `BigMulS(..., 21)` 移位。
wiki 的对照例子复现:27 名旅客、100 格、60 日历天、温带气候。tp = 24,periodsOverDays1 = 24 − 0 = 24,periodsOverDays2 = max(24 − 24, 0) = 0,时间因子 = 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 = 货物的基础单位运价,来自 economy.cpp 中的 _default_cargo 表 —— 旅客 3185、煤炭 5916、亚热带木材 7964(最高)、贵重品 7509(除木材外最高)
  • tptp = 运输周期 —— 日历天数除以 2.5 后向下取整。一个运输周期 = 2.5 个游戏日
  • d1d_1 = 货物的 days1 阈值 —— 早期保鲜边界(运输周期)。旅客与食品为 0,贵重品 1,煤炭 7,原油 25,塑料与汽水 30
  • d2d_2 = 货物的 days2 阈值 —— 晚期保鲜边界。旅客 24,贵重品 32,谷物 40,煤炭 255(实际无上限)
分母 $2^{21} = 2\,097\,152$ 对应 OpenTTD GetTransportedGoodsIncome() 函数(src/economy.cpp)中的 `BigMulS(..., 21)` 移位。wiki 上的文字版公式使用了两次连续移位(`>> 7` 然后 `>> 13`);从代数上完全等价,因为 $2^7 \cdot 2^{13} \cdot 2 = 2^{21}$ —— wiki 形式中开头的「除以 2」并入了总分母。我们在 JavaScript 中用一次 `Math.floor(numerator / 2_097_152)` 复刻 C++ 的移位,因为在计算器输入限制(距离 ≤ 2048、数量 ≤ 9999、单位运价 ≤ 7964)下,所有中间乘积都安全落在 Number.MAX_SAFE_INTEGER 范围内,无需 BigInt,与引擎之间不存在差一错误。

完整推导的实例

wiki 对照例 —— 27 名旅客、100 格、60 天、温带

tp = floor(60 / 2.5) = 24。旅客 days1 = 0、days2 = 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 天、亚寒带

煤炭 days1 = 7、days2 = 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% 的速率赚钱。这也是 B 站攻略与 tt-forums 都把煤炭称为「1949 年铺一条干线就别管了」经典货物的原因。

贵重品超短途 —— 50 件贵重品、50 格、5 天、温带

贵重品在木材以外拥有最高单位运价(£7509),保鲜窗口也最窄(days1 = 1、days2 = 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 天

亚热带木材是个被很多攻略遗漏的细节:它是全部原版货物中基础运价最高的,£7964(与温带/亚寒带木材 £5005 相比,溢价 59%——名字一样,气候不同而已)。days1 = 15,days2 = 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 行原版货物表里木材出现两次(原油也是两次):温带/亚寒带与亚热带的条目共享名字但分开存运价。

对比两次运输 —— 同一条 100 格路线上的煤炭对贵重品

同样 100 格、60 天、100 单位。运输 A:煤炭,单位运价 5916,days1 = 7,days2 = 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,days1 = 1,days2 = 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 老玩家与 B 站新手的货物收益规划技巧

  • 煤炭 £5,916 基础运价并非全表最高,但 days1/days2 这对 7/255 意味着即使在 2,000 格的全图铁路网上,它也几乎保持满价。煤炭是「就算把铁路修得歪七扭八也能盈利」的那种货物。贵重品 £7,509 基础更高,但 days1 = 1、days2 = 32,运输超过 80 日历天(32 个运输周期)后时间因子就会被压到下限 31 附近。50 格以内用贵重品,其余路线用煤炭。
  • 距离指的是曼哈顿格距离,不是铁路长度。收益公式只读取两站之间的 $|xsrc - xdst| + |ysrc - ydst|$,无论你的铁路转了多少弯。绕山的「之」字形铁路与一条直线在站点坐标相同的前提下收益完全相同。这是百度贴吧 openttd 吧最常见的误解:玩家以为在曼哈顿距离 100 格的两站之间铺 200 格铁路就能赚 200 格的钱。不会。把站点放在产业建筑的最远两端,最大化曼哈顿距离才有意义。
  • wiki 货物收入页面里的一个「天」其实是你存档里的 2.5 个日历天。OpenTTD 在一字节(0–255)计数器里存储货物在途时间,所以采用 2.5 天为一个单位才能涵盖最长的海运。上方计算器接受的是日历天数(也就是车辆窗口里显示的那个数字),内部自动除以 2.5;但如果你直接照着 wiki 的文字版公式算,记得手动乘除 2.5。
  • 时间因子下限是 31,不是零。src/economy.cpp 中的 MIN_TIME_FACTOR = 31 意味着即使货物在车里待了几个游戏年,仍至少能拿回新鲜价的 31/255 ≈ 12%。玩家偶尔会抱怨「我的旧货物什么都赚不到」——通常只是 £ 数字偏小(一名旅客在 2,000 格、4,000 天的船上为 floor(2000 × 31 × 1 × 3185 / 2,097,152) = £94),但只要距离与数量都不为零,结果绝不会是字面意义上的 £0。
  • 亚热带木材 £7,964 基础运价是全部原版货物的最高值,超过贵重品(£7,509),仅在短途上能与玩具大陆汽水(£6,250)比较单格收益。中文名同样叫「木材」,但比温带的 £5,005 贵 59%。如果你是亚热带存档,每一条「林场→锯木厂」的可行路线上,木材的优先级都应排在货物之前。OpenTTD 中文 wiki 也直接把它列为亚热带气候下最有价值的货物之一。
  • JGR 的 Patch Pack 用同一条公式。JGRPP 中的货物收益代码与原版逐字节相同——经济方面唯一的差别是货物老化速率设置(两边默认都是 100%,JGRPP 把它做成可配置百分比)。只要没改 economy.cargo_aging_rate,本计算器的数字可以 1 比 1 搬到 JGRPP 存档。FIRS、ECS、YETI 等 NewGRF 货物模组会覆盖运价表,本工具不支持;NewGRF 存档可以把计算器输出当作原版基线,再按模组 README 公布的比率缩放。
  • 通胀按比例缩放结果。计算器显示的 £ 是基准年(1950)数值,与游戏内运价图的标尺一致。OpenTTD 默认通胀倍率约每年 1.5%,会同时缩放支出与收入,所以「相对于运营成本的相对收益」并不变——计算器的 £ 不是你 2050 年银行账户里的真实数字,但两次运输之间的比例完全保留。
  • 动手铺路前先看计算器下方的速查表。它把全部 33 行原版数据(31 种唯一货物名加上亚热带木材与原油各一行)按单位运价排序,并用启发式 days1 × 75(30 km/h × 2.5 天/周期 ≈ 1950 年代典型列车每周期 75 格)标注「最佳距离 ≤ N 格」。days2 = 255 的货物会被打上「实际无上限」标签——在陆地路线上它们几乎永远不会进入严重老化区。

OpenTTD 货物收益计算器——常见问题

OpenTTD 中货物收益的公式是什么?

收益 = floor(距离 × 时间因子 × 数量 × 单位运价 / 2,097,152),其中时间因子 = max(255 − max(tp − days1, 0) − max(max(tp − days1, 0) − days2, 0), 31),tp = floor(运输天数 / 2.5)。常量 2,097,152 = 2^21、255 = MAX_TIME_FACTOR、31 = MIN_TIME_FACTOR 全部来自 src/economy.cpp 中的 GetTransportedGoodsIncome() 函数。原版 14.x、JGRPP 与经典 Transport Tycoon Deluxe 共用这条公式——它自 1995 年起从未改动。

货物收益里的距离是怎么算的?

距离指起讫站之间的曼哈顿格距离:$|xsrc - xdst| + |ysrc - ydst|$。它不是铁路长度。只要两站坐标不变,200 格直线轨道与绕路 350 格弯曲轨道获得的收益完全相同。把站点放在产业建筑的最远两端来最大化曼哈顿距离,是社区里广为人知的小技巧——不需要把铁路修得更长。

为什么 wiki 上的一个「天」其实是游戏里的 2.5 天?

OpenTTD 用一字节(0–255)计数器记录货物年龄,每 2.5 个日历天才递增一次。wiki 的文字版公式直接采用这种「运输周期」单位;本计算器接受的是车辆窗口里看到的日历天数,自动替你除以 2.5。

OpenTTD 里哪种货物最赚钱?

按基础运价排:亚热带木材(£7,964)→ 贵重品(£7,509)→ 汽水(£6,250)→ 货物/糖果(£6,144)→ 煤炭(£5,916)。长途路线最优是煤炭:days2 = 255 让时间因子在 1,500 格距离上仍接近最大值。按月度收益(考虑产业产能)通常仍是煤炭:煤矿每月产 100+ 吨,银行每月只产 1 至 8 件贵重品。可以在「对比两次运输」模式里看到贵重品在你这张地图上具体多长才会反超煤炭。

本计算器对 JGR 的 Patch Pack 存档有效吗?

有效——原版 OpenTTD 14.x 与 JGR 的 Patch Pack 之间,货物收益代码逐字节相同。经济方面的唯一差别是货物老化速率设置(两边默认都是 100%,JGRPP 把它暴露为 economy.cargo_aging_rate)。33 行运价表(31 种唯一货物名加上亚热带木材与原油两行)与整数公式都没动过。只要没改老化速率,计算器数字可以 1 比 1 搬到 JGRPP 存档。

对 FIRS、ECS、YETI 这类 NewGRF 货物模组有效吗?

无效。NewGRF 货物模组会用自己的 paymentRate、days1 与 days2 覆盖原版 _default_cargo 表。本计算器只内置原版货物定义(31 种唯一名称、33 行——亚热带木材与原油各占独立行),在 FIRS 存档上跑公式会正确,但常量是错的。NewGRF 存档可以把计算器输出当作原版基线,再按模组 README 公布的比率缩放(多数 NewGRF 都会列出这个比例)。

为什么我的长途船运货物显示「£0」?

MIN_TIME_FACTOR = 31 的下限决定了陈旧货物至少也能拿到新鲜价的 31/255 ≈ 12%——结果不可能字面为零,除非距离或数量为零。如果看到 £0,请检查:(a) 距离不为零(同站交付不付钱),(b) 数量不为零,(c) 单位运价不为零(部分 NewGRF 会把不希望被运输的货物运价归零)。在 2,000 格、4,000 天的旅客船上,单名旅客的收益会很小(£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 倍——但「相对收益」(这趟对那趟、这种货物对那种、这段距离对那段)丝毫不变。计算器刻意不显示按年通胀调整后的 £,因为 wiki、运价图与 economy.cpp 都以 1950 年为基准。

本计算器与游戏实际运算相比精度如何?

对原版 14.x 与 JGRPP 而言逐位精确——40 项 QA 测试套件会把每一个输出与 src/economy.cpp 中的 C++ 数学交叉比对。计算器不模拟 NewGRF 回调(部分 NewGRF 通过 cargo callback 添加倍率)、负收益的中转链以及超过 4,000 天输入上限的货物老化。在这些限制内,£ 结果与车辆卸货时引擎写入账户的金额完全一致。

days1 与 days2 有什么区别?

days1 是早期保鲜阈值:货物在车辆里能停留多少个运输周期,时间因子才开始下降。days2 是叠加在 days1 之上的晚期阈值;超过 days1 + days2 后,时间因子下降速率翻倍(公式同时减去 periodsOverDays1 与 periodsOverDays2)。days2 = 255 的货物(煤炭、原油、铁矿石、钢材、木材、铜矿石、蔗糖、玩具、塑料)实际上不会在任何合理路线上进入陡降区。旅客(0, 24)几乎瞬时开始衰减;贵重品(1, 32)几乎同样快,且是全游戏综合下降最陡的货物。

本计算器免费吗?

明细面板与货物速查表默认全部展开——无需账号、无需注册、无速率限制,计算页面本身也没有广告。运输周期、时间因子、分子等中间值从首次渲染起就一直可见。

如何并排对比两条路线?

用计算器顶部的「对比两次运输」标签页。气候在两次运输间共用(跨气候比较没有意义),而货物、数量、距离与运输天数对运输 A 与运输 B 各自独立。计算器会同时打印两侧 £ 与差额(B − A),并配以绿色或红色横幅。默认值是同一条 100 格、60 天路线上的煤炭对旅客——也是社区里最经典的「这条路应该跑什么货物」对比。

速度会影响收益,还是只看在途天数?

直接影响的是在途天数。货物收益公式不读取车辆速度,只读取货物在车内度过的日历天数。速度的作用是间接的:更快的车辆把同一段曼哈顿距离跑完用的天数更少,运输周期更少,时间因子更高。同一条线上 100 km/h 的火车与 200 km/h 的火车收益不同,正是因为后者用一半的天数完成交付。wiki 也指出:速度的影响在 50 km/h 以下最显著,越往上越平缓——把 200 km/h 提高到 400 km/h 的增益远不如把 25 提到 50。


OpenTTD 货物与经济术语表

曼哈顿距离

两站之间按格子网格计算的直线距离,$|xsrc - xdst| + |ysrc - ydst|$。OpenTTD 货物收益公式使用此距离;它不是车辆实际行驶的铁路长度。

运输周期

OpenTTD 用来记录货物年龄的内部时间单位。一个运输周期 = 2.5 个日历天。存放在一字节计数器中,最大值 255 个周期(约 637 个日历天),之后时间因子会触及下限 MIN_TIME_FACTOR = 31。

时间因子

收益公式里的新鲜度乘数,范围 0–255(下限 31)。255 = 完全新鲜,31 = 陈旧地板。每超过 days1 一个周期下降 1;每超过 days1 + days2 一个周期再额外下降 1(即慢衰区每周期 −2)。

days1

货物的早期保鲜阈值(运输周期数)。在 days1 以内,货物按最大时间因子 255 计费。例:旅客与食品 0,贵重品 1,煤炭 7,原油与玩具 25。

days2

叠加在 days1 之上的晚期保鲜阈值。超过 days1 + days2 后,时间因子衰减速率翻倍。煤炭、原油、铁矿石、钢材、木材、铜矿石、蔗糖、玩具、塑料的 days2 都是 255(实际无上限)。

单位运价 (paymentRate)

src/economy.cpp 中 _default_cargo 表里每种货物的基础费率。最高为亚热带木材(7964),其次贵重品(7509)、汽水(6250)、货物与糖果(6144)、煤炭(5916)。最低为水果(4209)。在引擎中以 Q11.4 定点整数存储。

GetTransportedGoodsIncome()

src/economy.cpp 中的 C++ 函数,负责在车辆卸货时计算 £ 报酬。本计算器逐字节复刻了它的整数公式,包括最终的 BigMulS 移位 21 位除法。

JGR 的 Patch Pack (JGRPP)

由 Jonathan Rennison 维护、长期活跃的 OpenTTD 社区分支,加入了大量额外功能(真实制动、可编程信号、城市分区等)。货物收益代码与原版逐字节相同——本计算器数字 1 比 1 适用。

NewGRF

OpenTTD 的用户内容格式,用于增加车辆、产业、城镇建筑与货物模组。NewGRF 货物模组(FIRS、ECS、YETI)会覆盖原版运价表(33 行:31 种唯一货物,加上亚热带木材与原油两行);本计算器仅使用原版费率。

气候

OpenTTD 四种剧本设定之一:温带(默认)、亚寒带、亚热带、玩具大陆。决定可用的货物种类——煤炭仅温带/亚寒带,钻石仅亚热带,玩具/糖果/可乐仅玩具大陆。

货物老化速率

经济设置项 economy.cargo_aging_rate,控制货物累积运输周期的速度。原版与 JGRPP 默认均为 100%。JGRPP 允许按百分比配置;原版则硬编码为 100。

通胀

OpenTTD 每年应用于支出与收入的倍率(默认约每年 1.5%)。计算器返回基准年(1950)£,与游戏内运价图的标尺一致;相对比较结果不受通胀影响。


由 Smart Calculators 团队审核