HJ_Server/src/api_s2c/event/zhanling/ApiOpen.ts
xichaoyin e469ed0b6a fix:
追杀令无限刷bug修复
2024-01-08 13:49:25 +08:00

87 lines
3.2 KiB
TypeScript

import { ApiCall } from "tsrpc";
import { ZhanLingTasks } from '../../../public/zhanling';
import { ReqOpen, ResOpen } from "../../../shared/protocols/event/zhanling/PtlOpen";
import { player } from '../../../shared/protocols/user/type';
import { PublicShared } from '../../../shared/public/public';
import { PayFun } from "../../../public/pay";
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
call.error(lng.huodong_open_1)
let zls = await G.mongodb.collection('scheduler').findOne({ type: 'zhanling' });
let data = await G.mongodb.cEvent('zhanling').findOne({ uid: call.uid, type: 'zhanling' });
if (!data || data.round != (zls?.round || 0)) {
let set = {
lv: 1,
exp: 0,
rec: {},
isPay: false,
taskRec: [],
round: zls?.round || 0,
reWeekTime: G.time,
refreshTime: G.time,
}
await PayFun.delPayLog(
call.uid, { payId: G.gc.zhanling.payId, val: [] }
);
data = (await G.mongodb.cEvent('zhanling').findOneAndUpdate({
uid: call.uid,
type: 'zhanling'
}, { $set: set }, { upsert: true, returnDocument: 'after' })).value;
}
if (PublicShared.getToWeekMondayZeroTime() > data.reWeekTime || PublicShared.getToDayZeroTime() > data.refreshTime) {
let set: any = { taskRec: [] };
let reType = [];
if (PublicShared.getToWeekMondayZeroTime() > data.reWeekTime) {
set.reWeekTime = G.time;
reType.push("week");
}
if (PublicShared.getToDayZeroTime() > data.refreshTime) {
set.refreshTime = G.time;
reType.push("day")
}
for (let idx of data.taskRec) {
if (reType && reType.indexOf(G.gc.zhanling.task[idx].type) == -1) {
set.taskRec.push(idx);
}
}
data = (await G.mongodb.cEvent('zhanling').findOneAndUpdate({
uid: call.uid,
type: 'zhanling'
}, { $set: set }, { upsert: true, returnDocument: 'after' })).value;
}
let tasks = G.gc.zhanling.task.map(t => {
return { type: t.type as 'day' | 'week' | 'round', key: t.taskId };
});
let taskFinished = await ZhanLingTasks.getLog(call.uid, tasks);
let result: { rec: {}; isPay: boolean; taskRec: any[]; taskFinished: k_v<number>; refreshTime: number; lv: number; exp: number, nextRoundTime: number } = {
...data,
taskFinished: taskFinished,
nextRoundTime: PublicShared.getToDayZeroTime(zls?.lastRunTime || PublicShared.getToDayZeroTime(G.openTime)) + 86400 * G.gc.zhanling.eventOpen.day
}
call.succ(result);
}
export async function payZhanLing(player: player) {
let zlData = await G.mongodb.cEvent('zhanling').findOne({ uid: player.uid, type: 'zhanling' });
let curLv = zlData?.lv || 1;
let maxLv = Number(Object.keys(G.gc.zhanling.lv).slice(-1)[0]);
let addLv = maxLv - curLv >= G.gc.zhanling.payAddLv ? G.gc.zhanling.payAddLv : maxLv - curLv;
await G.mongodb.cEvent('zhanling').updateOne(
{ uid: player.uid, type: 'zhanling' },
{ $set: { isPay: true, exp: G.gc.zhanling.lv[curLv + addLv], lv: curLv + addLv } },
{ upsert: true }
);
}