Elin:解析/釣魚

From Ylvapedia
Revision as of 09:43, 2 December 2024 by Nightwhisper (talk | contribs) (Created page with "{{Spoiler}} ==計算方式== ===魚類 LV=== 根據您的釣魚等級計算可釣到的魚類 LV的公式: <pre>fishLV = rnd(fishingLevel * 2) + 1</pre> * '''fishingLevel''': 您目前的釣魚技術等級。 * '''rnd''':介於''0'''與傳入數值之間的隨機數。 ==== 調整後的魚類 LV ==== 調整後的魚類 LV 會在建立物品時計算。它使用多次呼叫 '''rnd'''函數,並在最後加入硬編碼的'''+2'''值。最後調整後的等級變成...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

計算方式

魚類 LV

根據您的釣魚等級計算可釣到的魚類 LV的公式:

fishLV = rnd(fishingLevel * 2) + 1
  • fishingLevel: 您目前的釣魚技術等級。
  • rnd':介於0與傳入數值之間的隨機數。

調整後的魚類 LV

調整後的魚類 LV 會在建立物品時計算。它使用多次呼叫 rnd函數,並在最後加入硬編碼的+2值。最後調整後的等級變成:

adjustedLV = fishLV + 2 + rnd(rnd(rnd(rnd(Mathf.Min(fishLV * 2, 20)) + 1) + 1) + 1)
  • 調整過程包括:
    • 決定基本 fishLVrnd(fishingLevel * 2) + 1
    • 多次呼叫 rnd函數:
      • rnd產生介於0(max - 1) 之間的隨機數。
      • 每次呼叫都取決於前一次 rnd的結果,逐漸縮小可能的範圍。
    • 加入硬編碼的 +2,確保調整後的 LV 總是有偏移。
  • 注意: 雖然很少見,但理論上多次呼叫 rnd 的最終結果可以高達 19,導致調整後的 LV 有顯著的提升。

範例

如果您的釣魚等級是 10:

  • 基本 LV:
    • fishLV = rnd(10 * 2) + 1 = rnd(20) + 1
    • 結果範例:10
  • 調整:
    • 第一次 rnd(20) → 結果 = 7
    • 第二次 rnd(7 + 1) → 結果 = 3
    • 第三次 rnd(3 + 1) → 結果 = 2
    • 第四次 rnd(2 + 1)' → 結果 = 0
  • 最終調整 LV:
    • 調整後的 LV = 10 + 2 + 0 = 12

魚LV範圍表

釣魚等級 最低LV 最高LV
1 3 4
2 3 6
3 3 8
4 3 10
5 3 12
6 3 14
7 3 16
8 3 18
9 3 20
10 3 22
11 3 24
12 3 26
13 3 28
14 3 30
15 3 32
16 3 34
17 3 36
18 3 38
19 3 40

程式碼 (EA 23.41)

int num3 = EClass.rnd(num * 2) + 1;
thing = ThingGen.Create("fish", -1, num3);

lv = lv + 2 + EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(Mathf.Min(lv * 2, 20)) + 1) + 1) + 1);

釣魚數量

根據您的釣魚等級計算您能釣到魚的數量的公式:

numberOfFish = rnd(fishingLevel / (fishLV + 10)) + 1
  • fishingLevel: 您目前的釣魚技術等級。
  • fishLV: 魚的 LV。
  • rnd: 介於 0與傳入函式的值之間的隨機數。

範例

如果您的釣魚等級為'22,而魚類 LV 確定為1,則潛在的魚類數量計算如下:

rnd(22 / (1 + 10)) + 1

這可以簡化為:

rnd(22 / 11) + 1

rnd(2) 產生一個介於 01之間的隨機數字。加上 1 可確保您至少會捕獲 1條魚,魚的數量可以是 12,視隨機結果而定。

額外土地特徵

捕獲一條額外魚類的初始機率從5%開始。

如果土地特徵包括:

  • 沙灘 (3604): 增加 20%基本機率。
  • 海 (3605): 增加 20%基本機率。
  • 釣魚點 (3706): 增加 25%基本機率。

由於只有 海 (3605)海灘 (3604) 只能存在其中之一 (不能同時存在),因此總機率的計算方式為:

chanceForOneMoreFish = 5
chanceForOneMoreFish += isBeach * 20 + isSea * 20 + isFishingSpot * 25

