ギャンブルシステム
ギャンブルシステムは、EliteMobs にカジノを追加します。プレイヤーは 4 種類のミニゲームでエリートコインを賭け、資金が尽きれば借金を負い、取り立て屋(Debt Collector)に追われることもあります。管理者はブラックジャック、コインフリップ、ハイアンドローの配当倍率など多くの設定を変更できます。ただし、スロットの配当と借金の上限はコードで固定されています。
セットアップ
プレイヤーは専用の NPC からゲームにアクセスします。デフォルトで付与される elitemobs.gambling.npc が必要です。4 種類のゲームにはそれぞれ固有のインタラクションタイプがあり、ハウス収益の表示は NPC のファイル名で選択されます。
ギャンブル用 NPC をセットアップするには、NPC 設定ファイルを作成し、interactionType を次のいずれかの値に設定します。
| インタラクションタイプ | 説明 |
|---|---|
GAMBLING_BLACKJACK | ブラックジャックの賭けメニューを開きます |
GAMBLING_COINFLIP | コインフリップの賭けメニューを開きます |
GAMBLING_SLOTS | スロットマシンの賭けメニューを開きます |
GAMBLING_HIGHERLOWER | ハイアンドローの賭けメニューを開きます |
Gambling Den Owner NPC は特別なインタラクションタイプを使用しません。セットアップするには、ファイル名を gambling_den_owner.yml として NPC を作成します。このファイル名に基づいて、ハウス収益の表示が NPC の頭上に自動的に現れます。
EliteMobs には次の 5 役の NPC 設定が付属しているため、通常は配置するだけで利用できます。
| ファイル | 役割 |
|---|---|
blackjack_dealer.yml | ブラックジャック(ディーラーの Vincent) |
coin_flipper.yml | コインフリップ(Lucky Pete) |
slot_machine_operator.yml | スロットマシン(Spinner Sam) |
card_shark.yml | ハイアンドロー(カード名人の Ace Morgan) |
gambling_den_owner.yml | ハウス収益の表示 |
ゲーム
ブラックジャック
目標は、21 を超えずにできるだけ 21 に近づけることです。この実装では次のルールが適用されます。
ルール
- プレイヤーとディーラーの双方に 2 枚のカードが配られます。
- ディーラーの 2 枚目のカードは、プレイヤーがスタンドするまで伏せられています。
- エースは 11 または 1 として数えられます(可能な場合はバーストを避けるよう自動的に調整されます)。
- 絵札(ジャック、クイーン、キング)は 10 として数えられます。
- ディーラーは 17 でスタンドします。
- カードは毎回独立して復元抽出されます。枚数が有限のデッキではないため、カードカウンティングはできません。Hit 後に 21 になると自動的に Stand します。
- メニューの表示枠は各手札 5 枚分です。追加で引いたカードも、表示枠に収まらなくても合計に加算されます。
- プレイヤーの最初の 2 枚がブラックジャックなら即座に配当を受け取ります。ディーラーもナチュラルブラックジャックの場合も同様です。
アクション
| アクション | 説明 |
|---|---|
| Hit | カードをもう 1 枚引きます。 |
| Stand | 現在の手札を維持します。その後ディーラーがプレイします。 |
| Double Down | 同額を追加で支払って賭け金を倍にし、1 枚だけ引き、バーストしなければスタンドします。手札が 2 枚の最初の操作で、残高と利用可能な与信で追加分を支払える場合のみ利用できます。 |
配当
| 結果 | デフォルト倍率 |
|---|---|
| 通常の勝利(プレイヤーの合計がディーラーを上回る、またはディーラーがバースト) | 2.0x |
| ブラックジャック(最初の 2 枚で 21) | 2.5x |
| プッシュ(引き分け) | 1.0x(賭け金が返却されます) |
| 敗北(プレイヤーがバースト、またはディーラーの合計の方が高い) | 0x(賭け金を失います) |
メニューを閉じた場合
ディーラーのターン中にプレイヤーがメニューを閉じた場合、ディーラーの手は自動的に進行し、結果が確定します。スタンドする前にメニューを閉じた場合、賭け金は没収されます。
コインフリップ
シンプルな 50/50 のゲームです。表か裏を選び、コインが運命を決めます。
遊び方
- 表(Heads)ボタンと裏(Tails)ボタンとともにゲームが開きます。
- どちらかをクリックして選択します。
- コインを投げるアニメーションが再生されます。
- 結果が表示されます。
配当
| 結果 | デフォルト倍率 |
|---|---|
| 予想が的中 | 1.9x |
| エッジ(コインが縁で立つ) | 5.0x |
| 予想が外れ | 0x(賭け金を失います) |
エッジという結果
コインが表でも裏でもなく縁で立つ確率が 1% あります。この場合、プレイヤーは選択にかかわらず必ず勝利し、賭け金に対して 5 倍の配当を受け取ります。このまれなイベントには専用のチャットメッセージと視覚演出が表示されます。
このデフォルト設定では表と裏の確率はそれぞれ 49.5% です。配当の期待値は賭け金の 0.495 × 1.9 + 0.01 × 5 = 0.9905 倍で、全体のハウスエッジは 0.95% になります。単純な 1.9 倍配当のコイン投げで生じる 5% のハウスエッジは、エッジ結果を無効にした場合にのみ当てはまります。倍率には元の賭け金を含みます。
メニューを閉じた場合
選択を行う前にプレイヤーがメニューを閉じた場合、賭け金は没収されます。
スロットマシン
3 つのリールを回してシンボルを揃えると勝利します。レアなシンボルほど配当が高くなります。
遊び方
- 3x3 のリールグリッドとスピンボタンとともにゲームが開きます。
- スピンをクリックしてリールを回します。
- 各リールがアニメーションとともに順番に停止します。
- 中央の行(ペイライン)が結果を決定します。
シンボルと配当
各リールは次の重みに従って独立にシンボルを抽選します。3 つ揃いの配当倍率は 100 / weight です。中央の行でちょうど 2 つ揃えば、1 番目と 3 番目の組み合わせも含めて、そのシンボルの 3 つ揃い配当の 25% を受け取ります。これは賭け金を含む総返還額です。Cherry や Lemon のペアはメニューに勝利と表示されても、元の賭け金より少ない返還になります。
| シンボル | 重み | 確率 | 3 つ揃いの配当 | 2 つ揃いの配当 |
|---|---|---|---|---|
| Cherry | 35 | 35% | 2.86x | 0.71x |
| Lemon | 28 | 28% | 3.57x | 0.89x |
| Orange | 20 | 20% | 5.0x | 1.25x |
| Golden Bell | 10 | 10% | 10.0x | 2.5x |
| Silver Bar | 5 | 5% | 20.0x | 5.0x |
| Lucky 7 | 2 | 2% | 50.0x | 12.5x |
Lucky 7 が 3 つ揃うとジャックポットとなり、特別な視覚効果と効果音が発生します。
メニューを閉じた場合
スピンする前にプレイヤーがメニューを閉じた場合、賭け金は没収されます。
結果表示後の Spin Again は同額の賭け金を新たに徴収して準備画面へ戻ります。その後 Spin を押す必要があります。この間に閉じると、新たに支払った賭け金を失います。
ハイアンドロー
連勝を積み重ねるカードゲームです。次のカードが現在のカードより大きいか小さいかを予想し、倍率を積み上げていきます。いつでもキャッシュアウトできますし、すべてを賭け続けることもできます。
遊び方
- カードが 1 枚引かれて表示されます(値は 2 から 14 までで、エースは 14 です)。
- 次のカードが現在のカードより Higher(大きい) か Lower(小さい) かを予想します。
- 予想が的中すると倍率が上がり、公開されたカードが新たな現在のカードになります。
- 少なくとも 1 回的中した後は、いつでも Cash Out できます。
- 予想が外れると、賭け金をすべて失います。
- 次のカードが現在のカードと同じだった場合は敗北として扱われます。
連勝倍率
的中するたびに、設定された倍率(デフォルト 1.3x)が獲得額に掛けられます。倍率は累積します。
| 連勝数 | 倍率(デフォルト) | 100 コイン賭けた場合の配当 |
|---|---|---|
| 1 | 1.3x | 130 |
| 2 | 1.69x | 169 |
| 3 | 2.197x | 219.7 |
| 4 | 2.856x | 285.6 |
| 5 | 3.713x | 371.3 |
| ... | ... | ... |
| 12 | ~23.3x | ~2,330 |
最大連勝数と自動キャッシュアウト
最大連勝数は 12 です。プレイヤーが 12 回連続で的中すると自動的にキャッシュアウトされ、獲得額が支払われます。これにより倍率が際限なく膨らむのを防ぎます。
メニューを閉じた場合
連勝中にプレイヤーがメニューを閉じた場合は自動的にキャッシュアウトされ、その時点の獲得額を受け取ります。1 度も予想しないまま閉じた場合は、賭け金は没収されます。
賭け
ゲームが始まる前に、プレイヤーには賭け金を選ぶための賭けメニューが表示されます。
賭け金の制限
| 設定 | デフォルト値 |
|---|---|
| 最低賭け金 | 10 |
設定可能な最高賭け金はありません。メニューの賭け金は整数です。All In は残高と利用可能な与信を合計し、コインの小数部分を切り捨てます。
minBet は Reset の金額と減額ボタンの下限を設定します。初期額は max(minBet, 10) です。すべての取引で最低額を検証するものではありません。All In で minBet 未満の正の額を設定でき、現在の Play は支払える場合それを受け付けます。全操作で最低額を強制する設定としては利用しないでください。
賭けメニューの操作
賭けメニューにはいくつかの操作があります。
- 増減ボタン -- 3 段階の増減ボタンです。100 コイン以上の残高があり借金がなければ、残高の 5%、10%、25% を整数に切り捨て、最小 1 コインとします。それ以外は 10、50、100 の固定額です。
- All In -- 賭け金を(利用可能な与信を含めて)プレイヤーが支払える最大額に設定します。
- Reset -- 賭け金を最低額にリセットします。
- Play -- 現在の賭け金でゲームを開始します。プレイヤーがその賭け金を支払える場合にのみ有効です。
- Cancel -- 賭けずにメニューを閉じます。
メニューには現在の残高が表示されます。借金と利用可能な与信の行は借金が正のときに表示されますが、借金がないプレイヤーも与信を利用できます。
借金システム
プレイヤーは借金を負うことで残高を超えて賭けられます。カジノは固定された上限まで与信を提供します。
借金の仕組み
- プレイヤーが残高を超える賭けを行うと、不足分がギャンブル借金として加算されます。
- プレイヤーが積み上げられる借金の上限は 500 コインです。これはハードコードされており、設定できません。
- 借金が上限を超えてしまうような賭けは行えません。
- プレイヤーが勝利した場合、獲得額は残高に加算される前にまず借金の返済に充てられます。EliteMobs 経由の他の通貨収入も、Vault 連携時を含めて先に借金へ充当されます。エンチャント購入の返金は借金回収を経由しません。
利用可能な与信
借金が有限値の場合、利用可能な与信は max(0, maxDebt - currentDebt) です。借金があると賭けメニューに表示されます。
借金の警告
プレイヤーが借金を負うと、警告メッセージが表示されます。未返済の借金を抱えている間、取り立て屋がやってくる可能性があります。
取り立て屋ボス
取り立て屋(Debt Collector)は、ギャンブルの借金を抱えているプレイヤーを追い詰めるためにスポーンするカスタムボスです。
スポーン条件
- プレイヤーに未返済のギャンブル借金があること。
- オンラインの全プレイヤーに対して、60 分ごと(設定可能)に定期チェックが実行されます。
- 初回チェックは初期化から 1 間隔分待って実行されます。また、対象プレイヤーへの最後のスポーン試行からも 1 間隔以上経過している必要があります。このタイマーはプラグイン停止時にリセットされます。
- 各チェックでは、条件を満たすプレイヤーに対して 50% の確率(設定可能)で取り立て屋がスポーンします。
- 1 人のプレイヤーにつき、同時にアクティブな取り立て屋は 1 体だけです。
- 取り立て屋はカスタムボスファイル
debt_collector.ymlを使用します。
定期チェック自体にはワールドやゲームモードによる除外はありません。ただし、通常のカスタムボスのスポーン処理が失敗する場合はあります。完済すれば今後の定期スポーンは防げますが、既にいる取り立て屋は自動では消えません。
レベルスケーリング
付属の debt_collector.yml は動的レベルと scaledCombat: true を使用し、各プレイヤーに合わせて戦闘を計算します。体力とダメージの倍率はこのボスファイルで決まります。スポーン処理が追跡対象の戦闘レベルを直接割り当てるわけではありません。ボス設定を変更するとスケーリングも変わります。
挙動
- 取り立て屋は水平方向に 5〜10 ブロック離れた地表の位置を 10 回試します。適切な位置がなければ、プレイヤーと同じ高さで各水平軸に最大 5 ブロックずらした位置を使用します。
- スポーンの対象となったプレイヤーを即座にターゲットにします。
- デフォルトでは 600 秒(10 分)のタイムアウトがあります。その時間内に倒されなかった場合はデスポーンし、また戻ってくるとプレイヤーに警告します。
結果
| 結果 | 効果 |
|---|---|
| 取り立て屋が倒される | 別のプレイヤーが倒しても、登録された追跡対象がオンラインなら再訪メッセージを受け取ります。借金は減りません。 |
| 取り立て屋の直接攻撃でプレイヤーが死亡する | 死亡したプレイヤーの借金が 50 コイン(設定可能)減り、完済なら通知されます。取り立て屋は 5 秒後に削除されます。最後にダメージを与えたエンティティ自体が debt_collector.yml のボスである必要があり、発射物の射手やその後の環境による死亡までは追跡しません。 |
| 管理側のタイムアウト | 取り立て屋が削除され、警告が送られます。後の定期チェックで条件を満たし、確率判定に成功すれば再び出現する可能性があります。 |
Gambling Den Owner
Gambling Den Owner は、頭上にハウス収益をフローティングテキストで表示します。記録された賭け金から配当を引いた額で、借金で賄った賭け金も含みます。独立した銀行残高や、債務者から既に回収した現金額ではありません。
- プラスの収益は緑で表示されます(例:
+1234.56)。 - マイナスの収益(プレイヤーの勝ちが負けを上回っている状態)は赤で表示されます(例:
-567.89)。 - 表示は 1 秒ごとに更新されます。
- ハウス収益は
house_earnings.ymlに永続化され、サーバー再起動後も維持されます。
設定
ギャンブルの設定はすべて GamblingSettings.yml に保存されます。以下はゲームプレイに影響する主要な設定です。
一般設定
| キー | 説明 | デフォルト |
|---|---|---|
gamblingEnabled | ギャンブルシステム全体を有効または無効にします。無効の場合、ギャンブル NPC は機能せず、取り立て屋もスポーンしません。 | true |
minBet | Reset の金額と減額ボタンの下限。上記の All In の制限を参照してください。 | 10 |
注意: 借金の上限(500.0)はハードコードされており、設定できません。
ローダーは minBet、取り立て屋のチェック間隔、タイムアウトに正の整数を要求します。確率は 0〜1 の有限値、配当倍率と死亡時の借金減額は非負の有限値である必要があります。不正な値は警告を出し、読み込まれた設定内でデフォルト値に置き換えられます。
配当倍率
| キー | 説明 | デフォルト |
|---|---|---|
payouts.blackjack.normal | ブラックジャックの通常勝利時の配当倍率です。 | 2.0 |
payouts.blackjack.blackjack | ナチュラルブラックジャック(最初の 2 枚で 21)を達成した際の配当倍率です。 | 2.5 |
payouts.coinFlip.normal | 表裏の予想が当たった場合の配当倍率。1.9 倍でハウスエッジが 5% になるのはエッジ結果を無効にした場合だけです。 | 1.9 |
payouts.coinFlip.edgeChance | コインが縁で立つ(ボーナス勝利)確率(0.0〜1.0)です。無効にするには 0.0 に設定します。 | 0.01 |
payouts.coinFlip.edgePayout | コインが縁で立った際の配当倍率です。 | 5.0 |
payouts.higherLower.multiplierV2 | ハイアンドローで的中するたびに適用される倍率です。乗算で累積します。 | 1.3 |
コインフリップの設定は 1 つの YAML セクションにまとめられています。
payouts:
coinFlip:
normal: 1.9
edgeChance: 0.01
edgePayout: 5.0
既存のファイルで payouts.coinFlip に数値を直接保存している場合は、その値を normal の下へ移し、縁に関する 2 つの設定を追加してください。EliteMobs はギャンブルを無効にし、ファイルを書き換えずにこの修正が必要なことを報告します。修正後にリロードしてください。
スロットマシンの配当
スロットマシンの配当は設定できません。シンボルの重みから 100 / weight の式で自動的に計算されます。
| シンボル | 重み | 3 つ揃いの配当 | 2 つ揃いの配当 |
|---|---|---|---|
| Cherry | 35 | 2.86x | 0.71x |
| Lemon | 28 | 3.57x | 0.89x |
| Orange | 20 | 5.0x | 1.25x |
| Bell | 10 | 10.0x | 2.50x |
| Bar | 5 | 20.0x | 5.00x |
| Lucky 7 | 2 | 50.0x | 12.50x |
GamblingSettings.yml には payouts.slots.* というキーは一切存在しません。このファイル内のスロットマシン関連のエントリーは slots.* の UI 文字列(ボタン名、ラベル、結果のタイトル)だけです。配当は常にハードコードされたシンボルの重みから導出されます。
取り立て屋の設定
| キー | 説明 | デフォルト |
|---|---|---|
debtCollector.spawnChance | 各チェックで取り立て屋がスポーンする確率(0.0〜1.0)です。 | 0.5 |
debtCollector.checkIntervalMinutes | 借金のあるプレイヤーに対して取り立て屋をスポーンさせるべきかを確認する間隔(分)です。 | 60 |
debtCollector.timeoutSeconds | 倒されなかった場合に取り立て屋がデスポーンするまでの時間(秒)です。 | 600 |
debtCollector.debtReductionOnPlayerDeath | 取り立て屋がプレイヤーを倒した際に減額される借金の額です。 | 50.0 |
経済面の安全性
賭け金はゲームを開く前に徴収されます。コインフリップとスロットは結果のアニメーション前に精算します。ハイアンドローは各予想をアニメーション前に記録し、キャッシュアウト時に支払います。ブラックジャックはディーラーが引き終わると解決し、ディーラーのターン中に閉じた場合は直ちにその手を最後まで進めます。配当は小数第 2 位に丸められ、元の賭け金を含みます。共通の結果処理により、同じ保留中の配当が二重に支払われることを防ぎます。
切断でインベントリが閉じる場合にも、上記のメニューを閉じるルールが適用されます。これらの保護はサーバークラッシュやプラグイン停止後の未完了セッションの復元を保証しません。ゲーム進行中の再起動は避けてください。