跳到主要内容

赌博系统

赌博系统为 EliteMobs 加入赌场。玩家可以在四种小游戏中下注精英币,余额不足时借债,并可能遭到讨债人追捕。管理员可以配置系统的大部分设置,包括 21 点、抛硬币和猜大小的赔付倍率。不过,老虎机赔付和欠债上限固定在代码中。


设置​

玩家通过专门配置的 NPC 进入游戏,需要默认授予的 elitemobs.gambling.npc 权限。四种游戏各有交互类型;庄家收益展示由 NPC 文件名决定。

要设置一个赌博 NPC,请创建一个 NPC 配置文件,并把 interactionType 设为以下值之一:

交互类型说明
GAMBLING_BLACKJACK打开 21 点的下注菜单
GAMBLING_COINFLIP打开抛硬币的下注菜单
GAMBLING_SLOTS打开老虎机的下注菜单
GAMBLING_HIGHERLOWER打开猜大小的下注菜单

赌场老板 NPC 不使用特殊的交互类型。要设置它,请创建一个文件名为 gambling_den_owner.yml 的 NPC。庄家收益展示会根据该文件名自动出现在该 NPC 的头顶。

EliteMobs 为这五种角色提供了预制 NPC 配置,通常直接放置即可:

文件角色
blackjack_dealer.yml21 点(庄家 Vincent)
coin_flipper.yml抛硬币(Lucky Pete)
slot_machine_operator.yml老虎机(Spinner Sam)
card_shark.yml猜大小(纸牌高手 Ace Morgan)
gambling_den_owner.yml庄家收益展示

游戏​

21 点(Blackjack)​

目标是让点数尽可能接近 21 点但不超过。本实现采用以下规则。

规则​

  • 玩家和庄家各发两张牌。
  • 庄家的第二张牌在玩家停牌之前一直是暗牌。
  • A 算 11 点或 1 点(在可能的情况下会自动调整以避免爆牌)。
  • 花牌(J、Q、K)算 10 点。
  • 庄家在 17 点停牌。
  • 每次抽牌都是独立的有放回抽样,不存在可供算牌的有限牌堆。要牌后达到 21 点会自动停牌。
  • 菜单为每手牌显示五个牌位。额外抽到的牌即使放不下,也会计入总点数。
  • 玩家起手拿到天生 21 点时立即获得赔付,即使庄家也拿到天生 21 点也是如此。

操作​

操作说明
要牌(Hit)再抽一张牌。
停牌(Stand)保留当前手牌;随后由庄家行动。
加倍(Double Down)再支付一份等额赌注,将总下注翻倍,只抽一张牌,未爆牌则停牌。仅在持有 2 张牌的首次操作时可用,且剩余余额加信用额度必须能支付追加赌注。

赔付​

结果默认倍率
普通获胜(玩家点数高于庄家,或庄家爆牌)2.0x
21 点(前两张牌即为 21 点)2.5x
平局(Push)1.0x(返还下注)
落败(玩家爆牌或庄家点数更高)0x(下注亏掉)

关闭菜单​

如果玩家在庄家回合期间关闭菜单,庄家的手牌会自动打完并结算结果。如果玩家在停牌之前关闭菜单,下注将被没收。


抛硬币(Coin Flip)​

一个简单的 50/50 游戏。选择正面或反面,硬币决定你的命运。

玩法​

  1. 游戏开始时会出现一个"正面"按钮和一个"反面"按钮。
  2. 点击其中一个做出选择。
  3. 播放抛硬币动画。
  4. 显示结果。

赔付​

结果默认倍率
猜对1.9x
立起(硬币立在边上)5.0x
猜错0x(下注亏掉)

立起结果​

硬币有 1% 的几率立在边上,而不是正面或反面。发生这种情况时,无论玩家选了什么都必定获胜,并且会获得下注额的 5 倍赔付。这一稀有事件会伴随特殊的聊天消息和视觉展示。

