Elin:解析/釣り: Difference between revisions
Sakumashiki (talk | contribs) (釣りの解析記事を作成) |
Sakumashiki (talk | contribs) (EN版の情報を反映。釣果表はElin:釣りに引っ越し。) |
||
Line 1: | Line 1: | ||
==計算式== | ==計算式== | ||
Line 85: | Line 7: | ||
<pre>fishLV = rnd(fishingLevel * 2) + 1</pre> | <pre>fishLV = rnd(fishingLevel * 2) + 1</pre> | ||
* '''釣りレベル''': 現在の釣りスキルレベル。 | *'''釣りレベル''': 現在の釣りスキルレベル。 | ||
* '''rnd''': '''0'''から関数に渡された値までの間のランダムな数値。 | *'''rnd''': '''0'''から関数に渡された値までの間のランダムな数値。 | ||
==== 例 ==== | ====例==== | ||
釣りレベルが''' | 釣りレベルが'''22'''の場合、潜在的な魚のLVは次のように計算されます。<pre>rnd(3 * 2) + 1</pre> | ||
これは1から6までの範囲を示しており、LV1からLV6までの魚を釣ることができることを意味します。 | これは1から6までの範囲を示しており、LV1からLV6までの魚を釣ることができることを意味します。 | ||
==== 魚LV範囲表 ==== | ====魚LV範囲表==== | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
|- | |- | ||
Line 114: | Line 36: | ||
|8||1||16 | |8||1||16 | ||
|- | |- | ||
|9||1||18 | |9|| 1||18 | ||
|- | |- | ||
|10||1||20 | |10||1||20 | ||
Line 126: | Line 48: | ||
|14||1||28 | |14||1||28 | ||
|- | |- | ||
|15||1||30 | |15|| 1||30 | ||
|- | |- | ||
|16||1||32 | |16||1||32 | ||
Line 148: | Line 70: | ||
===魚の数=== | ===魚の数=== | ||
自分の釣りレベルから釣れる匹数を計算する式は次の通りです。 | |||
<pre>numberOfFish = rnd(fishingLevel / (fishLV + 10)) + 1</pre> | <pre>numberOfFish = rnd(fishingLevel / (fishLV + 10)) + 1</pre> | ||
* '''釣りレベル''':現在の釣りスキルレベル。 | *'''釣りレベル''':現在の釣りスキルレベル。 | ||
* '''魚レベルLV''':魚のレベル。 | *'''魚レベルLV''':魚のレベル。 | ||
* '''rnd''':'''0'''から関数に渡された値までの間のランダムな数値。 | *'''rnd''':'''0'''から関数に渡された値までの間のランダムな数値。 | ||
==== 例 ==== | ====例==== | ||
釣りレベルが''' | 釣りレベルが'''22'''で、魚のレベルが'''1'''と判定された場合、潜在的な魚の数は以下のように計算されます。<pre>rnd(22 / (1 + 10)) + 1</pre> | ||
もっと簡略化するとこうなります: | もっと簡略化するとこうなります: | ||
<pre>rnd( | <pre>rnd(22 / 11) + 1</pre> | ||
<code>rnd(2)</code>は、'''0'''から約'''1'''の間の乱数を生成します。1を足すと、少なくとも1匹の魚を捕まえることができます。魚の数は、ランダムな結果によって1匹か2匹のどちらかになります。 | |||
====土地フィート==== | |||
追加で1匹の魚を捕まえる最初のチャンスは「5%」から始まります。 | |||
==== 魚の数表 ==== | 土地フィートに以下を含む場合: | ||
*'''ビーチ (3604)''': 基本確率に '''20%''' を追加します。 | |||
*'''海 (3605)''': 基本確率に '''20%''' を追加します。 | |||
*'''釣り場 (3706)''': 基本確率に '''25%''' を追加します。 | |||
海 (3605)''' または '''ビーチ (3604)''' はいずれか一方のみが存在し得る(両方は存在しない)ため、合計確率は以下のように計算されます。''' | |||
<pre> | |||
chanceForOneMoreFish = 5 | |||
chanceForOneMoreFish += isBeach * 20 + isSea * 20 + isFishingSpot * 25 | |||
</pre> | |||
以下を参照してください。 | |||
*'''isBeach''': 土地フィートが「ビーチ(3604)」であることを示すフラグ(0または1)。 | |||
*'''isSea''': 土地フィートが「海(3605)」であることを示すフラグ(0または1)。 | |||
*'''isFishingSpot''': 土地が'''釣り場(3706)'''であるかどうかを示すフラグ(0または1)。 | |||
例えば: | |||
*'''海 (3605)'''が存在し、さらに'''釣り場(3706)'''も存在する場合: | |||
<pre> | |||
chanceForOneMoreFish = 5 + 1 * 20 + 1 * 25 = 50 | |||
</pre> | |||
*'''海 (3605)''' の代わりに '''ビーチ (3604)''' が存在する場合: | |||
<pre> | |||
chanceForOneMoreFish = 5 + 1 * 20 + 1 * 25 = 50 | |||
</pre> | |||
====魚の数を増やすチャンスの確認==== | |||
chanceForOneMoreFishの値は、0から99(両端の値を含む)の間の数値を生成する<code>rnd(100)</code>関数によって生成された乱数と比較されます。 | |||
chanceForOneMoreFishが乱数以上の場合、魚の数は「1」増えます。 | |||
このチェックは以下のように実装されています。 | |||
<pre> | |||
if (chanceForOneMoreFish >= rnd(100)) | |||
</pre> | |||
例えば: | |||
*chanceForOneMoreFish = 50'''、かつ <code>rnd(100)</code> によって生成された乱数が '''50 以下''' の場合、魚が1匹追加で釣れます。''' | |||
====土地フィートの例==== | |||
=====例 1: 釣り場 (3706) と海 (3605)===== | |||
あなたの釣りレベルが「22」、魚のレベルが「1」だとします。魚の基本数は以下のように計算されます。 | |||
<pre> | |||
numberOfFish = rnd(22 / (1 + 10)) + 1 = rnd(2) + 1 | |||
</pre> | |||
これにより、ランダムな結果に応じて「1」または「2」の魚が得られます。 | |||
次に、陸での成果を評価します。 | |||
*まず、'''chanceForOneMoreFish = 5'''(基本確率)とします。 | |||
*'''海(3605)''' は '''20''' を追加します。 | |||
*'''釣り場 (3706)''' は '''25''' を追加します。 | |||
新しい '''chanceForOneMoreFish''' は次のようになります。 | |||
<pre> | |||
chanceForOneMoreFish = 5 + 20 + 25 = 50 | |||
</pre> | |||
続いて、ランダムなチャンスが判定されます。 | |||
<pre> | |||
if (chanceForOneMoreFish >= rnd(100)) | |||
</pre> | |||
<code>rnd(100)</code>によって生成された乱数が「50以下」の場合、魚の数は「1」増えます。したがって、 | |||
*「numberOfFish = numberOfFish + 1」(乱数のチェックに合格した場合)。 | |||
*乱数が「50」を超える場合、魚の数は変化しません。 | |||
=====例2: 釣りスポット (3706) とビーチ (3604)===== | |||
同じ釣りレベルと魚LVの場合、土地の成果は以下のようになります。 | |||
*'''ビーチ (3604)''' は '''20''' を追加します。 | |||
*'''釣りスポット (3706)''' は '''25''' を追加します。 | |||
合計の「'''chanceForOneMoreFish'''」は次のままです。 | |||
<pre> | |||
chanceForOneMoreFish = 5 + 20 + 25 = 50 | |||
</pre> | |||
ランダムチェックは、追加の魚の確率が同じであることを除いて、上記と同じ動作をします。 | |||
====魚の数表 ==== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
!魚LV!!魚を2匹釣るための最低釣りレベル!!魚を3匹釣るための最低釣りレベル | !魚LV !!魚を2匹釣るための最低釣りレベル!!魚を3匹釣るための最低釣りレベル | ||
|- | |- | ||
|1|| | |1||22||33 | ||
|- | |- | ||
|5|| | |5||30||45 | ||
|- | |- | ||
|10|| | |10||40||60 | ||
|- | |- | ||
|15|| | |15||50||75 | ||
|- | |- | ||
|20|| | |20||60||90 | ||
|- | |- | ||
|25|| | |25||70||105 | ||
|- | |- | ||
|30|| | |30||80||120 | ||
|- | |- | ||
|35|| | |35||90||135 | ||
|- | |- | ||
|40|| | |40||100||150 | ||
|} | |} | ||
====コード (EA 23. | ====コード (EA 23.40)==== | ||
<syntaxhighlight lang="c#" line="1"> | <syntaxhighlight lang="c#" line="1"> | ||
Line 196: | Line 208: | ||
if (EClass.Branch != null) | if (EClass.Branch != null) | ||
{ | { | ||
num4 += EClass.Branch.Evalue(3604) * 20 + EClass.Branch.Evalue(3706) * 25; | num4 += EClass.Branch.Evalue(3604) * 20 + EClass.Branch.Evalue(3605) * 20 + EClass.Branch.Evalue(3706) * 25; | ||
} | } | ||
if (num4 >= EClass.rnd(100)) | if (num4 >= EClass.rnd(100)) | ||
Line 206: | Line 218: | ||
thing.SetNum(num2); | thing.SetNum(num2); | ||
thing.SetBlessedState(BlessedState.Normal); | thing.SetBlessedState(BlessedState.Normal); | ||
} | |||
</syntaxhighlight> | |||
==釣り速度== | |||
釣りのプロセスには、2つの重要な変数が関わります。 | |||
*'''進行度''': 釣りの全体の所要時間または完了率を表し、0から100までの範囲です。 | |||
*'''ヒット''': 魚との格闘中に試行された回数を追跡します。以下の条件が適用されます。 | |||
**'''増加''': 以下のいずれかが発生するまで、試行ごとにヒットが増加します。 | |||
魚が釣れた場合(「hit」が「ランダム閾値」より大きい場合)。 | |||
特定のランダム条件により「hit」が「0」にリセットされる場合。 | |||
====成功==== | |||
魚を釣るための成功閾値を計算する式は以下の通りです。 | |||
<pre>successThreshold = Mathf.Clamp(10 - rnd(fishingLevel + 1) / 10, 5, 10)</pre> | |||
*'''fishingLevel''': 現在の釣りスキルレベル。 | |||
*'''rnd''': 0 から関数に渡された値までの間の乱数。 | |||
*'''Clamp''': 値が 5(最も簡単)から 10(最も難しい)の範囲に収まるようにします。 | |||
実際の成功ロジックは以下の通りです。 | |||
<pre> | |||
if (hit > rnd(successThreshold)) { | |||
hit = 100; | |||
progress = MaxProgress; | |||
} | |||
</pre> | |||
*'''hit''': 現在の試行回数を追跡します。hit''がsuccessThresholdのランダムロールを超えると魚が釣れたことになります。'' | |||
*'''progress''': 成功すると自動的に完了します。 | |||
====例==== | |||
釣りレベルが「20」の場合、計算は以下のように進みます。 | |||
#<code>rnd(20 + 1)</code> は「0」から「20」までの間の乱数を生成します。 | |||
#この乱数を「10」で割った値を「10」から引きます。 | |||
結果は [5, 10] の範囲に制限され、successThreshold が決定されます。 | |||
例えば: | |||
*<code>rnd(21) = 10</code> の場合、計算は次のようになります。 | |||
<pre>successThreshold = Mathf.Clamp(10 - (10 / 10), 5, 10) = 9</pre> | |||
乱数<code>rnd(9)</code>の値によって閾値が決定されます。 hit > rnd(9) の場合、魚が釣れます。 | |||
====成功閾値テーブル==== | |||
{| class="wikitable sortable」" | |||
|- | |||
!釣りレベル!!最小成功閾値!!最大成功閾値 | |||
|- | |||
|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 | |||
|} | |||
==== リセット ==== | |||
「ヒット」のリセットを決定する計算式は以下の通りです。 | |||
<pre>resetThreshold = Mathf.Clamp(10 - rnd(fishingLevel + 1) / 5, 2, 10)</pre> | |||
*'''fishingLevel''': 現在の釣りスキルレベル。 | |||
*'''rnd''': 0 から関数に渡された値までの間の乱数。 | |||
*'''Clamp''': 値が 2(リセットが最も容易な閾値)から 10(リセットが最も困難な閾値)の範囲に収まるようにします。 | |||
<code>rnd(resetThreshold)</code> が '''0'<nowiki/>'' に等しく、かつ '''''<nowiki/>''progress >= 10''' の場合、'''hit''カウンターは '''0''' にリセットされます。 | |||
====例==== | |||
釣りレベルが '''30''' の場合、計算は以下のように進みます。 | |||
#<code>rnd(30 + 1)</code> は、0から30までの間のランダムな数値を生成します。 | |||
#このランダムな数値を5で割った値から10を引きます。 | |||
#結果は[2, 10]の範囲に制限され、resetThresholdが決定されます。 | |||
例えば: | |||
*<code>rnd(31) = 10</code>の場合、計算は次のようになります。 | |||
<pre>resetThreshold = Mathf.Clamp(10 - (10 / 5), 2, 10) = 8</pre> | |||
2番目の乱数ロール、<code>rnd(8)</code>が実行されます。結果が「0」の場合、「ヒット」カウンターがリセットされます。 | |||
==== リセット閾値テーブル ==== | |||
{| class="wikitable sortable」" | |||
|- | |||
!釣りレベル!!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)==== | |||
<syntaxhighlight lang="「c#」" line="「1」"> | |||
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(); | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:Elin Spoiler]] | [[Category:Elin Spoiler]] | ||
[[Category:JA]] | [[Category:JA]] |
Revision as of 13:23, 27 November 2024
計算式
魚 LV
自分の釣りレベルから釣れる魚LVを算出する公式:
fishLV = rnd(fishingLevel * 2) + 1
- 釣りレベル: 現在の釣りスキルレベル。
- rnd: 0から関数に渡された値までの間のランダムな数値。
例
釣りレベルが22の場合、潜在的な魚のLVは次のように計算されます。
rnd(3 * 2) + 1
これは1から6までの範囲を示しており、LV1からLV6までの魚を釣ることができることを意味します。
魚LV範囲表
釣りレベル | 最低LV | 最大LV |
---|---|---|
1 | 1 | 2 |
2 | 1 | 4 |
3 | 1 | 6 |
4 | 1 | 8 |
5 | 1 | 10 |
6 | 1 | 12 |
7 | 1 | 14 |
8 | 1 | 16 |
9 | 1 | 18 |
10 | 1 | 20 |
11 | 1 | 22 |
12 | 1 | 24 |
13 | 1 | 26 |
14 | 1 | 28 |
15 | 1 | 30 |
16 | 1 | 32 |
17 | 1 | 34 |
18 | 1 | 36 |
19 | 1 | 38 |
20 | 1 | 40 |
コード (EA 23.37)
int num3 = EClass.rnd(num * 2) + 1;
thing = ThingGen.Create("fish", -1, num3);
魚の数
自分の釣りレベルから釣れる匹数を計算する式は次の通りです。
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匹釣るための最低釣りレベル |
---|---|---|
1 | 22 | 33 |
5 | 30 | 45 |
10 | 40 | 60 |
15 | 50 | 75 |
20 | 60 | 90 |
25 | 70 | 105 |
30 | 80 | 120 |
35 | 90 | 135 |
40 | 100 | 150 |
コード (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();
}
}