其中:

  • isBeach: 標誌(0 或 1),表示該土地特徵是否為海灘 (3604)
  • isSea:標誌(0 或 1),表示該土地特徵是否為海 (3605)
  • isFishingSpot:標誌(0 或 1),表示該土地特徵是否為釣魚點(3706)

例如:

  • 如果出現海 (3605),同時出現釣魚點(3706):
chanceForOneMoreFish = 5 + 1 * 20 + 1 * 25 = 50
  • 如果出現海灘 (3604) 而不是海洋 (3605):
chanceForOneMoreFish = 5 + 1 * 20 + 1 * 25 = 50

檢查增加魚類數量的機會

chanceForOneMoreFish的值會與 rnd(100) 函式產生的隨機數比較,隨機數的產生範圍在 099之間。

如果canceForOneMoreFish大於或等於隨機數,魚的數量會增加1

此檢查以下列方式執行:

if (chanceForOneMoreFish >= rnd(100))

舉例來說:

  • 如果chanceForOneMoreFish = 50,且 rnd(100) 產生的隨機數是 50 或以下,您會多釣到一條魚。

範例與土地特徵

範例 1: 釣魚點 (3706) 和海洋 (3605)

假設您的釣魚等級是 22,且魚的 LV 是 1。魚的基本數量計算如下:

numberOfFish = rnd(22 / (1 + 10)) + 1 = rnd(2) + 1

這會得到1 或 2 條魚,取決於隨機結果。

現在,評估土地特徵:

  • chanceForOneMoreFish = 5 (基本機率) 開始。
  • 海 (3605)增加 20
  • 釣魚點 (3706) 增加 25

新的 chanceForOneMoreFish 變成:

chanceForOneMoreFish = 5 + 20 + 25 = 50

接下來,檢查隨機機率:

if (chanceForOneMoreFish >= rnd(100))

如果 rnd(100) 產生的隨機數是50 或以下,魚的數量會增加1。因此:

  • numberOfFish = numberOfFish + 1(如果隨機檢查通過)。
  • 如果隨機數字超過50,魚的數量保持不變。
範例 2: 釣魚點 (3706) 和海灘 (3604)

對於相同的釣魚等級和魚類 LV,土地特徵貢獻了:

  • 海灘 (3604)增加 20
  • 釣魚點 (3706) 增加 25

新的 chanceForOneMoreFish 變成:

chanceForOneMoreFish = 5 + 20 + 25 = 50

隨機檢查的行為與上述相同,同樣有機會獲得多一條魚。

魚類數量表

魚 LV 釣到2條魚的最低釣魚等級 釣到3條魚的最低釣魚等級 釣到4條魚以上的最低釣魚等級
1 22 33 44, 等。
5 30 45 60, 等。
10 40 60 80, 等。
15 50 75 100, 等。
20 60 90 120, 等。
25 70 105 140, 等。
30 80 120 160, 等。
35 90 135 180, 等。
40 100 150 200, 等。

備註: 4條以上魚類數量遵循相同的遞增模式 (遞增的間隔與前幾列相同)。

程式碼 (EA 23.40)

num2 = EClass.rnd(num / (num3 + 10)) + 1;
int num4 = 5;
if (EClass.Branch != null)
{
    num4 += EClass.Branch.Evalue(3604) * 20 + EClass.Branch.Evalue(3605) * 20 + EClass.Branch.Evalue(3706) * 25;
}
if (num4 >= EClass.rnd(100))
{
    num2++;
}
if (thing != null)
{
    thing.SetNum(num2);
    thing.SetBlessedState(BlessedState.Normal);
}

釣魚速度

釣魚過程涉及兩個關鍵變數:

  • 進度: 代表釣魚完成的整體時間或百分比,範圍從0100
  • 命中: 追蹤釣魚過程中嘗試的次數。以下條件適用:
    • 增加: 命中在每次嘗試時遞增,直到其中之一:
      • 釣到魚(當 命中 > 隨機臨界值)。
      • 某些隨機條件會將 hit重設為 0

成功

計算釣到魚的成功門檻的公式是:

successThreshold = Mathf.Clamp(10 - rnd(fishingLevel + 1) / 10, 5, 10)
  • fishingLevel: 您目前的釣魚技術等級。
  • rnd: 介於0與傳入函數值之間的隨機數。
  • 'Clamp: 確保值保持在 5(最容易)和 10(最難)之間。