按这些默认值,正反面各有 49.5% 的概率。期望返还为赌注的 0.495 × 1.9 + 0.01 × 5 = 0.9905 倍,综合庄家优势为 0.95%。普通 1.9 倍抛硬币的 5% 庄家优势只适用于禁用立起结果的情况。倍率包含原始赌注。

关闭菜单​

如果玩家在做出选择之前关闭菜单,下注将被没收。


老虎机(Slot Machine)​

转动三个转轮,凑齐符号即可获胜。越稀有的符号赔得越多。

玩法​

  1. 游戏开始时会出现一个 3x3 的转轮网格和一个"转动"按钮。
  2. 点击"转动"启动转轮。
  3. 每个转轮会依次伴随动画停下。
  4. 中间一行(赔付线)决定结果。

符号与赔付​

各转轮按下表权重独立抽取符号。三个相同符号的赔付倍率是 100 / weight。中间一行恰好有两个相同符号即可获得该符号三个相同赔付的 25%,包括第一和第三格相同的情况。这是包含赌注的总返还额:樱桃或柠檬配对返还的金额低于原始赌注,即使菜单显示获胜也是如此。

符号权重几率三连赔付二连赔付
Cherry3535%2.86x0.71x
Lemon2828%3.57x0.89x
Orange2020%5.0x1.25x
Golden Bell1010%10.0x2.5x
Silver Bar55%20.0x5.0x
Lucky 722%50.0x12.5x

三个 Lucky 7 就是头奖(Jackpot),会附带特殊的视觉和音效。

关闭菜单​

如果玩家在转动之前关闭菜单,下注将被没收。

结果显示后,Spin Again 会再收取一份等额赌注并返回准备界面。玩家随后需要点击 Spin;在两步之间关闭菜单会损失刚收取的赌注。


猜大小(Higher or Lower)​

一个基于连胜的纸牌游戏。猜下一张牌比当前这张大还是小,逐步累积倍率。你可以随时兑现,也可以全押到底。

玩法​

  1. 抽出并展示一张牌(数值范围为 2 到 14,其中 A = 14)。
  2. 猜下一张牌会比当前这张更大还是更小。
  3. 如果猜对,你的倍率会提升,被翻开的牌成为新的当前牌。
  4. 在至少猜对一次之后,你可以随时兑现(Cash Out)。
  5. 如果猜错,你会失去全部下注。
  6. 如果下一张牌与当前牌相等,同样算作落败。

连胜倍率​

每猜对一次,你的奖金就会乘上所配置的倍率(默认 1.3x)。该倍率会叠乘:

连胜倍率(默认)100 精英币下注的赔付
11.3x130
21.69x169
32.197x219.7
42.856x285.6
53.713x371.3
.........
12~23.3x~2,330

最大连胜与自动兑现​

最大连胜为 12。当玩家猜对 12 次时,会被自动兑现并领取奖金。这可以防止倍率失控。

关闭菜单​

如果玩家在拥有连胜的情况下关闭菜单,会被自动兑现并获得当前奖金。如果在做出任何猜测之前就关闭,下注将被没收。


下注​

在任何游戏开始之前,玩家都会看到一个下注菜单,用来选择自己的赌注。

下注限额​

设置默认值
最低下注10

没有可配置的最高下注。菜单使用整数精英币赌注;全押(All In) 将余额与可用信用额度相加后舍去小数部分。

minBet 决定重置金额和减少按钮的下限。初始金额为 max(minBet, 10)。它不是通用交易限制:全押可以设置低于 minBet 的正数金额,只要付得起,当前的开始按钮就会接受。不要依赖此设置在所有操作中强制最低下注额。

下注菜单控件​

下注菜单提供若干控件:

  • 增减按钮 —— 提供三种幅度。余额至少为 100 且无欠债时,使用余额的 5%、10%、25%,舍去小数且至少为 1。否则使用固定的 10、50、100。
  • 全押(All In) —— 把下注设为玩家付得起的最大值(包括可用信用额度)。
  • 重置(Reset) —— 把下注重置为最低值。
  • 开始(Play) —— 以当前下注开始游戏。只有在玩家付得起该下注时才可点击。
  • 取消(Cancel) —— 不下注并关闭菜单。

