62 lines
1.9 KiB
Markdown
62 lines
1.9 KiB
Markdown
# 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`。
|