Stardew Valley (星露谷物語) 從源碼分析釣魚寶箱系統

緒論
想像一個簡單的場景:
你獲得一個寶箱,打開之後裡面有四張小紙條
你抽出其中一張,上面寫著——
0、夢想銥礦獎:礦石/木材/石頭/煤等資源,最好的情況下能獲得銥礦
1、非酋安慰獎:魚餌,謝謝參與,下次再來
2、考古發現獎:古物或遺失之書,喜聞樂見的古代種子就在這裡
3、進階獎:進入下一抽獎環節的資格

前三種拿了獎勵,抽獎結束;
進階獎再次獲得三張小紙條,上面寫著——
0、庶民獎:晶洞
1、貴族獎:寶石
2、天命歐皇獎:歐皇獎池摸摸樂的資格

同樣,前兩種拿了獎勵,抽獎結束
如果你抽到歐皇獎,恭喜你終於進入最精彩刺激的環節!
獎池裡有海王星、三叉戟、五彩碎片、銥環、財寶箱、各種戒指、詭異玩偶……能摸到什麼就看你的能力了
當然,如果你什麼都沒有摸到,還是會獲得安慰獎——魚餌

下文詳細介紹整個寶箱系統的摸獎規則。
*程式是用.NET Reflector反編譯的,看了這句還沒懂就不要找我問來源了。注釋是我寫的。

一、寶箱出現概率

基礎概率15%
幸運等級每級+0.5%
磁鐵(魚餌)+15%
尋寶者(浮標)+5%
+每日運氣/2.0
海盜(技能)+15%

*幸運等級目前只能通過吃料理提升

*每日運氣的計算在新版本有所改動,特殊的魅力削弱了
A = 0.1
B = -0.1至+0.1之間的隨機值,如果有“特殊的魅力”+0.025
每日運氣 = A和B的最小值
因此每日運氣最高0.1,如果有特殊的魅力最低-0.075,否則最低-0.1

二、寶箱物品個數

1個物品的概率為1
2個物品的概率為0.4

n個物品的概率為0.4^(n-1)
*此處的“1個”不代表寶箱中的1格,某些獎項例如歐皇獎可以佔用多個格子

三、寶箱物品內容
每一個物品隨機生成,在4個大類裡隨機,每個大類概率25%

*離岸距離5為最遠
*當物品欄已滿且釣上寶箱時,釣到的魚會放在寶箱的第一個格子,這條魚不屬於寶箱的內容

大類0:礦石
a. 離岸距離=5 且 3%的概率 —— 銥礦石(1~2個)
b. (離岸距離=5 且 97%的概率) 或 離岸距離<5 —— 其他礦石(2~24個)
其他礦石生成規則:
(1) 創建一個列表,當滿足條件時往列表中加入該項
離岸距離>=4,加入金礦石
(離岸距離>=3 且 列表為空) 或 60%的概率,加入鐵礦石
列表為空 或 60%的概率,加入銅礦石
列表為空 或 60%的概率,加入木材
列表為空 或 60%的概率,加入石頭
加入煤炭
(2) 從列表中的物品隨機選取一種
(3) 基礎數量2~6個
(4) 5%的概率數量翻倍(幸運等級每級+1.5%概率)
(5) 5%的概率數量翻倍(幸運等級每級+3%概率)

大類1:魚餌或浮標
a. 離岸距離<4 或 90%的概率 或 釣魚等級<6
釣魚等級>=6 —— 魚餌(1個)
釣魚等級<6 —— 魚餌(10個)
b. 不滿足a的條件——精裝旋式魚餌(1個)



大類2:古物或遺失之書
a. 90%的概率 或 沒有獲得過古物 或 沒有獲得過遺失之書 或 遺失之書已經集齊 —— 古物
沒有獲得過古物則替換成煤炭(1~2個)
古物生成規則:
25%的概率 且 釣魚等級>1 —— 以下物品中隨機(1個)
● 尾部骨骼/鸚鵡螺化石/兩棲動物化石
37.5%的概率 且 釣魚等級>1 —— 以下物品中隨機(1個)
● 古代玩偶/精靈珠寶/咀嚼潔齒棒/裝飾用扇子/恐龍蛋/稀有圓盤/古劍/生銹的湯匙/生銹的靴刺/生銹的齒輪/雞雕像/古代種子/史前工具/幹海星/-錨-/玻璃碎片/骨笛
不滿足上述條件 —— 晶洞(1個)

b. 不滿足a的條件——遺失之書(1個)

大類3:特殊物品
隨機特殊類,每個特殊類概率1/3

