diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index 56fd5000c..cfbb7344e 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -77,7 +77,7 @@ export class ActivityHandler { // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP, 1) // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_TOWER_LV, 1, { towerLv: lv }) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GASHA, 1) + // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GACHA, 1) // if (lv == 2) { // await GTCreateListMessage('批量推送测试11', 259200000, '哈哈哈哈哈11', '噢噢噢噢噢噢噢噢11') diff --git a/game-server/app/servers/activity/handler/gachaHandler.ts b/game-server/app/servers/activity/handler/gachaHandler.ts index 7d30a0e15..d14e743c0 100644 --- a/game-server/app/servers/activity/handler/gachaHandler.ts +++ b/game-server/app/servers/activity/handler/gachaHandler.ts @@ -10,10 +10,9 @@ import { HeroModel } from "../../../db/Hero"; import { handleCost, createHeroes, addItems } from "../../../services/role/rewardService"; import { getZeroPointD, getTimeFun } from "../../../pubUtils/timeUtil"; import { UserGachaRecModel } from "../../../db/UserGachaRec"; -import { ActivityModel } from "../../../db/Activity"; -import { checkActivityTask, checkTask } from "../../../services/task/taskService"; import { RECRUIT } from "../../../pubUtils/dicParam"; import { getActivityById } from "../../../services/activity/activityService"; +import { checkTaskInGacha } from "../../../services/task/taskService"; export default function (app: Application) { new HandlerService(app, {}); @@ -98,16 +97,7 @@ export class GachaHandler { }); await UserGachaRecModel.createRec(roleId, gachaId, activityId, count, resultList); - - // 任务 - await checkTask(roleId, sid, TASK_TYPE.GASHA, count, true, {}); - //活动统计 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GASHA, count) - for (let hero of resultHeroes) { - activityData.push({ hid: hero.hid, quality: hero.quality }); - } - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GACHA_QUALITY_COUNT, count, { heroes: activityData }) - + await checkTaskInGacha(serverId, roleId, sid, count, resultHeroes); return resResult(STATUS.SUCCESS, { gachaId, activityId, freeCount, refFreeTime: userGacha.refFreeTime, count: userGacha.count, point: userGacha.point, floor, hope, @@ -470,13 +460,7 @@ export class GachaHandler { await UserGachaRecModel.createRec(roleId, gachaId, 0, count, resultList); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GASHA, count, true, {}); - //活动统计 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GASHA, count) - for (let hero of resultHeroes) { - activityData.push({ hid: hero.hid, quality: hero.quality }); - } - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GACHA_QUALITY_COUNT, count, { heroes: activityData }) + await checkTaskInGacha(serverId, roleId, sid, count, resultHeroes); return resResult(STATUS.SUCCESS, { hasInit: !!role.gachaHasGuide, diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index f73ec5aa6..b113c472b 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -692,10 +692,7 @@ export class ComBattleHandler { } // 任务 - await checkTaskWithArgs(roleId, sid, TASK_TYPE.CHAT, [getChannelType(CHANNEL_PREFIX.TEAM)]); - - //活动任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.CHAT, 1, { chatType: getChannelType(CHANNEL_PREFIX.TEAM) }) + await checkTaskWithArgs(serverId, roleId, sid, TASK_TYPE.CHAT, { chatType: getChannelType(CHANNEL_PREFIX.TEAM) }); return resResult(STATUS.SUCCESS); } diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 375573698..557dbf9a8 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -10,7 +10,7 @@ import { PvpDefenseModel, pvpUpdateInter } from '../../../db/PvpDefense'; import { PvpSeasonResultModel } from '../../../db/PvpSeasonResult'; import { PVPConfigModel } from '../../../db/SystemConfig'; import { Rank } from '../../../services/rankService'; -import { checkActivityTask, checkTask, checkTaskInPvpEnd } from '../../../services/task/taskService'; +import { checkTask, checkTaskInPvpEnd } from '../../../services/task/taskService'; import { Attack, AttackHero, Defense, DefenseHero, PvpDataReturn } from '../../../domain/battleField/pvp'; import { DEBUG_MAGIC_WORD, FIGURE_UNLOCK_CONDITION, ITEM_CHANGE_REASON, LINEUP_NUM, REDIS_KEY, TASK_TYPE } from '../../../consts'; import { PVP } from '../../../pubUtils/dicParam'; @@ -149,6 +149,7 @@ export class PvpHandler { const { warId, roleId: oppRoleId } = msg; let roleId = session.get('roleId'); let roleName = session.get('roleName'); + let serverId = session.get('serverId'); let sid = session.get('sid'); let warInfo = gameData.war.get(warId); @@ -180,7 +181,7 @@ export class PvpHandler { record: { heroes, pos: curOpp.pos, oppRoleId } } }, true); - await checkTask(roleId, sid, TASK_TYPE.PVP, 1, true, {}); + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP); // 对手记录更新 await PvpHistoryOppModel.setStatus(roleId, oppRoleId, 1); @@ -276,12 +277,7 @@ export class PvpHandler { let myRank = await r.getMyRank({ roleId }); result.setMyRank(myRank); - await checkTaskInPvpEnd(roleId, sid, isSuccess, pvpDefense.heroScores); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP, 1) - if (isSuccess) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP_WIN, 1) - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP_WIN_SERIES, 1) - } + await checkTaskInPvpEnd(serverId, roleId, sid, isSuccess, pvpDefense.heroScores); if(hisWinStreakNum < pvpDefense.hisWinStreakNum) { await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.PVP_WIN_SERIES, paramWinStreakNum: pvpDefense.hisWinStreakNum }]); } @@ -519,6 +515,7 @@ export class PvpHandler { let { id } = msg; let roleId = session.get('roleId'); let sid: string = session.get('sid'); + let serverId = session.get('serverId'); let roleName = session.get('roleName'); let seasonEndTime: number = this.app.get('pvpSeasonEndTime'); @@ -536,7 +533,7 @@ export class PvpHandler { await PvpDefenseModel.updateInfo(roleId, { receivedBox, challengeCnt, challengeRefTime }); let result = await addItems(roleId, roleName, sid, pvpBox.reward, ITEM_CHANGE_REASON.PVP_BOX_REWARD); // 任务 - await checkTask(roleId, sid, TASK_TYPE.PVP_RECEIVE_BOX, 1, true, {}); + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_RECEIVE_BOX); return resResult(STATUS.SUCCESS, { goods: result, receivedBox, challengeCnt, challengeRefTime }); } @@ -554,6 +551,7 @@ export class PvpHandler { let { heroScores: addHeroScores } = msg; let roleId = session.get('roleId'); let sid = session.get('sid'); + let serverId = session.get('serverId'); let { heroScores, hisScore } = await PvpDefenseModel.findByRoleId(roleId); let score = 0; @@ -584,7 +582,7 @@ export class PvpHandler { await r.setRankWithRoleInfo(roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), role); // 任务 - await checkTask(roleId, sid, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores }); + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_HERO_SCORE, { heroScores }); return resResult(STATUS.SUCCESS, { score, hisScore, heroScores }); } diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 9d77ecb6b..a7a5777aa 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -7,16 +7,13 @@ import { FrontendSession } from 'pinus'; import { HeroModel } from './../../../db/Hero'; import { genCode, generateStr, resResult } from '../../../pubUtils/util'; import { COM_BTL_QUALITY, HERO_SELECT, DEBUG_MAGIC_WORD, REDIS_KEY, TASK_TYPE, ENTERY_ROLE_PICK, COUNTER, DEFAULT_LV, TA_USERSET_TYPE, LOG_TYPE } from '../../../consts'; -import { getAp } from '../../../services/actionPointService'; -import { ItemModel } from '../../../db/Item'; -import { SkinModel } from '../../../db/Skin'; // import { loginRefresh } from '../../../services/playerEventService'; import { nowSeconds, getZeroPoint } from '../../../pubUtils/timeUtil'; import { rmRoleFromQueue, roleLeave, getRoleOnlineInfo, roleLogin } from '../../../services/redisService'; import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leaveGuildAuctionChannel, leaveGuildChannel, leaveSysChannel, leaveWorldAuctionChannel, leaveWorldChannel, recentGuildMsgs, recentPrivateChatInfos, recentSysMsgs, recentWorldMsgs } from '../../../services/chatService'; import { reportOneOnline, savePlayTime } from '../../../services/authenticateService'; -import { checkTaskWithRole, } from '../../../services/task/taskService'; +import { checkTaskInEntry, } from '../../../services/task/taskService'; import { pushData, everydayRefresh, kickUser } from '../../../services/connectorService'; // import { setComBtlOnUserLeave } from '../../../services/comBattleService'; import Counter from '../../../db/Counter'; @@ -65,7 +62,7 @@ export class EntryHandler { } } let serverName = this.app.getServerId(); - await roleLogin(role.roleId, user.userCode, serverName, user.pkgName); // 保存在线用户 + await roleLogin(role.roleId, user.userCode, serverName, user.pkgName, role.createTime); // 保存在线用户 await this.addSession(role, session); saveLoginAndOutLog(LOG_TYPE.LOGIN, session); @@ -75,9 +72,7 @@ export class EntryHandler { reportOneOnline(role.roleId, user.userCode, self.app.get('serverId'), true, user); // 任务 - checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SUM, role); - checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SERIES, role); - + checkTaskInEntry(serverId, role.roleId, self.app.get('serverId'), role); if (role.hasGuild) { addRoleToGuildChannel(role.roleId, self.app.get('serverId'), role.guildCode); } @@ -154,8 +149,7 @@ export class EntryHandler { let { serverId } = role; // 任务 - checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SUM, role); - checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SERIES, role); + checkTaskInEntry(serverId, role.roleId, self.app.get('serverId'), role); // 推送数据 pushData(role.hasInit, role, session, 'refresh'); diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 0df6bf309..51665d3f3 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -13,7 +13,7 @@ import { getDropItems, FIGURE_UNLOCK_CONDITION } from '../../../consts/constModu import { pushComposeOrangeHero, pushHeroQualityUpMsg, pushHeroStarMax, pushHeroWakeUp } from '../../../services/chatService'; import { calculatetopLineup } from '../../../pubUtils/playerCe'; import { PvpDefenseModel } from '../../../db/PvpDefense'; -import { checkTaskWithHero, checkTask, checkActivityTask } from '../../../services/task/taskService'; +import { checkTask, checkTaskInHeroQUalityUp, checkTaskInHeroStarUp, checkTaskInHeroTrain, checkTaskInHeroWakeUp } from '../../../services/task/taskService'; import { isNumber, pick } from 'underscore'; import { updateEplaces } from '../../../services/equipService'; import { addConsumeToHero } from '../../../services/roleService'; @@ -128,8 +128,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.LVUP, sid, roleId, hero, update); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_LV, hero, [oldLv]); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_LV, 1, { hid, lv: update.lv }); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_LV, { oldLv, hero }); const curHero = { hid, lv: hero.lv, exp: hero.exp @@ -194,12 +193,7 @@ export class HeroHandler { if (isUpStar) { await calAllHeroCe(HERO_SYSTEM_TYPE.STAR, sid, roleId, {}, [hid, isUpStar ? 1 : 0]); // 升星可能影响到百家学院全局加成 // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_STAR_UP, hero); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_STAR_UP, 1); - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_QUALITY_STAR_UP, hero); - //成长任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, 1, { quality: dicHero.quality, star: hero.star }); - + await checkTaskInHeroStarUp(serverId, roleId, sid, hero, oldStar); } const curHero = { @@ -254,11 +248,7 @@ export class HeroHandler { } hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, hero, update); await calAllHeroCe(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, {}, [hid, 0]); // 升品可能影响到百家学院全局加成 - - // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_QUALITY_UP, hero); - // 任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, 1, { oldQuality: dicHero.quality, quality: hero.quality }); + await checkTaskInHeroQUalityUp(serverId, roleId, sid, hero); const curHero = { hid, @@ -330,14 +320,10 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update); if (isUpStar) { await calAllHeroCe(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, {}, [hid, isUpStar ? 1 : 0]); // 升星可能影响到百家学院全局加成 - ; + // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_STAR_UP, hero); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_STAR_UP, 1); - await checkTask(roleId, sid, TASK_TYPE.HERO_WAKE_UP, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT, 1, { quality: hero.quality }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_WAKE_UP_COUNT, 1, { hid: hid }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT, 1, { quality: dicHero.quality, colorStar: update.colorStar }); + await checkTaskInHeroWakeUp(serverId, roleId, sid, hero, oldColorStar); + } const curHero = { hid, @@ -373,6 +359,7 @@ export class HeroHandler { let newJobStage = hero.jobStage; let oldJobStage = hero.jobStage, oldJob = hero.job; let max = isOneClick ? dicJob.maxStage: hero.jobStage + 1; + let trainCount = 0; let check = new CheckMeterial(roleId); for(let i = hero.jobStage; i < max; i++) { let singleConsume = dicJob.trainingConsume[i]; @@ -381,6 +368,7 @@ export class HeroHandler { let isEnough = await check.decrease([singleConsume]); if(!isEnough) break; // 消耗不足 newJobStage ++; + trainCount++; } if (newJobStage == hero.jobStage) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); let consumes = check.getConsume(); @@ -395,11 +383,7 @@ export class HeroHandler { } hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, update); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_TRAIN, hero, [oldJob, oldJobStage]); - await checkTask(roleId, sid, TASK_TYPE.HERO_TRAIN_SUM, newJobStage - oldJobStage, true, {}); - //活动统计 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_TRAIN_SUM, newJobStage - oldJobStage); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_TRAIN, newJobStage - oldJobStage, { hid }) + await checkTaskInHeroTrain(serverId, roleId, sid, hero, trainCount); return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, job: hero.job, jobStage: hero.jobStage } }); } @@ -436,8 +420,7 @@ export class HeroHandler { } hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, update); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_STAGE_UP, hero); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_STAGE_UP, 1, { job: hero.job }); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_STAGE_UP, { hero, stageUpCnt: 1 }) return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, job: hero.job, jobStage: hero.jobStage } }); } @@ -446,6 +429,7 @@ export class HeroHandler { async heroConectionActivate(msg: { shipId: number }, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let serverId: number = session.get('serverId'); let { shipId } = msg; let shipHidAndLevel = gameData.friendShipHidAandIds.get(shipId); @@ -493,7 +477,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.CONNECT, sid, roleId, hero, update, [shipId]); // 任务 - await checkTask(roleId, sid, TASK_TYPE.HERO_CONNECT, 1, true, { connectLv: level }) + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_CONNECT, { connectLv: level }) return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, connections: hero.connections } }); } @@ -573,8 +557,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.FAVOUR, sid, roleId, hero, update, [oldLv]); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, hero, [oldLv]); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_FAVOUR_LV, 1, { lv: newLv, oldLv }); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, { hero, oldFavourLv: oldLv }); } else { hero = await HeroModel.updateHeroInfo(roleId, hero.hid, update); } diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 886cd6686..55c6979f5 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -16,7 +16,7 @@ import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAUL import { checkBattleHeroesByHid, roleLevelup } from '../../../services/normalBattleService'; import { Rank } from '../../../services/rankService'; import { updateUserInfo } from '../../../services/redisService'; -import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/task/taskService'; +import { checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/task/taskService'; import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils'; import { RScriptRecordModel } from '../../../db/RScriptRecord'; import { SkinModel, SkinUpdate } from '../../../db/Skin'; @@ -61,7 +61,6 @@ export class RoleHandler { infos.set(heroInfo.hid, { heroInfo, skinInfo }); } await createHero.createWithInitInfo(infos, initInfos.figureInfo); - await createHero.clearTask(await getActivities()); await createHero.pushMessage(sid); await createHero.updateRedisRank(); let heroes = createHero.getResultHeroes(); diff --git a/game-server/app/servers/role/handler/taskHandler.ts b/game-server/app/servers/role/handler/taskHandler.ts index 6a8384ee9..7f78cbb6c 100644 --- a/game-server/app/servers/role/handler/taskHandler.ts +++ b/game-server/app/servers/role/handler/taskHandler.ts @@ -228,7 +228,7 @@ export class ShopHandler { tasks.push(task); } let task = getRandSingleEelm(tasks); - await checkTask(roleId, sid, task.taskType, task.condition, false, { isDebug: true }); + // await checkTask(roleId, sid, task.taskType, task.condition, false, { isDebug: true }); return resResult(STATUS.SUCCESS, { task }); @@ -332,9 +332,6 @@ export class ShopHandler { let sid = session.get('sid'); let role = await RoleModel.findByRoleId(roleId); let server = await ServerlistModel.findByServerId(serverId); - let task = new CheckTask(serverId, roleId, TASK_TYPE.LOGIN_SUM, role.createTime, server.openTime); - task.param.setRole(role); - task.check(1, sid); return resResult(STATUS.SUCCESS) } } \ No newline at end of file diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index a89509f33..27ab6c8b3 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -8,8 +8,7 @@ import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS, KING_EXP_RATIO_TYPE, ITEM_C import { BackendSession, pinus } from 'pinus'; import { REDIS_KEY } from '../consts'; import { Rank } from './rankService'; -import { checkActivityTask, checkTask } from './task/taskService'; -import { accomplishTask } from '../pubUtils/taskUtil'; +import { checkTask } from './task/taskService'; import { RScriptRecordModel } from '../db/RScriptRecord'; import { setAp } from './actionPointService'; import { resResult } from '../pubUtils/util'; @@ -45,9 +44,7 @@ export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kin await r.setRankWithRoleInfo(roleId, newLv, Date.now(), role); // 任务 - await checkTask(roleId, session.get('sid'), TASK_TYPE.ROLE_LV, newLv, false, {}); - //成长任务 - await checkActivityTask(serverId, session.get('sid'), roleId, TASK_TYPE.ROLE_LV, newLv); + await checkTask(serverId, roleId, session.get('sid'), TASK_TYPE.ROLE_LV, { oldLv: lv, lv: newLv }); // 弹出礼包 await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.LV_TO, { oldLv: lv, newLv }) diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 2191f7e5e..83a8e41c8 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -307,8 +307,8 @@ export async function clearChannelServers() { * @param userCode user表唯一字符串标识 * @param sid connector服的那个sid */ -export async function roleLogin(roleId: string, userCode: string, sid: string, pkgName: string) { - let param = { userCode, sid, pkgName }; +export async function roleLogin(roleId: string, userCode: string, sid: string, pkgName: string, createTime: number) { + let param = { userCode, sid, pkgName, createTime }; return await redisClient().hsetAsync(REDIS_KEY.ONLINE_USERS, roleId, JSON.stringify(param)); } @@ -344,7 +344,8 @@ export async function getRoleOnlineInfo(roleId: string) { isOnline: true, userCode: result.userCode, sid: result.sid, - pkgName: result.pkgName + pkgName: result.pkgName, + createtime: result.createTime } } catch(e) { return { isOnline: false } @@ -354,6 +355,15 @@ export async function getRoleOnlineInfo(roleId: string) { } } +export async function getRoleCreateTime(roleId: string) { + let onlineInfo = await getRoleOnlineInfo(roleId); + if(onlineInfo.isOnline) { + return onlineInfo.createtime; + } else { + return null + } +} + /** * 获得所有在线的玩家 */ @@ -440,16 +450,16 @@ export async function readDataBase() { async function setServerList() { const serverList = await ServerlistModel.getAllServerList(); - await redisClient().delAsync(REDIS_KEY.DB_GAME); + await redisClient().delAsync(REDIS_KEY.SERVER); - for(let { id, name } of serverList) { + for(let { id, name, openTime } of serverList) { // console.log(roleId); - await redisClient().hsetAsync(REDIS_KEY.DB_GAME, `${id}`, name); + await redisClient().hsetAsync(REDIS_KEY.SERVER, `${id}`, `${name}|${openTime}`); } } export async function getAllServers() { - let servers = await redisClient().hgetallAsync(REDIS_KEY.DB_GAME); + let servers = await redisClient().hgetallAsync(REDIS_KEY.SERVER); let serverlist = new Array(); for(let serverStr in servers) { let serverId = parseInt(serverStr); @@ -462,10 +472,17 @@ export async function getAllServers() { } export async function getServerName(serverId: number) { - let name = await redisClient().hgetAsync(REDIS_KEY.DB_GAME, `${serverId}`); + let value = await redisClient().hgetAsync(REDIS_KEY.SERVER, `${serverId}`); + let name = value.split('|')[0]; return name||'常山少年' } +export async function getServerCreateTime(serverId: number) { + let value = await redisClient().hgetAsync(REDIS_KEY.SERVER, `${serverId}`); + let time = value.split('|')[1]; + return parseInt(time); +} + export function redisClient() { const client: Redis.RedisClient = pinus.app.get('redis'); return client; diff --git a/game-server/app/services/role/createHero.ts b/game-server/app/services/role/createHero.ts index 8ae70d02e..750866b68 100644 --- a/game-server/app/services/role/createHero.ts +++ b/game-server/app/services/role/createHero.ts @@ -4,7 +4,6 @@ import { HeroModel, HeroSkin, HeroType, HeroUpdate } from "../../db/Hero"; import { RoleModel, RoleType, RoleUpdate } from "../../db/Role"; import { SkinUpdate } from "../../db/Skin"; import { Figure, TopHero } from "../../domain/dbGeneral"; -import { accomplishTask, checkTask, checkTaskWithHeroes } from '../../pubUtils/taskUtil'; import { combineFigureInfo, unlockFigureWithoutSave } from '../../pubUtils/itemUtils'; import { TaskListReturn } from "../../domain/roleField/task"; import { GuildModel, GuildType } from "../../db/Guild"; @@ -15,10 +14,10 @@ import { nowSeconds } from "../../pubUtils/timeUtil"; import { saveCeChangeLog } from "../../pubUtils/logUtil"; import { reduceCe, resResult } from "../../pubUtils/util"; import { AttributeCal } from "../../domain/roleField/attribute"; -import { ActivityInRemote } from "../../domain/activityField/activityField"; import { HeroShowParam } from "../../domain/roleField/hero"; import { pinus } from "pinus"; import { Rank } from "../rankService"; +import { checkTaskInCreateHero } from "../task/taskService"; export class UpdateHeroes { roleId: string; @@ -188,36 +187,17 @@ export class CreateHeroes extends UpdateHeroes { this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, heroeInfos); } - public async clearTask(activitiesTypeMap: ActivityInRemote[]) { - // 任务 - // console.log('****** checkTask before', Date.now()) - let m1 = await checkTask(this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, true, {}); - let m2 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_QUALITY, this.resultHeroes); - let m3 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, this.resultHeroes); - let m4 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_LV, this.resultHeroes); - this.taskPushMessage.push(...m1, ...m2, ...m3, ...m4); - // console.log('****** checkTask after', Date.now()) - //成长任务 - // console.log('****** accomplishTask before', Date.now()) - let mm1 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, null, activitiesTypeMap) - console.log('****mn1', mm1) - let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }, activitiesTypeMap); - // console.log('****** accomplishTask after', Date.now()) - this.activityTaskPushMessage.push(...mm1, ...mm2); - } - public async pushMessage(sid: string) { let role = await this.getRole(); let uids = [{ uid: this.roleId, sid }]; pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: this.pushHeroes.map(cur => { return {...cur, ce: reduceCe(cur.ce), incHeroCe: reduceCe(cur.incHeroCe) }}), topLineupCe: reduceCe(role.topLineupCe) }), uids); - pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, this.taskPushMessage), uids); - pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, this.activityTaskPushMessage), uids); let figureInfo = combineFigureInfo(this.figureInfos); if (!!figureInfo && (figureInfo.heads.length > 0 || figureInfo.frames.length > 0 || figureInfo.spines.length > 0)) { pinus.app.get('channelService').pushMessageByUids('onHeadChange', resResult(STATUS.SUCCESS, { ...figureInfo }), uids); } pinus.app.get('channelService').pushMessageByUids('onHeroSkinChange', resResult(STATUS.SUCCESS, this.skinPushMessages), uids); pinus.app.get('channelService').pushMessageByUids('onHeroUpdate', resResult(STATUS.SUCCESS, { heroes: this.getResultHeroes() }), uids); + checkTaskInCreateHero(this.serverId, this.roleId, sid, this.heroNum, this.resultHeroes) } public getResultHeroes() { diff --git a/game-server/app/services/role/rewardService.ts b/game-server/app/services/role/rewardService.ts index a837224e8..0c42bcee2 100644 --- a/game-server/app/services/role/rewardService.ts +++ b/game-server/app/services/role/rewardService.ts @@ -600,7 +600,6 @@ export async function createHeroes(roleId: string, roleName: string, sid: string if (infos.size > 0) { let createHero = new CreateHeroes(roleId, roleName, serverId); await createHero.createWithHeroInfo(infos); - await createHero.clearTask(await getActivities()) await createHero.pushMessage(sid); await createHero.updateRedisRank(); heroes = createHero.getShowHeroes(); diff --git a/game-server/app/services/task/taskObj.ts b/game-server/app/services/task/taskObj.ts index 5ff80e536..3341c941e 100644 --- a/game-server/app/services/task/taskObj.ts +++ b/game-server/app/services/task/taskObj.ts @@ -1,5 +1,6 @@ import { pinus } from "pinus"; -import { ACTIVITY_TYPE, STATUS, TASK_SUM_TYPE, TASK_TYPE } from "../../consts"; +import { ABI_STAGE, ACTIVITY_TYPE, STATUS, TASK_SUM_TYPE, TASK_TYPE, WAR_TYPE } from "../../consts"; +import { ActivityModelType } from "../../db/Activity"; import { ActivityBuyRecordsModel } from "../../db/ActivityBuyRecords"; import { ActivityDailyChallengesModel } from "../../db/ActivityDailyChallenges"; import { ActivityGrowthModel } from "../../db/ActivityGrowth"; @@ -7,7 +8,7 @@ import { ActivityGrowthFundModel } from "../../db/ActivityGrowthFund"; import { ActivityRefreshTaskModel } from "../../db/ActivityRefreshTask"; import { ActivityThirtyDaysModel } from "../../db/ActivityThirtyDays"; import { ActivityTreasureHuntTaskModel } from "../../db/ActivityTreasureHuntTask"; -import { RoleType } from "../../db/Role"; +import { RoleModel, RoleType } from "../../db/Role"; import { ServerTempModel, ServerTempModelType } from "../../db/ServerTemp"; import { UserTaskRecModel } from "../../db/UserTaskRec"; import { GrowthFundData } from "../../domain/activityField/growthFundField"; @@ -15,57 +16,169 @@ import { RefreshTaskData } from "../../domain/activityField/refreshTaskField"; import { SevenDaysData } from "../../domain/activityField/sevenDaysField"; import { ThirtyDaysData } from "../../domain/activityField/thirtyDaysField"; import { TreasureHuntData } from "../../domain/activityField/treasureHuntField"; -import { TaskListReturn, UpdateTaskParam } from "../../domain/roleField/task"; +import { TaskListReturn, TaskParam, TaskParamInter, UpdateTaskParam } from "../../domain/roleField/task"; import { gameData } from "../../pubUtils/data"; import { getZeroPoint } from "../../pubUtils/timeUtil"; import { resResult } from "../../pubUtils/util"; import { getActivities, getActivitiesByType, getActivityByServerId } from "../activity/activityService"; -import { getRoleOnlineInfo } from "../redisService"; +import { getRoleCreateTime, getRoleOnlineInfo, getServerCreateTime } from "../redisService"; + +export class CheckTask { + serverId: number; // 区id + roleId: string; // 玩家id + role?: RoleType; + roleCreateTime: number; // 玩家的创建时间 + serverCreateTime: number; // 服务器的创建时间 + + taskPushMessages: TaskListReturn[] = []; + activityTaskPushMessages = []; + + treasureHuntTemp: ServerTempModelType; + tasks: CheckSingleTask[] = []; + + constructor(serverId: number, roleId: string) { + this.serverId = serverId; + this.roleId = roleId; + } + + public setParam(taskType: TASK_TYPE, param: TaskParamInter) { + let task = new CheckSingleTask(taskType, this); + task.param.setParam(param); + this.tasks.push(task); + } + + public async saveAndPush(sid: string) { + for(let task of this.tasks) { + await task.check(); + } + await this.pushMessage(sid); + } + + public setRole(role: RoleType) { + this.role = role; + } + + // 用于活动任务:获取服务器开服时间 + async getServerCreateTime() { + if(!this.serverCreateTime) { + this.serverCreateTime = await getServerCreateTime(this.serverId); + } + return this.serverCreateTime; + } + + // 用于活动任务:获取玩家创建时间 + async getRoleCreateTime() { + if(!this.roleCreateTime) { + if(this.role) { + this.roleCreateTime = this.role?.createTime; + } else { + this.roleCreateTime = await getRoleCreateTime(this.roleId); + } + } + if(!this.roleCreateTime) { + let role = await RoleModel.findByRoleId(this.roleId); + this.role = role; + this.roleCreateTime = role.createTime; + } + return this.roleCreateTime; + } + + // 神州探秘活动 + async getTreasureHuntTemp() { + if(this.treasureHuntTemp) return this.treasureHuntTemp; + + let tempData: ServerTempModelType = await ServerTempModel.findData(this.serverId); + if (tempData) { + this.treasureHuntTemp = tempData; + return tempData + } else { + return null + } + } + + // 推送 + public async pushMessage(sid: string) { + let roleId = this.roleId; + if (!sid) { + let onlineUser = await getRoleOnlineInfo(roleId); + sid = onlineUser.sid; + } + let uids = [{ uid: roleId, sid }]; + if(!!sid) { + if (this.taskPushMessages.length > 0) { + pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, this.taskPushMessages), uids); + } + if (this.activityTaskPushMessages.length > 0) { + pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, this.activityTaskPushMessages), uids); + } + } + } + +} /** * @class CheckTask * @classdesc 检查某个玩家任务的达成情况 */ -export class CheckTask { +export class CheckSingleTask { serverId: number; // 区id roleId: string; // 玩家id taskType: TASK_TYPE; // 任务type - roleCreateTime: number; // 玩家的创建时间 - serverCreateTime: number; // 服务器的创建时间 - + parent: CheckTask; param: TaskParam; // 检查任务时传入的参数 - treasureHuntTemp: ServerTempModelType; - - constructor(serverId: number, roleId: string, taskType: TASK_TYPE, roleCreateTime: number, serverCreateTime: number) { - this.serverId = serverId; - this.roleId = roleId; + constructor(taskType: TASK_TYPE, parent: CheckTask) { this.taskType = taskType; - this.roleCreateTime = roleCreateTime; - this.serverCreateTime = serverCreateTime; + this.parent = parent; + this.serverId = parent.serverId; + this.roleId = parent.roleId; this.param = new TaskParam(); } + private addTaskPushMessage(...param: TaskListReturn[]) { + this.parent.taskPushMessages.push(...param); + } + + private addActivityTaskPushMessage(...param: any[]) { + this.parent.activityTaskPushMessages.push(...param); + } + + private getServerCreateTime() { + return this.parent.getServerCreateTime(); + } + + private getRoleCreateTime() { + return this.parent.getRoleCreateTime(); + } + + private getRole() { + return this.parent.role; + } + /** * @description 检查任务的主程序 */ - public async check(count: number, sid: string) { - let { taskType, roleId, serverId, roleCreateTime, serverCreateTime } = this; + public async check() { + let { taskType, roleId, serverId } = this; + let serverCreateTime = await this.getServerCreateTime(); + let roleCreateTime = await this.getRoleCreateTime(); + let param = this.param; let dicTaskTypeDesc = gameData.taskDescByType.get(taskType); - let taskPushMessages: TaskListReturn[] = []; - let activityTaskPushMessages = []; // 检查一般任务 let dicTasks = gameData.taskType.get(taskType); for (let dicTask of dicTasks) { - let taskUpdateParam = this.checkIsMatch(dicTask.taskParam, count); + let taskUpdateParam = await this.checkIsMatch(dicTask.taskParam, async () => { + let data = await UserTaskRecModel.findByRoleAndGroup(roleId, dicTask.type, taskType, dicTask.group); + return data? data.records: [] + }); if (taskUpdateParam) { - let rec = await UserTaskRecModel.checkAndUpdateTask(roleId, dicTask.type, taskType, dicTask.group, taskUpdateParam); + let rec = await UserTaskRecModel.setOrIncTask(roleId, dicTask.type, taskType, dicTask.group, taskUpdateParam); if (!rec) continue; if (rec.received && rec.received.includes(dicTask.id)) continue; // 已领取,不再推送 let received = rec.received || []; - taskPushMessages.push({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) }); + this.addTaskPushMessage({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) }); } } @@ -83,11 +196,14 @@ export class CheckTask { let playerData = new SevenDaysData(activity, roleCreateTime, serverCreateTime); let growthTaskArray = playerData.growth.findTaskByType(taskType); // 所有任务 for (let task of growthTaskArray) { - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityGrowthModel.findDataByCellIndex(serverId, activityId, roleId, task.dayIndex, task.cellIndex); + return data? data.records: [] + }); if(taskUpdateParam) { - let rec = await ActivityGrowthModel.checkAndUpdateTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityGrowthModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "growth" }); + this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "growth" }); } } //今日挑战统计 @@ -96,11 +212,14 @@ export class CheckTask { if(dicTaskTypeDesc.sumType == TASK_SUM_TYPE.DO && task.dayIndex != playerData.today()) { continue; } - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityDailyChallengesModel.findDataByCellIndex(serverId, activityId, roleId, task.dayIndex, task.cellIndex); + return data? data.records: [] + }); if(taskUpdateParam) { - let rec = await ActivityDailyChallengesModel.checkAndUpdateTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityDailyChallengesModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "daily" }); + this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "daily" }); } } break; @@ -111,11 +230,14 @@ export class CheckTask { let taskActivity = new RefreshTaskData(activity, roleCreateTime, serverCreateTime); let taskArray = taskActivity.findTaskByType(taskType); for (let task of taskArray) { - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityRefreshTaskModel.findDataById(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id); + return data? data.records: [] + }); if(taskUpdateParam) { - let rec = await ActivityRefreshTaskModel.checkAndUpdateTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskUpdateParam); + let rec = await ActivityRefreshTaskModel.setOrIncTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId }); + this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId }); } } break; @@ -123,16 +245,19 @@ export class CheckTask { case ACTIVITY_TYPE.TREASURE_HUNT: { // 寻宝奇兵任务 - let tempData = await this.getTreasureHuntTemp(); + let tempData = await this.parent.getTreasureHuntTemp(); if(tempData && tempData.huntActivityId == activityId) { let playerData = new TreasureHuntData(activity, roleCreateTime, serverCreateTime); let taskArray = playerData.tasks.findItemByTaskType(taskType); for (let task of taskArray) { - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityTreasureHuntTaskModel.findDataByCellIndex(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex); + return data? data.records: []; + }); if(taskUpdateParam) { - let rec = await ActivityTreasureHuntTaskModel.checkAndUpdateTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityTreasureHuntTaskModel.setOrIncTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({ ...task, totalCount: rec.totalCount, activityId }); + this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId }); } } } @@ -144,11 +269,14 @@ export class CheckTask { let thirtyDaysActivity = new ThirtyDaysData(activity, roleCreateTime, serverCreateTime); let taskArray = thirtyDaysActivity.findTaskByType(taskType); for (let task of taskArray) { - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityThirtyDaysModel.findDataByCellIndex(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab); + return data? data.records: []; + }); if(taskUpdateParam) { - let rec = await ActivityThirtyDaysModel.checkAndUpdateTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskUpdateParam); + let rec = await ActivityThirtyDaysModel.setOrIncTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({ ...task, totalCount: rec.totalCount, activityId }); + this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId }); } } break; @@ -158,17 +286,7 @@ export class CheckTask { { //主线成长基金 if(taskType != TASK_TYPE.BATTLE_MAIN) continue; - - let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); - let playerRecords = 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(this.param.warId); - //推送 - activityTaskPushMessages.push(...taskArray); + await this.checkFundAcctivityTask(activity, param.warId); break; } case ACTIVITY_TYPE.GROWTH_FUND_TOWER: @@ -176,17 +294,7 @@ export class CheckTask { { //镇念塔成长基金 if(taskType != TASK_TYPE.BATTLE_TOWER_LV) continue; - - let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); - let playerRecords = 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(this.param.towerLv); - //推送 - activityTaskPushMessages.push(...taskArray); + await this.checkFundAcctivityTask(activity, param.towerLv); break; } case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE: @@ -194,77 +302,448 @@ export class CheckTask { { //精英成长基金 if(taskType != TASK_TYPE.BATTLE_MAIN_ELITE) continue; - - let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); - let playerRecords = 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(this.param.warId); - //推送 - activityTaskPushMessages.push(...taskArray); + await this.checkFundAcctivityTask(activity, param.warId); break; } } } - if (taskPushMessages.length > 0) { - if (!sid) { - let onlineUser = await getRoleOnlineInfo(roleId); - sid = onlineUser.sid; - } - if (!!sid) { - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, taskPushMessages), uids); - } - } - if (activityTaskPushMessages?.length > 0) { - if (!sid) { - let onlineUser = await getRoleOnlineInfo(roleId); - sid = onlineUser.sid; - } - if (!!sid) { - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, activityTaskPushMessages), uids); - } - } } - public checkIsMatch(dicTaskParam: number[], count: number): UpdateTaskParam { + private async checkFundAcctivityTask(activity: ActivityModelType, unlockParam: number) { + let serverCreateTime = await this.getServerCreateTime(); + let roleCreateTime = await this.getRoleCreateTime(); + let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); + let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, this.roleId); + growthFundActivity.setPlayerRecords(playerRecords); + if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 + let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, this.roleId); + growthFundActivity.initBuyRecords(buyRecords); + } + let taskArray = growthFundActivity.unLockItem(unlockParam); + //推送 + this.addActivityTaskPushMessage(...taskArray); + } + + public async checkIsMatch(dicTaskParam: number[], getRecord: () => Promise) { let param = this.param; + let result: UpdateTaskParam = null; switch(this.taskType) { - case TASK_TYPE.LOGIN_SUM: + case TASK_TYPE.LOGIN_SUM: // 1. 累计登录 x 天 { + let role = this.getRole(); let today = getZeroPoint(); - if (today > param.role.loginTime) { - return { inc: count } + if (today > role.loginTime) { + result = { inc: 1 } } + break; + } + case TASK_TYPE.LOGIN_SERIES: // 2. 连续登录 x 天 + { + let role = this.getRole(); + let today = getZeroPoint(); + if (today > role.loginTime) { + if (today - role.loginTime > 24 * 60 * 60) { + result = { set: 1 } + } else { + result = { inc: 1 } + } + } + break; + } + case TASK_TYPE.ROLE_LV: // 3. 主公达x级 + { + let { lv, oldLv } = param; + if(oldLv < dicTaskParam[0] && lv >= dicTaskParam[0]) { + result = { set: lv } + } + break; + } + case TASK_TYPE.GACHA: // 4. 招募x次 + { + let { count } = param; + result = { inc: count }; + break; + } + case TASK_TYPE.HERO_NUM: // 5. 拥有x名武将 + { + let { heroNum } = param; + result = { inc: heroNum }; + break; + } + case TASK_TYPE.HERO_STAR_UP: // 6. x名武将升星x次 + { + let { hero } = param; + let records = await getRecord(); + let count = 0, index = -1; + for(let i = 0; i < records.length; i++) { + let arr = records[i].split('|'); + if(parseInt(arr[0]) == hero.hid) { + count = parseInt(arr[1]); + index = i; + break; + } + } + if(count + 1 >= dicTaskParam[1]) { + records[index] = `${hero.hid}_${count + 1}`; + result = { inc: 1, records } + } else { + records.push(`${hero.hid}_${count + 1}`); + result = { records } + } + break; + } + case TASK_TYPE.HERO_QUALITY: // 7. 拥有x名初始x品质武将 + { + let { heroes } = param; + let num = 0; + for(let { hid } of heroes) { + let dicHero = gameData.hero.get(hid); + if(dicHero.quality == dicTaskParam[1]) { + num ++; + } + } + result = { inc: num }; + break; + } + case TASK_TYPE.HERO_QUALITY_STAR_UP: // 8. x名x品质升至x星 + { + let { heroes, hero, oldStar } = param; + if(param.heroes) { // 创建武将的时候 + let num = 0; + for(let { hid, star } of heroes) { + let dicHero = gameData.hero.get(hid); + if(dicHero.quality == dicTaskParam[1] && star == dicTaskParam[2]) { + num ++; + } + } + result = { inc: num }; + } else { // 武将升星的时候 + let dicHero = gameData.hero.get(hero.hid); + if(dicHero.quality == dicTaskParam[1] && hero.star >= dicTaskParam[2] && oldStar < dicTaskParam[2]) { + result = { inc: 1 } + } + } + break; + } + case TASK_TYPE.HERO_LV: // 9. x名武将升至x级 + { + let { heroes, hero, oldLv } = param; + if(heroes) { // 创建武将的时候 + let num = 0; + for(let { lv } of heroes) { + if(lv >= dicTaskParam[1]) { + num ++; + } + } + result = { inc: num }; + } else { // 武将升级的时候 + if(hero.lv >= dicTaskParam[1] && oldLv < dicTaskParam[1]) { + result = { inc: 1 } + } + } + break; + } + case TASK_TYPE.HERO_TRAIN: // 10. x名武将各训练x次 + { + let { hero, trainCount } = param; + let records = await getRecord(); + let count = 0, index = -1; + for(let i = 0; i < records.length; i++) { + let arr = records[i].split('|'); + if(parseInt(arr[0]) == hero.hid) { + count = parseInt(arr[1]); + index = i; + break; + } + } + if( count < dicTaskParam[1] && count + trainCount >= dicTaskParam[1]) { + records[index] = `${hero.hid}_${count + trainCount}`; + result = { inc: 1, records } + } else { + records.push(`${hero.hid}_${count + trainCount}`); + result = { records } + } + break; + } + case TASK_TYPE.HERO_QUALITY_UP: // 11. x名武将进行升品 + { + let { hero } = param; + let records = await getRecord(); + if(records.indexOf(`${hero.hid}`) == -1) { + records.push(`${hero.hid}`); + result = { records, inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_WAKE_UP: // 12.武将觉醒x次 + { + let { hero, oldColorStar } = param; + if(oldColorStar == 0 && hero.colorStar > 0) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_TRAIN_SUM: // 13. 训练x次 + { + let { trainCount } = param; + result = { inc: trainCount }; + break; + } + case TASK_TYPE.HERO_STAGE_UP: // 14. x名武将各兵种进阶x次 + { + let { hero, stageUpCnt } = param; + let records = await getRecord(); + let count = 0, index = -1; + for(let i = 0; i < records.length; i++) { + let arr = records[i].split('|'); + if(parseInt(arr[0]) == hero.hid) { + count = parseInt(arr[1]); + index = i; + break; + } + } + if( count < dicTaskParam[1] && count + stageUpCnt >= dicTaskParam[1]) { + records[index] = `${hero.hid}_${count + stageUpCnt}`; + result = { inc: 1, records } + } else { + records.push(`${hero.hid}_${count + stageUpCnt}`); + result = { records } + } + break; + } + case TASK_TYPE.HERO_FAVOUR_LV: // 15. + { + let { hero, oldFavourLv } = param; + if(dicTaskParam[1] > oldFavourLv && dicTaskParam[1] <= hero.favourLv) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_CONNECT: // 16. 激活x次 x星 武将羁绊 + { + let { connectLv } = param; + if(dicTaskParam[1] == connectLv) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.CHAT: + { + if (dicTaskParam[0] == 0 || dicTaskParam[0] == param.chatType) { + result = { inc: param.count }; + } + break; + } + case TASK_TYPE.FRIEND_NUM: + { + let role = this.getRole(); + result = { set: role.friendCnt }; + break; + } + case TASK_TYPE.BATTLE_WITH_HERO: // 38. 使用hId武将挑战x关卡x次 + { + let { warId, battleHeroes } = param; + if(this.checkIdList(dicTaskParam, 2, warId) && battleHeroes.indexOf(dicTaskParam[0]) != -1) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.BATTLE_MAIN: // 39. 主线通关第x关 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.NORMAL) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_MAIN_SWEEP: // 40. 主线扫荡X次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.NORMAL) { + result = { inc: count } + } + break; + } + case TASK_TYPE.BATTLE_DAILY_STAR: // 42. 每日x星通关 x 次 + { + let { warId, battleStar } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.DAILY && (dicTaskParam[0] == 0|| dicTaskParam[0] == battleStar) && this.checkIdList(dicTaskParam, 2, warId)) { + result = { inc: 1 } + } + break; + } + case TASK_TYPE.BATTLE_DAILY: // 43. 每日关卡挑战x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if(dicTaskParam[0] == 0 || dicTaskParam[0] == dicWar.dailyType) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_DUNGEON: // 44. 参与秘境x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if(dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_DUNGEON_WAR: // 45. 秘境通关x关x难度 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE && this.checkIdList(dicTaskParam, 0, warId)) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_TOWER: // 47. 通关镇念塔x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.TOWER) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_VESTIGE: // 48. 挑战遗迹x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.VESTIGE) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_EXPEDITION: // 49. 开启远征x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.EXPEDITION) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.COM_BATTLE_CREATE_TEAM: // 51. 寻宝招募队友x次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.COM_BATTLE_ASSIST_TEAM: // 53. 协助寻宝x次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.COM_BATTLE: // 54. 组队寻宝 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.PVP_RECEIVE_BOX: // 59. 领取x次pvp巅峰之路宝箱 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.PVP: // 57. pvp挑战 x 次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.PVP_WIN: // 58. pvp胜利 x 次 + { + let { isSuccess } = param; + if(isSuccess) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.PVP_WIN_SERIES: // 60. pvp连胜x次 + { + let { isSuccess } = param; + if (isSuccess) { + result = { inc: 1 }; + } else { + result = { set: 0 }; + } + break; + } + case TASK_TYPE.PVP_HERO_SCORE: // 61. pvp拥有x个积分达到x的武将 + { + let { heroScores } = param; + let count = 0; + for (let { score } of heroScores) { + if (score >= dicTaskParam[0]) { + count++; + } + } + if (count > 0) { + result = { set: count }; + } + break; + + } + case TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT: // 74. x名初始x品质武将升至X品质 + { + let { hero } = param; + let dicHero = gameData.hero.get(hero.hid); + if(dicHero.quality == dicTaskParam[1] && hero.quality == dicTaskParam[2]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT: // 75. x名初始x品质武将觉醒 + { + let { hero, oldColorStar } = param; + let dicHero = gameData.hero.get(hero.hid); + if(dicTaskParam[1] == dicHero.quality && oldColorStar == 0 && hero.colorStar > 0) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT: // 76. x名武将觉醒后升至x星 + { + let { hero, oldColorStar } = param; + if(dicTaskParam[1] > oldColorStar && hero.colorStar >= dicTaskParam[1]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.GACHA_QUALITY_COUNT: // 81. 抽到*次品质*武将 + { + let { heroes } = param; + let count = 0; + for (let hero of heroes) { + let dicHero = gameData.hero.get(hero.hid); + if(dicHero.quality == dicTaskParam[1]) count++; + } + if(count > 0) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.HERO_WAKE_UP_COUNT: // 84. x名武将觉醒 + { + let { hero, oldColorStar } = param; + if(oldColorStar == 0 && hero.colorStar > 0) { + result = { inc: 1 }; + } + break; } } + return result } - - private async getTreasureHuntTemp() { - if(this.treasureHuntTemp) return this.treasureHuntTemp; - - let tempData: ServerTempModelType = await ServerTempModel.findData(this.serverId); - if (tempData) { - this.treasureHuntTemp = tempData; - return tempData - } else { - return null - } + + private checkIdList(taskParam: number[], index: number, id: number) { + let count = taskParam[index]; + if (!count) return false; + let idList = taskParam.slice(index + 1, index + 1 + count); + return idList.indexOf(id) != -1; } -} - -class TaskParam { - role?: RoleType; // 玩家数据 - warId?: number; - towerLv?: number; - - public setRole(role: RoleType) { - this.role = role; - } - + } diff --git a/game-server/app/services/task/taskService.ts b/game-server/app/services/task/taskService.ts index 0352bfdaf..b4a71115b 100644 --- a/game-server/app/services/task/taskService.ts +++ b/game-server/app/services/task/taskService.ts @@ -1,9 +1,8 @@ -import * as taskUtil from '../../pubUtils/taskUtil'; import { RoleModel, RoleType } from '../../db/Role'; import { pinus, FrontendOrBackendSession } from 'pinus'; import { resResult, shouldRefresh } from '../../pubUtils/util'; import { STATUS, TASK_TYPE, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, WAR_TYPE } from '../../consts'; -import { TaskParam, TaskListReturn } from '../../domain/roleField/task'; +import { TaskParamInter, TaskListReturn } from '../../domain/roleField/task'; import { EPlace, HeroType } from '../../db/Hero'; import { getRoleOnlineInfo } from '../redisService'; import { HeroScores } from '../../db/PvpHistoryOpp'; @@ -15,187 +14,136 @@ import { gameData } from '../../pubUtils/data'; import { getSeconds, getZeroPointD } from '../../pubUtils/timeUtil'; import { RoleStatus } from '../../db/ComBattleTeam'; import { getActivities } from '../activity/activityService'; +import { CheckTask } from './taskObj'; -export async function checkTaskWithRoles(serverId: number, roleId: string, sid: string, taskType: number, roles: RoleType[]) { +export async function checkTaskWithRoles(serverId: number, roleId: string, sid: string, taskType: TASK_TYPE, roles: RoleType[]) { for (let role of roles) { if (role) { - await checkTaskWithRole(serverId, role.roleId, role.roleId == roleId ? sid : null, taskType, role); + await checkTask(serverId, role.roleId, role.roleId == roleId ? sid : null, taskType, role); } } } -export async function checkTaskWithRole(serverId: number, roleId: string, sid: string, taskType: number, role: RoleType) { - let pushMessage = await taskUtil.checkTaskWithRole(serverId, roleId, taskType, role); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskWithRole(serverId: number, roleId: string, sid: string, taskType: TASK_TYPE, role: RoleType, args?: TaskParamInter) { + let task = new CheckTask(serverId, roleId); + task.setRole(role); + task.setParam(taskType, args); + await task.saveAndPush(sid); } -export async function checkTaskWithHero(roleId: string, sid: string, taskType: number, hero: HeroType, args?: number[]) { - let pushMessage = await taskUtil.checkTaskWithHero(roleId, taskType, hero, args); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTask(serverId: number, roleId: string, sid: string, taskType: TASK_TYPE, args?: TaskParamInter) { + let task = new CheckTask(serverId, roleId); + task.setParam(taskType, args); + await task.saveAndPush(sid); } -export async function checkTaskWithEplaces(roleId: string, sid: string, taskType: number, eplace: EPlace[], newEplace: EPlace[], eplaceIds: number[], params?: any) { - let pushMessage = await taskUtil.checkTaskWithEplaces(roleId, taskType, eplace, newEplace, eplaceIds, params); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInEntry(serverId: number, roleId: string, sid: string, role: RoleType) { + let task = new CheckTask(serverId, roleId); + task.setRole(role); + task.setParam(TASK_TYPE.LOGIN_SUM, {}); + task.setParam(TASK_TYPE.LOGIN_SERIES, {}); + await task.saveAndPush(sid); } -export async function checkTaskWithEplace(roleId: string, sid: string, taskType: number, oldEquip: EPlace, newEplace: EPlace, params?: any) { - let pushMessage = await taskUtil.checkTaskWithEplace(roleId, taskType, oldEquip, newEplace, params); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInCreateHero(serverId: number, roleId: string, sid: string, heroNum: number, heroes: HeroType[]) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_NUM, { heroNum }); + task.setParam(TASK_TYPE.HERO_QUALITY, { heroes }); + task.setParam(TASK_TYPE.HERO_QUALITY_STAR_UP, { heroes }); + task.setParam(TASK_TYPE.HERO_LV, { heroes }); + await task.saveAndPush(sid); } -export async function checkTaskWithArgs(roleId: string, sid: string, taskType: number, args: number[]) { - let pushMessage = await taskUtil.checkTaskWithArgs(roleId, taskType, args); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInHeroStarUp(serverId: number, roleId: string, sid: string, hero: HeroType, oldStar: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_STAR_UP, { hero }); + task.setParam(TASK_TYPE.HERO_QUALITY_STAR_UP, { hero, oldStar }); + await task.saveAndPush(sid); } -export async function checkTaskWithWar(roleId: string, sid: string, taskType: number, warId: number, heroes: number[], count: number, star: number) { - let pushMessage = await taskUtil.checkTaskWithWar(roleId, taskType, warId, heroes, count, star); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInHeroWakeUp(serverId: number, roleId: string, sid: string, hero: HeroType, oldColorStar: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_STAR_UP, { hero }); + task.setParam(TASK_TYPE.HERO_WAKE_UP, { hero, oldColorStar }); + task.setParam(TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT, { hero, oldColorStar }); + task.setParam(TASK_TYPE.HERO_WAKE_UP_COUNT, { hero, oldColorStar }); + task.setParam(TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT, { hero }); + await task.saveAndPush(sid); } -export async function checkTaskWithGoods(roleId: string, sid: string, taskType: number, goods: ItemInter[]) { - let pushMessage = await taskUtil.checkTaskWithGoods(roleId, taskType, goods); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInHeroQUalityUp(serverId: number, roleId: string, sid: string, hero: HeroType) { + // 任务 + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_QUALITY_UP, { hero }); + // 任务 + await checkTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, { hero }); + } -export async function checkTask(roleId: string, sid: string, taskType: number, count: number, isInc: boolean, param: TaskParam) { - let pushMessage = await taskUtil.checkTask(roleId, taskType, count, isInc, param); - pushTaskUpdate(roleId, sid, pushMessage); -} - -export async function pushTaskUpdate(roleId: string, sid: string, pushMessage: TaskListReturn[]) { - if (pushMessage.length > 0) { - if (!sid) { - let onlineUser = await getRoleOnlineInfo(roleId); - sid = onlineUser.sid; - } - if (!!sid) { - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, pushMessage), uids); - } - } -} - - -export async function checkActivityTask(serverId: number, sid: string, roleId: string, taskType: TASK_TYPE, count: number, parma?: any) { - let pushMessage = await taskUtil.accomplishTask(serverId, roleId, taskType, count, parma, await getActivities()); - pushActivityUpdate(roleId, sid, pushMessage); - return pushMessage; -} - -export async function pushActivityUpdate(roleId: string, sid: string, pushMessage: any[]) { - // console.log('pushActivityUpdate', JSON.stringify(pushMessage)) - if (pushMessage?.length > 0) { - if (!sid) { - let onlineUser = await getRoleOnlineInfo(roleId); - sid = onlineUser.sid; - } - if (!!sid) { - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, pushMessage), uids); - } - } +export async function checkTaskInHeroTrain(serverId: number, roleId: string, sid: string, hero: HeroType, trainCount: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_TRAIN, { hero, trainCount }); + task.setParam(TASK_TYPE.HERO_TRAIN_SUM, { hero, trainCount }); + await task.saveAndPush(sid); } /** * battle.normalBattleHandler.battleEnd 中会触发的任务,因为有点多提出来了 */ -export async function checkTaskInBattleEnd(serverId: number, roleId: string, sid: string, battleId: number, heroes: number[], star: number) { - - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_WITH_HERO, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_MAIN, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DAILY_STAR, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DAILY, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DUNGEON, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DUNGEON_WAR, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_TOWER, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_VESTIGE, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_EXPEDITION, battleId, heroes, 1, star); - //成长任务 - let dicWar = gameData.war.get(battleId); - if (dicWar) { - if (dicWar.warType == WAR_TYPE.NORMAL) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_MAIN, 1, { warId: battleId }) - } else if (dicWar.warType == WAR_TYPE.EXPEDITION) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_EXPEDITION, 1) - } else if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON, 1) - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON_WAR, 1, { warId: battleId }) - } else if (dicWar.warType == WAR_TYPE.TOWER) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_TOWER, 1) - } else if (dicWar.warType == WAR_TYPE.DAILY) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DAILY, 1, { dailyType: dicWar.dailyType }) - } - } - + export async function checkTaskInBattleEnd(serverId: number, roleId: string, sid: string, warId: number, battleHeroes: number[], battleStar: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.BATTLE_WITH_HERO, { warId, battleHeroes }); + task.setParam(TASK_TYPE.BATTLE_MAIN, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_DAILY_STAR, { warId, battleStar }); + task.setParam(TASK_TYPE.BATTLE_DAILY, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_DUNGEON, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_DUNGEON_WAR, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_TOWER, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_VESTIGE, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_EXPEDITION, { warId, count: 1 }); + await task.saveAndPush(sid); } -export async function checkTaskInBattleSweep(serverId: number, roleId: string, sid: string, battleId: number, count: number) { - // 任务 - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_MAIN_SWEEP, battleId, [], count, 0); - //活动任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_MAIN_SWEEP, count, { battleId }) - - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_MAIN, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DAILY_STAR, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DAILY, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DUNGEON, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DUNGEON_WAR, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_TOWER, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_VESTIGE, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_EXPEDITION, battleId, [], count, 0); - //成长任务 - let dicWar = gameData.war.get(battleId); - if (dicWar) { - if (dicWar.warType == WAR_TYPE.NORMAL) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_MAIN, count, { warId: battleId }) - } else if (dicWar.warType == WAR_TYPE.EXPEDITION) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_EXPEDITION, count) - } else if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON, count) - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON_WAR, count, { warId: battleId }) - } else if (dicWar.warType == WAR_TYPE.TOWER) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_TOWER, count) - } else if (dicWar.warType == WAR_TYPE.DAILY) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DAILY, count, { dailyType: dicWar.dailyType }) - } - } +export async function checkTaskInBattleSweep(serverId: number, roleId: string, sid: string, warId: number, count: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.BATTLE_MAIN_SWEEP, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_MAIN, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_DAILY, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_DUNGEON, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_DUNGEON_WAR, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_TOWER, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_VESTIGE, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_EXPEDITION, { warId, count }); + await task.saveAndPush(sid); } + export async function checkTaskInComBattleStart(roleStatus: RoleStatus[], capId: string) { // console.log('********', JSON.stringify(roleStatus), capId, quality) for (let { roleId, isRobot } of roleStatus) { if (!isRobot) { - - let { serverId } = await RoleModel.findByRoleId(roleId); + let role = await RoleModel.findByRoleId(roleId); if (roleId == capId && roleStatus.length > 1) { // 招募队友 - await checkTask(roleId, null, TASK_TYPE.COM_BATTLE_CREATE_TEAM, 1, true, {}); + await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE_CREATE_TEAM, role); } else if (roleId !== capId) { // 协助寻宝 - await checkTask(roleId, null, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, 1, true, {}); - //活动任务 - await checkActivityTask(serverId, null, roleId, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, 1); + await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, role); } - await checkTask(roleId, null, TASK_TYPE.COM_BATTLE, 1, true, {}); - //活动任务 - await checkActivityTask(serverId, null, roleId, TASK_TYPE.COM_BATTLE, 1); + await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE, role); } } } -export async function checkTaskInPvpEnd(roleId: string, sid: string, isSuccess: boolean, heroScores: HeroScores[]) { - if (isSuccess) { - await checkTask(roleId, sid, TASK_TYPE.PVP_WIN, 1, true, {}); - await checkTask(roleId, sid, TASK_TYPE.PVP_WIN_SERIES, 1, true, {}); - } else { - await checkTask(roleId, sid, TASK_TYPE.PVP_WIN_SERIES, 0, false, {}); - } - - await checkTask(roleId, sid, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores }); +export async function checkTaskInPvpEnd(serverId: number, roleId: string, sid: string, isSuccess: boolean, heroScores: HeroScores[]) { + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_WIN, { isSuccess }) + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_WIN_SERIES, { isSuccess }); + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_HERO_SCORE, { heroScores }); } +export async function checkTaskInGacha(serverId: number, roleId: string, sid: string, count: number, heroes: HeroType[]) { + await checkTask(serverId, roleId, sid, TASK_TYPE.GACHA, { count }); + await checkTask(serverId, roleId, sid, TASK_TYPE.GACHA_QUALITY_COUNT, { heroes }); +} // 获取task状态 export async function getCurTask(roleId: string, session: FrontendOrBackendSession) { diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index e112504cd..2d05d9f84 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -211,7 +211,7 @@ export enum REDIS_KEY { PVP_RANK ="pvpRank", // pvp排行榜 GUILD_INFO ="guildInfo", // 公会信息 GUILD_ACTIVE_RANK ="guildActiveRank", // 公会周活跃排行榜 - DB_GAME ='dbGame', // 服务器列表 + SERVER ='server', // 服务器列表 ONLINE_USERS ='onlineUsers', // 在线用户情况 ONLINE_TIME ='onlineTime', // 玩家在线时间 CHANNEL_SERVERS ='chat:channelServers', // 渠道对应的 chat 服务器 Id, @@ -634,7 +634,7 @@ export enum TASK_TYPE { LOGIN_SUM = 1, // 累计登录 LOGIN_SERIES = 2, // 连续登录 ROLE_LV = 3, // 主公等级 - GASHA = 4, // 招募 + GACHA = 4, // 招募 HERO_NUM = 5, // 武将数量 HERO_STAR_UP = 6, // 升星次数 HERO_QUALITY = 7, // 拥有品质 diff --git a/shared/db/ActivityDailyChallenges.ts b/shared/db/ActivityDailyChallenges.ts index a1c306db0..ba3aaeda8 100644 --- a/shared/db/ActivityDailyChallenges.ts +++ b/shared/db/ActivityDailyChallenges.ts @@ -37,44 +37,25 @@ export default class Activity_Daily_Challenges extends BaseModel { } // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataByCellIndex(serverId, activityId, roleId, dayIndex, cellIndex); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, dayIndex, cellIndex, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, records?: string[]) { let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $set: { totalCount: count }, $addToSet: { records: record||''} }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, records?: string[]) { let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $inc: { totalCount: addCount }, $addToSet: { records: record||''} }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: addCount }, $set: { records: records||[]} }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityGrowth.ts b/shared/db/ActivityGrowth.ts index 1a0a75c05..965688494 100644 --- a/shared/db/ActivityGrowth.ts +++ b/shared/db/ActivityGrowth.ts @@ -36,45 +36,25 @@ export default class Activity_Growth extends BaseModel { return result; } - // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataByCellIndex(serverId, activityId, roleId, dayIndex, cellIndex); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, dayIndex, cellIndex, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, records?: string[]) { let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, records?: string[]) { let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $inc: { totalCount: addCount }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: addCount }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityRefreshTask.ts b/shared/db/ActivityRefreshTask.ts index 2bd9761cb..e611e75fa 100644 --- a/shared/db/ActivityRefreshTask.ts +++ b/shared/db/ActivityRefreshTask.ts @@ -40,45 +40,26 @@ export default class Activity_Refresh_Task extends BaseModel { // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataById(serverId, activityId, roleId, roundIndex, pageIndex, id); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, roundIndex, pageIndex, id, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, records?: string[]) { let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, - { $set: { totalCount: count }, $setOnInsert: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[] }}, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, records?: string[]) { let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, - { $inc: { totalCount: count }, $setOnInsert: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityThirtyDays.ts b/shared/db/ActivityThirtyDays.ts index b43a02d71..f6d393ed2 100644 --- a/shared/db/ActivityThirtyDays.ts +++ b/shared/db/ActivityThirtyDays.ts @@ -66,30 +66,11 @@ export default class Activity_Thirty_Days extends BaseModel { // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataByCellIndex(serverId, activityId, roleId, pageIndex, cellIndex, tab); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, pageIndex, cellIndex, tab, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.inc, param.records); } } @@ -102,16 +83,16 @@ export default class Activity_Thirty_Days extends BaseModel { } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, records?: string[]) { let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab }, - { $inc: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, records?: string[]) { let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab }, - { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); return result; } } diff --git a/shared/db/ActivityTreasureHuntTask.ts b/shared/db/ActivityTreasureHuntTask.ts index 4d70ec83e..34a93df95 100644 --- a/shared/db/ActivityTreasureHuntTask.ts +++ b/shared/db/ActivityTreasureHuntTask.ts @@ -29,44 +29,25 @@ export default class Activity_Treasure_Hunt_Task extends ActivityGrowth { } // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataByCellIndex(serverId, activityId, roleId, roundIndex, cellIndex); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, roundIndex, cellIndex, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, records?: string[]) { let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, - { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, records?: string[]) { let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, - { $inc: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/UserTaskRec.ts b/shared/db/UserTaskRec.ts index 4c6563400..694700925 100644 --- a/shared/db/UserTaskRec.ts +++ b/shared/db/UserTaskRec.ts @@ -47,51 +47,23 @@ export default class UserTaskRec extends BaseModel { } } - public static async setTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, record?: string) { + public static async setTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, records?: string[]) { let condition = this.getRefreshCondition(type); - let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $set: { count }, $addToSet: { records: record||'' } }, { new: true, upsert: true }).lean(); + let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $set: { count, records: records||[] } }, { new: true, upsert: true }).lean(); return rec; } - public static async incTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, record?: string) { + public static async incTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, records?: string[]) { let condition = this.getRefreshCondition(type); - let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $inc: { count }, $addToSet: { records: record||'' } }, { new: true, upsert: true }).lean(); + let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $inc: { count }, $set: { records: records||[] } }, { new: true, upsert: true }).lean(); return rec; } - /** - * 检查是否可以更新任务并更新 - * @param roleId 玩家id - * @param type 任务大类型,日常、成就、每日 - * @param taskType 任务类型 - * @param group 活动组 - * @param param 更新参数 - * @returns - */ - public static async checkAndUpdateTask(roleId: string, type: TASK_FUN_TYPE, taskType: number, group: string, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findByRoleAndGroup(roleId, type, taskType, group); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.count >= param.max) { - canSet = false; - } else if (param.min && rec.count <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(roleId, type, taskType, group, param); - } - } - public static async setOrIncTask(roleId: string, type: number, taskType: number, group: string, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskRec(roleId, type, taskType, group, param.set, param.record); + return await this.setTaskRec(roleId, type, taskType, group, param.set, param.records); } else if (param.inc) { - return await this.incTaskRec(roleId, type, taskType, group, param.inc, param.record); + return await this.incTaskRec(roleId, type, taskType, group, param.inc, param.records); } } diff --git a/shared/domain/roleField/task.ts b/shared/domain/roleField/task.ts index 27314899b..8b01c93de 100644 --- a/shared/domain/roleField/task.ts +++ b/shared/domain/roleField/task.ts @@ -1,38 +1,43 @@ -import { HeroScore } from "../../domain/battleField/pvp"; +import { HeroType } from "../../db/Hero"; +import { HeroScore } from "../battleField/pvp"; + +export class TaskParamInter { + hero?: HeroType; // 武将数据 + heroes?: HeroType[]; // 很多武将数据 + count?: number; // 抽卡的次数 + + warId?: number; // 当前关卡id + towerLv?: number; // 镇念塔层数 + lv?: number; // 现玩家等级 + chatType?: number; // 聊天:聊天类型 + battleHeroes?: number[]; // 战斗时候使用的 + battleStar?: number; // 战斗结算时候的星级 + heroNum?: number; // 武将数量 + trainCount?: number; // 武将训练次数 + stageUpCnt?: number; // 武将升阶次数 + connectLv?: number; // 羁绊等级 + isSuccess?: boolean; // pvp是否胜利 + heroScores?: HeroScore[]; // pvp各武将积分 + + oldLv?: number; // 原武将等级,原玩家等级 + oldStar?: number; // 原武将星级 + oldColorStar?: number; // 原武将彩星 + oldJob?: number; // 原武将职业 + oldJobStage?: number; // 原武将职业阶 + oldFavourLv?: number; // 原好感度等级 +}; + +export class TaskParam extends TaskParamInter { + + public setParam(params: TaskParamInter) { + for(let key in params) { + this[key] = params[key]; + } + } -export class TaskParam { - star?: number; - quality?: number; - lv?: number; - count?: number; - favourLv?: number; - connectLv?: number; - isPutOn?: number; - oldLv?: number; - stage?: number; - chatType?: number; - warId?: number; - heroes?: number[]; - eventType?: number; - dailyType?: number; - point?: number; - gid?: number; - heroScores?: HeroScore[]; - rankLv?: number; - title?: number; - oldTitle?: number; - job?: number; - aid?: number; - isDebug?: boolean; - oldCount?: number; - oldStar?: number; - hid?: number; - eplaceId?: number; - oldQuality?: number; - oldStoneLvs?: number[]; - newStoneLvs?: number[]; } + export class TaskListReturn { type: number; // 类型 id: number; // 任务id @@ -43,7 +48,5 @@ export class TaskListReturn { export interface UpdateTaskParam { inc?: number; // 直接增 set?: number; // 直接设 - record?: string; // 检查是否有这条记录、没有的话增 - max?: number; // 检查是否是最大的,不是的话更 - min?: number; // 检查是否是最小的,不是的话更 + records?: string[]; // 检查是否有这条记录、没有的话增 } \ No newline at end of file diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index ebf9dc76c..e69de29bb 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -1,1530 +0,0 @@ -import { gameData, getEquipSuitByHero } from './data'; -import { DicTask } from './dictionary/DicTask'; -import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB, TASK_SUM_TYPE } from '../consts'; -import { UserTaskRecModel, UserTaskRecType } from '../db/UserTaskRec' -import { RoleType, RoleModel } from '../db/Role'; -import { TaskParam, TaskListReturn } from '../domain/roleField/task'; -import { getZeroPoint } from './timeUtil'; -import { EPlace, HeroType } from '../db/Hero'; -import { ItemInter } from './interface'; -import { DailyChallengesData } from '../domain/activityField/dailyChallengesField'; -import { splitString } from './util'; -import { ActivityModel, ActivityModelType } from '../db/Activity'; -import { ACTIVITY_TYPE } from '../consts/constModules/activityConst'; -import { ActivityGrowthModel } from '../db/ActivityGrowth'; -import { ActivityDailyChallengesModel } from '../db/ActivityDailyChallenges'; -import { ThirtyDaysData } from '../domain/activityField/thirtyDaysField'; -import { GrowthFundData } from '../domain/activityField/growthFundField'; -import { ActivityThirtyDaysModel, ActivityThirtyDaysModelType } from '../db/ActivityThirtyDays'; -import { ServerlistModel } from '../db/Serverlist'; -import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '../db/ActivityGrowthFund'; -import { ActivityBuyRecordsModel } from '../db/ActivityBuyRecords'; -import { ServerTempModel, ServerTempModelType } from '../db/ServerTemp'; -import { TreasureHuntData } from '../domain/activityField/treasureHuntField'; -import { ActivityTreasureHuntTaskModel, ActivityTreasureHuntTaskModelType } from '../db/ActivityTreasureHuntTask'; -import { SevenDaysData } from '../domain/activityField/sevenDaysField'; -import moment = require("moment"); -import { RefreshTaskData } from '../domain/activityField/refreshTaskField'; -import { ActivityRefreshTaskModel } from '../db/ActivityRefreshTask'; -import { ActivityInRemote, transActivityInRemoteToModelType } from '../domain/activityField/activityField'; -import { JewelType } from '../db/Jewel'; -import { isRandSeUnLock } from './playerCe'; - - - -export async function checkTaskWithRoles(serverId: number, taskType: number, roles: RoleType[]) { - let pushMessage = new Array(); - for (let role of roles) { - if (role) { - let singlePush = await checkTaskWithRole(serverId, role.roleId, taskType, role); - pushMessage.push(...singlePush); - } - } - return pushMessage -} - -export async function checkTaskWithRole(serverId: number, roleId: string, taskType: number, role: RoleType) { - let pushMessage = new Array(); - - if (taskType == TASK_TYPE.LOGIN_SUM) { - let today = getZeroPoint(); - if (today > role.loginTime) { - pushMessage = await checkTask(roleId, taskType, 1, true, {}); - //成长任务-累计登录游戏天数 - await accomplishTask(serverId, roleId, taskType, 1) - } - } - else if (taskType == TASK_TYPE.LOGIN_SERIES) { - let today = getZeroPoint(); - if (today > role.loginTime) { - if (today - role.loginTime > 24 * 60 * 60) { - pushMessage = await checkTask(roleId, taskType, 1, false, {}); - } else { - pushMessage = await checkTask(roleId, taskType, 1, true, {}); - } - } - } - else if (taskType == TASK_TYPE.FRIEND_NUM) { - let { friendCnt } = role; - pushMessage = await checkTask(roleId, taskType, friendCnt, false, {}); - } - - return pushMessage -} - - -export async function checkTaskWithHeroes(roleId: string, taskType: number, heroes: HeroType[]) { - let pushMessage = new Array(); - for (let hero of heroes) { - let singlePush = await checkTaskWithHero(roleId, taskType, hero, []); - pushMessage.push(...singlePush); - } - return pushMessage -} - -export async function checkTaskWithHero(roleId: string, taskType: number, hero: HeroType, args: number[] = []) { - let pushMessage = new Array(); - if (taskType == TASK_TYPE.HERO_STAR_UP) { - let dicHero = gameData.hero.get(hero.hid); - let starUp = hero.star - dicHero.initialStars; - if (hero.colorStar > 1) starUp += hero.colorStar - 1; - pushMessage = await checkTask(roleId, taskType, 1, true, { star: starUp }) - } - else if (taskType == TASK_TYPE.HERO_QUALITY) { - let dicHero = gameData.hero.get(hero.hid); - pushMessage = await checkTask(roleId, taskType, 1, true, { quality: dicHero.quality }); - } - else if (taskType == TASK_TYPE.HERO_QUALITY_STAR_UP) { - let dicHero = gameData.hero.get(hero.hid); - pushMessage = await checkTask(roleId, taskType, 1, true, { quality: dicHero.quality, star: hero.star }); - } - else if (taskType == TASK_TYPE.HERO_LV) { - pushMessage = await checkTask(roleId, taskType, 1, true, { lv: hero.lv, oldLv: args[0]||0 }); - } - else if (taskType == TASK_TYPE.HERO_TRAIN) { - let dicHero = gameData.hero.get(hero.hid); - let initGrage = gameData.job.get(dicHero.jobid).grade; - let curGrade = gameData.job.get(hero.job).grade; - let oldGrade = gameData.job.get(args[0]).grade; - let count = (curGrade - initGrage) * (ABI_STAGE.END - ABI_STAGE.START) + (hero.jobStage - ABI_STAGE.START); // 训练次数 - let oldCount = (oldGrade - initGrage) * (ABI_STAGE.END - ABI_STAGE.START) + (args[1] - ABI_STAGE.START); - pushMessage = await checkTask(roleId, taskType, 1, true, { count, oldCount }); - } - else if (taskType == TASK_TYPE.HERO_QUALITY_UP) { - pushMessage = await checkTask(roleId, taskType, 1, true, { hid: hero.hid }); - } - else if (taskType == TASK_TYPE.HERO_STAGE_UP) { - let dicHero = gameData.hero.get(hero.hid); - let initGrage = gameData.job.get(dicHero.jobid).grade; - let curGrade = gameData.job.get(hero.job).grade; - let count = curGrade - initGrage; // 进阶次数 - pushMessage = await checkTask(roleId, taskType, 1, true, { count }); - } - else if (taskType == TASK_TYPE.HERO_FAVOUR_LV) { - pushMessage = await checkTask(roleId, taskType, 1, true, { favourLv: hero.favourLv, oldLv: args[0] }) - } - - return pushMessage -} - -export async function checkTaskWithEplaces(roleId: string, taskType: number, oldEplace: EPlace[], newEplace: EPlace[], eplaceIds: number[], params?: Param) { - let pushMessage = new Array(); - if(taskType == TASK_TYPE.EQUIP_SUIT_SEID_NUM) { - let dicEquipSuit = getEquipSuitByHero(params.hid); - let oldSuitStars: number[] = [], newSuitStars: number[] = []; - for(let equipId of dicEquipSuit.equips) { - let oldEquip = oldEplace.find(cur => cur.equipId == equipId); - oldSuitStars.push(oldEquip? oldEquip.star: 0); - let newEquip = newEplace.find(cur => cur.equipId == equipId); - newSuitStars.push(newEquip? newEquip.star: 0); - } - let oldStar = Math.min(...oldSuitStars); - let newStar = Math.min(...newSuitStars); - let oldCount = 0, count = 0; - for(let { star } of dicEquipSuit.effect) { - if(oldStar >= star) oldCount++; - if(newStar >= star) count++; - } - pushMessage = await checkTask(roleId, taskType, 1, true, { oldCount, count }); - } - else if (taskType == TASK_TYPE.EQUIP_COMPOSE_CNT) { - pushMessage = await checkTask(roleId, taskType, 1, true, { oldCount: oldEplace.length, count: newEplace.length }); - - } else { - for(let eplaceId of eplaceIds) { - let { oldEquip, newEquip } = getEquipById({ oldEplace, newEplace, eplaceId }); - let result = await checkTaskWithEplace(roleId, taskType, oldEquip, newEquip, params); - pushMessage.push(...result); - } - } - - return pushMessage -} - -interface Param { - jewels?: JewelType[]; - hid?: number; -} - -export async function checkTaskWithEplace(roleId: string, taskType: number, oldEquip: EPlace, newEquip: EPlace, params?: Param) { - let pushMessage = new Array(); - if (taskType == TASK_TYPE.EQUIP_LV_TO) { - pushMessage = await checkTask(roleId, taskType, 1, true, { oldLv: oldEquip.lv, lv: newEquip.lv }) - } - else if (taskType == TASK_TYPE.EQUIP_PUT_JEWEL) { - let { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, { jewels: params.jewels }); - let oldLv = gameData.jewel.get(oldJewel?.id)?.lv || 0; - let lv = gameData.jewel.get(newJewel?.id)?.lv || 0; - pushMessage = await checkTask(roleId, taskType, 1, true, { oldLv, lv }); - } - else if (taskType == TASK_TYPE.EQUIP_PUT_STONE) { - let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; - let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; - pushMessage = await checkTask(roleId, taskType, 1, true, { oldCount: oldStoneCnt, count: newStoneCnt }); - } - else if (taskType == TASK_TYPE.EQUIP_STAR_UP_TO) { - pushMessage = await checkTask(roleId, taskType, 1, true, { oldStar: oldEquip?.star||0, star: newEquip?.star||0 }); - } - else if (taskType == TASK_TYPE.EQUIP_QUALITY_UP) { - pushMessage = await checkTask(roleId, taskType, 1, true, { hid: params.hid, eplaceId: newEquip.id }); - } - else if (taskType == TASK_TYPE.EQUIP_QUALITY_UP_TO) { - pushMessage = await checkTask(roleId, taskType, 1, true, { oldQuality: oldEquip?.quality||0, quality: newEquip?.quality||0 }); - } - else if (taskType == TASK_TYPE.EQUIP_PUT_JEWEL_CNT) { - if(oldEquip.jewel && !newEquip.jewel) { - pushMessage = await checkTask(roleId, taskType, -1, true, { }); - } else if (!oldEquip.jewel && newEquip.jewel) { - pushMessage = await checkTask(roleId, taskType, 1, true, { }); - } - } - else if (taskType == TASK_TYPE.EQUIP_PUT_STONE_CNT) { - let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; - let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; - if(oldStoneCnt > 0 && newStoneCnt == 0) { - pushMessage = await checkTask(roleId, taskType, -1, true, { }); - } else if (oldStoneCnt == 0 && newStoneCnt > 0) { - pushMessage = await checkTask(roleId, taskType, 1, true, { }); - } - } - else if (taskType == TASK_TYPE.EQUIP_STONE_CNT) { - let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; - let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; - pushMessage = await checkTask(roleId, taskType, newStoneCnt - oldStoneCnt, true, { }); - } - else if (taskType == TASK_TYPE.EQUIP_STONE_CNT_LV) { - let oldStoneLvs = oldEquip.stones.map(cur => { - let dicStone = gameData.stone.get(cur.stone); - return dicStone?dicStone.lv: 0; - }); - let newStoneLvs = newEquip.stones.map(cur => { - let dicStone = gameData.stone.get(cur.stone); - return dicStone?dicStone.lv: 0; - }); - pushMessage = await checkTask(roleId, taskType, 1, true, { oldStoneLvs, newStoneLvs }); - } - else if (taskType == TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT) { - let { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, { jewels: params.jewels }); - - let oldRandSe = oldJewel?.randSe||[]; - let oldUnlockSeCnt = oldRandSe.filter(se => { - return isRandSeUnLock(oldJewel.id, se.id, oldEquip.stones); - }).length; - - let newRandSe = newJewel?.randSe||[]; - let newUnlockSeCnt = newRandSe.filter(se => { - return isRandSeUnLock(newJewel.id, se.id, newEquip.stones); - }).length; - - pushMessage = await checkTask(roleId, taskType, 1, true, { oldCount: oldUnlockSeCnt, count: newUnlockSeCnt }); - } - - - return pushMessage -} - - - -function getEquipById(paramObj: {oldEplace: EPlace[], newEplace: EPlace[], eplaceId: number}) { - let { oldEplace, newEplace, eplaceId } = paramObj; - let oldEquip = oldEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); - let newEquip = newEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); - return { oldEquip, newEquip } -} - -function getJewelByEquip(oldEquip: EPlace, newEquip: EPlace, paramObj: { jewels: JewelType[] }) { - let jewels: JewelType[] = paramObj.jewels; - let oldJewel = jewels.find(cur => cur && cur.seqId == oldEquip.jewel); - let newJewel = jewels.find(cur => cur && cur.seqId == newEquip.jewel); - return { oldJewel, newJewel } -} - -// export async function checkTaskWithEquip(roleId: string, taskType: number, equip: EquipType, args: number[] = []) { -// let pushMessage = new Array(); -// if (taskType == TASK_TYPE.EQUIP_QUALITY) { -// // args[0] 1:装上 -1:脱下 -// let dicGood = gameData.goods.get(equip.id); -// pushMessage = await checkTask(roleId, taskType, args[0], true, { quality: dicGood.quality }) -// } -// else if (taskType == TASK_TYPE.EQUIP_JEWEL) { -// // args[0] 原来镶嵌了多少宝石 -// let { holes } = equip; -// let jewelCount = holes.filter(cur => cur.jewel > 0).length; -// if (jewelCount > 0 && args[0] <= 0) { // 原来没有,镶嵌上了 -// pushMessage = await checkTask(roleId, taskType, 1, true, {}); -// } else if (jewelCount <= 0 && args[0] > 0) { // 原来镶嵌着,现在没了 -// pushMessage = await checkTask(roleId, taskType, -1, true, {}); -// } -// } -// else if (taskType == TASK_TYPE.EQUIP_COMPOSE_SUIT) { -// let dicGood = gameData.goods.get(equip.id); -// if (dicGood.suitId) { -// pushMessage = await checkTask(roleId, taskType, 1, true, {}); -// } -// } -// else if (taskType == TASK_TYPE.EQUIP_SUIT) { -// let dicGood = gameData.goods.get(equip.id); -// if (dicGood.suitId) { -// let suit = gameData.suit.get(dicGood.suitId); -// let equips = await EquipModel.getEquipsByIds(roleId, suit.tireInfo); -// let everyEquip = new Map(); -// for (let equip of equips) { -// if (everyEquip.has(equip.id)) { -// everyEquip.set(equip.id, everyEquip.get(equip.id) + 1); -// } else { -// everyEquip.set(equip.id, 1); -// } -// } -// let minCount = 0, curCount = 0; -// for (let id of suit.tireInfo) { -// let count = everyEquip.get(id) || 0; -// if (minCount > count) minCount = count; -// if (id == equip.id) curCount = count; -// } -// if (curCount == minCount) { -// pushMessage = await checkTask(roleId, taskType, 1, true, {}); -// } -// } -// } -// else if (taskType == TASK_TYPE.EQUIP_JEWEL_SUM) { -// // args[0] 原来镶嵌了多少宝石 -// let { holes } = equip; -// let jewelCount = holes.filter(cur => cur.jewel > 0).length; -// pushMessage = await checkTask(roleId, taskType, jewelCount - args[0], true, {}); -// } -// return pushMessage -// } - -export async function checkTaskWithArgs(roleId: string, taskType: number, args: number[]) { - let pushMessage = new Array(); - - if (taskType == TASK_TYPE.ROLE_SCHOOL_PUT_HERO) { - let [hid, preHid] = args; - if (hid > 0 && preHid <= 0) { // 放置 - pushMessage = await checkTask(roleId, taskType, 1, true, {}); - } else if (hid <= 0 && preHid > 0) { // 卸下 - pushMessage = await checkTask(roleId, taskType, -1, true, {}); - } - } - else if (taskType == TASK_TYPE.CHAT) { - // args[0] 聊天type 1-系统 2-世界 3-军团 4-组队 5-私聊 - pushMessage = await checkTask(roleId, taskType, 1, true, { chatType: args[0] }) - } - - return pushMessage -} - -export async function checkTaskWithWar(roleId: string, taskType: number, warId: number, heroes: number[], count: number, star: number) { - let dicWar = gameData.war.get(warId); - let pushMessage = new Array(); - if (taskType == TASK_TYPE.BATTLE_WITH_HERO) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId, heroes }); - } - else if (taskType == TASK_TYPE.BATTLE_MAIN) { - if (dicWar.warType == WAR_TYPE.NORMAL) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId }); - } - } - else if (taskType == TASK_TYPE.BATTLE_MAIN_SWEEP) { - if (dicWar.warType == WAR_TYPE.NORMAL) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - else if (taskType == TASK_TYPE.BATTLE_DAILY_STAR) { - if (dicWar.warType == WAR_TYPE.DAILY) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId, star }); - } - } - else if (taskType == TASK_TYPE.BATTLE_DAILY) { - if (dicWar.warType == WAR_TYPE.DAILY) { - pushMessage = await checkTask(roleId, taskType, count, true, { dailyType: dicWar.dailyType }) - } - } - else if (taskType == TASK_TYPE.BATTLE_DUNGEON) { - if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - else if (taskType == TASK_TYPE.BATTLE_DUNGEON_WAR) { - if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId }); - } - } - else if (taskType == TASK_TYPE.BATTLE_TOWER) { - if (dicWar.warType == WAR_TYPE.TOWER) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - else if (taskType == TASK_TYPE.BATTLE_VESTIGE) { - if (dicWar.warType == WAR_TYPE.VESTIGE) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - else if (taskType == TASK_TYPE.BATTLE_EXPEDITION) { - if (dicWar.warType == WAR_TYPE.EXPEDITION) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - return pushMessage -} - - -export async function checkTaskWithGoods(roleId: string, taskType: number, goods: ItemInter[]) { - let pushMessage = new Array(); - if (taskType == TASK_TYPE.COM_BATTLE_DROP) { - for (let { id, count } of goods) { - let push = await checkTask(roleId, taskType, count, true, { gid: id }); - pushMessage.push(...push); - } - } - return pushMessage -} - -// 根据taskType判断有哪些任务需要check的 -export async function checkTask(roleId: string, taskType: number, count: number, isInc: boolean, param: TaskParam) { - // console.log('******checkTask', roleId, taskType, count, isInc, param) - let tasks = gameData.taskType.get(taskType) || []; - let pushMessage = new Array(); - let groups = new Map(); - for (let dicTask of tasks) { - if (!groups.has(`${dicTask.type}_${dicTask.group}`)) { - groups.set(`${dicTask.type}_${dicTask.group}`, { task0: dicTask, tasks: new Array() }); - } - groups.get(`${dicTask.type}_${dicTask.group}`).tasks.push(dicTask); - } - - for (let [typeAndGroup, { task0, tasks }] of groups) { - let arr = typeAndGroup.split('_'); - let type = parseInt(arr[0]); - let group = arr[1]; - - let rec = await checkTaskRec(roleId, type, group, task0, count, isInc, param); - if (rec) { - for (let dicTask of tasks) { - if (checkRecResult(rec, dicTask.id)) { - let received = rec.received || []; - pushMessage.push({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) }); - } - } - } - } - return pushMessage; -} - -// 检查各项任务是否达成,达成了就保存到数据库 -export async function checkTaskRec(roleId: string, type: number, group: string, dicTask: DicTask, count: number, isInc: boolean, param: TaskParam) { - let { taskParam, taskType } = dicTask; - - let isMatch = true; // 条件是否满足 - let checkHistory = false; // 是否检查历史 - let checkRecord = ''; // 检查记录 - switch (taskType) { - case TASK_TYPE.ROLE_TITLE: - isMatch = param.title >= taskParam[0] && param.oldTitle < taskParam[0]; - checkHistory = true; - break; - case TASK_TYPE.HERO_STAR_UP: - isMatch = taskParam[1] == param.star; - break; - case TASK_TYPE.HERO_QUALITY: - isMatch = taskParam[1] == param.quality; - break; - case TASK_TYPE.HERO_QUALITY_UP: - isMatch = true; - checkRecord = `${param.hid}`; - break; - case TASK_TYPE.HERO_QUALITY_STAR_UP: - isMatch = taskParam[1] == param.quality && taskParam[2] == param.star; - break; - case TASK_TYPE.HERO_LV: - isMatch = param.lv >= taskParam[1] && param.oldLv < taskParam[1]; - break; - case TASK_TYPE.HERO_TRAIN: - isMatch = param.count >= taskParam[1] && param.oldCount < taskParam[1]; - break; - case TASK_TYPE.HERO_FAVOUR_LV: - isMatch = param.favourLv >= taskParam[1] && param.oldLv < taskParam[1]; - break; - case TASK_TYPE.HERO_CONNECT: - isMatch = taskParam[1] == param.connectLv; - break; - case TASK_TYPE.CHAT: - isMatch = taskParam[0] == 0 || param.chatType == taskParam[0]; - break; - case TASK_TYPE.BATTLE_WITH_HERO: - isMatch = checkIdList(taskParam, 2, param.warId) && checkHero(taskParam, 0, param.heroes); - break; - case TASK_TYPE.BATTLE_MAIN: - case TASK_TYPE.BATTLE_DUNGEON_WAR: - isMatch = checkIdList(taskParam, 0, param.warId); - break; - case TASK_TYPE.BATTLE_EVENT: - isMatch = taskParam[0] == 0 || param.eventType == taskParam[0]; - break; - case TASK_TYPE.BATTLE_DAILY_STAR: - isMatch = (taskParam[0] == 0 || param.star == taskParam[0]) && checkIdList(taskParam, 2, param.warId); - break; - case TASK_TYPE.BATTLE_DAILY: - isMatch = taskParam[0] == 0 || param.dailyType == taskParam[0]; - break; - case TASK_TYPE.BATTLE_EXPEDITION_BOX: - isMatch = taskParam[1] == 0 || param.point == taskParam[1]; - break; - case TASK_TYPE.COM_BATTLE_DROP: - isMatch = checkIdList(taskParam, 1, param.gid); - break; - case TASK_TYPE.PVP_HERO_SCORE: - for (let { score } of param.heroScores) { - if (score >= taskParam[0]) { - count++; - } - } - if (count <= 0) isMatch = false; - break; - case TASK_TYPE.PVP_RANK: - isMatch = taskParam[0] <= param.rankLv; - checkHistory = true; - break; - case TASK_TYPE.GUILD_JOB: - isMatch = taskParam[0] <= param.job && param.job != GUILD_JOB.DAJIANGJUN; - checkHistory = true; - break; - case TASK_TYPE.GUILD_REFINE: - isMatch = taskParam[0] == 0 || param.quality == taskParam[0]; - break; - case TASK_TYPE.EQUIP_LV_TO: - isMatch = param.lv >= taskParam[1] && param.oldLv < taskParam[1]; - break; - case TASK_TYPE.EQUIP_PUT_JEWEL: - if(param.lv >= taskParam[1] && param.oldLv < taskParam[1]) { - isMatch = true; - } else if (param.lv < taskParam[1] && param.oldLv >= taskParam[1]) { - isMatch = true; - count = -1; - } - break; - case TASK_TYPE.EQUIP_PUT_STONE: - if(param.oldCount < taskParam[1] && param.count >= taskParam[1]) { - isMatch = true; - } else if (param.oldCount >= taskParam[1] && param.count < taskParam[1]) { - isMatch = true; - count = -1; - } - break; - case TASK_TYPE.EQUIP_STAR_UP_TO: - isMatch = param.oldStar < taskParam[1] && param.star >= taskParam[1]; - break; - case TASK_TYPE.EQUIP_SUIT_SEID_NUM: - isMatch = param.oldCount < taskParam[1] && param.count >= taskParam[1]; - break; - case TASK_TYPE.EQUIP_QUALITY_UP: - isMatch = true; - checkRecord = `${param.hid}_${param.eplaceId}`; - break; - case TASK_TYPE.EQUIP_QUALITY_UP_TO: - isMatch = param.oldQuality < taskParam[1] && param.quality >= taskParam[1]; - break; - case TASK_TYPE.EQUIP_STONE_CNT_LV: - let oldCount = param.oldStoneLvs.filter(lv => lv >= taskParam[2]).length; - let newCount = param.newStoneLvs.filter(lv => lv >= taskParam[2]).length; - if(oldCount < taskParam[1] && newCount >= taskParam[1]) { - isMatch = true; - } else if (oldCount >= taskParam[1] && newCount < taskParam[1]) { - isMatch = false; - count = -1; - } - break; - case TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT: - if(param.oldCount < taskParam[1] && param.count >= taskParam[1]) { - isMatch = true; - } else if (param.oldCount >= taskParam[1] && param.count < taskParam[1]) { - isMatch = true; - count = -1; - } - break; - case TASK_TYPE.EQUIP_COMPOSE_CNT: - isMatch = param.oldCount < taskParam[1] && param.count >= taskParam[1]; - break; - - } - // console.log('****isMatch', isMatch, checkHistory, type, taskType, group, count) - if (param.isDebug) { - isMatch = true; - } - - if (isMatch) { - if (isInc) { - if(checkRecord != '') { - let rec = await UserTaskRecModel.checkRecordAndIncTaskRec(roleId, type, taskType, group, count, checkRecord); - return rec; - } else { - let rec = await UserTaskRecModel.incTaskRec(roleId, type, taskType, group, count); - return rec; - } - } else { - if (checkHistory) { - let rec = await UserTaskRecModel.checkHistoryAndSetTaskRec(roleId, type, taskType, group, count); - return rec; - } else { - let rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count); - return rec; - } - } - } -} - -/** - * 检查id是否在某列表中 - * @param taskParam 条件number[] 填法 如: count&id&... 有多少id就count填几 - * @param index count在第几位,0开始 - * @param id 关卡id - */ -function checkIdList(taskParam: number[], index: number, id: number) { - let count = taskParam[index]; - if (!count) return false; - let idList = taskParam.slice(index + 1, index + 1 + count); - return idList.indexOf(id) != -1; -} - -function checkHero(taskParam: number[], index: number, heroes: number[]) { - let hid = taskParam[index]; - return heroes.indexOf(hid) != -1; -} - -function checkRecResult(rec: UserTaskRecType, id: number) { - if (!rec) return false; - if (rec.received && rec.received.includes(id)) return false; // 已领取,不再推送 - - return rec -} - - -/** - * 任务统计 - * - * @param {number} serverId 区Id - * @param {string} roleId 角色Id - * @param {number} taskType 任务类型 - * @param {number} count 任务数据 - * @param {number} parma 参数 - * - */ -export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any, activities?: ActivityInRemote[]) { - - // console.log('accomplishTask', roleId, taskType, count, JSON.stringify(parma)) - let dicTaskType = gameData.taskDescByType.get(taskType); - let pushMessage = []; - /* let serverInfo = await ServerlistModel.findByServerId(serverId); - if (!serverInfo) return []; - let { activityGroupId } = serverInfo; - let findActivitiesByTypes = async (types: number[]) => { - if(activities) { - let result: ActivityModelType[] = []; - for(let activity of activities) { - if(activity.beginTime <= Date.now() && activity.endTime >= Date.now()) { - if(activityGroupId.includes(activity.groupId) && types.includes(activity.type)) { - result.push( transActivityInRemoteToModelType(activity)); - } - } - } - return result; - } else { - if(types.length > 1) { - return ActivityModel.findOpenActivityByTypes(activityGroupId, types, new Date()); - } else { - return ActivityModel.findOpenActivityByType(activityGroupId, types[0], new Date()); - } - } - } - let { createTime } = await RoleModel.findByRoleId(roleId); - //七天乐 - let allActivity: ActivityModelType[] = await findActivitiesByTypes([ACTIVITY_TYPE.SEVEN_DAY]); - for (let activity of allActivity) { - let playerData = new SevenDaysData(activity, createTime) - //成长活动统计 - let growthActivity = playerData.growth; - let growthTaskArray = growthActivity.findTaskByType(taskType); // 所有任务 - for (let task of growthTaskArray) { - let taskRecord = await ActivityGrowthModel.findDataByCellIndex(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType); - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null; - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData); - - if (addCount) { - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV || taskType == TASK_TYPE.FRIEND_NUM) { - let playerRecord = await ActivityGrowthModel.setTaskCount(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId, activityType: "growth" })); - } else { - let playerRecord = await ActivityGrowthModel.addTaskCount(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId, activityType: "growth" })); - } - } - if (record) { - await ActivityGrowthModel.addTaskRecord(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, JSON.stringify(record)); - } - } - //今日挑战统计 - let dailyChallengeActivity = playerData.dailyChallenge; - let dailyChallengeTaskArray = dailyChallengeActivity.findTaskByType(taskType); - for (let task of dailyChallengeTaskArray) { - if(dicTaskType.sumType == TASK_SUM_TYPE.DO && task.dayIndex != playerData.today()) { - continue; - } - - let taskRecord = await ActivityDailyChallengesModel.findDataByCellIndex(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData); - // console.log('******* dailyChallenge', addCount, record) - if (addCount) { - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV || taskType == TASK_TYPE.FRIEND_NUM) { - let playerRecord = await ActivityDailyChallengesModel.setTaskCount(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId, activityType: "daily" })); - } else { - let playerRecord = await ActivityDailyChallengesModel.addTaskCount(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId, activityType: "daily" })); - } - } - if (record) { - await ActivityDailyChallengesModel.addTaskRecord(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, JSON.stringify(record)); - } - } - } - // console.log('***** sevenDay after', Date.now()); - - // console.log('***** DailyChallenge before', Date.now()); - //今日挑战统计 - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.TASK_DAILY_CHALLENGES]); - for (let activity of allActivity) { - let growthActivity = new DailyChallengesData(activity, createTime); - let taskArray = growthActivity.findTaskByType(taskType, growthActivity.today()); - for (let task of taskArray) { - let taskRecord = await ActivityDailyChallengesModel.findDataByCellIndex(serverId, growthActivity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, growthActivity.activityId, parma, recordData); - if (addCount) { - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV) { - let playerRecord = await ActivityDailyChallengesModel.setTaskCount(serverId, growthActivity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: growthActivity.activityId })); - } else { - let playerRecord = await ActivityDailyChallengesModel.addTaskCount(serverId, growthActivity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: growthActivity.activityId })); - } - } - if (record) { - await ActivityGrowthModel.addTaskRecord(serverId, growthActivity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, JSON.stringify(record)); - } - } - } - // console.log('***** DailyChallenge after', Date.now()); - - // console.log('***** RefreshTask before', Date.now()); - //刷新任务统计 - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.REFRESH_TASK]); - for (let activity of allActivity) { - let taskActivity = new RefreshTaskData(activity, createTime); - let taskArray = taskActivity.findTaskByType(taskType); - for (let task of taskArray) { - let taskRecord = await ActivityRefreshTaskModel.findDataById(serverId, taskActivity.activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, task.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, taskActivity.activityId, parma, recordData); - if (addCount) { - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV) { - let playerRecord = await ActivityRefreshTaskModel.setTaskCount(serverId, taskActivity.activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: taskActivity.activityId })); - } else { - let playerRecord = await ActivityRefreshTaskModel.addTaskCount(serverId, taskActivity.activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: taskActivity.activityId })); - } - } - if (record) { - await ActivityRefreshTaskModel.addTaskRecord(serverId, taskActivity.activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, task.taskType, JSON.stringify(record)); - } - } - } - // console.log('***** RefreshTask after', Date.now()); - - // console.log('***** hunt before', Date.now()); - //寻宝骑兵活动任务 - 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); - if (activity) { - let playerData = new TreasureHuntData(activity, createTime); - 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, activity.activityId, 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)); - } - } - } - } - } - // console.log('***** hunt after', Date.now()); - - - // console.log('***** thirtyDay before', Date.now()); - //30天任务统计 - { - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.THIRTY_DAYS]); - for (let activity of allActivity) { - let thirtyDaysActivity = new ThirtyDaysData(activity, createTime); - let playerRecords: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.findData(serverId, activity.activityId, roleId); - thirtyDaysActivity.setPlayerRecords(playerRecords); - let taskArray = thirtyDaysActivity.findUncompleteTaskByType(taskType); - for (let task of taskArray) { - let taskRecord = await ActivityThirtyDaysModel.findDataByCellIndex(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, task.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, thirtyDaysActivity.activityId, parma, recordData); - if (addCount) { - let playerRecord = await ActivityThirtyDaysModel.addTaskCount(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, task.taskType, addCount); - //推送 - if (task.condition <= playerRecord.totalCount) {//已经完成 - playerRecord = await ActivityThirtyDaysModel.pushMessage(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, task.taskType); - task.totalCount = playerRecord.totalCount; - task.isComplete = true; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: thirtyDaysActivity.activityId })); - } else {//没有完成 - task.totalCount = playerRecord.totalCount; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: thirtyDaysActivity.activityId })); - } - } - if (record) { - await ActivityThirtyDaysModel.addTaskRecord(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, task.taskType, JSON.stringify(record)); - } - - } - } - - } - // console.log('***** thirtyDay after', Date.now()); - - // console.log('***** popUpShop before', Date.now()); - //弹出商店 - // { - // allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.POP_UP_SHOP]); - // 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 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.GACHA_QUALITY_COUNT || taskType == TASK_TYPE.GUILD_ACTIVITY) {//每天统计 - // 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 } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, null); - // let oldCount = (recordData && recordData.count) ? recordData.count : 0; - // if (oldCount < task.condition && (oldCount + addCount >= task.condition)) {//完成当天任务 - // let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, oldCount + addCount, beginTime, endTime); - // popShopData.setPlayerRecords(playerRecord) - // pushMessage = pushMessage.concat(popShopData); - // } - // await ActivityPopUpShopRecordModel.addRecord(serverId, activity.activityId, roleId, task.id, task.taskType, recordDate, addCount) - // } else if (taskType == TASK_TYPE.GUILD_TRAIN_COUNT) {//军团练兵场通关层数推送所有团员 - // if (task.taskParam[0] == parma.trainId) { - // let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, count, beginTime, endTime); - // popShopData.setPlayerRecords(playerRecord) - // pushMessage = pushMessage.concat(popShopData); - - // //全服推送 - // let code = parma.code; - // const guildData = await GuildModel.findByCode(code, serverId, 'members'); - // let members = guildData.members.filter(member => { return member != roleId }) - // await ActivityPopUpShopModel.addTaskArrayPushMessage(serverId, activity.activityId, members, task.id, task.taskType, count, beginTime, endTime); - - // } - // } 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, activity.activityId, 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)); - // } - // } - // } - // } - // } - // } - // } - // console.log('***** popUpShop after', Date.now()); - // console.log('***** growthFund before', Date.now()); - //主线成长基金 - if (taskType === TASK_TYPE.BATTLE_MAIN) { - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_MAIN, ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP]); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity, createTime); - 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); - } - } - // console.log('***** growthFund after', Date.now()); - // console.log('***** growthFundTower before', Date.now()); - //镇念塔成长基金getRoleOnlineInfo - if (taskType === TASK_TYPE.BATTLE_TOWER_LV) { - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_TOWER, ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP]); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity, createTime); - 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); - } - } - // console.log('***** growthFundTower after', Date.now()); - // console.log('***** growthFundElite before', Date.now()); - //精英成长基金 - if (taskType === TASK_TYPE.BATTLE_MAIN_ELITE) { - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP]); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity, createTime); - 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); - } - } - // console.log('***** growthFundElite after', Date.now()); - */ - 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, _activityId: number, paramObj?: any, recordData?: any): any { - // console.log('达成任务标准', roleId, taskType, taskParam, count, activityId, 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& - let dicJob = gameData.job.get(paramObj.job); - addCount = (param[1] == dicJob.grade) ? 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.BATTLE_MAIN: - addCount = (param[1] == paramObj.warId) ? 1 : 0; - break; - case TASK_TYPE.GUILD_TRAIN: - addCount = count; - break; - case TASK_TYPE.ROLE_SCHOOL_PUT_HERO: - addCount = count; - break; - case TASK_TYPE.GUILD_ACTIVITY: - { - let aid = paramObj.aid; - if (param[0] == 0 || aid == param[0]) { - addCount = count; - } - break; - } - case TASK_TYPE.HERO_LV://{ hid, lv} - { - let hid = paramObj.hid; - let lv = paramObj.lv; - if (lv < param[1]) { - break; - } - 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; - } - } - 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; - } - case TASK_TYPE.BATTLE_DUNGEON_WAR: - { - if (paramObj.warId == param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.BATTLE_DUNGEON: - { - addCount = count; - break; - } - case TASK_TYPE.HERO_NUM: - { - addCount = count; - break; - } - case TASK_TYPE.PVP: - { - addCount = count; - break; - } - case TASK_TYPE.GUILD_TRAIN_COUNT://trainId trainId& - { - if (paramObj.trainId == param[0]) { - 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; - } - } else { - record = []; - } - - addCount = count; - record.push(hid) - break; - } - case TASK_TYPE.COM_BATTLE: - { - addCount = count; - break; - } - case TASK_TYPE.COM_BATTLE_ASSIST_TEAM: - { - addCount = count; - break; - } - case TASK_TYPE.GUILD_JOIN_ACTIVITY_END: - { - addCount = count; - break; - } - case TASK_TYPE.ACTIVITY_RMB: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_EVENT: - { - if (param[0] == 0 || param[0] == paramObj.eventType) { - addCount = count; - } - break; - } - case TASK_TYPE.GUILD_DONATE: - { - addCount = count; - break; - } - case TASK_TYPE.CHAT: - { - if (param[0] == 0 || param[0] == paramObj.chatType) { - addCount = count; - } - break; - } - case TASK_TYPE.BATTLE_TOWER: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_COST_AP: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_MAIN_SWEEP: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_DAILY: - { - console.log('*********** TASK_TYPE.BATTLE_DAILY', param[0], paramObj.dailyType) - if (param[0] == 0 || param[0] == paramObj.dailyType) { - addCount = count; - } - break; - } - case TASK_TYPE.FRIEND_SEND_HEART: - { - addCount = count; - break; - } - case TASK_TYPE.ROLE_TERAPH_STRENGTHEN: - addCount = count; - break; - case TASK_TYPE.HERO_FAVOUR_LV: - if(paramObj.lv >= param[1] && paramObj.oldLv < param[1]) { - addCount = count; - } - break; - case TASK_TYPE.GUILD_RECEIVE_BOX: - addCount = count; - break; - case TASK_TYPE.ROLE_SCHOOL_UNLOCK: - addCount = count; - break; - case TASK_TYPE.HERO_STAR_UP: - addCount = count; - break; - case TASK_TYPE.FRIEND_NUM: - addCount = count; - break; - case TASK_TYPE.ROLE_SCROLL_ACTIVE: - addCount = count; - break; - case TASK_TYPE.EQUIP_LV_TO: - { - for(let eplaceId of paramObj.eplaceIds) { - let { oldEquip, newEquip } = getEquipById({ ...paramObj, eplaceId }); - if(oldEquip.lv < param[1] && newEquip.lv >= param[1]) { - addCount += 1; - } else if (oldEquip.lv >= param[1] && newEquip.lv < param[1]) { - addCount -= 1; - } - } - break; - } - case TASK_TYPE.EQUIP_PUT_JEWEL: - { - let { oldEquip, newEquip } = paramObj; - let { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, paramObj); - let oldLv = gameData.jewel.get(oldJewel?.id)?.lv || 0; - let lv = gameData.jewel.get(newJewel?.id)?.lv || 0; - - if(lv >= param[1] && oldLv < param[1]) { - addCount = count; - } else if (lv < param[1] && oldLv >= param[1]) { - addCount = -count; - } - break; - } - case TASK_TYPE.EQUIP_PUT_STONE: - { - let { oldEquip, newEquip } = paramObj; - let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; - let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; - - if(oldStoneCnt < param[1] && newStoneCnt >= param[1]) { - addCount = count; - } else if (oldStoneCnt >= param[1] && newStoneCnt < param[1]) { - addCount = -count; - } - break; - } - case TASK_TYPE.EQUIP_STAR_UP_TO: - { - let { oldEquip, newEquip } = paramObj; - let oldStar = oldEquip?.star||0; - let star = newEquip?.star||0 - if(oldStar < param[1] && star >= param[1]) addCount = count; - break; - } - case TASK_TYPE.EQUIP_STAR_UP_CNT: - addCount = count; - break; - case TASK_TYPE.EQUIP_SUIT_SEID_NUM: - { - let dicEquipSuit = getEquipSuitByHero(paramObj.hid); - let oldSuitStars: number[] = [], newSuitStars: number[] = []; - for(let equipId of dicEquipSuit.equips) { - let oldEquip = paramObj.oldEplace.find(cur => cur.equipId == equipId); - oldSuitStars.push(oldEquip? oldEquip.star: 0); - let newEquip = paramObj.newEplace.find(cur => cur.equipId == equipId); - newSuitStars.push(newEquip? newEquip.star: 0); - } - let oldStar = Math.min(...oldSuitStars); - let newStar = Math.min(...newSuitStars); - let oldCount = 0, count = 0; - for(let { star } of dicEquipSuit.effect) { - if(oldStar >= star) oldCount++; - if(newStar >= star) count++; - } - if(oldCount < param[1] && count >= param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_QUALITY_UP: - { - let r = `${paramObj.hid}_${paramObj.eplaceId}`; - if (recordData) { - record = recordData; - if (recordData.indexOf(r) != -1) { - break; - } - } else { - record = []; - } - - addCount = count; - record.push(r) - break; - } - case TASK_TYPE.EQUIP_QUALITY_UP_CNT: - addCount = count; - break; - case TASK_TYPE.EQUIP_QUALITY_UP_TO: - { - let { oldEquip, newEquip } = paramObj; - let oldQuality = oldEquip?.quality||0; - let quality = newEquip?.quality||0; - if(oldQuality < param[1] && quality >= param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_COMPOSE: - addCount = count; - break; - case TASK_TYPE.EQUIP_COMPOSE_CNT: - { - if(paramObj.oldEplace.length < param[1] && paramObj.newEplace.length >= param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_LV_UP: - addCount = count; - break; - case TASK_TYPE.EQUIP_PUT_JEWEL_CNT: - { - let { oldEquip, newEquip } = paramObj; - if(oldEquip.jewel && !newEquip.jewel) { - addCount = -count; - } else if (!oldEquip.jewel && newEquip.jewel) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_PUT_STONE_CNT: - { - let { oldEquip, newEquip } = paramObj; - let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; - let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; - if(oldStoneCnt > 0 && newStoneCnt == 0) { - addCount = -count; - } else if (oldStoneCnt == 0 && newStoneCnt > 0) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_STONE_CNT: - { - let { oldEquip, newEquip } = paramObj; - let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; - let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; - addCount = newStoneCnt - oldStoneCnt; - break; - } - case TASK_TYPE.EQUIP_STONE_CNT_LV: - { - let { oldEquip, newEquip } = paramObj; - let oldStoneLvs = oldEquip.stones.map(cur => { - let dicStone = gameData.stone.get(cur.stone); - return dicStone?dicStone.lv: 0; - }); - let newStoneLvs = newEquip.stones.map(cur => { - let dicStone = gameData.stone.get(cur.stone); - return dicStone?dicStone.lv: 0; - }); - let oldCount = oldStoneLvs.filter(lv => lv >= param[2]).length; - let newCount = newStoneLvs.filter(lv => lv >= param[2]).length; - if(oldCount < param[1] && newCount >= param[1]) { - addCount = count; - } else if (oldCount >= param[1] && newCount < param[1]) { - addCount = -count; - } - break; - } - case TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT: - { - let { oldEquip, newEquip } = paramObj; - let { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, { jewels: paramObj.jewels }); - - let oldRandSe = oldJewel?.randSe||[]; - let oldUnlockSeCnt = oldRandSe.filter(se => { - return isRandSeUnLock(oldJewel.id, se.id, oldEquip.stones); - }).length; - - let newRandSe = newJewel?.randSe||[]; - let newUnlockSeCnt = newRandSe.filter(se => { - return isRandSeUnLock(newJewel.id, se.id, newEquip.stones); - }).length; - - if(oldUnlockSeCnt < param[1] && newUnlockSeCnt >= param[1]) { - addCount = count; - } else if (oldUnlockSeCnt >= param[1] && newUnlockSeCnt < param[1]) { - addCount = -count; - } - break; - } - case TASK_TYPE.STONE_COMPOSE: - addCount = count; - break; - case TASK_TYPE.JEWEL_RESET: - addCount = count; - break; - case TASK_TYPE.JEWEL_QUENCH: - addCount = count; - break; - case TASK_TYPE.JEWEL_QUENCH_SUCCESS: - addCount = count; - break; - default: - addCount = 0; - break; - - } - // console.log('dddddddddddd', addCount, record) - return { addCount, record }; -} \ No newline at end of file diff --git a/web-server/app/service/Auth.ts b/web-server/app/service/Auth.ts index db7439141..fc9e19f26 100644 --- a/web-server/app/service/Auth.ts +++ b/web-server/app/service/Auth.ts @@ -1,5 +1,5 @@ -import { COUNTER, DEFAULT_LV, ADULT_AGE, GUEST_MAX_TIME, TASK_TYPE, BLOCK_TYPE, TA_EVENT } from '@consts'; +import { COUNTER, DEFAULT_LV, ADULT_AGE, GUEST_MAX_TIME, BLOCK_TYPE, TA_EVENT } from '@consts'; import { RoleModel } from '@db/Role'; import { UserModel, UserType } from '@db/User'; import { STATUS, GET_SMS_TYPE, ADDICTION_PREVENTION_CODE } from '@consts'; @@ -12,7 +12,6 @@ import { getAge, nowSeconds } from '../pubUtils/timeUtil'; import { resResult } from '../pubUtils/util'; import { checkTeeanAgerTime } from '../pubUtils/authenticateUtil'; // import { authenticate } from '../pubUtils/httpUtil'; -import { checkTask } from 'app/pubUtils/taskUtil'; import { getChannelId, loginValidata } from '../pubUtils/sdkUtil'; import { LoginValidateData37 } from 'app/domain/sdk'; import { ServerlistModel } from '@db/Serverlist'; @@ -322,7 +321,6 @@ export default class Auth extends Service { if (role) { await ServerlistModel.incRoleCnt(serverId); // 任务 - await checkTask(roleId, TASK_TYPE.ROLE_LV, role.lv, false, {}); ctx.service.sdk.reportTAEventWithRoleIdAndDistinctId(roleId, distinctId, TA_EVENT.CREATE_ROLE, null, ctx.clientIp); return ctx.service.utils.resResult(STATUS.SUCCESS, { roleId: role.roleId });