91 lines
3.5 KiB
TypeScript
91 lines
3.5 KiB
TypeScript
import cloud from "@lafjs/cloud";
|
|
import Utils from "@/Utils";
|
|
import { WEEKLY_REWARDS } from "@/dailyTaskConfig";
|
|
import { refreshTaskData } from "@/dailyTaskService";
|
|
|
|
const db = cloud.database();
|
|
|
|
export default async function (ctx: FunctionContext) {
|
|
const body = ctx.body || {};
|
|
const uid = body.uid;
|
|
if (!uid) return { code: 0, data: null, msg: "未获取到uid" };
|
|
|
|
const dbname = body.gameName === "iaa" ? "usersAd" : "users";
|
|
const result = await db.collection(dbname).where({ _id: uid }).getOne();
|
|
const user = result.data;
|
|
if (!user) return { code: 0, data: null, msg: "未获取到用户信息" };
|
|
if (user.token && !Utils.checkToken(body.token, user.token)) {
|
|
return { code: 0, data: null, msg: "token校验失败" };
|
|
}
|
|
if (user.isDebug !== true && user.isDebug !== "true") {
|
|
return { code: 403, data: null, msg: "仅调试账号可调用" };
|
|
}
|
|
const debugKey = process.env.DAILY_TASK_DEBUG_KEY;
|
|
if (!debugKey || body.debugKey !== debugKey) {
|
|
return { code: 403, data: null, msg: "调试密钥校验失败" };
|
|
}
|
|
|
|
const level = Number(user.levelAmount) + 1 || 1;
|
|
let task = refreshTaskData(user.task, uid, level).data;
|
|
const action = String(body.action || "");
|
|
|
|
if (action === "set_daily_progress" || action === "complete_daily") {
|
|
const dailyTask = findDailyTask(task.dailyTasks, body.taskId, body.slot);
|
|
if (!dailyTask) return { code: 0, data: { task }, msg: "未找到指定每日任务" };
|
|
const value = action === "complete_daily" ? dailyTask.target : Number(body.value);
|
|
if (!Number.isFinite(value)) return { code: 0, data: { task }, msg: "value必须是数字" };
|
|
dailyTask.value = Math.max(0, Math.min(dailyTask.target, value));
|
|
if (dailyTask.state !== 2) dailyTask.state = dailyTask.value >= dailyTask.target ? 1 : 0;
|
|
}
|
|
else if (action === "complete_all_daily") {
|
|
task.dailyTasks.forEach(dailyTask => {
|
|
if (dailyTask.state === 2) return;
|
|
dailyTask.value = dailyTask.target;
|
|
dailyTask.state = 1;
|
|
});
|
|
}
|
|
else if (action === "set_weekly_stars" || action === "add_weekly_stars") {
|
|
const value = Number(body.value);
|
|
if (!Number.isFinite(value)) return { code: 0, data: { task }, msg: "value必须是数字" };
|
|
const stars = action === "add_weekly_stars" ? task.weeklyStars + value : value;
|
|
task.weeklyStars = Math.max(0, Math.min(140, stars));
|
|
}
|
|
else if (action === "reset_daily") {
|
|
task.dayKey = "";
|
|
task = refreshTaskData(task, uid, level).data;
|
|
}
|
|
else if (action === "reset_weekly") {
|
|
task.weeklyStars = 0;
|
|
task.weeklyRewards = cloneWeeklyRewards();
|
|
}
|
|
else if (action === "reset_all") {
|
|
task.dayKey = "";
|
|
task.weekKey = "";
|
|
task = refreshTaskData(task, uid, level).data;
|
|
}
|
|
else {
|
|
return { code: 0, data: { task }, msg: "不支持的调试操作" };
|
|
}
|
|
|
|
task = refreshTaskData(task, uid, level).data;
|
|
await db.collection(dbname).where({ _id: uid }).update({
|
|
task: JSON.stringify(task),
|
|
taskTime: Date.now(),
|
|
});
|
|
return { code: 1, data: { task }, msg: "调试任务数据更新成功" };
|
|
}
|
|
|
|
function findDailyTask(tasks: any[], taskId: unknown, slot: unknown) {
|
|
if (taskId != null && taskId !== "") return tasks.find(task => task.taskId === String(taskId));
|
|
const slotNumber = Number(slot);
|
|
return Number.isInteger(slotNumber) ? tasks.find(task => task.slot === slotNumber) : null;
|
|
}
|
|
|
|
function cloneWeeklyRewards() {
|
|
return WEEKLY_REWARDS.map(reward => ({
|
|
...reward,
|
|
state: 0 as const,
|
|
rewards: reward.rewards.map(item => ({ ...item })),
|
|
}));
|
|
}
|