速查 › 球員資料檔全欄位清單

球員資料檔全欄位清單

球員資料檔那頁講的是「這個檔怎麼讀」, 代號對照表講的是「那些數字代表什麼」。 這頁是完整清單 —— 兩個檔案的每一欄,加上實測值域。

先說清楚這頁的數字是從哪一份遊戲量的

本頁的項目數、檔案數、覆蓋率,量的是一台裝過台灣模組的遊戲剛安裝好的原版數字小很多 —— 例如臉皮 504 對 894、大頭照 1,487 對 6,638、 語音號碼 1,673 對 4,343。

格式與結構的部分兩邊一樣,那是遊戲程式決定的; 會變的是「有幾個」。完整對照見 原版與這台機器差在哪

⚠️ 這頁的數字量自本站測試機,你的會不一樣

本站測試機的 attrib.datpitcher.dat 都被模組換過、跟剛安裝好的原版不同,裝的是一份混了大聯盟與台灣球員的名單。

(這裡本來寫「attrib.dat 檔案日期是 2026 年 4 月」。 檔案日期不要拿來當佐證 —— 它會被後來的操作蓋掉,現在量到的是 2026-08-29。 內容沒有變過:本站 2026-04-14 那份快照裡的 attrib.dat 與現役這一份 sha256 相同。pitcher.dat 的日期還停在 2023 年 5 月。)

所以像「3,247 位球員」「某某球員的識別碼是多少」這種跟名單內容有關的數字, 你自己跑會得到別的結果

不會變的是格式:欄位有幾個、每一格怎麼寫、資料怎麼分隔 —— 那是遊戲程式決定的,換名單也不會變。
⚠️ 但「哪一欄是什麼」會變。本站實測 46 個欄位裡有 27 個 在剛安裝好的原版與社群名冊之間位置不同(skin_tone 從第 12 欄搬到第 38 欄, 中間的欄位各前移一格;audioid 原版第 17、社群名冊第 16)。 兩份剛安裝好的原版(英文與中文)彼此完全相同,所以分界是原版 vs 社群名冊,不是語言。 永遠不要記欄號,要在執行時從表頭找欄位名 —— 本站的腳本都是這樣做的。 這頁講的規則對你成立,數字與欄號不一定。

⚠️ 本頁有幾節量的是剛安裝好的原版而不是測試機 (薪水、身高體重、兩條自動檢查那幾節),那幾節都在段落裡標出來了 —— 同一個欄位在兩份名單給出不同的數字是正常的。

同樣的道理本站在字型音訊動畫那幾頁也標過。

先看規模

檔案欄位資料列裝什麼
attrib.dat463,247 每一位球員都有一列
pitcher.dat291,618 只有投手才有一列

兩個檔各有 25 列姓名兩欄都空白 —— 那是沒用到的名單空位,不是球員。 算比例的時候要記得扣掉。

先解兩個編碼很怪的欄位

大部分欄位一看就懂。但有兩欄的數字完全不像它該有的樣子。

身高:欄位值 + 48 = 英吋

身高那一欄的值只有 18 到 35,看起來完全不像身高。 拿五位身高公開已知的球員對一次:

球員欄位值真實身高
José Altuve1866 吋48
Mike Trout2674 吋48
Bryce Harper2775 吋48
Shohei Ohtani2876 吋48
Aaron Judge3179 吋48

五個人,差都是 48,一次都沒有誤差。 48 英吋是四英尺 —— 也就是這一欄存的是「超過四英尺幾吋」。

換算回來:值域 18–35 = 5 呎 6 吋 到 6 呎 11 吋(66 到 83 英吋), 這正好就是職業棒球選手的身高範圍。

再加一道旁證:把身高分組去算平均體重, 從 19 到 31 完全單調遞增(76.6 一路爬到 132.9)。矮的輕、高的重。

生日:從 1947 年最後一天起算的天數

生日那一欄是四到五位數(919620543), 看起來像天數。問題是「從哪一天開始算」。

同樣拿已知生日的球員反推:

球員欄位值真實生日反推的起點
José Altuve15,4671990-05-061947-12-31
Aaron Judge16,1881992-04-261947-12-31
Bryce Harper16,3611992-10-161947-12-31
Shohei Ohtani16,9881994-07-051947-12-31

四個人反推出同一天。所以規則是 生日 = 1947-12-31 加上這個欄位的天數

套回整份名單:值域 9,196–20,543 換算成 1973 年 3 月到 2004 年 3 月出生 —— 完全合理。

第五個人對不上,這件事要講

