import cloud from '@lafjs/cloud'; import Utils from "@/Utils"; const db = cloud.database(); const level1 = [4, 5, 6, 7, 8]; const level2 = [9, 10]; const level3 = [11]; const DEFAULT_CAT_ARR = [1, 2, 3]; const FILM_CONSUME_TABLE = [5, 10, 25, 35, 55, 70, 100, 120]; /**猫咪抽卡 */ export default async function (ctx: FunctionContext) { const uid = ctx.body.uid; const dbname = ctx.body.gameName == "iaa" ? "usersAd" : "users"; const res = await db.collection(dbname).where({ _id: uid }).getOne(); if (!res.data) { return { code: 0, data: null, msg: "未获取到玩家信息" }; } if (res.data.token && !Utils.checkToken(ctx.body.token, res.data.token)) { return { code: 0, data: null, msg: "token校验失败" }; } let film = res.data.film; if (!film && film != 0) { film = res.data.levelAmount; } const catArr = Array.isArray(res.data.catArr) ? [...res.data.catArr] : [...DEFAULT_CAT_ARR]; const list1 = level1.filter(catId => !catArr.includes(catId)); const list2 = level2.filter(catId => !catArr.includes(catId)); const list3 = level3.filter(catId => !catArr.includes(catId)); const total = list1.length * 150 + list2.length * 50 + list3.length * 8; if (total == 0) { return { code: 0, data: null, msg: "已抽取所有猫咪" }; } const totalCount = level1.length + level2.length + level3.length; const ownedCount = totalCount - (list1.length + list2.length + list3.length); const filmCost = FILM_CONSUME_TABLE[Math.min(ownedCount, 7)]; film = Number(film) || 0; if (film < filmCost) { return { code: 0, data: { film, cost: filmCost }, msg: "代币不足,闯关获取更多代币!", }; } film -= filmCost; const weightRoll = Math.floor(Math.random() * total); let candidates; if (weightRoll < list1.length * 150) { candidates = list1; } else if (weightRoll < list1.length * 150 + list2.length * 50) { candidates = list2; } else { candidates = list3; } const reward = candidates[Math.floor(Math.random() * candidates.length)]; catArr.push(reward); await db.collection(dbname).where({ _id: uid }).update({ catArr, film }); return { code: 1, data: { catArr, reward, film }, msg: "成功", }; }