作者chejps3105 (氋氃)
看板C_Chat
標題[楓之谷] 長年實際機率高於設定機率 原廠又道歉
時間Fri Apr 10 00:48:19 2026
橘子也發公告了,你沒看錯,這次的機率不實是實際「高」於表定(以及其他相對不重要
的機率bug),是從開服至今都沒被修正的有利於玩家的bug
https://maplestory.beanfun.com/bulletin?bid=80429
簡單來說就是原廠發現開服至今20多年來掉寶率、爆擊率等等使用的機率演算法有bug(詳
細我寫在後面,沒興趣的可以跳過),導致實際的機率比設定的機率還高,所以要修正,
但是修正後大家實際掉落率都會下降,所以所有角色基本掉落率增加24%,以及道歉和虛
寶補償
嗯……原來現代楓之谷還沒辦法擺脫20年前寫的屎山代碼,是說20多年都沒工程師發現並
想修改這個對玩家有利的bug嗎
=====以下是這次有問題的機率演算法簡介=====
依照金總監(韓版楓之谷總監)直播說的,使用了20多年的有bug的機率演算法大致如下
中獎機率為 x (x大於0小於1),則產生 10000000/x (1000萬除以x) 個箱子,然後會有 4
294967296 顆球(2的32次方),將所有的球平分到 10000000/x 個箱子內,其中會有 1000
0000(1000萬) 個箱子是中獎的箱子,其餘 10000000/x-10000000 個是沒中獎的箱子,然
後從 4294967296 顆球中抽取一顆球,如果那顆球是放在中獎箱子的球,代表這次中獎了
問題來了,箱子數目不可能每次都能整除 4294967296 ,那餘數的球怎麼辦,他們演算法
設計會優先將多餘的球放到中獎箱子,若中獎箱子全部都被額外多放一顆後還有剩才會放
到沒中獎箱子,這就是導致實際機率比表定機率高的元兇
以中獎機率1%為例,會有1000萬/1%=10億個箱子
可整除部分每個箱子平分4顆球
剩餘2億9千萬多顆球不能平分給10億個箱子,所以其中1000萬顆優先塞入中獎箱子,再剩
下的2億8千萬多顆球才放入沒中獎箱子
那這樣1000萬個中獎箱子每個都會有各5顆球,所以共5000萬顆球是中獎的
實際中獎機率5000萬/42億9496萬7296=約1.164%,比1%高了約16.4%
那中獎機率1.1%實際會是怎樣呢?會有1000萬/1.1%=約9.09億個箱子
可整除部分每個箱子平分4顆球,剩的也足夠1000萬顆中獎箱子各放1顆,所以掐指一算一
樣共5000萬顆球是中獎的,實際中獎機率5000萬/42億9496萬7296=約1.164%,雖然和1%時
一模一樣,但也有超過1.1%,看似問題不大,但大家仔細想想,如果1%和1.1%是因為穿上
10%掉寶裝造成的(原本掉落率1%,穿上10%掉寶裝,掉落率變1.1%),因為1%和1.1%實際機
率一樣,所以會導致這件10%掉寶裝有穿跟沒穿根本沒差,問題就相對比較大條了……
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.8.162.151 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Chat/M.1775753301.A.226.html
1F:推 zyxx: 這種時候就會發公告了 04/10 00:50
2F:→ daidaidai02: 公告出來就好了 但不必修吧 04/10 00:50
3F:推 negisan39: 這麼久才發現還修掉是閒台灣玩家太多嗎w 04/10 00:54
4F:推 joy3252355: 這個演算法挺有趣的 感謝說明 借轉專板 04/10 01:06
※ joy3252355:轉錄至看板 MapleStory 04/10 01:06
5F:→ xo1100: 修不修也沒差了 淡季玩家出逃中 04/10 01:07
6F:推 jeff666: 怎麼發現的阿 04/10 01:12
7F:→ jeff666: AI嗎 04/10 01:12
8F:推 z900215ro: 為什麼要用這麼多箱子佔用系統資源啊 04/10 01:19
9F:推 qaz19wsx96: 修不了因為是屎山代碼所以下次改版統一加基本掉落 04/10 01:23
10F:→ qaz19wsx96: 率24% 04/10 01:23
11F:→ chejps3105: 是修掉才給24%,沒修幹嘛再多給玩家增加掉寶率 04/10 01:37
12F:推 GawrGura3527: 楓之谷改了這麼多東西 居然還有沒改的屎山代碼 04/10 01:46
13F:推 orze04: 不要重新發明輪子、程式能動就不要動 04/10 01:53
14F:推 livefish5566: 楓星關測試服了 04/10 02:02
15F:→ livefish5566: TMS 即將重返榮耀 04/10 02:02
16F:推 sillymon: 為什麼是用這種箱子算法呀 04/10 02:28
17F:推 ducamao: 比起這個問題比較大的還是活動掉落物或特定王掉落物不是 04/10 02:48
18F:→ ducamao: 照實際增加掉寶率計算吧,到現在才公布 04/10 02:48
19F:推 aegius1r: 說明版本是比喻吧 實際上就只是處理除不盡餘數沒做好 04/10 04:29
20F:推 tonylolz: 準備收一收吧 04/10 06:55
21F:推 Nitricacid: 碼農祖訓:能動就不要動 04/10 06:56
22F:推 devidevi: 高於設定機率還好阿,不要低於就好 04/10 07:20
23F:→ spfy: 這種最底層而且放了八百年沒人動 但能正常跑的程式碼 正常 04/10 07:22
24F:→ spfy: 工程師都不可能去碰的 他們是被誰托夢的嗎 04/10 07:22
25F:推 kevin373tw1: 真的有高嗎,還是覺得反正沒人發現就這樣寫 04/10 07:49
26F:推 hayate65536: 丟給AI吃的時候抓出來的吧? 04/10 08:59
27F:推 ltytw: it is not bug, is feature 04/10 09:03
28F:推 crazyanight: 楓谷機率都能信的嗎 04/10 09:05
29F:推 aaaaajack: 比較直接一點的講法就是他把機率先近似成1e7/y,取一個 04/10 09:49
30F:→ aaaaajack: 0到y-1之間的隨機整數判斷他是否小於1e7,問題一般取這 04/10 09:49
31F:→ aaaaajack: 種隨機數的方式是找一個範圍更大的隨機整數除以y取餘數 04/10 09:49
32F:→ aaaaajack: ,但他這個32bit整數的範圍既沒比y大太多又不被y整除, 04/10 09:49
33F:→ aaaaajack: 導致不同餘數實際被取到的機率有比較明顯的差距 04/10 09:49
34F:推 orze04: 很可能是AI去爬出來的 04/10 14:25
35F:推 orze04: Claude Mythos最近就挖到OpenBSD一個27年的祖傳漏洞。 04/10 14:26