本站也對了 Mike Trout,反推出來是 1948-01-31差了一個月。

四比一,所以本站採 1947-12-31。 但這代表那一列的生日跟現實不一樣 —— 可能是模組填錯,也可能是本站查到的資料有誤。 未解 本站沒有再往下追。

五個樣本裡有一個不合,就要寫出來。 只報「四個都對」是報喜不報憂。

第三個編碼很怪的欄位:薪水

上面兩欄本站解開了。這一欄沒有。但量得出來的部分已經夠用了。

⚠️ 這一節的數字量自剛安裝好的原版(2,921 列), 不是本頁其他地方用的那台測試機。測試機那一份的薪水值域是 0–255、 出現過 149 種值、最常見的是 0 —— 跟下面這張表對不上是正常的,那是兩份不同的名單。 下面 46 欄表第 40 列寫的 0–255/149 種就是測試機的值。

量到的(剛安裝好的原版)結果
值域0 – 251
出現過幾種不同的值133
最常見的值2(1,274 人)
次常見3(545 人)· 4(532 人)

2,921 人裡有 2,351 人擠在 2、3、4 這三個值上。 換句話說:絕大多數球員領的是同一個底薪級距, 真正有差別的是剩下那幾百人。

兩道旁證,說明這一欄真的是薪水

一、跟星等單調相關。把球員按 starpower(0–4)分組算薪水中位數 (同一份剛安裝好的原版):

starpower人數薪水中位數
09922
17303
26513
33594
418915

