Repository navigation
好友德州 v0.7.0
新增抽水:管理员可以按房间设置每手从底池里抽走一部分娱乐筹码,进入管理员账户。默认不抽;不开启时行为与 v0.6.2 完全一致。
数据库、服务端、客户端三处都要更新,有先后顺序,见文末「升级须知」。本版同时包含 v0.6.1、v0.6.2 的修复(那两个版本没有单独发 Release)。
抽水规则
管理员在「服务器管理 → 抽水管理」里给每个开着的房间单独设置,房主不能改。
| 设置项 | 含义 |
|---|---|
| 开启抽水 | 总开关 |
| 比例 | 每手按底池的百分之几抽,0%~10%,步长 0.25% |
| 封顶筹码 | 比例部分最多抽多少;填 0 或留空为不封顶 |
| 翻后加抽 | 发出翻牌的手额外再抽一笔固定筹码,不受封顶限制,但不超过一个大盲 |
- 底池按标准规则计:没人跟注而退回的筹码不算。
- 比例部分向下取整后再封顶,翻后加抽另加,一手最多抽「封顶 + 加抽」。
- 「发出翻牌」按手结束时公共牌不少于 3 张判断,翻牌前全下后补发的牌面也算。底池不足两个大盲的手不加抽,因此抽水永远小于底池。
- 一手只抽一次,发两次也一样。有边池时按各池大小分摊:短码全下的人只承担主池那一份,不会替边池付抽水。
- 修改从下一手起生效;进行中的一手(包括服务端重启后恢复出来的)按开局时的规则结算。
- 看牌费不抽水。
向下取整不会丢筹码:守恒校验从「各人输赢之和为 0」改为「各人输赢之和 + 本手抽水 = 0」,在规则引擎、牌谱入库和钱包事务三处同时校验;抽水入管理员钱包与该手结算在同一个数据库事务里完成,管理员账户每手多一条「牌桌抽水」流水。
玩家看到什么
- 规则一变,房间文字聊天里出现一条系统公告,写明比例、封顶、加抽与「下一手起生效」。公告伪造不了,也不受屏蔽名单影响。
- 牌桌信息栏常驻显示当前规则;输入房间码后的带入窗口里也写明,进房间之前就能知道。
- 每手结算写明「本手抽水 X」,「最近牌局」里同样标出。
管理员看到什么
- 「抽水管理」页:开着的房间及各自规则,按房间的累计抽水(含已关闭的房间)与合计。可填「多少元 = 多少筹码」做换算——与房间战绩一样只在本机计算,服务端不存储也不传输任何金额。
- 每次修改规则记入审计。
- 管理员账号不能再创建或加入牌桌,想打牌请另注册普通账号。抽水打进最早创建的、状态正常的管理员钱包;这位管理员自己还在某个房间里时,那个房间不抽。
同时包含的修复(v0.6.1 / v0.6.2)
- 弃牌后中途离开、或同一房间反复进出,会丢失桌上筹码。
- 自动准备倒计时到点的瞬间有人离开,会造出「幽灵座位」,此后该房间每手结算失败、输赢不入账(表现为「点了弃牌没反应」)。现在上一手没入账就不开下一手,结算失败写 Error 日志并向全桌广播。
升级须知
- 升级前,管理员账号先离开所有房间。
- 备份后先跑数据库迁移
000012_rake,再启动新服务端。 一旦产生了抽水流水,这个迁移就不能回滚(账本不可变)。 - 更新服务端并重启。不开抽水时,旧客户端一切照常。
- 把服务器上的对账脚本换成新版:
sudo cp deploy/backup/texas-verify.sql /opt/texas/bin/。旧版会把每一手抽过水的牌都报成不平衡。 - 分发 0.7.0 客户端。在所有人装好、并把「最低客户端版本」填成
7000之前,不要给任何房间开抽水:旧客户端不显示「本手抽水」,也不认识系统公告。 - 建议先在一个自己人的房间里开抽水,按
docs/ACCEPTANCE_GUIDE.md的 I-4 走一遍并跑一次对账,再给正式房间开。
接口与协议变化
- 新增
GET /v1/admin/rooms、POST /v1/admin/rooms/{roomID}/rake(五个字段必须传齐)、GET /v1/admin/rake。 - 结算
settlement增加rake、rakeBase(仅本手有抽水时出现);快照顶层与GET /v1/rooms/preview增加rake;最近牌局每手增加rake。 - 聊天消息增加
kind=system,只由服务端发出。 - 新错误码:
admin_cannot_play(403)、invalid_rake_settings(400)。
已知边界
- 抽水只打给一位管理员;多位管理员之间如何分配不在系统内处理。
- 累计按房间汇总;更细的口径可直接查
bankroll_entries中reason = 'rake'的流水。 - 牌桌信息栏显示的是房间当前规则(下一手起适用);管理员在一手中途改规则时,以聊天公告与该手结算写明的数额为准。
完整说明见 docs/releases/v0.7.0.md,给玩家的版本见 docs/releases/v0.7.0-players.md。本 Release 仅提供源码,请使用自己的服务地址、TRTC 配置和平台签名构建。