OpenTTD 貨物收益計算機
看清 OpenTTD 每一次運輸實際賺多少。選好貨物,設定距離格數與運輸天數,計算機立刻給出單次 £ 收益、每格 £、每日 £,以及該路線最賺錢的貨物。
計算一次運送的收益。
決定貨物下拉選單中顯示哪些貨物類型。請與你正在玩的 OpenTTD 存檔氣候保持一致。
你的火車、船舶、飛機或卡車正在運送的貨物。每種貨物都有自己的單位運價與保鮮曲線。
人
格
天
此數值的計算過程
- 時間因子
- 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 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
- = 運送貨物的數量(乘客、噸、袋、公升或件)
- = 貨物的基礎單位運價,來自 economy.cpp 中的 _default_cargo 表——乘客 3185、煤炭 5916、亞熱帶木材 7964(最高)、貴重物品 7509(除木材外最高)
- = 運輸週期——日曆天數除以 2.5 後向下取整。一個運輸週期 = 2.5 個遊戲日
- = 貨物的 days1 門檻——早期保鮮邊界(運輸週期)。乘客與食物為 0,貴重物品 1,煤炭 7,石油 25,塑膠與汽水 30
- = 貨物的 days2 門檻——晚期保鮮邊界。乘客 24,貴重物品 32,穀物 40,煤炭 255(實際上無上限)
完整推導的實例
wiki 對照例——27 名乘客、100 格、60 天、溫帶
煤炭長途——200 噸、300 格、200 天、亞寒帶
貴重物品超短途——50 件貴重物品、50 格、5 天、溫帶
亞熱帶木材——100 噸、200 格、80 天
對比兩次運輸——同一條 100 格路線上的煤炭對貴重物品
給巴哈姆特、PTT、ianwu.tw 讀者的貨物收益規劃技巧
- 煤炭 £5,916 基礎運價並不是全表最高,但 days1/days2 這對 7/255 意味著即使在 2,000 格的全圖鐵路網上,它依舊保持近乎滿價。煤炭是「就算把鐵路鋪得歪七扭八也能盈利」的那種貨物。貴重物品 £7,509 基礎更高,但 days1 = 1、days2 = 32,運輸超過 80 日曆天(32 個運輸週期)後時間因子就會被壓到下限 31 附近。50 格以內用貴重物品,其餘路線用煤炭。
- 距離指的是曼哈頓格距離,不是鐵路長度。收益公式只讀取兩站之間的 $|xsrc - xdst| + |ysrc - ydst|$,與鐵路轉了多少彎完全無關。繞山的「之」字形鐵路與一條直線只要站點座標相同,收益就完全一樣。這是巴哈姆特運輸大亨哈啦板上最常見的誤解:玩家以為在曼哈頓距離 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%。如果你是亞熱帶存檔,每一條「林場 → 鋸木廠」的可行路線上,木材的優先級都應排在商品之前。
- 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 團隊審核驗證