菜单显示当前余额。欠债为正时才显示欠债和可用信用额度两行,但没有欠债的玩家也能使用信用额度。


欠债系统​

玩家可以通过欠债押上超过自身余额的金额。赌场会提供一个固定上限内的信用额度。

欠债如何运作​

  1. 当玩家下注超过其余额时,超出的部分会被记为赌债。
  2. 玩家能累积的最大欠债为 500 精英币。这是硬编码的,无法配置。
  3. 玩家不能下注到会让欠债超过上限的程度。
  4. 玩家获胜时,奖金会先用于偿还欠债,剩余部分才计入余额。通过 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,不会追溯弹射物发射者或之后的环境死亡。
管理器超时移除讨债人并发送警告。以后某次周期性检查中,若玩家仍符合条件且随机判定成功,可能再次生成。

赌场老板​

赌场老板在头顶以悬浮文字显示庄家收益(House Earnings)。数值为记录的赌注减去赔付,包含借债支付的赌注。它不是独立银行余额,也不是已经从欠债者处收回的现金总额。

  • 正收益以绿色显示(例如 +1234.56)。
  • 负收益(玩家赢的比输的多)以红色显示(例如 -567.89)。
  • 该展示每秒更新一次。
  • 庄家收益会被持久化保存到 house_earnings.yml,可在服务器重启后保留。

配置​

所有赌博设置都存放在 GamblingSettings.yml 中。下面是影响玩法的关键设置。

通用设置​

键说明默认值
gamblingEnabled启用或关闭整个赌博系统。关闭时,赌博 NPC 将不起作用,讨债人也不会生成。true
minBet重置金额及减少按钮的下限;请参阅上文全押的限制。10

注意:最大欠债(500.0)是硬编码的,无法配置。

加载器要求 minBet、讨债人检查间隔和超时为正整数;概率必须是 0 到 1 之间的有限值。赔付倍率和死亡减债额必须有限且非负。无效值会产生警告,并在已加载的配置中被替换为默认值。

赔付倍率​

键说明默认值
payouts.blackjack.normal21 点普通获胜的赔付倍率。2.0
payouts.blackjack.blackjack拿到天生 21 点(前两张牌即 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 从符号权重自动计算得出:

符号权重三连赔付二连赔付
Cherry352.86x0.71x
Lemon283.57x0.89x
Orange205.0x1.25x
Bell1010.0x2.50x
Bar520.0x5.00x
Lucky 7250.0x12.50x

GamblingSettings.yml 中完全不存在 payouts.slots.* 这类键——该文件里唯一与老虎机相关的条目是 slots.* 界面文本(按钮名称、标签、结果标题)。赔付始终由硬编码的符号权重推导而来。

讨债人设置​

键说明默认值
debtCollector.spawnChance每次检查时讨债人生成的几率(0.0 到 1.0)。0.5
debtCollector.checkIntervalMinutes每隔多久(分钟)检查一次是否应为欠债玩家生成讨债人。60
debtCollector.timeoutSeconds讨债人在未被击杀的情况下多久(秒)后消失。600
debtCollector.debtReductionOnPlayerDeath讨债人击杀玩家时减少的欠债金额。50.0

经济安全性​

赌注在打开游戏前扣除。抛硬币和老虎机在结果动画前结算;猜大小在每次动画前记录猜测,兑现时付款。21 点在庄家抽牌结束后结算,若在庄家回合关闭菜单,则立即完成该手牌。赔付四舍五入到两位小数,并包含原始赌注。共用结果处理器防止同一笔待结算赔付重复发放。

玩家断线导致背包关闭时,也适用上述关闭菜单规则。这些保护并不能让未完成的游戏在服务器崩溃或插件关闭后恢复;请避免在游戏进行中重启。