MatchMaster/docs/superpowers/specs/2026-07-24-draw-cat-design.md
2026-07-30 12:22:02 +08:00

62 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# drawCat 抽猫云函数设计
## 目标
新增独立的 `drawCat` 云函数,使用玩家的 `catArr` 记录已拥有猫咪。它仿照 `drawHead` 的鉴权、权重抽取、代币扣除和返回结构,但不修改现有头像抽取功能。
## 接口
请求参数:
- `uid`:玩家 ID。
- `token`:登录 token。
- `gameName`:可选;值为 `iaa` 时使用 `usersAd`,否则使用 `users`
成功返回:
```ts
{
code: 1,
data: {
catArr: number[],
reward: number,
film: number
},
msg: "成功"
}
```
## 卡池与权重
- 普通猫咪:`4、5、6、7、8`,每只权重 `150`
- 稀有猫咪:`9、10`,每只权重 `50`
- 最高稀有猫咪:`11`,权重 `8`
- 玩家已拥有的猫咪从当次抽取候选中移除。
- 抽到任何猫咪时都只追加本次抽中的一个 ID抽到 `11` 不赠送其他剩余猫咪。
- `catArr` 缺失时按 `[1, 2, 3]` 处理。
- 卡池全部收集完成后返回“已抽取所有猫咪”,不扣除代币。
## 代币消耗
- 使用用户的 `film` 字段。
- `film` 缺失时沿用 `drawHead` 行为,以 `levelAmount` 作为兼容值。
- 按本期已收集数量使用阶梯消耗:`5、10、25、35、55、70、100、120`。
- 余额不足时返回当前 `film` 和本次 `cost`,不修改数据库。
- 抽取成功后一次写回 `{ catArr, film }`
## 校验与错误处理
- 用户不存在时返回“未获取到玩家信息”。
- 数据库用户存在 token 时必须通过现有 token 校验。
- 不接受客户端指定卡池、权重、奖励或扣费金额。
## 验证
- 验证云函数配置名为 `drawCat`
- 验证普通、稀有和最高稀有权重区间。
- 验证已拥有猫咪不会再次抽中。
- 验证抽到 `11` 只增加 `11`
- 验证阶梯扣费和余额不足行为。
- 验证全部收集完成时不扣费。
- 验证 `gameName: "iaa"` 路由到 `usersAd`