實際的成功邏輯如下:

if (hit > rnd(successThreshold)) {
    hit = 100;
    progress = MaxProgress;
}
  • hit: 追蹤目前嘗試的次數。如果 hit超過 successThreshold 的隨機數值,就會釣到魚。
  • progress:當成功發生時自動完成。

範例

如果您的釣魚等級為20,則計算如下:

  1. rnd(20 + 1) 產生 020 之間的隨機數。
  2. 這個隨機數除以10並從10中減去。
  3. 結果被限制在[5, 10]範圍內,確定successThreshold。

例如:

  • 如果rnd(21) = 10,計算結果為:
successThreshold = Mathf.Clamp(10 - (10 / 10), 5, 10) = 9

rnd(9) 決定隨機閾值。如果“hit > rnd(9)”,則魚被捕獲。

成功閾值表

釣魚等級 最小成功閾值 最大成功閾值
1 10 10
5 10 10
10 9 10
15 9 10
20 8 10
25 8 10
30 7 10
35 7 10
40 6 10
45 6 10
50 5 10
55 5 10
60 5 10

重置

判斷 命中 是否重置的公式為:

resetThreshold = Mathf.Clamp(10 - rnd(fishingLevel + 1) / 5, 2, 10)
  • fishingLevel:您目前的釣魚等級。
  • rnd:0 和傳遞給函數的值之間的隨機數。
  • Clamp:確保值保持在 2(最容易重置的閾值)和 10(最難重置的閾值)之間。

如果 rnd(resetThreshold) 等於 0,且 progress >= 10,則 hit 計數器重設為 0

範例

如果您的釣魚等級為 30,則計算如下:

  1. rnd(30 + 1) 產生 030 之間的隨機數。
  2. 這個隨機數除以 5 並減去 10
  3. 結果被限制在[2, 10]範圍內,確定resetThreshold。

例如:

  • 如果rnd(31) = 10,計算結果為:
resetThreshold = Mathf.Clamp(10 - (10 / 5), 2, 10) = 8

執行第二次隨機擲骰,rnd(8)。如果結果為0,則命中計數器重設。

重置閾值表

釣魚等級 最小重置閾值 最大重置閾值
1 10 10
5 9 10
10 8 10
15 7 10
20 6 10
25 5 10
30 4 10
35 3 10
40 2 10
45 2 10
50 2 10

程式碼 (EA 23.37)

public override void OnProgress()
{
	if (this.owner.IsPC && (this.owner.Tool == null || !this.owner.Tool.HasElement(245, 1)))
	{
		this.Cancel();
		return;
	}
	if (this.hit >= 0)
	{
		this.owner.renderer.PlayAnime(AnimeID.Fishing, default(Vector3), false);
		this.owner.PlaySound("fish_fight", 1f, true);
		this.Ripple();
		int a = Mathf.Clamp(10 - EClass.rnd(this.owner.Evalue(245) + 1) / 10, 5, 10);
		if (this.hit > EClass.rnd(a))
		{
			this.hit = 100;
			this.progress = this.MaxProgress;
		}
		this.hit++;
		return;
	}
	if (EClass.rnd(Mathf.Clamp(10 - EClass.rnd(this.owner.Evalue(245) + 1) / 5, 2, 10)) == 0 && this.progress >= 10)
	{
		this.hit = 0;
	}
	if (this.progress == 2 || (this.progress >= 8 && this.progress % 6 == 0 && EClass.rnd(3) == 0))
	{
		this.owner.renderer.PlayAnime(AnimeID.Shiver, default(Vector3), false);
		this.Ripple();
	}
}

機會和機率

每個物品或魚都有獨特的生成機率,由以下規則和計算確定:

擲骰 邏輯
如果成功,則不再發生進一步的擲骰。
稀有物品 檢查 "無" 是否失敗;如果成功,則不再發生進一步的擲骰。
垃圾 檢查 "無" 和 "稀有物品" 是否都失敗;如果成功,則不再發生進一步的擲骰。
如果所有先前的擲骰都失敗,則後備/預設擲骰。

初始擲骰:有機會什麼也抓不到

