# 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`。