Elin:解析/釣り: Difference between revisions
m (注意書きテンプレートを設置(仮)) |
Sakumashiki (talk | contribs) (EN版の更新を反映。魚以外のアイテムを釣り上げる判定に関わる計算式について。) |
||
Line 25: | Line 25: | ||
**ハードコードされた「+2」を追加し、調整されたLVが常にオフセットを持つようにします。 | **ハードコードされた「+2」を追加し、調整されたLVが常にオフセットを持つようにします。 | ||
==== 例==== | *備考:まれに、rndへの複数回の呼び出しの最終結果が理論上は最大19まで上昇し、調整LVが大幅に上昇することがあります。 | ||
====例==== | |||
釣りレベルが「10」の場合: | 釣りレベルが「10」の場合: | ||
*「基本レベル」: | *「基本レベル」: | ||
**「fishLV = rnd(10 * 2) + 1 = rnd(20) + 1」。 | **「fishLV = rnd(10 * 2) + 1 = rnd(20) + 1」。 | ||
**結果例:「10」。 | **結果例:「10」。 | ||
*'''調整''': | *'''調整''': | ||
**1つ目 '''rnd(20)''' → 結果 = '''7'''. | **1つ目 '''rnd(20)''' → 結果 = '''7'''. | ||
**2つ目 '''rnd(7 + 1)''' → 結果 = '''3'''. | **2つ目 '''rnd(7 + 1)''' → 結果 = '''3'''. | ||
Line 42: | Line 44: | ||
**'''adjustedLV = 10 + 2 + 0 = 12'''. | **'''adjustedLV = 10 + 2 + 0 = 12'''. | ||
====魚LV範囲表 ==== | ====魚LV範囲表==== | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
|- | |- | ||
!釣りレベル!!最低LV!!最大LV | !釣りレベル!!最低LV!!最大LV | ||
|- | |- | ||
|1||3|| | |1||3||4 | ||
|- | |- | ||
|2||3|| | |2||3||6 | ||
|- | |- | ||
|3||3|| | |3||3||8 | ||
|- | |- | ||
|4||3|| | |4||3||10 | ||
|- | |- | ||
|5||3|| | |5||3||12 | ||
|- | |- | ||
|6||3|| | |6||3||14 | ||
|- | |- | ||
|7||3|| | |7||3||16 | ||
|- | |- | ||
|8||3|| | |8||3||18 | ||
|- | |- | ||
|9||3|| | |9||3||20 | ||
|- | |- | ||
|10||3|| | |10||3||22 | ||
|- | |- | ||
|11||3|| | |11||3||24 | ||
|- | |- | ||
|12||3|| | |12||3||26 | ||
|- | |- | ||
|13||3|| | |13||3||28 | ||
|- | |- | ||
|14||3|| | |14||3||30 | ||
|- | |- | ||
|15||3|| | |15||3||32 | ||
|- | |- | ||
|16||3|| | |16||3||34 | ||
|- | |- | ||
|17||3|| | |17||3||36 | ||
|- | |- | ||
|18||3|| | |18|| 3||38 | ||
|- | |- | ||
|19||3||40 | | 19||3||40 | ||
|} | |} | ||
Line 95: | Line 97: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 魚の数 == | ==魚の数== | ||
自分の釣りレベルから釣れる匹数を計算する式は次の通りです。 | 自分の釣りレベルから釣れる匹数を計算する式は次の通りです。 | ||
Line 104: | Line 106: | ||
*'''rnd''':'''0'''から関数に渡された値までの間のランダムな数値。 | *'''rnd''':'''0'''から関数に渡された値までの間のランダムな数値。 | ||
====例==== | ==== 例==== | ||
釣りレベルが'''22'''で、魚のレベルが'''1'''と判定された場合、潜在的な魚の数は以下のように計算されます。<pre>rnd(22 / (1 + 10)) + 1</pre> | 釣りレベルが'''22'''で、魚のレベルが'''1'''と判定された場合、潜在的な魚の数は以下のように計算されます。<pre>rnd(22 / (1 + 10)) + 1</pre> | ||
Line 111: | Line 113: | ||
<pre>rnd(22 / 11) + 1</pre> | <pre>rnd(22 / 11) + 1</pre> | ||
<code>rnd(2)</code>は、'''0'''から約'''1''' | <code>rnd(2)</code>は、'''0'''から約'''1'''の間の乱数を生成します。1を足すと、少なくとも1匹の魚を釣り上げることができます。魚の数は、ランダムな結果によって1匹か2匹のどちらかになります。 | ||
====土地フィート==== | ====土地フィート==== | ||
追加で1匹の魚を釣り上げる最初のチャンスは「5%」から始まります。 | |||
土地フィートに以下を含む場合: | 土地フィートに以下を含む場合: | ||
Line 133: | Line 135: | ||
*'''isFishingSpot''': 土地が'''釣り場(3706)'''であるかどうかを示すフラグ(0または1)。 | *'''isFishingSpot''': 土地が'''釣り場(3706)'''であるかどうかを示すフラグ(0または1)。 | ||
例えば: | 例えば: | ||
*'''海 (3605)'''が存在し、さらに'''釣り場(3706)'''も存在する場合: | *'''海 (3605)'''が存在し、さらに'''釣り場(3706)'''も存在する場合: | ||
<pre> | <pre> | ||
Line 156: | Line 158: | ||
例えば: | 例えば: | ||
*chanceForOneMoreFish = 50'''、かつ <code>rnd(100)</code> によって生成された乱数が '''50 以下''' の場合、魚が1匹追加で釣れます。''' | *chanceForOneMoreFish = 50'''、かつ <code>rnd(100)</code> によって生成された乱数が '''50 以下''' の場合、魚が1匹追加で釣れます。''' | ||
====土地フィートの例==== | ====土地フィートの例==== | ||
Line 206: | Line 208: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!魚LV!! | !魚LV!!2匹釣るための最低釣りレベル!!3匹釣るための最低釣りレベル | ||
!4匹以上釣るための最低釣りレベル | |||
|- | |- | ||
|1||22||33 | |1||22||33|| 44, etc. | ||
|- | |- | ||
|5||30||45 | | 5||30||45 ||60, etc. | ||
|- | |- | ||
|10||40||60 | |10||40||60||80, etc. | ||
|- | |- | ||
|15||50||75 | | 15 ||50||75||100, etc. | ||
|- | |- | ||
|20||60||90 | |20||60|| 90||120, etc. | ||
|- | |- | ||
| 25||70||105 | |25||70||105||140, etc. | ||
|- | |- | ||
|30 ||80||120 | |30||80||120||160, etc. | ||
|- | |- | ||
|35|| 90||135 | |35||90||135 ||180, etc. | ||
|- | |- | ||
|40||100||150 | |40||100 ||150||200, etc. | ||
|} | |} | ||
備考:4匹以降の魚の値も同じパターンに従う(前の列と同じ間隔で増加していく)。 | |||
====コード (EA 23.40)==== | ====コード (EA 23.40)==== | ||
Line 272: | Line 275: | ||
progress = MaxProgress; | progress = MaxProgress; | ||
} | } | ||
</pre> | </pre> | ||
*'''hit''': 現在の試行回数を追跡します。hit'' | *'''hit''': 現在の試行回数を追跡します。hit''がsuccessThresholdのランダム判定を超えると魚が釣れたことになります。'' | ||
*'''progress''': 成功すると自動的に完了します。 | *'''progress''': 成功すると自動的に完了します。 | ||
Line 294: | Line 297: | ||
!釣りレベル!!最小成功閾値!!最大成功閾値 | !釣りレベル!!最小成功閾値!!最大成功閾値 | ||
|- | |- | ||
|1|| 10||10 | |1||10 ||10 | ||
|- | |- | ||
|5||10||10 | |5||10||10 | ||
Line 304: | Line 307: | ||
|20||8||10 | |20||8||10 | ||
|- | |- | ||
|25||8||10 | |25|| 8||10 | ||
|- | |- | ||
|30|| 7||10 | |30||7||10 | ||
|- | |- | ||
|35||7|| 10 | |35||7||10 | ||
|- | |- | ||
|40||6||10 | |40||6||10 | ||
Line 324: | Line 327: | ||
「ヒット」のリセットを決定する計算式は以下の通りです。 | 「ヒット」のリセットを決定する計算式は以下の通りです。 | ||
<pre>resetThreshold = Mathf.Clamp(10 - rnd(fishingLevel + 1) / 5, 2, 10)</pre> | <pre>resetThreshold = Mathf.Clamp(10 - rnd(fishingLevel + 1) / 5, 2, 10)</pre> | ||
*'''fishingLevel''': 現在の釣りスキルレベル。 | *'''fishingLevel''': 現在の釣りスキルレベル。 | ||
Line 342: | Line 345: | ||
*<code>rnd(31) = 10</code>の場合、計算は次のようになります。 | *<code>rnd(31) = 10</code>の場合、計算は次のようになります。 | ||
<pre>resetThreshold = Mathf.Clamp(10 - (10 / 5), 2, 10) = 8</pre> | <pre>resetThreshold = Mathf.Clamp(10 - (10 / 5), 2, 10) = 8</pre> | ||
2番目の乱数判定、<code>rnd(8)</code>が実行されます。結果が「0」の場合、「ヒット」カウンターがリセットされます。 | |||
====リセット閾値テーブル==== | ====リセット閾値テーブル==== | ||
Line 355: | Line 358: | ||
|10||8||10 | |10||8||10 | ||
|- | |- | ||
|15||7||10 | | 15||7||10 | ||
|- | |- | ||
|20||6||10 | |20||6||10 | ||
Line 365: | Line 368: | ||
|35||3||10 | |35||3||10 | ||
|- | |- | ||
|40||2||10 | |40||2|| 10 | ||
|- | |- | ||
|45||2||10 | |45||2||10 | ||
Line 405: | Line 408: | ||
this.Ripple(); | this.Ripple(); | ||
} | } | ||
} | |||
</syntaxhighlight> | |||
==チャンスと確率== | |||
釣りで手に入る各アイテムや魚には、以下のルールと計算によって決定される固有の確率が存在します。 | |||
{| class="wikitable" | |||
!判定 | |||
!ロジック | |||
|- | |||
|何もなし | |||
|これが成功すると、それ以上の判定は発生しません。 | |||
|- | |||
|レアアイテム | |||
|「何もなし」が失敗した場合にチェックされます。これが成功すると、それ以上の判定は発生しません。 | |||
|- | |||
|ジャンク | |||
|「何もなし」と「レアアイテム」の両方が失敗した場合にチェックされます。成功した場合、それ以上の判定は発生しません。 | |||
|- | |||
|魚 | |||
|それまでのすべての判定が失敗した場合の代替/デフォルトの判定です。 | |||
|} | |||
====初期判定:何も釣れない確率==== | |||
最初の判定では、プレイヤーが何かを釣れるかどうかを決定します。この判定に失敗した場合は、アイテムも魚も生成されず、関数は <code>null</code> を返します。何も釣り上げることができない確率は、以下の式で計算されます。 | |||
<syntaxhighlight lang="「csharp」"> | |||
if (rnd(3 + fishingLevel) == 0) | |||
{ | |||
return null; | |||
} | |||
</syntaxhighlight> | |||
*'''計算式''': <code>rnd(3 + fishingLevel)</code> は、<code>0</code> から <code>(3 + fishingLevel - 1)</code> までの範囲の乱数を生成します。 | |||
*'''条件''': 結果が <code>0</code> の場合、判定は失敗し、何も釣れません。 | |||
=====確率===== | |||
何も釣れない確率は、プレイヤーの釣りレベルが上がるにつれて減少します。 | |||
*'''最大値''': <code>3 + fishingLevel</code>、ここで <code>fishingLevel = c.Evalue(245)</code>。 | |||
*'''何も釣れない確率''': | |||
**<code>1 / (3 + fishingLevel)</code> | |||
例えば: | |||
*「釣りレベル1」の場合: | |||
**<code>rnd(3 + 1)</code> は <code>0</code> から <code>3</code> の間の数値を生成します。 | |||
**<code>0</code> の確率: <code>1 / 4</code> (25%) | |||
*「釣りレベル10」の場合: | |||
**<code>rnd(3 + 10)</code> は、<code>0</code>から<code>12</code>までの数字を生成します。 | |||
**<code>0</code>の確率: <code>1 / 13</code>(約7.69%)。 | |||
これは、高い釣りレベルでは、判定に失敗する可能性が大幅に減少し、何かが釣れる可能性が高くなることを意味します。 | |||
====条件付き判定:レアアイテムと報酬==== | |||
このセクションでは、レアアイテムまたは報酬が生成されるかどうかを決定します。最も外側の条件では、ランダムな判定が成功するかどうかをチェックします。条件が満たされると、入れ子になった条件で生成するアイテムの種類を評価します。 | |||
<syntaxhighlight lang="「csharp」"> | |||
if (rnd(20) == 0) | |||
</syntaxhighlight> | |||
*'''条件''': ランダム判定に合格: <code>rnd(20) == 0</code>。 | |||
この条件が満たされると、以下の判定で生成されるアイテムが決定されます。 | |||
=====古の本===== | |||
古の本は、特定の条件を満たした場合に釣りによって生成される可能性がある、レアアイテムのひとつです。 生成されるかどうかは、初期判定を通過した後のランダムな判定に依存します。 | |||
<syntaxhighlight lang="「csharp」"> | |||
if (rnd(30) == 0) | |||
{ | |||
text = 「book_ancient」; | |||
} | |||
</syntaxhighlight> | |||
*'''条件''': <code>rnd(30) == 0</code>の場合にアイテムが生成されます。 | |||
*'''確率''': <code>1 / 30</code>、つまり約3.33%です。 | |||
この条件が満たされた場合、古の本が報酬として作成されます。 | |||
=====プラチナ硬貨===== | |||
プラチナ硬貨は、釣りでも稀に入手できるレアアイテムです。 生成はランダム判定に依存します。 | |||
<syntaxhighlight lang="「csharp」"> | |||
if (rnd(35) == 0) | |||
{ | |||
text = 「plat」; | |||
} | |||
</syntaxhighlight> | |||
*'''条件''': <code>rnd(35) == 0</code>の場合にアイテムが生成されます。 | |||
*'''確率''': <code>1 / 35</code> (~2.86%)。 | |||
この条件が満たされた場合、報酬としてプラチナ硬貨が作成されます。 | |||
=====スクラッチカード===== | |||
スクラッチカードは、プラチナ硬貨の抽選後に生成できる交換アイテムです。その生成は、プラチナ硬貨の条件を満たした後のランダムな抽選に依存します。 | |||
<syntaxhighlight lang="「csharp」"> | |||
if (rnd(2) == 0) | |||
{ | |||
text = 「scratchcard」; | |||
} | |||
</syntaxhighlight> | |||
*条件: <code>rnd(2) == 0</code> の場合にアイテムが生成され、プラチナ硬貨と置き換わります。 | |||
*確率: <code>1 / 2</code> (50%) ですが、プラチナ硬貨の成功した判定に依存します。 | |||
*従属確率: <code>1 / (20 * 35 * 2)</code> (~0.071%)。 | |||
**計算式: | |||
***レアアイテムの抽選: <code>1 / 20</code> (5%)。 | |||
***プラチナ硬貨の抽選: <code>1 / 35</code> (~2.86%)。 | |||
***スクラッチカードの抽選: <code>1 / 2</code> (50%)。 | |||
この条件が満たされた場合、プラチナ硬貨の代わりにスクラッチカードが報酬として提供されます。 | |||
=====カジノチップ===== | |||
カジノチップは、プラチナ硬貨の判定後に生成される別の交換アイテムです。その生成は、プラチナ硬貨の条件が満たされた後のランダムな判定に依存します。 | |||
<syntaxhighlight lang="「csharp」"> | |||
if (rnd(3) == 0) | |||
{ | |||
text = 「casino_coin」; | |||
} | |||
</syntaxhighlight> | |||
*条件: <code>rnd(3) == 0</code> の場合にアイテムが生成され、プラチナ硬貨と置き換わります。 | |||
*確率: <code>1 / 3</code>(~33.33%)ですが、プラチナ硬貨の成功した判定に依存します。 | |||
*'''依存確率''': <code>1 / (20 * 35 * 3)</code> (~0.048%). | |||
**計算式: | |||
***レアアイテムの抽選: <code>1 / 20</code> (5%). | |||
***プラチナ硬貨の抽選: <code>1 / 35</code> (~2.86%). | |||
カジノチップの判定: <code>1 / 3</code> (~33.33%)。 | |||
この条件が満たされた場合、報酬としてプラチナ硬貨の代わりにカジノチップが支給されます。 | |||
=====異国の金貨/銀貨/銅貨===== | |||
異国の金貨/銀貨/銅貨は、プラチナ硬貨の判定後に生成される可能性がある別の交換アイテムです。その生成は、プラチナ硬貨の条件が満たされた後のランダムな判定に依存します。 | |||
<syntaxhighlight lang="「csharp」"> | |||
if (rnd(3) == 0) | |||
{ | |||
text = 「gacha_coin」; | |||
} | |||
</syntaxhighlight> | |||
*'''条件''': <code>rnd(3) == 0</code>の場合にアイテムが生成され、プラチナ硬貨と置き換わります。 | |||
*確率: <code>1 / 3</code>(約33.33%)ですが、プラチナ硬貨の成功した判定に依存します。 | |||
*従属確率: <code>1 / (20 * 35 * 3)</code>(約0.048%)です。 | |||
**計算式: | |||
***レアアイテムの判定: <code>1 / 20</code>(5%)です。 | |||
***プラチナ硬貨の判定: <code>1 / 35</code>(約2.86%)です。 | |||
***異国の金貨/銀貨/銅貨の判定: <code>1 / 3</code>(約33.33%)です。 | |||
この条件が満たされた場合、報酬としてプラチナ硬貨の代わりに異国の金貨/銀貨/銅貨が支給されます。 | |||
=====神像===== | |||
神々の像は、プラチナ硬貨の判定後に生成される可能性がある、非常にレアなアイテムです。像の生成はランダムな判定に依存し、7つの像のうちの1つが選択されます。 | |||
<syntaxhighlight lang="「csharp」"> | |||
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"; | |||
} | |||
</syntaxhighlight> | |||
*条件: <code>rnd(50) == 0</code> の場合に像が生成されます。 | |||
*確率: <code>1 / 50</code> (2%) ですが、これはプラチナ硬貨の成功した判定に依存します。 | |||
*従属確率: <code>1 / (20 * 35 * 50)</code> (~0.00286%)。 | |||
**計算式: | |||
***レアアイテムの判定: <code>1 / 20</code> (5%)。 | |||
***プラチナ硬貨の判定: <code>1 / 35</code> (~2.86%)。 | |||
***神像の判定: <code>1 / 50</code> (2%)。 | |||
この条件が満たされた場合、以下のいずれかの像がランダムに選択されます。 | |||
*『大地の神像』 | |||
*『元素の神像』 | |||
*『収穫の神像』 | |||
*『癒しの女神像』 | |||
*『幸運の女神像』 | |||
*『機械の神像』 | |||
*『風の女神像』 | |||
各像は、7つの像の中から等しい確率で選ばれます。 | |||
*「特定の像の確率」:像が選ばれる確率は <code>1 / 7</code>(約14.29%)です。 | |||
*「特定の像の従属確率」:<code>1 / (20 * 35 * 50 * 7)</code>(約0.00041%)です。 | |||
=====小さなメダル===== | |||
小さなメダルは、釣りによって稀に入手できるアイテムです。その入手確率は、2つのランダムな判定に依存します。基本判定とレベル依存の閾値チェックです。 | |||
<syntaxhighlight lang="「csharp」"> | |||
if (rnd(40) == 0 && rnd(40) < fishingLevel / 3 + 10) | |||
{ | |||
text = 「medal」; | |||
} | |||
</syntaxhighlight> | |||
*'''条件''': | |||
**最初の判定は、<code>rnd(40) == 0</code>(2.5%)の場合に成功します。 | |||
**2回目の判定は、<code>rnd(40) < fishingLevel / 3 + 10</code>の場合に成功します。 | |||
*'''確率''': | |||
**最初の判定は、固定確率:<code>1 / 40</code>(2.5%)です。 | |||
**2回目の判定の確率は、プレイヤーの釣りレベルに依存します。 | |||
***釣りレベルが高いほど、閾値(<code>fishingLevel / 3 + 10</code>)が大きくなり、成功しやすくなります。 | |||
*'''安定した成功に必要な最低釣りレベル''': | |||
**2回目の判定を常に成功させるには、閾値が40以上になる必要があります。これを解くと、 | |||
***<code>fishingLevel / 3 + 10 >= 40</code>。 | |||
***<code>fishingLevel >= (40 - 10) * 3</code>。 | |||
***<code>fishingLevel >= 90</code>。 | |||
**<code>fishingLevel = 90</code>の場合、しきい値は <code>90 / 3 + 10 = 40</code>となり、安定した成功が保証されます。 | |||
*'''依存確率''': | |||
**複合確率:<code>(1 / 20) * (1 / 40) * (釣りレベル依存のしきい値)</code>。 | |||
**釣りレベル10の例: | |||
***しきい値:<code>10 / 3 + 10 = ~13.33</code>。 | |||
***2回目の判定は、<code>rnd(40) < 13</code>、または <code>13 / 40</code> (32.5%) の場合、成功します。 | |||
***総合確率:<code>(1 / 20) * (1 / 40) * (13 / 40)</code> (~0.01625%)。 | |||
====ジャンク==== | |||
ジャンクは、釣り中に獲得できる価値の低い報酬のカテゴリーです。 それらの生成は、より優先度の高いアイテム(レアアイテムやメダルなど)がすべて生成されなかった場合のランダムな判定に依存します。 | |||
<syntaxhighlight lang="「csharp」"> | |||
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"; | |||
} | |||
</syntaxhighlight> | |||
*'''条件''': ジャンクは以下の場合に生成されます。 | |||
**レアアイテムのダイスと、それより優先順位の高いダイスすべてが失敗した場合。 | |||
**次のダイスが成功した場合:<code>rnd(5 + fishingLevel / 3) == 0</code>。 | |||
*'''確率''': | |||
**確率はプレイヤーの釣りレベルに依存します。 | |||
***<code>1 / (5 + fishingLevel / 3)</code>。 | |||
***釣りレベルが高いほど分母が大きくなるため、ジャンクが生成される確率が減少します。 | |||
*'''ジャンクアイテムプール''': | |||
**この判定が成功した場合、以下のリスト(合計15個)からランダムに1つのアイテムが選択されます。 | |||
***'''長靴''' | |||
***'''空き瓶 (1)''' | |||
***'''空き瓶 (2)''' | |||
***'''空き缶 (1)''' | |||
***'''空き缶 (2)''' | |||
***'''北からの漂着物''' | |||
***'''ラッキーキャット''' | |||
***'''ラバーダック''' | |||
***'''ラバープチ''' | |||
***'''ラバーカタツムリ''' | |||
***'''下駄''' | |||
***'''草履''' | |||
***'''海パン''' | |||
*『特定のジャンクの確率』: | |||
**リスト内の各アイテムに等しい確率:ジャンク判定の成功確率は <code>1 / 15</code>(約6.67%)です。 | |||
=====計算例===== | |||
*『釣りレベル10』の場合: | |||
**ジャンク判定の閾値: <code>5 + 10 / 3 = ~8.33</code>。 | |||
**ジャンク判定成功の確率: <code>1 / 8</code> (12.5%)。 | |||
**特定のジャンクの確率: <code>1 / 8 * 1 / 15 = 1 / 120</code> (~0.83%)。 | |||
====魚==== | |||
魚の生成は、優先順位の高いすべての判定が失敗した場合の既定の結果として発生します。 | |||
*'''依存関係''': | |||
**魚の判定は、以下の場合に発生します。 | |||
***「何もなし」の判定が失敗した場合。 | |||
***「レアアイテム」の判定が失敗した場合。 | |||
***「ジャンク」の判定が失敗した場合。 | |||
=====確率のコンテキスト===== | |||
魚の判定は最後の代替手段として発生するため、その確率は以下のように計算されます。 | |||
*'''魚の判定の確率''': | |||
<code>1 - P(Nothing) - P(Rare Item) - P(Junk)</code> | |||
*'''従属確率''': | |||
**これは以下に依存します。 | |||
***釣りレベル(「何もなし」と「ジャンク」の確率に影響します)。 | |||
***前回の判定の成功/失敗。 | |||
=====クジラの計算例===== | |||
釣りレベル19では、クジラの「最低釣りレベル」は19です。 調整レベル(adjustedLV)が40以上の場合、クジラを釣り上げることができます。 | |||
クジラを釣り上げる確率を計算するには: | |||
<syntaxhighlight lang="「csharp」"> | |||
P(Whale) = 50 / Total Chance of All Eligible Fish | |||
</syntaxhighlight> | |||
もし「Fishing Level 19」におけるすべての対象魚の「total chance」が「22050」である場合、 | |||
<syntaxhighlight lang="「csharp」"> | |||
P(Whale) = 50 / 22050 = 0.00227 または ~0.227% | |||
</syntaxhighlight> | |||
=====魚の確率表 (魚LV 40)===== | |||
{| class="wikitable sortable」" | |||
|- | |||
!名前!!Chance!!独立確率 | |||
|- | |||
|おたまじゃくし||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%) | |||
|- | |||
|キレアジ||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%) | |||
|- | |||
|マグロ||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%) | |||
|} | |||
====すべてのアイテムの確率表==== | |||
{| class="wikitable" | |||
!アイテム | |||
!独立確率 | |||
!従属確率 | |||
!備考 | |||
|- | |||
|なし | |||
|<code>1 / (3 + fishingLevel)</code> | |||
|N/A | |||
|釣りレベルが高いほど、この結果になる確率が低くなります。 | |||
|- | |||
|レアアイテム | |||
|<code>1 / 20</code> (5%) | |||
|<code>1 / 20</code> | |||
|レアアイテムが出るかどうかを決定します。 | |||
|- | |||
|古文書(古の本) | |||
|<code>1 / 30</code> (~3.33%) | |||
|<code>1 / (20 * 30)</code> (~0.167%) | |||
|まずレアアイテムの使用に成功する必要があり、その後、自身の確率が適用されます。 | |||
|- | |||
|プラチナ硬貨 | |||
|<code>1 / 35</code> (~2.86%) | |||
|<code>1 / (20 * 35)</code> (~0.143%) | |||
|レアアイテムの判定成功、その後、独自の確率が必要です。 | |||
|- | |||
|スクラッチカード | |||
|<code>1 / 2</code> (50%) | |||
|<code>1 / (20 * 35 * 2)</code> (~0.071%) | |||
|条件が満たされた場合、プラチナ硬貨と置き換わります。 | |||
|- | |||
|カジノチップ | |||
|<code>1 / 3</code> (33.3%) | |||
|<code>1 / (20 * 35 * 3)</code> (~0.048%) | |||
|条件を満たした場合、プラチナ硬貨と交換されます。 | |||
|- | |||
|異国の金貨/銀貨/銅貨 | |||
|<code>1 / 3</code> (33.3%) | |||
|<code>1 / (20 * 35 * 3)</code> (~0.048%) | |||
|条件を満たした場合、プラチナ硬貨と交換されます。 | |||
|- | |||
|神像 | |||
|<code>1 / 50</code> (2%) | |||
|<code>1 / (20 * 35 * 50)</code> (~0.00286%) | |||
|レアアイテムの判定成功が必要です。7つの像のうちの1つがランダムに選択されます。 | |||
|- | |||
|特定の神像 | |||
|<code>1 / 7</code> (~14.29% of Statue Roll) | |||
|<code>1 / (20 * 35 * 50 * 7)</code> (~0.00041%) | |||
|7つの像のうち、特定の神像を得る確率。 | |||
|- | |||
|小さなメダル | |||
|レベル依存 | |||
|<code>(1 / 20) * (1 / 40) * (fishingLevel threshold)</code> | |||
|2回の判定成功が必要です。fishingLevel >= 90で安定した成功。 | |||
|- | |||
|ジャンク | |||
|レベル依存 | |||
|<code>1 / (5 + fishingLevel / 3)</code> | |||
|レアアイテムの判定に失敗する必要があります。釣りレベルが高くなるにつれ、確率が減少します。 | |||
|- | |||
|特定のジャンク | |||
|<code>1 / 15</code> (~6.67%) | |||
|<code>(1 / (5 + fishingLevel / 3)) * (1 / 15)</code> | |||
|特定のジャンク品を入手する確率。 | |||
|- | |||
|魚 | |||
|<code>fishChance / fishTotalChance</code> | |||
|<code>1 - P(Nothing) - P(Rare Item) - P(Junk)</code> | |||
|他のすべての判定が失敗した場合のデフォルトの結果。 | |||
|} | |||
====コード (EA 23.43)==== | |||
<syntaxhighlight lang="「c#」" line="「1」"> | |||
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; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:Elin Spoiler]] | [[Category:Elin Spoiler]] | ||
[[Category:JA]] | [[Category:JA]] |
Revision as of 10:21, 30 November 2024
このページには正規のプレイによって得られた情報ではなく、Elinのデータ解析・デバッグモード・内部ファイル閲覧などによって得た情報が掲載されています。 ゲームの重大なネタバレや、プレイの楽しみを損なう情報が含まれている可能性があります。 閲覧は自己責任でお願いするとともに、通常ページに解析ページへのリンクを貼ることはお控えください。 また、このページの情報をWikiの他のページに記載する際は計算コードなどをそのまま掲示するのではなく、コードが読めない人にもわかりやすいように内容を要約して書いていただけると幸いです。 |
釣りに関する計算式などのページです。
魚 LV
自分の釣りレベルから釣れる魚LVを算出する公式:
fishLV = rnd(fishingLevel * 2) + 1
- 釣りレベル: 現在の釣りスキルレベル。
- rnd: 0から関数に渡された値までの間のランダムな数値。
調整済み魚LV
調整済み魚LVはアイテム作成時に計算されます。これは「rnd」関数に複数回呼び出しを行い、最後に「+2」というハードコードされた値を追加します。最終的な調整レベルは次のようになります。
adjustedLV = fishLV + 2 + rnd(rnd(rnd(rnd(Mathf.Min(fishLV * 2, 20)) + 1) + 1) + 1)
- 調整プロセスには以下の処理が含まれます。
- 基本となる fishLV を rnd(fishingLevel * 2) + 1 と決定します。
- 「rnd」関数に複数回呼び出しを適用します。
- 「rnd」は「0」から「(最大値 - 1)」までの間のランダムな数値を生成します。
- 各呼び出しは、直前の「rnd」の結果に依存し、徐々に可能な範囲を狭めていきます。
- ハードコードされた「+2」を追加し、調整されたLVが常にオフセットを持つようにします。
- 備考:まれに、rndへの複数回の呼び出しの最終結果が理論上は最大19まで上昇し、調整LVが大幅に上昇することがあります。
例
釣りレベルが「10」の場合:
- 「基本レベル」:
- 「fishLV = rnd(10 * 2) + 1 = rnd(20) + 1」。
- 結果例:「10」。
- 調整:
- 1つ目 rnd(20) → 結果 = 7.
- 2つ目 rnd(7 + 1) → 結果 = 3.
- 3つ目 rnd(3 + 1) → 結果 = 2.
- 4つ目 rnd(2 + 1) → 結果 = 0.
- 最終的な調整後LV:
- adjustedLV = 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
- 釣りレベル:現在の釣りスキルレベル。
- 魚レベルLV:魚のレベル。
- rnd:0から関数に渡された値までの間のランダムな数値。
例
釣りレベルが22で、魚のレベルが1と判定された場合、潜在的な魚の数は以下のように計算されます。
rnd(22 / (1 + 10)) + 1
もっと簡略化するとこうなります:
rnd(22 / 11) + 1
rnd(2)
は、0から約1の間の乱数を生成します。1を足すと、少なくとも1匹の魚を釣り上げることができます。魚の数は、ランダムな結果によって1匹か2匹のどちらかになります。
土地フィート
追加で1匹の魚を釣り上げる最初のチャンスは「5%」から始まります。
土地フィートに以下を含む場合:
- ビーチ (3604): 基本確率に 20% を追加します。
- 海 (3605): 基本確率に 20% を追加します。
- 釣り場 (3706): 基本確率に 25% を追加します。
海 (3605) または ビーチ (3604) はいずれか一方のみが存在し得る(両方は存在しない)ため、合計確率は以下のように計算されます。
chanceForOneMoreFish = 5 chanceForOneMoreFish += isBeach * 20 + isSea * 20 + isFishingSpot * 25
以下を参照してください。
- isBeach: 土地フィートが「ビーチ(3604)」であることを示すフラグ(0または1)。
- isSea: 土地フィートが「海(3605)」であることを示すフラグ(0または1)。
- isFishingSpot: 土地が釣り場(3706)であるかどうかを示すフラグ(0または1)。
例えば:
- 海 (3605)が存在し、さらに釣り場(3706)も存在する場合:
chanceForOneMoreFish = 5 + 1 * 20 + 1 * 25 = 50
- 海 (3605) の代わりに ビーチ (3604) が存在する場合:
chanceForOneMoreFish = 5 + 1 * 20 + 1 * 25 = 50
魚の数を増やすチャンスの確認
chanceForOneMoreFishの値は、0から99(両端の値を含む)の間の数値を生成するrnd(100)
関数によって生成された乱数と比較されます。
chanceForOneMoreFishが乱数以上の場合、魚の数は「1」増えます。
このチェックは以下のように実装されています。
if (chanceForOneMoreFish >= rnd(100))
例えば:
- chanceForOneMoreFish = 50、かつ
rnd(100)
によって生成された乱数が 50 以下 の場合、魚が1匹追加で釣れます。
土地フィートの例
例 1: 釣り場 (3706) と海 (3605)
あなたの釣りレベルが「22」、魚のレベルが「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, etc. |
5 | 30 | 45 | 60, etc. |
10 | 40 | 60 | 80, etc. |
15 | 50 | 75 | 100, etc. |
20 | 60 | 90 | 120, etc. |
25 | 70 | 105 | 140, etc. |
30 | 80 | 120 | 160, etc. |
35 | 90 | 135 | 180, etc. |
40 | 100 | 150 | 200, etc. |
備考: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);
}
釣り速度
釣りのプロセスには、2つの重要な変数が関わります。
- 進行度: 釣りの全体の所要時間または完了率を表し、0から100までの範囲です。
- ヒット: 魚との格闘中に試行された回数を追跡します。以下の条件が適用されます。
- 増加: 以下のいずれかが発生するまで、試行ごとにヒットが増加します。
魚が釣れた場合(「hit」が「ランダム閾値」より大きい場合)。
特定のランダム条件により「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」の場合、計算は以下のように進みます。
rnd(20 + 1)
は「0」から「20」までの間の乱数を生成します。- この乱数を「10」で割った値を「10」から引きます。
結果は [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 の場合、計算は以下のように進みます。
rnd(30 + 1)
は、0から30までの間のランダムな数値を生成します。- このランダムな数値を5で割った値から10を引きます。
- 結果は[2, 10]の範囲に制限され、resetThresholdが決定されます。
例えば:
rnd(31) = 10
の場合、計算は次のようになります。
resetThreshold = Mathf.Clamp(10 - (10 / 5), 2, 10) = 8
2番目の乱数判定、rnd(8)
が実行されます。結果が「0」の場合、「ヒット」カウンターがリセットされます。
リセット閾値テーブル
釣りレベル | Min resetThreshold | Max resetThreshold |
---|---|---|
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 + fishingLevel)
例えば:
- 「釣りレベル1」の場合:
rnd(3 + 1)
は0
から3
の間の数値を生成します。0
の確率:1 / 4
(25%)
- 「釣りレベル10」の場合:
rnd(3 + 10)
は、0
から12
までの数字を生成します。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%)です。
- レアアイテムの判定:
- 計算式:
この条件が満たされた場合、報酬としてプラチナ硬貨の代わりに異国の金貨/銀貨/銅貨が支給されます。
神像
神々の像は、プラチナ硬貨の判定後に生成される可能性がある、非常にレアなアイテムです。像の生成はランダムな判定に依存し、7つの像のうちの1つが選択されます。
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%)。
- レアアイテムの判定:
- 計算式:
この条件が満たされた場合、以下のいずれかの像がランダムに選択されます。
- 『大地の神像』
- 『元素の神像』
- 『収穫の神像』
- 『癒しの女神像』
- 『幸運の女神像』
- 『機械の神像』
- 『風の女神像』
各像は、7つの像の中から等しい確率で選ばれます。
- 「特定の像の確率」:像が選ばれる確率は
1 / 7
(約14.29%)です。 - 「特定の像の従属確率」:
1 / (20 * 35 * 50 * 7)
(約0.00041%)です。
小さなメダル
小さなメダルは、釣りによって稀に入手できるアイテムです。その入手確率は、2つのランダムな判定に依存します。基本判定とレベル依存の閾値チェックです。
if (rnd(40) == 0 && rnd(40) < fishingLevel / 3 + 10)
{
text = 「medal」;
}
- 条件:
- 最初の判定は、
rnd(40) == 0
(2.5%)の場合に成功します。 - 2回目の判定は、
rnd(40) < fishingLevel / 3 + 10
の場合に成功します。
- 最初の判定は、
- 確率:
- 最初の判定は、固定確率:
1 / 40
(2.5%)です。 - 2回目の判定の確率は、プレイヤーの釣りレベルに依存します。
- 釣りレベルが高いほど、閾値(
fishingLevel / 3 + 10
)が大きくなり、成功しやすくなります。
- 釣りレベルが高いほど、閾値(
- 最初の判定は、固定確率:
- 安定した成功に必要な最低釣りレベル:
- 2回目の判定を常に成功させるには、閾値が40以上になる必要があります。これを解くと、
fishingLevel / 3 + 10 >= 40
。fishingLevel >= (40 - 10) * 3
。fishingLevel >= 90
。
fishingLevel = 90
の場合、しきい値は90 / 3 + 10 = 40
となり、安定した成功が保証されます。
- 2回目の判定を常に成功させるには、閾値が40以上になる必要があります。これを解くと、
- 依存確率:
- 複合確率:
(1 / 20) * (1 / 40) * (釣りレベル依存のしきい値)
。 - 釣りレベル10の例:
- しきい値:
10 / 3 + 10 = ~13.33
。 - 2回目の判定は、
rnd(40) < 13
、または13 / 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つのアイテムが選択されます。
- 長靴
- 空き瓶 (1)
- 空き瓶 (2)
- 空き缶 (1)
- 空き缶 (2)
- 北からの漂着物
- ラッキーキャット
- ラバーダック
- ラバープチ
- ラバーカタツムリ
- 下駄
- 草履
- 海パン
- この判定が成功した場合、以下のリスト(合計15個)からランダムに1つのアイテムが選択されます。
- 『特定のジャンクの確率』:
- リスト内の各アイテムに等しい確率:ジャンク判定の成功確率は
1 / 15
(約6.67%)です。
- リスト内の各アイテムに等しい確率:ジャンク判定の成功確率は
計算例
- 『釣りレベル10』の場合:
- ジャンク判定の閾値:
5 + 10 / 3 = ~8.33
。 - ジャンク判定成功の確率:
1 / 8
(12.5%)。 - 特定のジャンクの確率:
1 / 8 * 1 / 15 = 1 / 120
(~0.83%)。
- ジャンク判定の閾値:
魚
魚の生成は、優先順位の高いすべての判定が失敗した場合の既定の結果として発生します。
- 依存関係:
- 魚の判定は、以下の場合に発生します。
- 「何もなし」の判定が失敗した場合。
- 「レアアイテム」の判定が失敗した場合。
- 「ジャンク」の判定が失敗した場合。
- 魚の判定は、以下の場合に発生します。
確率のコンテキスト
魚の判定は最後の代替手段として発生するため、その確率は以下のように計算されます。
- 魚の判定の確率:
1 - P(Nothing) - P(Rare Item) - P(Junk)
- 従属確率:
- これは以下に依存します。
- 釣りレベル(「何もなし」と「ジャンク」の確率に影響します)。
- 前回の判定の成功/失敗。
- これは以下に依存します。
クジラの計算例
釣りレベル19では、クジラの「最低釣りレベル」は19です。 調整レベル(adjustedLV)が40以上の場合、クジラを釣り上げることができます。
クジラを釣り上げる確率を計算するには:
P(Whale) = 50 / Total Chance of All Eligible Fish
もし「Fishing Level 19」におけるすべての対象魚の「total chance」が「22050」である場合、
P(Whale) = 50 / 22050 = 0.00227 または ~0.227%
魚の確率表 (魚LV 40)
名前 | Chance | 独立確率 |
---|---|---|
おたまじゃくし | 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%) |
キレアジ | 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%) |
マグロ | 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%)
|
レアアイテムの判定成功が必要です。7つの像のうちの1つがランダムに選択されます。 |
特定の神像 | 1 / 7 (~14.29% of Statue Roll)
|
1 / (20 * 35 * 50 * 7) (~0.00041%)
|
7つの像のうち、特定の神像を得る確率。 |
小さなメダル | レベル依存 | (1 / 20) * (1 / 40) * (fishingLevel threshold)
|
2回の判定成功が必要です。fishingLevel >= 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;
}