Skip to content

0.7.0

Latest

Choose a tag to compare

@wm-develop wm-develop released this 20 Sep 10:15
· 10 commits to main since this release

好友德州 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 日志并向全桌广播。

升级须知

  1. 升级前,管理员账号先离开所有房间。
  2. 备份后先跑数据库迁移 000012_rake,再启动新服务端。 一旦产生了抽水流水,这个迁移就不能回滚(账本不可变)。
  3. 更新服务端并重启。不开抽水时,旧客户端一切照常。
  4. 把服务器上的对账脚本换成新版:sudo cp deploy/backup/texas-verify.sql /opt/texas/bin/。旧版会把每一手抽过水的牌都报成不平衡。
  5. 分发 0.7.0 客户端。在所有人装好、并把「最低客户端版本」填成 7000 之前,不要给任何房间开抽水:旧客户端不显示「本手抽水」,也不认识系统公告。
  6. 建议先在一个自己人的房间里开抽水,按 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 配置和平台签名构建。