第一次擲骰決定玩家是否要抓住任何東西。如果此擲骰失敗,則不會產生任何物品或魚,且函數傳回 null。什麼也沒抓到的機率計算如下:

if (rnd(3 + fishingLevel) == 0)
{
    return null;
}
  • 公式:rnd(3 + FishingLevel) 產生0(3 + FishingLevel - 1) (包含)之間的隨機數。
  • 條件:如果結果為0,則擲骰失敗,並且不會捕獲任何東西。
機率

隨著玩家釣魚等級的提高,什麼也沒釣到的機率會降低:

  • 擲骰的最大值: 3 + FishingLevel,其中 fishingLevel = c.Evalue(245)
  • 有機會什麼也抓不到:
    • 1 / (3 + 釣魚等級)

例如:

  • 釣魚等級 1時:
    • rnd(3 + 1) 產生 03 之間的數字。
    • 0 的機率:1 / 4 (25%)。
  • 釣魚等級 10時:
    • rnd(3 + 10) 產生 012 之間的數字。
    • 0 的機率:1 / 13 (~7.69%)。

這意味著較高的釣魚水平會顯著降低擲骰失敗的可能性並增加捕獲某些東西的可能性。

有條件的擲骰: 稀有物品與獎勵

此部分決定是否產生稀有物品或獎勵。最外面的條件檢定隨機擲骰是否成功。如果滿足條件,嵌套條件將評估要產生的項目的類型。

if (rnd(20) == 0)
  • 條件:透過隨機擲骰: rnd(20) == 0

若符合此條件,則透過以下擲骰決定產生的物品:

古書

古書是釣魚過程中滿足特定條件可以產生的稀有物品之一。它的產生取決於通過初始檢查後的隨機擲骰。

if (rnd(30) == 0)
{
    text = "book_ancient";
}
  • 條件: 如果rnd(30) == 0則產生該物品。
  • 機率: 1 / 30,或大約 3.33%。

如果滿足這個條件,就會創造出古書作為獎勵。

白金幣

白金幣是另一種可以在釣魚過程中生成的稀有物品。它的生成取決於隨機擲骰。

if (rnd(35) == 0)
{
    text = "plat";
}
  • 條件: 如果rnd(35) == 0則產生該物品。
  • 機率: 1 / 35 (~2.86%)。

如果滿足此條件,則會創造出白金幣作為獎勵。

刮刮卡

刮刮卡是白金幣擲骰後可以產生的替代物品。它的產生取決於成功白金幣條件後的隨機擲骰。

if (rnd(2) == 0)
{
    text = "scratchcard";
}
  • 條件: 如果rnd(2) == 0則產生該物品,替換白金幣。
  • 機率: 1 / 2 (50%),但這取決於是否成功擲出白金幣。
  • 相關機率: 1 / (20 * 35 * 2) (~0.071%)。
    • 計算公式為:
      • 稀有物品: 1 / 20 (5%)。
      • 白金幣: 1 / 35 (~2.86%)。
      • 刮刮卡: 1 / 2 (50%)。

如果滿足此條件,刮刮卡將取代白金幣作為獎勵。

籌碼

籌碼是白金硬幣擲骰後可以生成的另一種替代物品。它的產生取決於成功白金幣條件後的隨機擲骰。

if (rnd(3) == 0)
{
    text = "casino_coin";
}
  • 條件: 如果rnd(3) == 0則產生該物品,替換白金幣。
  • 機率: 1 / 3 (~33.33%),但這取決於成功的白金幣擲骰。
  • 相關機率: 1 / (20 * 35 * 3) (~0.048%)。
    • 計算公式為:
      • 稀有物品: 1 / 20 (5%)。
      • 白金幣: 1 / 35 (~2.86%)。
      • 籌碼: 1 / 3 (~33.33%)。

如果滿足此條件,籌碼將取代白金幣作為獎勵。

奇怪的硬幣

奇怪的硬幣是白金幣擲骰後可以產生的另一種替代物品。它的產生取決於成功白金幣條件後的隨機擲骰。

if (rnd(3) == 0)
{
    text = "gacha_coin";
}
  • 條件: 如果rnd(3) == 0則產生該物品,替換白金幣。
  • 機率: 1 / 3 (~33.33%),但這取決於成功的白金幣擲骰。
  • 相關機率: 1 / (20 * 35 * 3) (~0.048%)。
    • 計算公式為:
      • 稀有物品: 1 / 20 (5%)。
      • 白金幣: 1 / 35 (~2.86%)。
      • 奇怪的硬幣: 1 / 3 (~33.33%)。

