赌博系统
赌博系统为 EliteMobs 添加了一个功能齐全的赌场。玩家可以用他们的精英硬币在四种不同的小游戏中下注,在没钱时可以欠债,并在讨债人上门时面对后果。服务器管理员可以配置系统的各个方面,从赔率倍数到债务限额。
设置
赌博系统通过特殊配置的 NPC 访问。每个游戏和显示都有自己的 NPC 互动类型。
要设置赌博 NPC,创建一个 NPC 配置文件并将 interactionType 设置为以下值之一:
| 互动类型 | 描述 |
|---|---|
GAMBLING_BLACKJACK | 打开二十一点的下注菜单 |
GAMBLING_COINFLIP | 打开抛硬币的下注菜单 |
GAMBLING_SLOTS | 打开老虎机的下注菜单 |
GAMBLING_HIGHERLOWER | 打开高低牌的下注菜单 |
赌场老板 NPC 不使用特殊的互动类型。要设置它,创建一个文件名为 gambling_den_owner.yml 的 NPC。庄家收益显示将根据此文件名自动出现在 NPC 头顶。
游戏
二十一点
适用标准二十一点规则。目标是尽可能接近 21 点而不爆牌。
规则
- 玩家和庄家各发两张牌。
- 庄家的第二张牌在玩家停牌前隐藏。
- A 算作 11 或 1(在可能的情况下自动调整以防止爆牌)。
- 面牌(J、Q、K)算作 10。
- 庄家在 17 点时停牌。
- 玩家最多可持有 5 张牌。
操作
| 操作 | 描述 |
|---|---|
| 要牌 | 抽取另一张牌。 |
| 停牌 | 保留当前的牌;然后庄家开始游戏。 |
| 加倍下注 | 将赌注加倍,抽取一张牌,然后自动停牌。仅在首次操作时可用(有 2 张牌时),并且只有在您有足够的钱加倍赌注时可用。 |
赔率
| 结果 | 默认倍数 |
|---|---|
| 普通胜利(玩家点数超过庄家,或庄家爆牌) | 2.0x |
| 二十一点(前两张牌为 21) | 2.5x |
| 平局 | 1.0x(返还赌注) |
| 失败(玩家爆牌或庄家点数更高) | 0x(失去赌注) |
关闭菜单
如果玩家在庄家回合期间关闭菜单,庄家的牌将自动打出并解决结果。如果玩家在停牌前关闭菜单,则赌注将被没收。
抛硬币
简单的 50/50 游戏。选择正面或反面,硬币决定你的命运。
如何玩
- 游戏开启时有正面按钮和反面按钮。
- 点击一个来做出选择。
- 播放抛硬币动画。
- 显示结果。
赔率
| 结果 | 默认倍数 |
|---|---|
| 猜对 | 1.9x |
| 立起(硬币立在边缘上) | 10.0x |
| 猜错 | 0x(失去赌注) |
立起结果
硬币有 1% 的几率立在边缘上而不是正面或反面。当这种情况发生时,无论玩家选择什么,玩家总是获胜,并获得赌注的 10 倍赔付。这个罕见事件会显示特殊的聊天消息和视觉效果。
关闭菜单
如果玩家在做出选择前关闭菜单,则赌注将被没收。
老虎机
旋转三个转轮并匹配符号以获胜。越稀有的符号赔付越多。
如何玩
- 游戏开启时有 3x3 转轮网格和旋转按钮。
- 点击旋转开始转轮。
- 每个转轮依次停止并带有动画。
- 中间行(赔付线)决定结果。
符号和赔率
每个符号都有一个权重,决定它出现的频率。匹配三个符号的赔率倍数计算为 100 / 权重。匹配两个符号支付该符号三个匹配赔付的 25%。
| 符号 | 权重 | 几率 | 3 个匹配赔付 | 2 个匹配赔付 |
|---|---|---|---|---|
| 樱桃 | 35 | 35% | 2.86x | 0.71x |
| 柠檬 | 28 | 28% | 3.57x | 0.89x |
| 橙子 | 20 | 20% | 5.0x | 1.25x |
| 金铃铛 | 10 | 10% | 10.0x | 2.5x |
| 银条 | 5 | 5% | 20.0x | 5.0x |
| 幸运 7 | 2 | 2% | 50.0x | 12.5x |
三个幸运 7 是大奖,会收到特殊的视觉和声音效果。
关闭菜单
如果玩家在旋转前关闭菜单,则赌注将被没收。
高低牌
基于连胜的纸牌游戏。猜测下一张牌是高于还是低于当前牌,并积累倍数。随时兑现或冒险全押。
如何玩
- 抽取并显示一张牌(值范围从 2 到 14,其中 A = 14)。
- 猜测下一张牌将高于还是低于当前牌。
- 如果你猜对了,你的倍数会增加,显示的牌成为新的当前牌。
- 在至少一次猜对后,你可以随时兑现。
- 如果你猜错了,你会失去全部赌注。
- 如果下一张牌等于当前牌,则算作失败。
连胜倍数
每次猜对都会将你的奖金乘以配置的倍数(默认 1.5x)。倍数是叠加的:
| 连胜 | 倍数(默认) | 100 硬币赌注的赔付 |
|---|---|---|
| 1 | 1.5x | 150 |
| 2 | 2.25x | 225 |
| 3 | 3.375x | 337.5 |
| 4 | 5.0625x | 506.25 |
| 5 | 7.59x | 759 |
| ... | ... | ... |
| 12 | ~129.75x | ~12,975 |
最大连胜和自动兑现
最大连胜为 12。当玩家达到 12 次正确猜测时,他们会自动兑现并获得奖金。这可以防止失控的倍数。
关闭菜单
如果玩家在有连胜时关闭菜单,他们会自动兑现并获得当前奖金。如果他们在做出任何猜测前关闭,则赌注将被没收。
下注
在任何游戏开始前,玩家会看到一个下注菜单来选择他们的赌注。
赌注限制
| 设置 | 默认值 |
|---|---|
| 最小赌注 | 10 |
| 最大赌注 | 1000 |
下注菜单控制
下注菜单提供几个控制:
- 增量按钮 -- 三种大小的增加和减少按钮。如果玩家至少有 100 硬币且没有债务,则增量基于百分比(余额的 5%、10%、25%)。否则,使用固定金额 10、50 和 100。
- 全押 -- 将赌注设置为玩家能承受的最大值(包括可用信用额度)。
- 重置 -- 将赌注重置为最小值。
- 游戏 -- 以当前赌注开始游戏。仅在玩家能承受赌注时激活。
- 取消 -- 关闭菜单而不下注。
菜单显示玩家当前余额、任何现有债务和可用信用额度。
债务系统
玩家可以通过欠债来下注超过余额的金额。赌场扩展信用额度至可配置的限额。
债务如何运作
- 当玩家下注超过其余额时,剩余金额将作为赌博债务添加。
- 玩家可以累积的最大债务默认为 500 硬币。
- 玩家无法下注会将其债务推高到最大值以上的赌注。
- 当玩家获胜时,他们的奖金首先用于偿还债务,然后才添加到余额中。
可用信用额度
玩家的可用信用额度计算为: 最大债务 - 当前债务。这在下注菜单中显示。
债务警告
当玩家欠债时,他们会收到警告消息。讨债人可能会在他们背负未偿债务时找上门来。
讨债人 Boss
讨债人是一个自定义 Boss,会生成来追捕欠赌债的玩家。
生成条件
- 玩家必须有未偿还的赌债。
- 每 60 分钟(可配置)对所有在线玩家进行一次定期检查。
- 每次检查有 50% 的几率(可配置)为符合条件的玩家生成讨债人。
- 每个玩家同时只能有一个讨债人激活。
- 讨债人使用自定义 Boss 文件
debt_collector.yml。
等级缩放
讨债人的等级基于目标玩家的战斗等级。其生命值乘以可配置的生命值倍数(默认 5.0x),伤害乘以伤害倍数(默认 1.0x)。
行为
- 讨债人在距离玩家 5 到 10 格的位置生成。
- 它立即锁定为其生成的玩家。
- 它有默认 600 秒(10 分钟)的超时时间。如果在该时间内未被杀死,它会消失并警告玩家它会回来。
结果
| 结果 | 效果 |
|---|---|
| 玩家击杀讨债人 | Boss 消失。玩家的债务不会减少,但他们会收到它将返回的消息。 |
| 讨债人击杀玩家 | 玩家的债务减少 50 硬币(可配置)。如果这完全清除了债务,则通知玩家。讨债人在 5 秒后消失。 |
| 超时(未在时间内击杀) | 讨债人消失并发送警告消息。它将在下次检查时尝试再次生成。 |
赌场老板
赌场老板是一个特殊的 NPC,在其头顶上方显示庄家收益作为浮动文本显示。这显示了庄家从所有赌博活动中累积的总利润或损失。
- 正收益以绿色显示(例如
+1234.56)。 - 负收益(玩家赢得多于输掉)以红色显示(例如
-567.89)。 - 显示每秒更新一次。
- 庄家收益保存到
house_earnings.yml并在服务器重启后保留。
配置
所有赌博设置都存储在 GamblingSettings.yml 中。以下是影响游戏玩法的关键设置。
常规设置
| 键 | 描述 | 默认值 |
|---|---|---|
gamblingEnabled | 启用或禁用整个赌博系统。禁用时,赌博 NPC 将不起作用,讨债人也不会生成。 | true |
maxDebt | 玩家从赌博可以累积的最大债务金额。 | 500.0 |
minBet | 所有赌博游戏的最小赌注金额。 | 10 |
maxBet | 所有赌博游戏的最大赌注金额。 | 1000 |
赔率倍数
| 键 | 描述 | 默认值 |
|---|---|---|
payouts.blackjack.normal | 普通二十一点胜利的赔率倍数。 | 2.0 |
payouts.blackjack.blackjack | 获得天然二十一点(前两张牌为 21)的赔率倍数。 | 2.5 |
payouts.coinFlip | 抛硬币获胜的赔率倍数。设置低于 2.0 可获得庄家优势(1.9 = 5% 庄家优势)。 | 1.9 |
payouts.higherLower.multiplier | 高低牌中每次正确猜测应用的倍数。倍数叠加。 | 1.5 |
老虎机赔率
老虎机赔率不可配置。它们根据符号权重使用公式 100 / 权重 自动计算:
| 符号 | 权重 | 3 个匹配赔付 | 2 个匹配赔付 |
|---|---|---|---|
| 樱桃 | 35 | 2.86x | 0.71x |
| 柠檬 | 28 | 3.57x | 0.89x |
| 橙子 | 20 | 5.0x | 1.25x |
| 铃铛 | 10 | 10.0x | 2.50x |
| 银条 | 5 | 20.0x | 5.00x |
| 幸运 7 | 2 | 50.0x | 12.50x |
GamblingSettings.yml 中存在 payouts.slots.* 键,但游戏逻辑不使用它们。实际赔率始终基于权重。
讨债人设置
| 键 | 描述 | 默认值 |
|---|---|---|
debtCollector.spawnChance | 每次检查时讨债人生成的几率(0.0 到 1.0)。 | 0.5 |
debtCollector.checkIntervalMinutes | 检查是否应为欠债玩家生成讨债人的间隔时间(以分钟为单位)。 | 60 |
debtCollector.timeoutSeconds | 如果未被击杀,讨债人消失前的时间(以秒为单位)。 | 600 |
debtCollector.healthMultiplier | 讨债人 Boss 的生命值倍数。 | 5.0 |
debtCollector.damageMultiplier | 讨债人 Boss 的伤害倍数。 | 1.0 |
debtCollector.debtReductionOnPlayerDeath | 当讨债人击杀玩家时减少的债务金额。 | 50.0 |
经济安全
赌博系统使用安全优先的交易模型。所有赌注都在任何视觉动画播放之前扣除并在财务上解决结果。这可以防止玩家在动画中途断开连接以避免损失或复制胜利的漏洞。如果玩家在动画期间或之后的任何时刻断开连接,他们的财务状态已经是正确的。