赌博系统
赌博系统为 EliteMobs 加入了一座功能完备的赌场。玩家可以在四种不同的小游戏中押上自己的精英币,在钱花光后欠下债务,并在讨债人上门时承担后果。服务器管理员可以配置该系统的每一个方面,从赔付倍率到欠债上限。
设置
赌博系统通过专门配置的 NPC 来访问。每种游戏和每种展示都有自己的 NPC 交互类型。
要设置一个赌博 NPC,请创建一个 NPC 配置文件,并把 interactionType 设为以下值之一:
| 交互类型 | 说明 |
|---|---|
GAMBLING_BLACKJACK | 打开 21 点的下注菜单 |
GAMBLING_COINFLIP | 打开抛硬币的下注菜单 |
GAMBLING_SLOTS | 打开老虎机的下注菜单 |
GAMBLING_HIGHERLOWER | 打开猜大小的下注菜单 |
赌场老板 NPC 不使用特殊的交互类型。要设置它,请创建一个文件名为 gambling_den_owner.yml 的 NPC。庄家收益展示会根据该文件名自动出现在该 NPC 的头顶。
游戏
21 点(Blackjack)
采用标准 21 点规则。目标是让点数尽可能接近 21 点但不超过。
规则
- 玩家和庄家各发两张牌。
- 庄家的第二张牌在玩家停牌之前一直是暗牌。
- A 算 11 点或 1 点(在可能的情况下会自动调整以避免爆牌)。
- 花牌(J、Q、K)算 10 点。
- 庄家在 17 点停牌。
- 玩家最多可持有 5 张牌。
操作
| 操作 | 说明 |
|---|---|
| 要牌(Hit) | 再抽一张牌。 |
| 停牌(Stand) | 保留当前手牌;随后由庄家行动。 |
| 加倍(Double Down) | 将下注翻倍,只抽一张牌,然后自动停牌。仅在你的第一次操作时可用(也就是你只有 2 张牌时),并且只有在你付得起翻倍后的下注时才可用。 |
赔付
| 结果 | 默认倍率 |
|---|---|
| 普通获胜(玩家点数高于庄家,或庄家爆牌) | 2.0x |
| 21 点(前两张牌即为 21 点) | 2.5x |
| 平局(Push) | 1.0x(返还下注) |
| 落败(玩家爆牌或庄家点数更高) | 0x(下注亏掉) |
关闭菜单
如果玩家在庄家回合期间关闭菜单,庄家的手牌会自动打完并结算结果。如果玩家在停牌之前关闭菜单,下注将被没收。
抛硬币(Coin Flip)
一个简单的 50/50 游戏。选择正面或反面,硬币决定你的命运。
玩法
- 游戏开始时会出现一个"正面"按钮和一个"反面"按钮。
- 点击其中一个做出选择。
- 播放抛硬币动画。
- 显示结果。
赔付
| 结果 | 默认倍率 |
|---|---|
| 猜对 | 1.9x |
| 立起(硬币立在边上) | 5.0x |
| 猜错 | 0x(下注亏掉) |
立起结果
硬币有 1% 的几率立在边上,而不是正面或反面。发生这种情况时,无论玩家选了什么都必定获胜,并且会获得下注额的 5 倍赔付。这一稀有事件会伴随特殊的聊天消息和视觉展示。
关闭菜单
如果玩家在做出选择之前关闭菜单,下注将被没收。
老虎机(Slot Machine)
转动三个转轮,凑齐符号即可获胜。越稀有的符号赔得越多。
玩法
- 游戏开始时会出现一个 3x3 的转轮网格和一个"转动"按钮。
- 点击"转动"启动转轮。
- 每个转轮会依次伴随动画停下。
- 中间一行(赔付线)决定结果。
符号与赔付
每个符号都有一个权重,决定它出现的频率。凑齐三个同一符号的赔付倍率按 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 就是头奖(Jackpot),会附带特殊的视觉和音效。
关闭菜单
如果玩家在转动之前关闭菜单,下注将被没收。
猜大小(Higher or Lower)
一个基于连胜的纸牌游戏。猜下一张牌比当前这张大还是小,逐步累积倍率。你可以随时兑现,也可以全押到底。
玩法
- 抽出并展示一张牌(数值范围为 2 到 14,其中 A = 14)。
- 猜下一张牌会比当前这张更大还是更小。
- 如果猜对,你的倍率会提升,被翻开的牌成为新的当前牌。
- 在至少猜对一次之后,你可以随时兑现(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 次时,会被自动兑现并领取奖金。这可以防止倍率失控。
关闭菜单
如果玩家在拥有连胜的情况下关闭菜单,会被自动兑现并获得当前奖金。如果在做出任何猜测之前就关闭,下注将被没收。
下注
在任何游戏开始之前,玩家都会看到一个下注菜单,用来选择自己的赌注。
下注限额
| 设置 | 默认值 |
|---|---|
| 最低下注 | 10 |
没有可配置的最高下注。玩家可以押上自己付得起的任意金额(包括来自欠债系统的信用额度)。
下注菜单控件
下注菜单提供若干控件:
- 增减按钮 —— 三种幅度的增加和减少按钮。如果玩家至少有 100 精英币且没有欠债,则增减幅度按百分比计算(余额的 5%、10%、25%)。否则使用 10、50 和 100 的固定金额。
- 全押(All In) —— 把下注设为玩家付得起的最大值(包括可用信用额度)。
- 重置(Reset) —— 把下注重置为最低值。
- 开始(Play) —— 以当前下注开始游戏。只有在玩家付得起该下注时才可点击。
- 取消(Cancel) —— 不下注并关闭菜单。
菜单会显示玩家的当前余额、现有欠债以及可用信用额度。
欠债系统
玩家可以通过欠债押上超过自身余额的金额。赌场会提供一个固定上限内的信用额度。
欠债如何运作
- 当玩家下注超过其余额时,超出的部分会被记为赌债。
- 玩家能累积的最大欠债为 500 精英币。这是硬编码的,无法配置。
- 玩家不能下注到会让欠债超过上限的程度。
- 玩家获胜时,奖金会先用于偿还欠债,之后剩余部分才会计入余额。
可用信用额度
玩家的可用信用额度按 maxDebt - currentDebt 计算。它会显示在下注菜单中。
欠债警告
玩家欠下债务时会收到一条警告消息。只要还背着未清的欠债,讨债人就可能会来找他。
讨债人 Boss
讨债人是一个自定义 Boss,会生成出来追杀那些背着赌债的玩家。
生成条件
- 玩家必须有未清的赌债。
- 有一个周期性检查每 60 分钟(可配置)对所有在线玩家运行一次。
- 每次检查都有 50% 的几率(可配置)为符合条件的玩家生成讨债人。
- 每名玩家同一时间只能有一个处于活动状态的讨债人。
- 讨债人使用自定义 Boss 文件
debt_collector.yml。
等级缩放
讨债人的等级基于目标玩家的战斗等级。它的属性(生命值、伤害等)由 debt_collector.yml 自定义 Boss 配置文件决定,遵循与 EliteMobs 中任何其他自定义 Boss 相同的规则。
行为
- 讨债人会在距离玩家 5 到 10 格的位置生成。
- 它会立即锁定它被生成来针对的那名玩家。
- 它默认有 600 秒(10 分钟)的超时。如果在此时间内未被击杀,它就会消失,并警告玩家它会再来。
结果
| 结果 | 效果 |
|---|---|
| 玩家击杀讨债人 | Boss 消失。玩家的欠债不会减少,但会收到一条消息说它还会回来。 |
| 讨债人击杀玩家 | 玩家的欠债减少 50 精英币(可配置)。如果这样就把欠债彻底清空,会通知玩家。讨债人会在 5 秒后消失。 |
| 超时(未及时被击杀) | 讨债人消失并发送一条警告消息。它会在下一次检查时尝试再次生成。 |
赌场老板
赌场老板是一个特殊 NPC,会以悬浮文字展示的形式在头顶显示庄家收益(House Earnings)。它展示的是庄家从所有赌博活动中累积的总盈亏。
- 正收益以绿色显示(例如
+1234.56)。 - 负收益(玩家赢的比输的多)以红色显示(例如
-567.89)。 - 该展示每秒更新一次。
- 庄家收益会被持久化保存到
house_earnings.yml,可在服务器重启后保留。
配置
所有赌博设置都存放在 GamblingSettings.yml 中。下面是影响玩法的关键设置。
通用设置
| 键 | 说明 | 默认值 |
|---|---|---|
gamblingEnabled | 启用或关闭整个赌博系统。关闭时,赌博 NPC 将不起作用,讨债人也不会生成。 | true |
minBet | 所有赌博游戏的最低下注金额。 | 10 |
注意:最大欠债(500.0)是硬编码的,无法配置。
赔付倍率
| 键 | 说明 | 默认值 |
|---|---|---|
payouts.blackjack.normal | 21 点普通获胜的赔付倍率。 | 2.0 |
payouts.blackjack.blackjack | 拿到天生 21 点(前两张牌即 21 点)的赔付倍率。 | 2.5 |
payouts.coinFlip | 抛硬币获胜的赔付倍率。设为低于 2.0 即产生庄家优势(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 |
老虎机赔付
老虎机赔付不可配置。它们会用公式 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.* 界面文本(按钮名称、标签、结果标题)。赔付始终由硬编码的符号权重推导而来。
讨债人设置
| 键 | 说明 | 默认值 |
|---|---|---|
debtCollector.spawnChance | 每次检查时讨债人生成的几率(0.0 到 1.0)。 | 0.5 |
debtCollector.checkIntervalMinutes | 每隔多久(分钟)检查一次是否应为欠债玩家生成讨债人。 | 60 |
debtCollector.timeoutSeconds | 讨债人在未被击杀的情况下多久(秒)后消失。 | 600 |
debtCollector.debtReductionOnPlayerDeath | 讨债人击杀玩家时减少的欠债金额。 | 50.0 |
经济安全性
赌博系统采用安全优先的事务模型。所有下注的扣款以及结果的资金结算都在任何视觉动画播放之前完成。这可以防止玩家在动画播放途中断线来逃避亏损或复制赢利的漏洞。无论玩家在动画期间还是之后的任何时刻断线,其资金状态都已经是正确的。