本鯖をプレイした方だったら一度は聞く闇リンゴ。
出るとガッカリする物ですね。
どうしてリンゴが出るのでしょう?
今回はその謎についてご説明します。
結論から言えば、ドロップテーブルに未設定項目があると、ドロップ率0%のリンゴが設定され、さらに乱数バグにより0.01%(1万分の1)の確率でドロップされます。
例えばウィスパーの場合、
- ウィスパーのドロップテーブル - 1.星の粉 - 1.50%
- 乱数バグ - 乱数とはプログラムの種類により様々ですが、一般的には0以上1未満のランダムな数字を返すことをいいます。
2.透明な布 - 55.00%
3.魂のリング - 0.01%
4.シルバーローブ[1] - 0.10%
5.- 未設定 -
6.- 未設定 -
7.- 未設定 -
8.ウィスパーカード - 0.01%
全てのモンスターは8つドロップテーブルがあります。
ウィスパーの場合、3つ空きがあるので、リンゴ 0%が設定されます。
つまり、ウィスパーは最大3つのリンゴを同時にドロップするわけです。確率で表すと1兆分の1。
ではなぜ、確率0%のアイテムが0.01%の確率になってしまうのでしょうか。
これは開発側の乱数設定の誤りです。いわゆる乱数バグというものです。
少し難しいので次の項で説明していきます。
アイテムのドロップ率は万分率で設定されているので、
乱数×10000(端数切捨)
つまり、0~9999の数字がランダムで決定されます。
そして、ドロップの判定はランダムな数字がドロップ率として設定された数値以下の数値を返したかどうかで判定されます。
闇リンゴのドロップ率は0です。つまり乱数処理で0以下の数値が返ればドロップ判定となります。
しかし、乱数処理では 0~9999と0が出てしまうので、計算上では 1 / 10000(0.01%)となってしまいます。
これをカードのドロップ率(0.01%)に置き換えると、
ドロップ率 = 1 なので、1以下の数字が返ればドロップ判定。
乱数処理 = 0~9999、0と1が含まれる。
計算上のドロップ率 = 2 / 10000(0.02%)
つまり、0~9999の0が含まれてしまうのでその分、確率が上がってしまうわけです。
本来、乱数処理の後に+1するのが常識です。プログラミングをしている方は、初歩的なミスと感じるかと思います。
最近、サクライで闇リンゴバグを修正という告知がされました。日本鯖でも修正が来ているのかもしれません。
最後に、なぜリンゴなのでしょうか。
未設定 = IDの最大値 = 1000000000(2進数)
1000000000(2進数)= 512(10進数)
512(10進数)= リンゴのItemID