賭博系統
賭博系統為 EliteMobs 加入賭場。玩家可以在四款小遊戲中下注精英金幣,餘額不足時借債,並可能遭到討債人追捕。管理員可以調整大部分設定,包括二十一點、擲硬幣及比大小的賠付倍率。不過,拉霸機賠付與負債上限固定在程式碼中。
前置設定
玩家透過特別設定的 NPC 進入遊戲,需要預設授予的 elitemobs.gambling.npc 權限。四款遊戲各有互動類型;莊家收益顯示則由 NPC 檔名決定。
要設定一個賭博 NPC,請建立一個 NPC 設定檔,並將 interactionType 設為以下其中一個值:
| 互動類型 | 說明 |
|---|---|
GAMBLING_BLACKJACK | 開啟二十一點的下注選單 |
GAMBLING_COINFLIP | 開啟擲硬幣的下注選單 |
GAMBLING_SLOTS | 開啟拉霸機的下注選單 |
GAMBLING_HIGHERLOWER | 開啟比大小的下注選單 |
賭場老闆 NPC 不使用特殊的互動類型。要設定它,請建立一個檔名為 gambling_den_owner.yml 的 NPC。莊家收益顯示會依據這個檔名自動出現在該 NPC 上方。
EliteMobs 提供這五種角色的預製 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 點。此實作採用以下規則。
規則
- 玩家與莊家各發兩張牌。
- 莊家的第二張牌在玩家停牌前都是蓋著的。
- A 可算作 11 或 1(在可能的情況下會自動調整以避免爆牌)。
- 花牌(J、Q、K)算作 10。
- 莊家在 17 點停牌。
- 每次抽牌都是獨立的取後放回抽樣,沒有可供算牌的有限牌堆。要牌後達到 21 點會自動停牌。
- 選單為每手牌顯示五個牌位。額外抽到的牌即使無法顯示,仍會計入總點數。
- 玩家起手拿到天生二十一點時立即獲得賠付,即使莊家也拿到天生二十一點亦然。
動作
| 動作 | 說明 |
|---|---|
| Hit | 再抽一張牌。 |
| Stand | 保留目前的手牌;接著由莊家行動。 |
| Double Down | 再支付一份等額賭注,將總下注加倍,只抽一張牌,未爆牌則停牌。僅限持有 2 張牌時的首次操作,且剩餘餘額加可用信用額度必須足以支付追加賭注。 |
賠付
| 結果 | 預設倍率 |
|---|---|
| 一般獲勝(玩家點數勝過莊家,或莊家爆牌) | 2.0x |
| 二十一點(前兩張牌就是 21 點) | 2.5x |
| 和局(平手) | 1.0x(退還賭注) |
| 落敗(玩家爆牌或莊家點數較高) | 0x(賭注損失) |
關閉選單
如果玩家在莊家回合期間關閉選單,莊家的手牌會自動打完並結算結果。如果玩家在停牌前關閉選單,賭注會被沒收。
擲硬幣
一款簡單的 50/50 遊戲。選擇正面或反面,硬幣決定你的命運。
玩法
- 遊戲開啟時會有一個正面按鈕與一個反面按鈕。
- 點擊其中一個做出選擇。
- 播放擲硬幣動畫。
- 顯示結果。
賠付
| 結果 | 預設倍率 |
|---|---|
| 猜對 | 1.9x |
| 立起(硬幣立在邊緣上) | 5.0x |
| 猜錯 | 0x(賭注損失) |
立起結果
硬幣有 1% 的機率會立在邊緣上,而非正面或反面。發生這種情況時,玩家無論選了什麼都必定獲勝,並獲得賭注的 5 倍賠付。這個罕見事件會顯示特別的聊天訊息與視覺效果。
依照這些預設值,正反面各有 49.5% 的機率。期望返還為賭注的 0.495 × 1.9 + 0.01 × 5 = 0.9905 倍,合計莊家優勢為 0.95%。一般 1.9 倍擲硬幣的 5% 莊家優勢,只適用於停用立起結果的情況。倍率包含原始賭注。
關閉選單
如果玩家在做出選擇前關閉選單,賭注會被沒收。
拉霸機
轉動三個轉軸並湊出相同符號即可獲勝。越稀有的符號賠付越高。
玩法
- 遊戲開啟時會有一個 3x3 的轉軸格與一個 Spin 按鈕。
- 點擊 Spin 開始轉動轉軸。
- 每個轉軸會依序伴隨動畫停下。
- 中間那一列(賠付線)決定結果。
符號與賠付
各轉軸依下表權重獨立抽取符號。三個相同符號的賠付倍率是 100 / weight。中間一列恰好有兩個相同符號,即可獲得該符號三個相同賠付的 25%,包括第一與第三格相同的情況。這是包含賭注的總返還額:櫻桃或檸檬配對的返還低於原始賭注,即使選單顯示獲勝也是如此。
| 符號 | 權重 | 機率 | 三連賠付 | 二連賠付 |
|---|---|---|---|---|
| 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 就是頭獎,並會有特別的視覺與音效。
關閉選單
如果玩家在轉動前關閉選單,賭注會被沒收。
結果顯示後,Spin Again 會再收取一份等額賭注並返回準備畫面。玩家接著需要點擊 Spin;在兩步之間關閉選單會損失剛收取的賭注。
比大小
一款以連勝為核心的紙牌遊戲。猜下一張牌比目前這張大還是小,並累積倍率。你可以隨時兌現,也可以孤注一擲。
玩法
- 抽出一張牌並顯示(數值範圍為 2 到 14,其中 A = 14)。
- 猜下一張牌會比目前這張大還是小。
- 如果猜對,你的倍率會提高,翻出的牌會成為新的目前牌。
- 只要至少猜對一次,你就可以隨時兌現。
- 如果猜錯,你會失去全部賭注。
- 如果下一張牌與目前的牌相同,算作落敗。
連勝倍率
每猜對一次,你的獎金就會乘上所設定的倍率(預設 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 次猜對時,系統會自動為他們兌現並發放獎金。這可以避免倍率失控。
關閉選單
如果玩家在擁有連勝時關閉選單,系統會自動為他們兌現並發放目前的獎金。如果他們在做出任何猜測前就關閉,賭注會被沒收。
下注
在任何遊戲開始之前,玩家會看到一個下注選單來選擇他們的賭注。
下注上下限
| 設定 | 預設值 |
|---|---|
| 最低下注 | 10 |
沒有可設定的最高下注。選單使用整數金幣賭注;All In 將餘額與可用信用額度相加後,捨去小數部分。
minBet 決定 Reset 金額及減少按鈕的下限。初始金額是 max(minBet, 10)。這不是通用交易限制:All In 可以設定低於 minBet 的正數金額,只要付得起,目前的 Play 就會接受。不要依賴此設定在所有操作中強制最低下注額。
下注選單控制項
下注選單提供數個控制項:
- Increment Buttons —— 提供三種增減級距。餘額至少 100 且無負債時,使用餘額的 5%、10%、25%,捨去小數且至少為 1。否則使用固定的 10、50、100。
- All In —— 把賭注設為玩家負擔得起的上限(包含可用信用額度)。
- Reset —— 把賭注重設為最低值。
- Play —— 以目前的賭注開始遊戲。只有在玩家負擔得起該賭注時才會啟用。
- Cancel —— 不下注並關閉選單。
選單顯示目前餘額。負債為正時才顯示負債與可用信用額度兩行,但沒有負債的玩家也能使用信用額度。
負債系統
玩家可以透過負債來下注超過自身餘額的金額。賭場提供的信用額度上限是固定的。
負債如何運作
- 當玩家下的注超過其餘額時,超出的部分會被加為賭債。
- 玩家可累積的最高負債為 500 金幣。這是寫死的,無法設定。
- 玩家無法下會使其負債超過上限的注。
- 當玩家獲勝時,獎金會先用來償還負債,剩餘部分才加入餘額。透過 EliteMobs 獲得的其他貨幣收入也會先還債,啟用 Vault 整合時亦然。購買附魔的退款不經過債務回收。
可用信用額度
負債為有限數值時,可用信用額度為 max(0, maxDebt - currentDebt)。玩家有負債時,下注選單會顯示此額度。
負債警告
當玩家陷入負債時,他們會收到一則警告訊息。只要背著未清償的負債,討債人就可能上門找他們。
討債人 BOSS
討債人是一個會生成出來追捕背負賭債玩家的自訂 BOSS。
生成條件
- 玩家必須有未清償的賭債。
- 系統每 60 分鐘(可設定)會對所有線上玩家執行一次週期性檢查。
- 初始化後,首次檢查會等待一個完整間隔。距離對該玩家的上次生成嘗試,也必須至少經過一個間隔;外掛關閉時會重設此計時。
- 每次檢查都有 50% 的機率(可設定)為符合條件的玩家生成討債人。
- 每位玩家同一時間只能有一個討債人處於活躍狀態。
- 討債人使用自訂 BOSS 檔案
debt_collector.yml。
週期性資格檢查本身不排除世界或遊戲模式,但正常的自訂 BOSS 生成仍可能失敗。還清負債會阻止未來的週期性生成,卻不會自動移除已存在的討債人。
等級縮放
隨附的 debt_collector.yml 使用動態等級與 scaledCombat: true,戰鬥計算會配合各個玩家。生命值與傷害倍率由此 BOSS 檔案決定。生成流程不會直接指派被追蹤玩家的戰鬥等級;修改 BOSS 設定也會改變其縮放行為。
行為
- 討債人會嘗試十個水平距離為 5 到 10 格的地表位置。若都不合適,則退回到玩家高度,並在每個水平軸偏移最多 5 格的位置。
- 它會立刻鎖定它被生成出來針對的那位玩家。
- 它預設有 600 秒的逾時(10 分鐘)。如果在那段時間內沒有被擊殺,它就會消失並警告玩家它會再回來。
結果
| 結果 | 效果 |
|---|---|
| 討債人被擊殺 | 已記錄的追蹤目標若在線上就會收到回歸訊息,即使是其他玩家擊殺亦然。負債不會減少。 |
| 玩家死於討債人的直接攻擊 | 死者負債減少 50 金幣(可設定),還清時會收到通知。討債人於 5 秒後移除。死亡處理要求最後造成傷害的實體本身就是 debt_collector.yml BOSS,不會追溯投射物發射者或之後的環境死亡。 |
| 管理器逾時 | 移除討債人並傳送警告。未來某次週期性檢查中,若玩家仍符合條件且隨機判定成功,可能再次生成。 |
賭場老闆
賭場老闆在頭上以浮動文字顯示莊家收益。數值是記錄的賭注減去賠付,包含借債支付的賭注。它不是獨立銀行餘額,也不是已從債務人收回的現金總額。
- 正收益以綠色顯示(例如
+1234.56)。 - 負收益(玩家贏的比輸的多)以紅色顯示(例如
-567.89)。 - 該顯示每秒更新一次。
- 莊家收益會保存到
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 | 拿到天生二十一點(前兩張牌就是 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 |
擲硬幣的設定共用同一個 YAML 區段:
payouts:
coinFlip:
normal: 1.9
edgeChance: 0.01
edgePayout: 5.0
如果你現有的檔案直接在 payouts.coinFlip 儲存了一個數字,請將該值移到 normal 底下,並加入兩項立起設定。EliteMobs 會停用賭博系統並回報需要修正,但不會改寫檔案。修正後請重新載入。
拉霸機賠付
拉霸機的賠付無法設定。它們是使用 100 / weight 公式,從符號權重自動計算出來的:
| 符號 | 權重 | 三連賠付 | 二連賠付 |
|---|---|---|---|
| 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 |
經濟安全性
賭注在開啟遊戲前扣除。擲硬幣與拉霸機在結果動畫前結算;比大小在每次動畫前記錄猜測,兌現時付款。二十一點在莊家抽牌結束後結算,若在莊家回合關閉選單,則立即完成該手牌。賠付四捨五入至兩位小數,並包含原始賭注。共用結果處理器可防止同一筆待結算賠付重複發放。
玩家斷線導致背包關閉時,也適用上述關閉選單規則。這些保護無法讓未完成的遊戲在伺服器當機或外掛關閉後恢復;請避免在遊戲進行中重新啟動。