如果滿足這個條件,奇怪的硬幣將取代白金幣作為獎勵。

雕像

雕像是極其稀有的物品,可以在白金幣擲骰後生成。他們的生成取決於隨機擲骰,從七個可能的雕像中選擇一個。

if (rnd(50) == 0)
{
    text = "Randomly choose one of these statues: "
           "Statue of Earth",
           "Statue of Element",
           "Statue of Harvest",
           "Statue of Healing",
           "Statue of Luck",
           "Statue of Machine",
           "Statue of Wind";
}
  • 條件: 如果rnd(50) == 0,則產生雕像。
  • 機率: 1 / 50 (2%),但這取決於是否成功擲出白金幣。
  • 相關機率: 1 / (20 * 35 * 50) (~0.00286%)。
    • 計算公式為:
      • 稀有物品: 1 / 20 (5%)。
      • 白金幣: 1 / 35 (~2.86%)。
      • 雕像: 1 / 50 (2%)。

如果滿足此條件,則隨機選擇以下雕像之一:

  • 大地雕像
  • 元素雕像
  • 豐收雕像
  • 治癒雕像
  • 幸運雕像
  • 機器雕像
  • 風之雕像

每個雕像都有相同的機率從七個雕像中被選中。

  • 特定雕像的機率: 雕像的擲骰 1 / 7 (~14.29%)。
  • 特定雕像的相關機率: 1 / (20 * 35 * 50 * 7) (~0.00041%)。
小獎章

小獎章是釣魚過程中產生的稀有物品。它的產生取決於兩個隨機擲骰: 基礎擲骰和與等級相關的閾值檢定。

if (rnd(40) == 0 && rnd(40) < fishingLevel / 3 + 10)
{
    text = "medal";
}
  • 狀態:
    • 如果rnd(40) == 0 (2.5%),第一次擲骰成功。
    • 如果rnd(40) < FishingLevel / 3 + 10,第二次擲骰成功。
  • 機率:
    • 第一次擲骰有固定機率: 1 / 40 (2.5%)。
    • 第二次擲骰的機率取決於玩家的釣魚等級:
      • 釣魚等級越高,門檻越高(fishingLevel / 3 + 10),更容易成功。
  • 持續成功的最低釣魚水平:
    • 要始終通過第二輪,閾值必須達到或超過 40。
      • 釣魚等級 / 3 + 10 >= 40
      • 釣魚等級 >= (40 - 10) * 3
      • 釣魚等級 >= 90
    • fishingLevel = 90 時,閾值變成 90 / 3 + 10 = 40,確保持續成功。
  • 相關機率:
    • 組合機率: (1 / 20) * (1 / 40) *(取決於釣魚等級的閾值)
    • 釣魚等級 10 的範例:
      • 閾值: 10 / 3 + 10 = ~13.33
      • 如果 rnd(40) < 1313 / 40 (32.5%),第二次擲骰成功。
      • 組合機率: (1 / 20) * (1 / 40) * (13 / 40) (~0.01625%)。

垃圾物品

垃圾物品是釣魚過程中產生的一類低價值獎勵。它們的產生取決於所有較高優先事項物品(例如稀有物品、獎牌)未能產生後的隨機擲骰。

if (rnd(5 + fishingLevel / 3) == 0)
{
    thing = "Randomly choose one of these junk items: "
            "Boots",
            "Empty Bottle (1)",
            "Empty Bottle (2)",
            "Empty Can (1)",
            "Empty Can (2)",
            "Flotsam from the North",
            "Lucky Cat",
            "Rubber Duck",
            "Rubber Putit",
            "Rubber Snail",
            "Sandal (1)",
            "Sandal (2)",
            "Sea Pants";
}
  • 條件: 如果滿足以下條件,則會產生垃圾物品:
    • 稀有物品擲骰和所有較高優先順序的擲骰都失敗。
    • 以下擲骰成功: rnd(5 + FishingLevel / 3) == 0
  • 機率:
    • 機率取決於玩家的釣魚等級:
      • 1 / (5 + FishingLevel / 3)
      • 隨著分母的增加,更高的釣魚等級會減少產生垃圾物品的機會。
  • 垃圾物品池:
    • 若此擲骰成功,將從下列清單中隨機選擇一項(總共 15 項):
      • 靴子
      • 空瓶 (1)
      • 空瓶 (2)
      • 空罐 (1)
      • 空罐 (2)
      • 來自北方的漂流物
      • 招財貓
      • 橡皮鴨
      • 橡膠波球
      • 橡膠蝸牛
      • 涼鞋 (1)
      • 涼鞋 (2)
      • 海褲
  • 特定垃圾物品的機率:
    • 清單中每個項目的機會均等: 1 / 15 (~6.67%) 垃圾擲骰成功。