二、排在最前面的就是那年最貴的那幾個人。 薪水欄由高排到低,前幾名分別是 251、199、188、179、170、169 —— 名字對得上當時公認最高薪的球星。 (第四名那個對不上,那是另一個故事: 名單裡有一個對不上任何東西的異常值

⭐ 2026-08-28:身高與體重的換算,拿到外部佐證了

同一份 MVPedit 說明書還寫了兩句話:

Height is stored in inches.  Players range from 5'6" to 7'0".
Weight ranges from 150 to 300 pounds.

拿剛安裝好的原版對一次(原版沒有那 25 個空殼列 —— 2,921 列全部是真的球員;那 25 列是本站測試機那份名冊才有的東西,理由見下):

真實球員的值域加上位移說明書說的
身高18 – 35+48 → 66–83 英吋 = 5'6"–6'11"5'6" 到 7'0" ✅ 下限完全吻合
體重50 – 190+100 → 150–290 磅150 到 300 磅 ✅ 下限完全吻合

位移量是被唯一釘死的:換成 +110,體重下限會變成 160 磅, 對不上說明書寫的 150。而且低於下限的值是 0 人, 高於說明書上限的也是 0 人 —— 資料正好占滿說明書宣告的範圍。

說明書的上限(7'0" / 300 磅)是編輯器允許你填到哪, 不是名單裡真的有人那麼高那麼重。原版最高 6'11"、最重 290 磅。

那「值域從 0 開始」是怎麼回事:25 個空殼列

本頁下面那張欄位表寫身高 0–35、體重 0–190, 那是本站測試機量的(3,247 列)。把 0 那一群挑出來看:

條件列數
體重 = 025
身高 = 025
骨架 = 025
姓與名兩欄都空白25
四組是不是同一批完全相同

隨便挑一列來看,除了 hidden = 1 之外每一欄都是 0。 那是遊戲留給「創造球員」的空位,不是球員。 算值域的時候要先把它們拿掉,不然身高會變成 4'0"、體重會變成 100 磅。

⭐ 2026-08-28:點數怎麼算解開了,答案在一支 2006 年編輯器的說明書裡

本站原本寫「沒解開」,理由是從遊戲自己的文字檔找不到乘數。 那個判斷沒有錯,但找錯地方了 —— 答案不在遊戲裡,在當年那批編輯器的說明書裡。 MVPedit 的說明檔直接寫著:

Salary is based on points.  Starting at 100, points occur in
intervals of 33 - 133, 166, 199, 232, etc. ...
The maximum salary is 8515.

也就是 點數 = 100 + 33 × 這一欄的值。三件事互相對得上:

檢查結果
說明書說上限是 8515100 + 255×33 = 8515 ✅ 一個位元組剛好用滿
說明書舉例「166 點」對應欄位值 2 ——而本站量到最多人用的就是 2(1,274 人)✅
本站實測值域0–251,落在 0–255 之內 ✅

所以要改薪水,直接改這一欄的值,每 +1 就是 +33 點。

但「一點等於多少錢」只有一句話撐著 推論

同一份說明書只舉了一個例子:「想讓某人兩年拿 $1,000,000,那就是每年 166 點」。 照這句反推,一點大約 $3,000(100 點 = $300,000, 正好是那個年代大聯盟的最低年薪)。

本站採這個讀法,理由是另一種讀法會推出不可能的數字: 如果「$1,000,000」是指每年而不是兩年合計,一點就變成 $6,024, 上限 8515 點會變成 年薪 $5,100 萬 —— 那個年代沒有這種合約。

拿剛安裝好的原版名單套進去(1 點 = $3,000):

球員欄位值點數推算年薪
Alex Rodriguez2518,383$25,149,000
Manny Ramirez1996,667$20,001,000
Derek Jeter1886,304$18,912,000
Jon Dowd1796,007$18,021,000
Randy Johnson1595,347$16,041,000
最多人用的欄位值 2(1,274 人)換算是 $498,000。 表中第五列的 Randy Johnson(159)在這份名單裡是並列第 9、不是第 5 —— 中間還有 170(一人)與 169(三人並列)。

名次與量級都對得上那個年代。第四名那位是本站另外寫過的 一個對不上任何東西的異常值 —— 本站沒有主張他是誰的替身,那一頁把證據攤開讓你自己判斷。

不管怎樣,幣值這一段仍然是推論: 直接證據只有說明書那一句話,本站沒有第二個獨立來源。 要改薪水的話,改欄位值就好,不必先決定一點等於多少錢

⚠️ 本站試過做一個不依賴外部資料的檢定 (「算出來的錢應該貼著整數合約金額」),結果證明那個檢定沒有用: 薪水欄的間隔固定是 33 點,換算後永遠等距, 離整數格線的距離不管乘數是多少都差不多 —— $3,000 得 0.261,隨機亂數的中位數是 0.254。 一個在答案為真時也不會亮的指標,測出來的 0 是它自己的性質,不是資料的性質。 這條教訓本站今天記了三次。

順帶一個量到的小東西:球團資料檔 org.datorg_budget 欄,34 個球團裡有 30 個是同一個值、剩下 4 個是 0。 那個「同一個值」在剛安裝好的原版是 100000本站測試機那一份是 65535(兩份都是 30 + 4 的分布)。 看起來是統一的起始值,遊戲進行中才會變。 未實機驗證

attrib.dat —— 46 欄

「種類」欄的判準:值域小、選項少的算選單型(存的是代號), 其餘算數值型。代號的意思見代號對照表

#欄位名是什麼 實測值域幾種值
0first_name文字1,094
1last_name文字2,249
2jerseynum背號0–9999
3bats打擊左右0–23
4throws投球左右0–12
5primary_position主守位0–1010
6secondary_position副守位0–1314
7height身高(+48 = 英吋)0–3518
8weight體重0–190117
9boneprofile骨架0–3613
10face臉皮號碼0–915715
11face2004style用 2004 年的臉0–12
12hairstyle髮型0–910
13haircolour髮色0–56
14facialhair鬍子0–78
15bodytype體型0–23
16audioid本人號碼(大頭照+語音) 0–250281,836
17photo開關,不是編號0–23
18platediscipline選球0–1314
19bunting短打0–1516
20stealing_aggressive盜壘積極度0–1516
21baserunning跑壘0–1314
22speed速度有教學 0–9788
23fielding守備0–5017
24range守備範圍0–1314
25throwstrength臂力0–1515
26throwaccuracy傳球準度0–1413
27durability耐用度0–1514
28battingstance打擊姿勢0–6562
29swingtype揮棒類型0–12
30batcolour球棒顏色0–78
31batglove打擊手套0–12
32wristband護腕0–67
33elbowguard護肘0–34
34shinguard護脛0–23
35socks襪子0–23
36catchermask捕手面罩0–12
37fieldglovecolour手套顏色0–67
38skin_tone膚色0–1516
39ditty出場音樂曲風0–67
40salary薪資0–255149
41contract_length合約年限0–78
42starpower明星等級0–45
43topprospect潛力新秀0–12
44hidden隱藏0–12
45birthday生日(1947-12-31 起算的天數) 0–205432,285

欄位名在檔案裡都帶 playerattrib_ 前綴,上表為了好讀省略了。 ⚠️ 上表的欄號與值域量自本站測試機那份名冊,剛安裝好的原版兩者都不一樣 —— 欄號見下面欄號會整個位移那一節,膚色值域見 代號對照表(原版只有 0–10)。

pitcher.dat —— 29 欄

這個檔的結構自己會驗算

2(姓名) + 1(續航力) + 1(牽制) + 4(快速球) + 20(第 2~5 球各 5 欄) + 1(投球姿勢) = 29

快速球只有 4 欄,其他球種都是 5 欄

「變化軌跡」那一欄的 8 個值是方向,這一半本站量到了 —— 它存的是球往哪個方向跑,而且左投右投互為鏡像 (右投的滑球填 6、左投填 2,填錯邊球會朝反方向跑)。 至於這八個值各自叫什麼名字、對到鐘面第幾點,那一半是社群檔案說的,本站佐證不了。 完整推導、窮舉對照組與強度分界見代號對照表

第 2 到第 5 球每一球都有球種、尾勁、變化軌跡、控球、球速五欄。 快速球少了「球種」那一欄 —— 因為第一球就是快速球,不需要再記型別

這就是為什麼總數是 29 不是 30。

#欄位名是什麼實測值域沒有這一球的
0–1first_name / last_name姓名文字
2stamina續航力0–92
3pickoff牽制0–36
4–7fastball_*快速球(尾勁/變化軌跡/控球/球速) 0–1000
8–12pitch2_*第二球(含球種)0–10019
13–17pitch3_*第三球0–100101
18–22pitch4_*第四球0–100674
23–27pitch5_*第五球1–981,348
28pitcher_delivery投球姿勢0–58

「沒有這一球」那一欄,檔案裡填的是 - 這個符號。 快速球那四欄一次都沒有出現過 - —— 每個投手至少有一種球路。

上表的人數已經扣掉那 25 列空白名單空位 (它們四個球種群組全部是 -)。不扣的話數字會多出 25 到 44。

⚠️ 最重要的一節:欄號在不同名冊之間會整個位移

上面那張 46 欄的表,是本站測試機的順序 —— 也就是社群名冊那一種 (skin_tone 在第 38 欄)。 剛安裝好的原版順序不一樣。

本站拿一份 2009 年的社群名冊跟原版逐欄比對,兩邊都是 46 欄、欄位名一個不多一個不少, 可是:

比對結果欄數
同編號、同意義19
同編號、不同意義27

46 欄裡有 27 欄對不上。原因只有一個: skin_tone 這一欄從第 12 位搬到了第 38 位, 中間所有欄位跟著往前移一格。

編號原版2009 年那份名冊
12skin_tonehairstyle
13hairstylehaircolour
14haircolourfacialhair
15facialhairbodytype
16bodytypeaudioid
17audioidphoto
18photoplatediscipline
19platedisciplinebunting
20buntingstealing_aggressive
21stealing_aggressivebaserunning
22baserunningspeed
23speedfielding
24fieldingrange
25rangethrowstrength
26throwstrengththrowaccuracy
27throwaccuracydurability
28durabilitybattingstance
29battingstanceswingtype
30swingtypebatcolour
31batcolourbatglove
32batglovewristband
33wristbandelbowguard
34elbowguardshinguard
35shinguardsocks
36sockscatchermask
37catchermaskfieldglovecolour
38fieldglovecolourskin_tone

前綴 playerattrib_ 已省略。編號 0–11 與 39–45 兩邊一樣。

這會怎麼咬你

看那三個標色的:原版的第 29 欄是打擊姿勢, 2009 那份名冊的第 29 欄是揮棒型態。

如果你照著本站這張表去改「第 29 欄」,而你的遊戲裝的是模組名冊, 你改到的是另一個欄位不會報錯、不會壞檔 —— 只是那個球員的揮棒型態變成一個 打擊姿勢的編號,而打擊姿勢完全沒動。

正確做法只有一個:讀那個檔自己的第一行。 每一個 .dat 的第一行就是它自己的欄位名清單, 那才是你手上這一份的真相

python -c "print(open(r'你的遊戲資料夾\data\database\attrib.dat').readline())"

本站的換姿勢腳本 就是這樣做的 —— 它不記欄號,每次都從表頭找欄位名。 本站在寫這一節的時候自己踩過一次:拿原版的欄號去讀模組名冊, 得到一整排 0,差點以為站上寫錯了。

改之前要知道的事

本站教改的欄位就那幾個,這是有理由的

改球員速度那一課只教 speed 這一欄 —— 它看得出範圍、改了效果直接, 而且是本站唯一實際改過、進遊戲確認過的能力欄位。 投手的 fastball_control 與其他幾個 control 在統計上是同一個形狀、很可能也可以改,但本站未實機驗證, 所以那一課的腳本連寫都不讓你寫。

另外成績換算成能力值那一課 會寫 rhattrib.datlhattrib.datlrattrib_powerpitcher.datpitchattrib_stamina(寫完自己讀回來逐項比對, 但那一課也沒有實機確認改完在遊戲裡的手感)。 除了這幾欄,其他欄位本站沒有一欄一欄實測過改動的後果

未驗 特別是 faceaudioid 這種指向別的檔案的欄位 —— 改壞了不會當場報錯,是進遊戲才發現不對。

怎麼自己產一份

這張表不需要本站的工具。用記事本打開 data\database\attrib.dat第一行就是完整欄位表

0 first_name,1 last_name,2 playerattrib_jerseynum,3 playerattrib_bats,...

每一格資料也都帶著自己的欄位編號當前綴,所以欄位順序可以打亂,遊戲照樣讀得懂 —— 在同一個檔裡,算數的是格子上寫的那個編號,不是它排第幾格。 但編號本身沒有固定的意義:哪個編號是哪個欄位,由第一行的表頭決定, 所以跨名冊要看的是名字 (見球隊數量上限那頁「遊戲是照名字認欄位的」, 以及本頁欄號會整個位移那一節)。 詳見球員資料檔的真相

⚠️ 欄位「編號」會因名冊而異,不要照抄別人寫的欄號

既然順序可以打亂,那不同名冊就真的會不一樣。實測本站測試機與剛安裝好的原版: 46 個欄位裡有 27 個編號不同。

欄位名本站測試機剛安裝好的原版
playerattrib_speed2223
playerattrib_audioid1617
playerattrib_photo1718
playerattrib_battingstance2829
playerattrib_skin_tone3812

根源就是最後那一列:原版把 skin_tone 排在第 12 欄, 這台的名冊把它移到第 38 欄,12 之後的每一欄都往前挪了一格

所以:認名字,不要認編號。 站上多數頁面寫的欄號是本站測試機的值,但速查頁的 全部 18 個檔的完整欄位表那一份 attrib.dat 列的是剛安裝好的原版順序(兩者有 27 格不同)—— 所以連站上的欄號都不要照抄,你打開自己的 attrib.dat 第一行,自己數一次才準。 本站的腳本從 2026-08-25 起全部改成執行時從表頭解析,不再寫死編號。

兩條可以拿來自動檢查的規則

改球員能力的時候,有兩條規則值得寫進腳本 —— 它們在剛安裝好的原版裡零例外

1 · 兩組百分比各自加起來一定是 100

lhattrib.datrhattrib.dat(面對左投/右投的打擊資料) 各有兩組百分比欄位:

那一組欄位意思
擊球落點lf_pct + cf_pct + rf_pct左外野/中外野/右外野的比例
擊球型態hr_pct + fb_pct + ld_pct + gb_pct全壘打/高飛/平飛/滾地的比例

剛安裝好的原版:兩個檔各 2,921 列,兩組總和全部剛好 100,一個例外都沒有。

所以改一格就要把同組其他格補回來 —— 把某人的右外野比例調高,左外野或中外野就得降下來。

但遊戲不會擋你

拿社群名冊量同一件事,結果差很多:

名冊列數落點三欄 = 100擊球四欄 = 100
剛安裝好的原版2,921100.0%100.0%
一份亞洲球員名冊3,224100.0%97.1%
一份台灣名冊3,20889.0%96.6%
本站測試機3,24799.2%94.3%

那些名冊照樣進得去遊戲。所以這是 EA 自己的資料紀律,不是遊戲強制的規則。 總和不是 100 會怎麼樣(比例被重新正規化?還是照數字用?), 未解 本站沒有驗過。

但這條規則很適合當自動檢查: 你改完之後跑一次,總和不是 100 的那幾列,多半是打錯字或算錯。

2 · photo = 2 的人,臉皮一定是通用臉

這是一條單向的規則:

名冊photo=2 的人臉皮落在 901–915
剛安裝好的原版1,6201,620(100%)
本站測試機141141(100%)

反過來不成立:原版 photo=1 的 1,301 人裡, 也有 836 人(64.3%)用 901–915 的通用臉。 所以「用通用臉」不代表 photo 是 2。

做了專屬臉皮的人要注意:如果那位球員的 photo 是 2, 就算你把 face 改成自己的編號,也要一併確認 photo ——見換臉那一課

兩份台灣名冊有意思的地方:它們把所有人的 photo 都設成 1, 整份名冊一個 2 都沒有。

📌 重點整理

接下來