From 9817528b26b752c95b1ee71b2a28a1eb6b1042e1 Mon Sep 17 00:00:00 2001 From: qiaoxin Date: Mon, 7 Jun 2021 20:26:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=EF=BC=9A=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BC=B9=E5=87=BA=E7=A4=BC=E5=8C=85=E6=AF=8F=E6=97=A5=E5=BC=B9?= =?UTF-8?q?=E5=87=BA=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/popUpShopService.ts | 71 ++ shared/db/ActivityPopUpShopRecord.ts | 55 ++ shared/pubUtils/taskUtil.ts | 691 ++++++++++--------- 3 files changed, 481 insertions(+), 336 deletions(-) create mode 100644 shared/db/ActivityPopUpShopRecord.ts diff --git a/game-server/app/services/popUpShopService.ts b/game-server/app/services/popUpShopService.ts index a5744bb8b..6ed9bce76 100644 --- a/game-server/app/services/popUpShopService.ts +++ b/game-server/app/services/popUpShopService.ts @@ -5,6 +5,7 @@ import { RewardParam } from '../domain/activityField/rewardField'; import { addReward, stringToRewardParam } from './giftPackageService'; import { ActivityPopUpShopModel, ActivityPopUpShopModelType } from '../db/ActivityPopUpShop'; import { ServerlistModel } from '../db/Serverlist'; +import moment = require('moment'); /** * 获取活动数据 @@ -56,6 +57,76 @@ export async function getPlayerPopUpShopData(activityId: number, serverId: numbe return allPlayerShop; } + + +// /** +// * 弹出礼包任务特殊处理 +// * +// * @param {number} serverId 区Id +// * @param {number} activityId 活动Id +// * @param {string} roleId 角色Id +// * +// */ +// export async function checkPopUpActivityTask(serverId: number, sid: number, funcs: number[], roleId: string, taskType: number, addCount: number) { +// let { activityGroupId } = await ServerlistModel.findByServerId(serverId); +// let allActivity = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.POP_UP_SHOP, new Date()); +// for (let activity of allActivity) { +// let allTaskData: any[] = JSON.parse(activity.data); +// for (let task of allTaskData) { +// if (task.taskType == taskType) { +// let popShopData = new PopUpShopData(task, activity.activityId); +// let taskRecord = await ActivityPopUpShopModel.findDataByTaskId(serverId, activity.activityId, roleId, popShopData.id, popShopData.taskType) +// let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null + +// let beginTime = new Date(); +// let endTime = moment(new Date()).add(task.duration, 'h').toDate(); +// if (taskType == TASK_TYPE.ROLE_TERAPH_STAGE_UP) {//只要触发就弹出礼包商店 +// //推送 +// let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, addCount, beginTime, endTime); +// popShopData.setPlayerRecords(playerRecord) +// // pushMessage = pushMessage.concat(popShopData); +// } else if (taskType == TASK_TYPE.EQUIP_QUALITY_COUNT || taskType == TASK_TYPE.GACHA_QUALITY_COUNT) {//每天统计 + +// } + +// // if (!taskRecord || !taskRecord.isPush) { +// // let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, parma, recordData); +// // if (addCount) { + +// // if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV) { +// // let playerRecord = await ActivityPopUpShopModel.setTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); +// // //推送 +// // if (task.condition <= playerRecord.totalCount) { +// // playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); +// // popShopData.setPlayerRecords(playerRecord) +// // pushMessage = pushMessage.concat(popShopData); +// // } +// // } else if (taskType == TASK_TYPE.ROLE_TERAPH_STAGE_UP) {//只要触发就弹出礼包商店 +// // //推送 +// // let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, addCount, beginTime, endTime); +// // popShopData.setPlayerRecords(playerRecord) +// // pushMessage = pushMessage.concat(popShopData); +// // } else if (taskType == TASK_TYPE.EQUIP_QUALITY_COUNT || taskType == TASK_TYPE.GACHA_QUALITY_COUNT) {//每天统计 + +// // } else { +// // let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); +// // //推送 +// // if (task.condition <= playerRecord.totalCount) { +// // playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); +// // popShopData.setPlayerRecords(playerRecord) +// // pushMessage = pushMessage.concat(popShopData); +// // } +// // } +// // } +// // if (record) { +// // await ActivityPopUpShopModel.addTaskRecord(serverId, activity.activityId, roleId, task.id, task.taskType, JSON.stringify(record)); +// // } +// // } +// } +// } +// } +// } + /** * 结算购买礼包的奖励 * diff --git a/shared/db/ActivityPopUpShopRecord.ts b/shared/db/ActivityPopUpShopRecord.ts new file mode 100644 index 000000000..80a092ec3 --- /dev/null +++ b/shared/db/ActivityPopUpShopRecord.ts @@ -0,0 +1,55 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; + + +/** + * 活动系统 - 弹出商店数据统计 +*/ +@index({ roleId: 1 }) + +export default class Activity_Pop_Up_Shop_Record extends BaseModel { + @prop({ required: true }) + serverId: number; // 服id + @prop({ required: true }) + activityId: number; // 活动Id + @prop({ required: true }) + roleId: string; // 用户Id + @prop({ required: true }) + beginTime: Date; // 开始统计时间 + @prop({ required: true }) + id: number; // 任务id + @prop({ required: true }) + type: number; // 任务类型 + @prop({ required: true }) + count: number; // 统计次数 + + + //添加统计 + public static async addRecord(serverId: number, activityId: number, roleId: string, id: number, type: number, beginTime: Date, count: number) { + let result: ActivityPopUpShopRecordModelType = await ActivityPopUpShopRecordModel.findOneAndUpdate({ + serverId, roleId, activityId, id, type, beginTime, + }, + { $inc: { count: count } }, { upsert: true, new: true }).lean(true); + return result; + } + + //查询统计数据 + public static async findRecordData(serverId: number, activityId: number, roleId: string, id: number, type: number, beginTime: Date) { + let result: ActivityPopUpShopRecordModelType = await ActivityPopUpShopRecordModel.findOne({ + serverId, roleId, activityId, id, type, beginTime, + }).lean(true); + return result; + } + + //删除活动统计记录 + public static async deleteActivity(serverId: number, activityId: number, roleId: string, id: number, type: number,) { + await ActivityPopUpShopRecordModel.deleteMany({ + roleId, activityId, id, type + }); + } +} + +export const ActivityPopUpShopRecordModel = getModelForClass(Activity_Pop_Up_Shop_Record); + +export interface ActivityPopUpShopRecordModelType extends Pick, keyof Activity_Pop_Up_Shop_Record> { } +export type ActivityPopUpShopRecordModelTypeParam = Partial; // 将所有字段变成可选项 \ No newline at end of file diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index 31265df8b..e1d1e553b 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -23,6 +23,7 @@ import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '../db/Acti import { ActivityBuyRecordsModel } from '../db/ActivityBuyRecords'; import { PopUpShopData } from '../domain/activityField/popUpShopField'; import { ActivityPopUpShopModel } from '../db/ActivityPopUpShop'; +import { ActivityPopUpShopRecordModel, ActivityPopUpShopRecordModelType } from '../db/ActivityPopUpShopRecord'; import moment = require("moment"); @@ -590,377 +591,395 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: for (let task of allTaskData) { if (task.taskType == taskType) { let popShopData = new PopUpShopData(task, activity.activityId); - let taskRecord = await ActivityPopUpShopModel.findDataByTaskId(serverId, activity.activityId, roleId, popShopData.id, popShopData.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - if (!taskRecord || !taskRecord.isPush) { - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, parma, recordData); - if (addCount) { - let beginTime = new Date(); - let endTime = moment(new Date()).add(task.duration, 'h').toDate(); - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV) { - let playerRecord = await ActivityPopUpShopModel.setTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); - //推送 - if (task.condition <= playerRecord.totalCount) { - playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); - popShopData.setPlayerRecords(playerRecord) - pushMessage = pushMessage.concat(popShopData); - } - } else if (taskType == TASK_TYPE.ROLE_TERAPH_STAGE_UP) {//只要触发就弹出礼包商店 - //推送 - // let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, addCount, beginTime, endTime); - // popShopData.setPlayerRecords(playerRecord) - // pushMessage = pushMessage.concat(popShopData); - } else if (taskType == TASK_TYPE.EQUIP_QUALITY_COUNT) {//每天统计 - - } else { - let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); - //推送 - if (task.condition <= playerRecord.totalCount) { - playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); - popShopData.setPlayerRecords(playerRecord) - pushMessage = pushMessage.concat(popShopData); + let beginTime = new Date(); + let endTime = moment(new Date()).add(task.duration, 'h').toDate(); + if (taskType == TASK_TYPE.ROLE_TERAPH_STAGE_UP) {//只要触发就弹出礼包商店 + //推送 + let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, count, beginTime, endTime); + popShopData.setPlayerRecords(playerRecord) + pushMessage = pushMessage.concat(popShopData); + } else if (taskType == TASK_TYPE.EQUIP_QUALITY_COUNT || taskType == TASK_TYPE.GACHA_QUALITY_COUNT) {//每天统计 + let recordDate = moment(new Date()).startOf('d').toDate() + let recordData: ActivityPopUpShopRecordModelType = await ActivityPopUpShopRecordModel.findRecordData(serverId, activity.activityId, roleId, task.id, task.taskType, recordDate) + let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, parma, null); + if (recordData && (recordData.count < task.condition) && (recordData.count + addCount >= task.condition)) {//完成当天任务 + let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, count, beginTime, endTime); + popShopData.setPlayerRecords(playerRecord) + pushMessage = pushMessage.concat(popShopData); + await ActivityPopUpShopRecordModel.addRecord(serverId, activity.activityId, roleId, task.id, task.taskType, recordDate, addCount) + } else { + await ActivityPopUpShopRecordModel.addRecord(serverId, activity.activityId, roleId, task.id, task.taskType, recordDate, addCount) + } + } else { + let taskRecord = await ActivityPopUpShopModel.findDataByTaskId(serverId, activity.activityId, roleId, popShopData.id, popShopData.taskType) + let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null + if (!taskRecord || !taskRecord.isPush) { + let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, parma, recordData); + if (addCount) { + if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV) { + let playerRecord = await ActivityPopUpShopModel.setTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); + //推送 + if (task.condition <= playerRecord.totalCount) { + playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); + popShopData.setPlayerRecords(playerRecord) + pushMessage = pushMessage.concat(popShopData); + } + } else { + let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); + //推送 + if (task.condition <= playerRecord.totalCount) { + playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); + popShopData.setPlayerRecords(playerRecord) + pushMessage = pushMessage.concat(popShopData); + } } } - } - if (record) { - await ActivityPopUpShopModel.addTaskRecord(serverId, activity.activityId, roleId, task.id, task.taskType, JSON.stringify(record)); + if (record) { + await ActivityPopUpShopModel.addTaskRecord(serverId, activity.activityId, roleId, task.id, task.taskType, JSON.stringify(record)); + } } } } } } - } - //主线成长基金 - if (taskType === TASK_TYPE.BATTLE_MAIN) { - allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_MAIN, ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP], new Date()); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity); - let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(parma.warId); - //推送 - pushMessage = pushMessage.concat(taskArray); - } - } - //镇念塔成长基金getRoleOnlineInfo - if (taskType === TASK_TYPE.BATTLE_TOWER_LV) { - allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_TOWER, ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP], new Date()); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity); - let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(parma.towerLv); - //推送 - pushMessage = pushMessage.concat(taskArray); - } - } - //精英成长基金 - if (taskType === TASK_TYPE.BATTLE_MAIN_ELITE) { - allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP], new Date()); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity); - let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(parma.mainEliteWarId); - //推送 - pushMessage = pushMessage.concat(taskArray); - } - } - - return pushMessage; -} - -/** - * 达成任务标准 - * - * @param {string} roleId 角色Id - * @param {number} taskType 任务类型 - * @param {number} taskParam 任务条件数据 - * @param {number} count 数据 - * @param {number} parma 参数 - * - */ - -export function isComplete(roleId: string, taskType: TASK_TYPE, taskParam: string, count: number, paramObj?: any, recordData?: any): any { - console.log('达成任务标准', roleId, taskType, taskParam, count, paramObj) - let param = splitString(taskParam, '&'); - let addCount: number = 0; // 条件是否满足 - let record: any = null; - switch (taskType) { - case TASK_TYPE.ROLE_LV://重置数据 - addCount = count; - break; - case TASK_TYPE.GUILD_JOIN: - addCount = count; - break; - case TASK_TYPE.LOGIN_SUM: - addCount = count; - break; - case TASK_TYPE.HERO_NUM: - addCount = count; - break; - - case TASK_TYPE.HERO_QUALITY_STAR_UP://herocount&quality&star& - addCount = (param[1] == paramObj.quality) && (param[2] == paramObj.star) ? count : 0; - break; - case TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT://herocount&quality&star& {oldQuality, quality: hero.quality} - addCount = (param[1] == paramObj.oldQuality) && (param[2] == paramObj.quality) ? count : 0; - break; - case TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT://herocount&quality - addCount = (param[1] == paramObj.quality) ? count : 0; - break; - case TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT://herocount&colorStar& colorStar:彩星 1表示觉醒 - addCount = (param[1] == paramObj.colorStar) ? count : 0; - break; - case TASK_TYPE.HERO_STAGE_UP://herocount&star& - addCount = (param[1] == paramObj.job) ? count : 0; - break; - case TASK_TYPE.EQUIP_JEWEL_STAGE://count&stage& - addCount = (param[1] == paramObj.stage) ? count : 0; - break; - case TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE://count&stage& - addCount = (param[1] == paramObj.stage) ? count : 0; - break; - case TASK_TYPE.EQUIP_QUALITY: - addCount = param[1] == paramObj.quality ? count : 0; - break; - - case TASK_TYPE.ROLE_TITLE://重置数据 - addCount = param[0] <= count ? count : 0; - break; - case TASK_TYPE.GASHA: - addCount = count; - break; - case TASK_TYPE.EQUIP_STRENGTHEN: - for (let obj of paramObj) { - // obj.hid;//英雄di - // obj.oldLv;//栏位升级前等级 - // obj.lv;//栏位升级后等级 - // obj.id;//栏位id - if (param[1] > obj.oldLv && param[1] <= obj.lv) { - addCount++; + //主线成长基金 + if (taskType === TASK_TYPE.BATTLE_MAIN) { + allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_MAIN, ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP], new Date()); + for (let activity of allActivity) { + let growthFundActivity = new GrowthFundData(activity); + let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); + growthFundActivity.setPlayerRecords(playerRecords); + if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 + let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); + growthFundActivity.initBuyRecords(buyRecords); } + let taskArray = growthFundActivity.unLockItem(parma.warId); + //推送 + pushMessage = pushMessage.concat(taskArray); } - break; - case TASK_TYPE.EQUIP_REFINE_LV: - addCount = (param[1] == paramObj.lv) ? count : 0; - break; - - case TASK_TYPE.BATTLE_MAIN: - addCount = (param[1] == paramObj.warId) ? 1 : 0; - break; - case TASK_TYPE.EQUIP_JEWEL_SUM: - addCount = count; - break; - case TASK_TYPE.GUILD_TRAIN: - addCount = count; - break; - case TASK_TYPE.ROLE_SCHOOL_PUT_HERO: - addCount = count; - break; - case TASK_TYPE.GUILD_ACTIVITY: - addCount = count; - break; - case TASK_TYPE.EQUIP_SUM: - addCount = count; - break; - case TASK_TYPE.HERO_LV://{ hid, lv} - { - let hid = paramObj.hid; - let lv = paramObj.lv; - if (lv < param[1]) { - break; + } + //镇念塔成长基金getRoleOnlineInfo + if (taskType === TASK_TYPE.BATTLE_TOWER_LV) { + allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_TOWER, ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP], new Date()); + for (let activity of allActivity) { + let growthFundActivity = new GrowthFundData(activity); + let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); + growthFundActivity.setPlayerRecords(playerRecords); + if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 + let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); + growthFundActivity.initBuyRecords(buyRecords); } - if (recordData) { - record = recordData; - if (recordData.indexOf(hid) != -1) { + let taskArray = growthFundActivity.unLockItem(parma.towerLv); + //推送 + pushMessage = pushMessage.concat(taskArray); + } + } + //精英成长基金 + if (taskType === TASK_TYPE.BATTLE_MAIN_ELITE) { + allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP], new Date()); + for (let activity of allActivity) { + let growthFundActivity = new GrowthFundData(activity); + let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); + growthFundActivity.setPlayerRecords(playerRecords); + if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 + let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); + growthFundActivity.initBuyRecords(buyRecords); + } + let taskArray = growthFundActivity.unLockItem(parma.mainEliteWarId); + //推送 + pushMessage = pushMessage.concat(taskArray); + } + } + + return pushMessage; + } + + /** + * 达成任务标准 + * + * @param {string} roleId 角色Id + * @param {number} taskType 任务类型 + * @param {number} taskParam 任务条件数据 + * @param {number} count 数据 + * @param {number} parma 参数 + * + */ + + export function isComplete(roleId: string, taskType: TASK_TYPE, taskParam: string, count: number, paramObj?: any, recordData?: any): any { + console.log('达成任务标准', roleId, taskType, taskParam, count, paramObj) + let param = splitString(taskParam, '&'); + let addCount: number = 0; // 条件是否满足 + let record: any = null; + switch (taskType) { + case TASK_TYPE.ROLE_LV://重置数据 + addCount = count; + break; + case TASK_TYPE.GUILD_JOIN: + addCount = count; + break; + case TASK_TYPE.LOGIN_SUM: + addCount = count; + break; + case TASK_TYPE.HERO_NUM: + addCount = count; + break; + + case TASK_TYPE.HERO_QUALITY_STAR_UP://herocount&quality&star& + addCount = (param[1] == paramObj.quality) && (param[2] == paramObj.star) ? count : 0; + break; + case TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT://herocount&quality&star& {oldQuality, quality: hero.quality} + addCount = (param[1] == paramObj.oldQuality) && (param[2] == paramObj.quality) ? count : 0; + break; + case TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT://herocount&quality + addCount = (param[1] == paramObj.quality) ? count : 0; + break; + case TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT://herocount&colorStar& colorStar:彩星 1表示觉醒 + addCount = (param[1] == paramObj.colorStar) ? count : 0; + break; + case TASK_TYPE.HERO_STAGE_UP://herocount&star& + addCount = (param[1] == paramObj.job) ? count : 0; + break; + case TASK_TYPE.EQUIP_JEWEL_STAGE://count&stage& + addCount = (param[1] == paramObj.stage) ? count : 0; + break; + case TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE://count&stage& + addCount = (param[1] == paramObj.stage) ? count : 0; + break; + case TASK_TYPE.EQUIP_QUALITY: + addCount = param[1] == paramObj.quality ? count : 0; + break; + + case TASK_TYPE.ROLE_TITLE://重置数据 + addCount = param[0] <= count ? count : 0; + break; + case TASK_TYPE.GASHA: + addCount = count; + break; + case TASK_TYPE.EQUIP_STRENGTHEN: + for (let obj of paramObj) { + // obj.hid;//英雄di + // obj.oldLv;//栏位升级前等级 + // obj.lv;//栏位升级后等级 + // obj.id;//栏位id + if (param[1] > obj.oldLv && param[1] <= obj.lv) { + addCount++; + } + } + break; + case TASK_TYPE.EQUIP_REFINE_LV: + addCount = (param[1] == paramObj.lv) ? count : 0; + break; + + case TASK_TYPE.BATTLE_MAIN: + addCount = (param[1] == paramObj.warId) ? 1 : 0; + break; + case TASK_TYPE.EQUIP_JEWEL_SUM: + addCount = count; + break; + case TASK_TYPE.GUILD_TRAIN: + addCount = count; + break; + case TASK_TYPE.ROLE_SCHOOL_PUT_HERO: + addCount = count; + break; + case TASK_TYPE.GUILD_ACTIVITY: + addCount = count; + break; + case TASK_TYPE.EQUIP_SUM: + addCount = count; + break; + case TASK_TYPE.HERO_LV://{ hid, lv} + { + let hid = paramObj.hid; + let lv = paramObj.lv; + if (lv < param[1]) { break; } - } else { - record = []; - } - - addCount = count; - record.push(hid) - break; - } - case TASK_TYPE.HERO_TRAIN_SUM://训练X次是所有武将的训练次数的总和达到要求就好了 - { - addCount = count; - break; - } - case TASK_TYPE.HERO_TRAIN://X名武将训练Y次,要求单名武将训练Y次,这样的武将要有X名 - { - let hid = paramObj.hid; - if (recordData) { - record = recordData; - let oldCount = record[hid]; - if (oldCount) { - if (oldCount < param[1] && (oldCount + count >= param[1])) { - addCount = count; - record[hid] = oldCount + count; + if (recordData) { + record = recordData; + if (recordData.indexOf(hid) != -1) { break; } } else { + record = []; + } + + addCount = count; + record.push(hid) + break; + } + case TASK_TYPE.HERO_TRAIN_SUM://训练X次是所有武将的训练次数的总和达到要求就好了 + { + addCount = count; + break; + } + case TASK_TYPE.HERO_TRAIN://X名武将训练Y次,要求单名武将训练Y次,这样的武将要有X名 + { + let hid = paramObj.hid; + if (recordData) { + record = recordData; + let oldCount = record[hid]; + if (oldCount) { + if (oldCount < param[1] && (oldCount + count >= param[1])) { + addCount = count; + record[hid] = oldCount + count; + break; + } + } else { + record[hid] = count; + if (count >= param[1]) { + addCount = count; + break; + } + } + } else { + record = {}; record[hid] = count; if (count >= param[1]) { addCount = count; break; } } - } else { - record = {}; - record[hid] = count; - if (count >= param[1]) { + break; + } + case TASK_TYPE.BATTLE_EXPEDITION: + { + addCount = count; + break; + } + case TASK_TYPE.BATTLE_EXPEDITION_BOX: + { + addCount = count; + break; + } + case TASK_TYPE.HERO_QUALITY: + { + let quality = param[1] + let heroes = paramObj.heroes.filter(hero => { return hero.quality == quality }) + addCount = heroes.length; + break; + } + case TASK_TYPE.PVP_WIN_SERIES: + { + addCount = count; + break; + } + case TASK_TYPE.PVP_WIN: + { + addCount = count; + break; + } + case TASK_TYPE.BATTLE_TOWER_LV://{towerLv} + { + let towerLv = paramObj.towerLv; + if (recordData) { + if (recordData >= towerLv) { + break; + } + } + record = towerLv; + addCount = towerLv; + break; + } + case TASK_TYPE.BATTLE_MAIN_ELITE: + { + if (paramObj.mainEliteWarId == param[1]) { addCount = count; - break; } + break; } - break; - } - case TASK_TYPE.BATTLE_EXPEDITION: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_EXPEDITION_BOX: - { - addCount = count; - break; - } - case TASK_TYPE.HERO_QUALITY: - { - let quality = param[1] - let heroes = paramObj.heroes.filter(hero => { return hero.quality == quality }) - addCount = heroes.length; - break; - } - case TASK_TYPE.PVP_WIN_SERIES: - { - addCount = count; - break; - } - case TASK_TYPE.PVP_WIN: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_TOWER_LV://{towerLv} - { - let towerLv = paramObj.towerLv; - if (recordData) { - if (recordData >= towerLv) { - break; + case TASK_TYPE.BATTLE_DUNGEON_WAR: + { + if (paramObj.warId == param[1]) { + addCount = count; } + break; } - record = towerLv; - addCount = towerLv; - break; - } - case TASK_TYPE.BATTLE_MAIN_ELITE: - { - if (paramObj.mainEliteWarId == param[1]) { + case TASK_TYPE.HERO_NUM: + { addCount = count; + break; } - break; - } - case TASK_TYPE.BATTLE_DUNGEON_WAR: - { - if (paramObj.warId == param[1]) { + case TASK_TYPE.PVP: + { addCount = count; + break; } - break; - } - case TASK_TYPE.HERO_NUM: - { - addCount = count; - break; - } - case TASK_TYPE.PVP: - { - addCount = count; - break; - } - case TASK_TYPE.GUILD_TRAIN_COUNT://trainId count&wardId& - { - if (paramObj.trainId == param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.HERO_UNLOCK:// - { - let camp = param[1] - let heroes = paramObj.dicHeroes.filter(hero => { return hero.camp == camp }) - addCount = heroes.length; - break; - } - case TASK_TYPE.GACHA_QUALITY_COUNT://count&quality& - { - let quality = param[1] - let heroes = paramObj.heroes.filter(hero => { return hero.quality == quality }) - addCount = heroes.length; - break; - } - case TASK_TYPE.ROLE_TERAPH_STAGE_UP:// - { - addCount = count; - break; - } - - case TASK_TYPE.HERO_WAKE_UP_COUNT: - { - - let hid = paramObj.hid; - if (recordData) { - record = recordData; - if (recordData.indexOf(hid) != -1) { - break; + case TASK_TYPE.GUILD_TRAIN_COUNT://trainId count&wardId& + { + if (paramObj.trainId == param[1]) { + addCount = count; } - } else { - record = []; + break; + } + case TASK_TYPE.HERO_UNLOCK:// + { + let camp = param[1] + let heroes = paramObj.dicHeroes.filter(hero => { return hero.camp == camp }) + addCount = heroes.length; + break; + } + case TASK_TYPE.GACHA_QUALITY_COUNT://count&quality& + { + let quality = param[1] + let heroes = paramObj.heroes.filter(hero => { return hero.quality == quality }) + addCount = heroes.length; + break; + } + case TASK_TYPE.ROLE_TERAPH_STAGE_UP:// + { + addCount = count; + break; } - addCount = count; - record.push(hid) + case TASK_TYPE.HERO_WAKE_UP_COUNT: + { + + let hid = paramObj.hid; + if (recordData) { + record = recordData; + if (recordData.indexOf(hid) != -1) { + break; + } + } else { + record = []; + } + + addCount = count; + record.push(hid) + break; + } + case TASK_TYPE.EQUIP_QUALITY_COUNT: + { + let quality = param[1] + let equips = paramObj.equips.filter(equip => { return equip.quality == quality }) + addCount = equips.length; + break; + } + default: + addCount = 0; break; - } - default: - addCount = 0; - break; - } - console.log('dddddddddddd', addCount, record) - return { addCount, record }; -} - -/** - * 创建账号时临时获得可开启功能,主要用于check 主公升级任务 - * 该函数不会存储funcs,如pvp开启会在entryHandler里面再查一次funcs,那时候正式开启 - * @param dataFuncs - * @param lv - */ -export async function getCreateUserFuncs(dataFuncs: number[], lv: number) { - let addFuncs: number[] = []; - for (let [id, dicFunSwitch] of gameData.funcsSwitch) { - if (dataFuncs.includes(id)) continue; // 已开启过了 - - if (dicFunSwitch && lv >= dicFunSwitch.param) { - addFuncs.push(id); } + console.log('dddddddddddd', addCount, record) + return { addCount, record }; } - return addFuncs; -} \ No newline at end of file + + /** + * 创建账号时临时获得可开启功能,主要用于check 主公升级任务 + * 该函数不会存储funcs,如pvp开启会在entryHandler里面再查一次funcs,那时候正式开启 + * @param dataFuncs + * @param lv + */ + export async function getCreateUserFuncs(dataFuncs: number[], lv: number) { + let addFuncs: number[] = []; + for (let [id, dicFunSwitch] of gameData.funcsSwitch) { + if (dataFuncs.includes(id)) continue; // 已开启过了 + + if (dicFunSwitch && lv >= dicFunSwitch.param) { + addFuncs.push(id); + } + } + return addFuncs; + } \ No newline at end of file