diff --git a/game-server/app/servers/role/handler/taskHandler.ts b/game-server/app/servers/role/handler/taskHandler.ts index ac3ad4654..d131285fa 100644 --- a/game-server/app/servers/role/handler/taskHandler.ts +++ b/game-server/app/servers/role/handler/taskHandler.ts @@ -7,7 +7,7 @@ import { addItems } from "../../../services/rewardService"; import { UserTaskModel } from "../../../db/UserTask"; import { getCurWeekDate, nowSeconds } from "../../../pubUtils/timeUtil"; import { DicDailyTask, DicAchievement } from "../../../pubUtils/dictionary/DicTask"; -import { getMainTask, refDailyTaskBox, removeHistoryTask } from "../../../services/taskService"; +import { getMainTask, refDailyTaskBox, removeHistoryTask, getDailyTask, getCurTask } from "../../../services/taskService"; import { TASK } from "../../../pubUtils/dicParam"; export default function(app: Application) { @@ -179,20 +179,30 @@ export class ShopHandler { }); } - async debugDailyTaskRef(msg: { }, session: BackendSession) { + async debugRefTask(msg: { type: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); - let uids = [{uid: roleId, sid}]; + let { type } = msg + let userTask; + if(type == TASK_FUN_TYPE.DAILY) { + let uids = [{uid: roleId, sid}]; + + // 转移每日任务 + await removeHistoryTask(roleId, type, new Date(nowSeconds() * 1000 + 86400000)); + pinus.app.get('channelService').pushMessageByUids('onDailyTaskRefresh', resResult(STATUS.SUCCESS, { taskList: [] }), uids); - // 转移每日任务 - await removeHistoryTask(roleId, new Date(nowSeconds() * 1000 + 86400000)); - pinus.app.get('channelService').pushMessageByUids('onDailyTaskRefresh', resResult(STATUS.SUCCESS, { taskList: [] }), uids); - } + await refDailyTaskBox(roleId, sid, true); + userTask = await UserTaskModel.updateInfo(roleId, { dailyTaskPoint: 0 }); - async debugTaskBoxRef(msg: { }, session: BackendSession) { - let roleId = session.get('roleId'); - let sid = session.get('sid'); + } else if( type == TASK_FUN_TYPE.MAIN){ + await UserTaskModel.updateInfo(roleId, { mainTaskStage: 1 }); + userTask = await removeHistoryTask(roleId, type, new Date(nowSeconds() * 1000 + 86400000)); + } else if (type == TASK_FUN_TYPE.ACHIEVEMENT) { + await UserTaskModel.updateInfo(roleId, { achievementBox: [], achievementPoint: 0 }); + userTask = await removeHistoryTask(roleId, type, new Date(nowSeconds() * 1000 + 86400000)); + } - await refDailyTaskBox(roleId, sid); + let curTask = await getCurTask(roleId, session);; + return resResult(STATUS.SUCCESS, curTask); } } \ No newline at end of file diff --git a/game-server/app/services/refreshService.ts b/game-server/app/services/refreshService.ts index 66013ac36..6ed34ecef 100644 --- a/game-server/app/services/refreshService.ts +++ b/game-server/app/services/refreshService.ts @@ -33,19 +33,22 @@ export async function refresh(session: FrontendOrBackendSession) { * @param session */ export async function refreshDaily(session: FrontendOrBackendSession) { - let refDaily: number = session.get('refDaily'); // 10位时间戳,每天每人更新一次 - let refWeekly: number = session.get('refWeekly'); // 10位时间戳,每天每人更新一次 - if(!refDaily || shouldRefresh(new Date(refDaily * 1000), new Date(), REFRESH_HOUR)) { - refDaily = nowSeconds(); - session.set('refDaily', refDaily); - session.push('refDaily', () => {}); - await refDailyTask(session.get('roleId'), session.get('sid')); - } - if(!refWeekly || shouldRefreshWeek(new Date(refWeekly * 1000), new Date(), 1, REFRESH_HOUR)) { - refWeekly = nowSeconds(); - session.set('refWeekly', refWeekly); - session.push('refWeekly', () => {}); - await refDailyTaskBox(session.get('roleId'), session.get('sid')); + if(session.get('roleId')) { + let refDaily: number = session.get('refDaily'); // 10位时间戳,每天每人更新一次 + let refWeekly: number = session.get('refWeekly'); // 10位时间戳,每天每人更新一次 + if(!refDaily || shouldRefresh(new Date(refDaily * 1000), new Date(), REFRESH_HOUR)) { + refDaily = nowSeconds(); + session.set('refDaily', refDaily); + session.push('refDaily', () => {}); + await refDailyTask(session.get('roleId'), session.get('sid')); + } + + if(!refWeekly || shouldRefreshWeek(new Date(refWeekly * 1000), new Date(), 1, REFRESH_HOUR)) { + refWeekly = nowSeconds(); + session.set('refWeekly', refWeekly); + session.push('refWeekly', () => {}); + await refDailyTaskBox(session.get('roleId'), session.get('sid')); + } } } \ No newline at end of file diff --git a/game-server/app/services/taskService.ts b/game-server/app/services/taskService.ts index fbf96f779..bdbcd862c 100644 --- a/game-server/app/services/taskService.ts +++ b/game-server/app/services/taskService.ts @@ -128,8 +128,8 @@ export async function getCurTask(roleId: string, session: FrontendOrBackendSessi if(shouldRefresh(dailyTaskRef, new Date(), 5)) { dailyTaskRef = new Date(); - userTask = await UserTaskModel.setRefDaily(roleId); - await removeHistoryTask(roleId); + userTask = await UserTaskModel.updateInfo(roleId, { dailyTaskRef }); + await removeHistoryTask(roleId, TASK_FUN_TYPE.DAILY); } session.set('refDaily', getSeconds(dailyTaskRef)); session.push('refDaily', ()=> {}); @@ -205,17 +205,17 @@ export async function refDailyTask(roleId: string, sid: string) { let taskList = await getDailyTask(roleId, userTask); // 转移每日任务 - await removeHistoryTask(roleId); + await removeHistoryTask(roleId, TASK_FUN_TYPE.DAILY); let uids = [{uid: roleId, sid}]; pinus.app.get('channelService').pushMessageByUids('onDailyTaskRefresh', resResult(STATUS.SUCCESS, { taskList }), uids); } -export async function removeHistoryTask(roleId: string, today?: Date) { +export async function removeHistoryTask(roleId: string, type: number, today?: Date) { // 转移每日任务 - let history = await UserTaskRecModel.getHistoryRec(roleId, today); + let history = await UserTaskRecModel.getHistoryRec(roleId, type, today); if(history.length > 0) { await UserTaskHistoryModel.pushUserTask(roleId, history); await UserTaskRecModel.deleteHistory(history); @@ -223,8 +223,8 @@ export async function removeHistoryTask(roleId: string, today?: Date) { } // 刷新每日宝箱数量 -export async function refDailyTaskBox(roleId: string, sid: string) { - let userTask = await UserTaskModel.refreshWeekly(roleId); +export async function refDailyTaskBox(roleId: string, sid: string, debug = false) { + let userTask = await UserTaskModel.refreshWeekly(roleId, debug); if(userTask) { let { dailyTaskPoint: point, dailyTaskPointWeekly: weeklyPoint, dailyTaskBox: box } = userTask; let uids = [{uid: roleId, sid}]; diff --git a/shared/db/UserTask.ts b/shared/db/UserTask.ts index 6a982a62a..55e953b69 100644 --- a/shared/db/UserTask.ts +++ b/shared/db/UserTask.ts @@ -61,6 +61,13 @@ export default class UserTask extends BaseModel { return rec; } + public static async updateInfo(roleId: string, update: UserTaskParam) { + let rec: UserTaskType = await UserTaskModel.findOneAndUpdate({ roleId }, { + $set: update + }, { new: true }).lean(); + return rec; + } + public static async decreaseDailyPoint(roleId: string, point: number) { let rec: UserTaskType = await UserTaskModel.findOneAndUpdate( { roleId, dailyTaskPoint: { $gte: point }}, { $inc: { dailyTaskPoint: -point } }, { new: true }).lean(); return rec; @@ -78,9 +85,14 @@ export default class UserTask extends BaseModel { return rec; } - public static async refreshWeekly(roleId: string) { + public static async refreshWeekly(roleId: string, debug = false) { let curWeek = getCurWeekDate(1, 5); - let rec: UserTaskType = await UserTaskModel.findOneAndUpdate({ roleId, dailyTaskRefWeekly: { $lt: curWeek } }, { + let condition = { roleId }; + if(!debug) { + condition['dailyTaskRefWeekly'] = { $lt: curWeek } + } + + let rec: UserTaskType = await UserTaskModel.findOneAndUpdate(condition, { $set: { dailyTaskRefWeekly: curWeek, dailyTaskPointWeekly: 0, dailyTaskBox: [] } }, { new: true }).lean(); return rec; diff --git a/shared/db/UserTaskRec.ts b/shared/db/UserTaskRec.ts index 817f039fc..0e75d576b 100644 --- a/shared/db/UserTaskRec.ts +++ b/shared/db/UserTaskRec.ts @@ -99,9 +99,9 @@ export default class UserTaskRec extends BaseModel { return rec } - public static async getHistoryRec(roleId: string, today?: Date) { + public static async getHistoryRec(roleId: string, type: number, today?: Date) { if(!today) today = getTodayZeroDate(5); - let rec: UserTaskRecType[] = await UserTaskRecModel.find({ roleId, type: TASK_FUN_TYPE.DAILY, createdAt: { $lt: today } }).lean(); + let rec: UserTaskRecType[] = await UserTaskRecModel.find({ roleId, type, createdAt: { $lt: today } }).lean(); return rec }