計算範例
  • 釣魚等級 10 時:
    • 垃圾擲骰閾值: 5 + 10 / 3 = ~8.33
    • 垃圾擲骰成功的機率: 1 / 8 (12.5%)。
    • 特定垃圾項目的機率: 1 / 8 * 1 / 15 = 1 / 120 (~0.83%)。

當所有更高優先順序的擲骰失敗時,預設結果會產生魚:

  • 依賴項:
    • 若出現以下情況,就會出現魚擲骰:
      • 「無」檢定失敗。
      • 「稀有物品」檢定失敗。
      • 「垃圾」檢定失敗。
機率背景

由於魚擲骰作為最終後備發生,其機率計算如下:

  • 魚擲骰的機率:

1 - P(無) - P(稀有物品) - P(垃圾)

  • 相關機率:
    • 這取決於:
      • 釣魚等級(影響「無」和「垃圾」的機率)。
      • 前面的擲骰成功/失敗。
鯨魚的計算範例

釣魚等級19 時, 鯨魚最低釣魚等級為19。如果調整等級為40或更高,則可以捕獲“鯨魚”。

計算捕獲鯨魚的機率:

P(Whale) = 50 / Total Chance of All Eligible Fish

如果釣魚等級 19處所有符合條件的魚的 總機會為 22050,則:

P(Whale) = 50 / 22050 = 0.00227 or ~0.227%
魚機率表(魚 LV 40)
姓名 機會 機率(獨立)
蝌蚪 1000 1000 / 22050 (~4.54%)
苦魚 1000 1000 / 22050 (~4.54%)
烏龜 200 200 / 22050 (~0.91%)
鰕虎魚 1000 1000 / 22050 (~4.54%)
泥鰍 1000 1000 / 22050 (~4.54%)
金魚 200 200 / 22050 (~0.91%)
鯉魚 100 100 / 22050 (~0.45%)
香魚 1000 1000 / 22050 (~4.54%)
海膽 200 200 / 22050 (~0.91%)
沙丁魚 1000 1000 / 22050 (~4.54%)
鰻魚 500 500 / 22050 (~2.27%)
鱸魚 1000 1000 / 22050 (~4.54%)
Scad 1000 1000 / 22050 (~4.54%)
龍魚 600 600 / 22050 (~2.72%)
馬頭魚 1000 1000 / 22050 (~4.54%)
鮪魚 400 400 / 22050 (~1.81%)
黃帶擬鯵 1000 1000 / 22050 (~4.54%)
鯖魚 1000 1000 / 22050 (~4.54%)
鰹魚 1000 1000 / 22050 (~4.54%)
紅鯛魚 200 200 / 22050 (~0.91%)
黑鱸魚 1000 1000 / 22050 (~4.54%)
河豚 200 200 / 22050 (~0.91%)
鯛魚 500 500 / 22050 (~2.27%)
比目魚 1000 1000 / 22050 (~4.54%)
鮪魚 (2) 500 500 / 22050 (~2.27%)
沙鑽魚 1000 1000 / 22050 (~4.54%)
鮭魚 500 500 / 22050 (~2.27%)
翻車魚 1000 1000 / 22050 (~4.54%)
鯊魚 100 100 / 22050 (~0.45%)
深海魚 1000 1000 / 22050 (~4.54%)
古代魚 200 200 / 22050 (~0.91%)
月亮魚 500 500 / 22050 (~2.27%)
腔棘魚 100 100 / 22050 (~0.45%)
鯨魚 50 50 / 22050 (~0.23%)

所有機率表

