任务:完成主要接口
This commit is contained in:
@@ -2,13 +2,17 @@ import * as taskUtil from '../pubUtils/taskUtil';
|
||||
import { RoleType } from '../db/Role';
|
||||
import { pinus } from 'pinus';
|
||||
import { resResult } from '../pubUtils/util';
|
||||
import { STATUS, TASK_TYPE } from '../consts';
|
||||
import { TaskParam } from '../domain/roleField/task';
|
||||
import { STATUS, TASK_TYPE, TASK_FUN_TYPE } from '../consts';
|
||||
import { TaskParam, TaskListReturn } from '../domain/roleField/task';
|
||||
import { HeroType } from '../db/Hero';
|
||||
import { EquipType } from '../db/Equip';
|
||||
import { getRoleOnlineInfo } from './redisService';
|
||||
import { HeroScores } from '../db/PvpHistoryOpp';
|
||||
import { ItemInter } from '../pubUtils/interface';
|
||||
import { UserTaskModel, UserTaskType } from '../db/UserTask';
|
||||
import { UserTaskRecModel } from '../db/UserTaskRec';
|
||||
import { gameData } from '../pubUtils/data';
|
||||
import { getCurWeekDate } from '../pubUtils/timeUtil';
|
||||
|
||||
export async function checkTaskWithRoles(roleId: string, sid: string, funcs: number[], taskType: number, roles: RoleType[]) {
|
||||
for(let role of roles) {
|
||||
@@ -53,15 +57,17 @@ export async function checkTask(roleId: string, sid: string, funcs: number[], ta
|
||||
pushTaskUpdate(roleId, sid, funcs, pushMessage);
|
||||
}
|
||||
|
||||
export async function pushTaskUpdate(roleId: string, sid: string, funcs: number[], pushMessage: {type: number, id: number, count: number, received: boolean}[]) {
|
||||
if(!sid || !funcs) {
|
||||
let onlineUser = await getRoleOnlineInfo(roleId);
|
||||
sid = onlineUser.sid;
|
||||
funcs = onlineUser.funcs||[];
|
||||
}
|
||||
if(!!sid) {
|
||||
let uids = [{uid: roleId, sid}];
|
||||
pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, pushMessage), uids);
|
||||
export async function pushTaskUpdate(roleId: string, sid: string, funcs: number[], pushMessage: TaskListReturn[]) {
|
||||
if(pushMessage.length > 0) {
|
||||
if(!sid || !funcs) {
|
||||
let onlineUser = await getRoleOnlineInfo(roleId);
|
||||
sid = onlineUser.sid;
|
||||
funcs = onlineUser.funcs||[];
|
||||
}
|
||||
if(!!sid) {
|
||||
let uids = [{uid: roleId, sid}];
|
||||
pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, pushMessage), uids);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,4 +110,72 @@ export async function checkTaskInPvpEnd(roleId: string, sid: string, funcs: numb
|
||||
}
|
||||
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.PVP, 0, false, { heroScores });
|
||||
}
|
||||
|
||||
|
||||
// 获取task状态
|
||||
export async function getCurTask(roleId: string) {
|
||||
let userTask = await UserTaskModel.findByRole(roleId);
|
||||
let mainTask = await getMainTask(roleId, userTask);
|
||||
let dailyTask = await getDailyTask(roleId, userTask);
|
||||
let achievement = await getAchievement(roleId, userTask);
|
||||
return { mainTask, dailyTask, achievement };
|
||||
}
|
||||
|
||||
export async function getMainTask(roleId: string, userTask: UserTaskType) {
|
||||
let type = TASK_FUN_TYPE.MAIN;
|
||||
let { mainTaskStage: stage } = userTask;
|
||||
let recMap = await UserTaskRecModel.findByRoleAndType(roleId, type); // group=>userTaskRec
|
||||
|
||||
let taskList: TaskListReturn[] = [];
|
||||
for(let [id, dic] of gameData.mainTask) {
|
||||
if(dic.taskStage == stage) {
|
||||
let dbRec = recMap.get(dic.taskType)?.get(dic.group);
|
||||
if(dbRec) {
|
||||
taskList.push({ type, id, count: dbRec.count, received: dbRec.received.includes(id) });
|
||||
} else {
|
||||
taskList.push({ type, id, count: 0, received: false });
|
||||
}
|
||||
}
|
||||
}
|
||||
return { stage, taskList }
|
||||
}
|
||||
|
||||
export async function getDailyTask(roleId: string, userTask: UserTaskType) {
|
||||
let type = TASK_FUN_TYPE.DAILY;
|
||||
let { dailyTaskPoint: point, dailyTaskRefWeekly, dailyTaskPointWeekly: weeklyPoint, dailyTaskBox: box } = userTask;
|
||||
let curWeekStart = getCurWeekDate(1, 5);
|
||||
if(dailyTaskRefWeekly < curWeekStart) { // 刷新
|
||||
weeklyPoint = 0;
|
||||
box = [];
|
||||
}
|
||||
let recMap = await UserTaskRecModel.findByRoleAndType(roleId, type); // group=>userTaskRec
|
||||
|
||||
let taskList: TaskListReturn[] = [];
|
||||
for(let [id, dic] of gameData.dailyTask) {
|
||||
let dbRec = recMap.get(dic.taskType)?.get(dic.group);
|
||||
if(dbRec) {
|
||||
taskList.push({ type, id, count: dbRec.count, received: dbRec.received.includes(id) });
|
||||
} else {
|
||||
taskList.push({ type, id, count: 0, received: false });
|
||||
}
|
||||
}
|
||||
return { point, weeklyPoint, taskList, box }
|
||||
}
|
||||
|
||||
export async function getAchievement(roleId: string, userTask: UserTaskType) {
|
||||
let type = TASK_FUN_TYPE.ACHIEVEMENT;
|
||||
let { achievementBox: box, achievementPoint: point } = userTask;
|
||||
let recMap = await UserTaskRecModel.findByRoleAndType(roleId, type); // group=>userTaskRec
|
||||
|
||||
let taskList: TaskListReturn[] = [];
|
||||
for(let [id, dic] of gameData.dailyTask) {
|
||||
let dbRec = recMap.get(dic.taskType)?.get(dic.group);
|
||||
if(dbRec) {
|
||||
taskList.push({ type, id, count: dbRec.count, received: dbRec.received.includes(id) });
|
||||
} else {
|
||||
taskList.push({ type, id, count: 0, received: false });
|
||||
}
|
||||
}
|
||||
return { point, taskList, box }
|
||||
}
|
||||
Reference in New Issue
Block a user