特殊0:晶洞(1~6個)
(1) 確定晶洞種類
● 離岸距離>=4
60%的概率 —— 岩漿晶洞
20%的概率 —— 冰封晶洞
20%的概率 —— 晶洞
● 離岸距離=3
60%的概率 —— 冰封晶洞
40%的概率 —— 晶洞
● 離岸距離<3 —— 晶洞
(2) 基礎數量1~3個
(3) 5%的概率數量翻倍(幸運等級每級+3%概率)

特殊1:寶石(1~4個)
(0) 如果釣魚等級<2則替換成煤炭(1~3個)
(1) 確定寶石種類,基礎數量1~2個
● 離岸距離>=4
30%的概率 —— 火石英
35%的概率 —— 紅寶石
35%的概率 —— 綠寶石
● 離岸距離=3
30%的概率 —— 淚晶
35%的概率 —— 翡翠
35%的概率 —— 海藍寶石
● 離岸距離<3
30%的概率 —— 地晶
35%的概率 —— 紫水晶
35%的概率 —— 黃水晶
(2) (2.8% * 離岸距離/5)的概率 —— 再獲得鑽石(1個)
(3) 5%的概率數量翻倍(如果獲得了鑽石,只有鑽石的數量翻倍)

(這段實在太長,省略一部分)
特殊2:特殊中的特殊
(0) 如果釣魚等級<2則替換成混合種子(1~3個)
(1) 獲得物品
概率補正 = 1 + 每日運氣*離岸距離/5
*離岸距離最遠且每日運氣最高時,概率補正 = 1.1
*每日運氣<0時,離岸距離越遠,概率補正越低
以下概率均要乘以概率補正,為免贅述不再標注
以下物品的獲得都是獨立判斷的,互不衝突,數量均為1個

● 5%的概率 —— 海王星狂劍
● 5%的概率 —— 殘破的三叉戟
● 7%的概率 —— 戒指
1/3的概率 —— 小型光輝戒指,有(幸運等級/11)的概率升級為光輝戒指
1/3的概率 —— 小型磁鐵戒指,有(幸運等級/11)的概率升級為磁鐵戒指
1/3的概率 —— 以下戒指中隨機(1個):
紫水晶戒指/黃水晶戒指/海藍寶石戒指/翡翠戒指/綠寶石戒指/紅寶石戒指
● 2%的概率 —— 財寶箱
● 釣魚等級>5 且 0.1%的概率 —— 五彩碎片
● 1%的概率 —— 詭異玩偶(紅)
● 1%的概率 —— 詭異玩偶(綠)
● 1%的概率 —— 銥環
● 1%的概率 —— 以下鞋子中隨機(1個):
運動鞋/橡膠靴/皮靴/工作靴/戰靴/凍土靴/熱能靴/黑暗之靴/蹈火者靴/神怪之鞋

(2) 如果獲得且只獲得上述物品其中一個,則附贈一個鑽石

*代碼運作正常時,海王星狂劍和殘破的三叉戟不能重複獲得



保底:在上述大類中什麼也沒有獲得 —— 魚餌(5個/10個/15個)
作用範圍是所有大類,但正常情況下只會在特殊2觸發

總結
釣魚等級、甩竿距離在大多數情況下是對寶箱內容有正向加成的
幸運等級影響範圍:寶箱的出現概率、礦石/資源/晶洞的數量翻倍、光輝/磁鐵戒指的大小
每日運氣影響範圍:寶箱的出現概率、歐皇獎的獎品內容

舉幾個大家最愛的例子
在滿足其他條件、沒有運氣加成的情況下——

銥礦石:大類0,3%摸到
獲得概率:0.25 * 0.03
約0.7%

古代種子/恐龍蛋:大類2,古物,古物2組,17選1
獲得概率:0.25 * 0.90 * 0.375 / 17
約0.4%

海王劍/三叉戟:大類3,特殊2,5%摸到
獲得概率:0.25 / 3 *0.05
約0.4%

銥環/詭異玩偶:大類3,特殊2,1%摸到
獲得概率:0.25 / 3 *0.01
約0.08%,即千分之一

五彩碎片:大類3,特殊2,0.1%摸到
獲得概率:0.25 / 3 *0.001
約0.008%,即萬分之一

如果有人曬了一個寶箱,裡面海王劍、三叉戟、銥環、五彩碎片樣樣具全,除非他現場釣給你看,否則他只有1.2*10^(-12)這麼點概率不是作弊。
這個數字意味著什麼呢?假設全球100億人,每人抽100次,只有一人次可以抽到。
不就是作弊嗎,我也會

來源:星露穀物語吧 作者:戳破你個荷包蛋