物品 機率(獨立) 機率(相關) 備註
1 / (3 + fishingLevel) N/A 較高的釣魚等級會降低這種結果的可能性。
稀有物品 1 / 20 (5%) 1 / 20 取決於事否發生稀有物品擲骰。
古代書 1 / 30 (~3.33%) 1 / (20 * 30) (~0.167%) 需要稀有物品擲骰成功,然後其自身機率。
白金幣 1 / 35 (~2.86%) 1 / (20 * 35) (~0.143%) 需要稀有物品擲骰成功,然後其自身機率。
刮刮卡 1 / 2 (50%) 1 / (20 * 35 * 2) (~0.071%) 如果滿足條件,則替換白金幣。
籌碼 1 / 3 (33.3%) 1 / (20 * 35 * 3) (~0.048%) 如果滿足條件,則替換白金幣。
奇怪的硬幣 1 / 3 (33.3%) 1 / (20 * 35 * 3) (~0.048%) 如果滿足條件,則替換白金幣。
雕像 1 / 50 (2%) 1 / (20 * 35 * 50) (~0.00286%) 需要成功擲出稀有物品。七個雕像中隨機選擇。
特定雕像 1 / 7 (~14.29% 雕像擲骰) 1 / (20 * 35 * 50 * 7) (~0.00041%) 獲得特定雕像的機率。
小獎章 取決於等級 (1 / 20) * (1 / 40) * (fishingLevel threshold) 需要兩次成功的擲骰。釣魚等級 >= 90 時持續成功。
垃圾 取決於等級 1 / (5 + fishingLevel / 3) 需要稀有物品擲骰失敗。機率隨著釣魚等級的提高而降低。
特定垃圾 1 / 15 (~6.67%) (1 / (5 + fishingLevel / 3)) * (1 / 15) 獲得特定垃圾物品的機率。
fishChance / fishTotalChance 1 - P(Nothing) - P(Rare Item) - P(Junk) 如果所有其他擲骰都失敗,則預設結果。

程式碼 (EA 23.43)

public static Thing Makefish(Chara c)
	{
		int num = c.Evalue(245);
		if (EClass.rnd(3 + num) == 0)
		{
			return null;
		}
		int[] source = new int[]
		{
			233,
			235,
			236,
			236,
			236,
			1170,
			1143,
			1144,
			727,
			728,
			237,
			869,
			1178,
			1179,
			1180
		};
		int num2 = 1;
		string text = "";
		if (c.IsPC || EClass.rnd(20) == 0)
		{
			if (EClass.rnd(30) == 0)
			{
				text = "book_ancient";
			}
			if (EClass.rnd(35) == 0 || EClass.debug.enable)
			{
				text = "plat";
				if (EClass.rnd(2) == 0)
				{
					text = "scratchcard";
				}
				if (EClass.rnd(3) == 0)
				{
					text = "casino_coin";
				}
				if (EClass.rnd(3) == 0)
				{
					text = "gacha_coin";
				}
				if (EClass.rnd(50) == 0 || EClass.debug.enable)
				{
					text = new string[]
					{
						"659",
						"758",
						"759",
						"806",
						"828",
						"1190",
						"1191"
					}.RandomItem<string>();
				}
			}
			if (EClass.rnd(40) == 0 && EClass.rnd(40) < num / 3 + 10)
			{
				text = "medal";
			}
		}
		Thing thing;
		if (text != "")
		{
			thing = ThingGen.Create(text, -1, -1);
		}
		else if (EClass.rnd(5 + num / 3) == 0)
		{
			thing = ThingGen.Create(source.RandomItem<int>().ToString() ?? "", -1, -1);
		}
		else
		{
			int num3 = EClass.rnd(num * 2) + 1;
			thing = ThingGen.Create("fish", -1, num3);
			num2 = EClass.rnd(num / (num3 + 10)) + 1;
			int num4 = 5;
			if (EClass.Branch != null)
			{
				num4 += EClass.Branch.Evalue(3604) * 20 + EClass.Branch.Evalue(3605) * 20 + EClass.Branch.Evalue(3706) * 25;
			}
			if (num4 >= EClass.rnd(100))
			{
				num2++;
			}
		}
		if (thing != null)
		{
			thing.SetNum(num2);
			thing.SetBlessedState(BlessedState.Normal);
		}
		return thing;
	}