diff --git a/game-server/app/services/treasureHuntService.ts b/game-server/app/services/treasureHuntService.ts index 2ea5262b6..d25368b25 100644 --- a/game-server/app/services/treasureHuntService.ts +++ b/game-server/app/services/treasureHuntService.ts @@ -45,6 +45,33 @@ export async function treasureHuntActivity(serverId: number, roleId: string) { return playerData; } + +/** + * 获取活动数据 + * + * @param {number} serverId 区Id + * @param {number} type 活动类型 ACTIVITY_TYPE + * @param {string} roleId 角色Id + * + */ + +export async function treasureHuntTaskActivity(serverId: number, roleId: string) { + let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId); + if (!activityData) { + return null; + } + + let playerData = new TreasureHuntData(activityData); + playerData.beginTime = moment(huntBeginTime).valueOf(); + playerData.endTime = moment(huntEndTime).valueOf(); + playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; + playerData.roundIndex = huntRoundIndex; + + let playerTaskRecord: ActivityTreasureHuntTaskModelType[] = await ActivityTreasureHuntTaskModel.findDataByRoundIndex(serverId, activityData.activityId, roleId, huntRoundIndex); + playerData.tasks.setPlayerTaskRecords(playerTaskRecord); + return playerData; +} + /** * 玩家活动数据 * diff --git a/shared/db/ActivityTreasureHuntTask.ts b/shared/db/ActivityTreasureHuntTask.ts index 237b28a64..880d43a63 100644 --- a/shared/db/ActivityTreasureHuntTask.ts +++ b/shared/db/ActivityTreasureHuntTask.ts @@ -10,6 +10,8 @@ export default class Activity_Treasure_Hunt_Task extends ActivityGrowth { @prop({ required: true }) roundIndex: number; // 周期 + @prop({ required: true }) + isPush: boolean; // 是否推送过 //任务领取记录 @@ -25,6 +27,34 @@ export default class Activity_Treasure_Hunt_Task extends ActivityGrowth { return result; } + //查询活动数据 + public static async findDataByCellIndex(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number) { + let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOne({ serverId, roleId, activityId, roundIndex, cellIndex }).lean(true); + return result; + } + + //根据活动统计完成任务次数 + public static async addTreasureHuntTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, addCount: number) { + let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, + { $inc: { totalCount: addCount } }, { upsert: true, new: true }).lean(true); + return result; + } + + //根据活动记录统计数据 + public static async addTreasureHuntTaskRecord(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, data: string,) { + let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, + { $set: { data: data } }, { upsert: true, new: true }).lean(true); + return result; + } + + + //推送标记 + public static async pushMessage(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number,) { + let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, + { $set: { isPush: true, } }, { upsert: true, new: true }).lean(true); + return result; + } + //删除活动领取记录 public static async deleteActivity(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number) { await ActivityTreasureHuntTaskModel.deleteMany({ serverId, roleId, activityId, roundIndex, cellIndex }); diff --git a/shared/domain/activityField/treasureHuntField.ts b/shared/domain/activityField/treasureHuntField.ts index 7045ca3ea..2e85ed35a 100644 --- a/shared/domain/activityField/treasureHuntField.ts +++ b/shared/domain/activityField/treasureHuntField.ts @@ -180,6 +180,10 @@ export class TreasureHuntTaskData { } } + public findItemByTaskType(type: number) { + return this.list.filter(obj => { return obj && obj.taskType === type }); + } + public initData(data: any) { this.name = data.name; this.index = data.index; diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index 0927dfc08..5a912b4fe 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -22,6 +22,9 @@ import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '../db/Acti import { ActivityBuyRecordsModel } from '../db/ActivityBuyRecords'; import { PopUpShopData } from '../domain/activityField/popUpShopField'; import { ActivityPopUpShopModel } from '../db/ActivityPopUpShop'; +import { ServerTempModel, ServerTempModelType } from '../db/ServerTemp'; +import { TreasureHuntData } from '../domain/activityField/treasureHuntField'; +import { ActivityTreasureHuntTaskModel, ActivityTreasureHuntTaskModelType } from '../db/ActivityTreasureHuntTask'; import { ActivityPopUpShopRecordModel, ActivityPopUpShopRecordModelType } from '../db/ActivityPopUpShopRecord'; import { SevenDaysData } from '../domain/activityField/sevenDaysField'; import moment = require("moment"); @@ -642,6 +645,44 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } } + //寻宝骑兵活动任务 + let tempData: ServerTempModelType = await ServerTempModel.findData(serverId); + if (tempData) { + let huntActivityId = tempData.huntActivityId; + let huntBeginTime = tempData.huntBeginTime; + let huntEndTime = tempData.huntEndTime; + let huntRoundIndex = tempData.huntRoundIndex; + let activity = await ActivityModel.findActivity(tempData.huntActivityId); + let playerData = new TreasureHuntData(activity); + playerData.beginTime = moment(huntBeginTime).valueOf(); + playerData.endTime = moment(huntEndTime).valueOf(); + playerData.roundIndex = huntRoundIndex; + let taskArray = playerData.tasks.findItemByTaskType(taskType); + for (let task of taskArray) { + let taskRecord: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findDataByCellIndex(serverId, activity.activityId, roleId, huntRoundIndex, task.cellIndex); + if (!taskRecord || !taskRecord.isPush) { + let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null + let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, parma, recordData); + if (addCount) { + let playerRecord = await ActivityTreasureHuntTaskModel.addTreasureHuntTaskCount(serverId, activity.activityId, roleId, huntRoundIndex, task.cellIndex, addCount); + //推送 + if (task.condition <= playerRecord.totalCount) {//已经完成 + playerRecord = await ActivityTreasureHuntTaskModel.pushMessage(serverId, activity.activityId, roleId, huntRoundIndex, task.cellIndex); + task.totalCount = playerRecord.totalCount; + pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId })); + } else {//没有完成 + task.totalCount = playerRecord.totalCount; + pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId })); + } + } + if (record) { + await ActivityTreasureHuntTaskModel.addTreasureHuntTaskRecord(serverId, activity.activityId, roleId, huntRoundIndex, task.cellIndex, JSON.stringify(record)); + } + } + } + } + + //30天任务统计 if (taskType === TASK_TYPE.HERO_QUALITY_STAR_UP || taskType === TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT ||