diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index ab39ff774..c97dcd226 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -6,7 +6,7 @@ import { difference } from 'underscore'; * @Last Modified by: 梁桐川 * @Last Modified time: 2021-03-10 20:15:30 */ -import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY, MSG_SOURCE, QUALITY_TYPE, ROLE_SELECT } from './../../../consts'; +import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY, MSG_SOURCE, QUALITY_TYPE, ROLE_SELECT, TASK_TYPE } from './../../../consts'; import { getGoodById, getBlueprtComposeByQuality, getBluePrtByQuality, getWarById, getWarIdByBlueprtId } from '../../../pubUtils/gamedata'; import Role, { RoleModel } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; @@ -25,6 +25,7 @@ import { pushComBtlTeamMsg, pushFriendTeamInviteMsg, pushNormalItemMsg, pushTeam import { EXTERIOR } from '../../../pubUtils/dicParam'; import { getTodayZeroDate } from '../../../pubUtils/timeUtil'; import { FriendParams } from '../../../domain/roleField/friend'; +import { checkTask } from '../../../services/taskService'; export default function(app: Application) { return new ComBattleHandler(app); @@ -568,6 +569,8 @@ export class ComBattleHandler { await ComBattleTeamModel.updateRewardSt(teamCode, roleId, true); const goods = await handleFixedReward(roleId, roleName, sid, roleSt.fixReward, 1); let actordata = await roleLevelup(roleId, warInfo.kingExp, session);// 主公升级经验 + // 任务 + return resResult(STATUS.SUCCESS, { battleGoods: goods, ...actordata, teamInfo: {status, teamCode, roleStatus, bossHpArr} }); } @@ -780,6 +783,7 @@ export class ComBattleHandler { const { name } = getGoodById(target); pushNormalItemMsg(roleId, roleName, serverId, MSG_SOURCE.ORANGE_BLUEPRT_COMPOSE, target, name); } + await checkTask(roleId, sid, TASK_TYPE.COM_BATTLE_BLUEPRT, 1, true, { quality: dicCompose.targetQuality }); return resResult(STATUS.SUCCESS, { goods, costGold: 0 }); } diff --git a/game-server/app/servers/battle/handler/donateHandler.ts b/game-server/app/servers/battle/handler/donateHandler.ts index 6179cd6ec..9a778cf8f 100644 --- a/game-server/app/servers/battle/handler/donateHandler.ts +++ b/game-server/app/servers/battle/handler/donateHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession } from 'pinus'; import { UserGuildModel } from '../../../db/UserGuild'; import { resResult } from '../../../pubUtils/util'; -import { STATUS } from '../../../consts'; +import { STATUS, TASK_TYPE } from '../../../consts'; import { DonationModel } from '../../../db/Donation'; import { nowSeconds } from '../../../pubUtils/timeUtil'; import { getArmyDonateBaseByLv, getArmyDonateBoxBaseById } from '../../../pubUtils/data'; @@ -12,6 +12,7 @@ import { getDonation } from '../../../services/donateService'; import { getUserGuildWithRefActive } from '../../../services/guildService'; import { ARMY } from '../../../pubUtils/dicParam'; import { addActive } from '../../../services/guildService' +import { checkTask } from '../../../services/taskService'; export default function(app: Application) { return new DonationHandler(app); } @@ -69,6 +70,8 @@ export class DonationHandler { const { fund } = await GuildModel.updateInfo(code, {}, { fund: rewardFund }, 'fund'); this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { fund }); await addActive(roleId, serverId, GUILD_POINT_WAYS.DONATE, id); + // 任务 + await checkTask(roleId, sid, TASK_TYPE.GUILD_DONATE, 1, true, {}); return resResult(STATUS.SUCCESS, { donateFund, reports, donateCnt, goods }); } diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index 1f9cee904..eb4113e2b 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -14,7 +14,7 @@ import { getAp, setAp } from '../../../services/actionPointService'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { checkBattleHeroes, roleLevelup } from '../../../services/normalBattleService'; -import { checkTaskWithWar } from '../../../services/taskService'; +import { checkTaskWithWar, checkTask } from '../../../services/taskService'; export default function(app: Application) { return new ExpeditionBattleHandler(app); @@ -329,6 +329,9 @@ export class ExpeditionBattleHandler { } let pointRewards = await getPointRewardStatus(roleId); + // 任务 + await checkTask(roleId, sid, TASK_TYPE.BATTLE_EXPEDITION_BOX, 1, true, { point }); + let goods = await handleFixedReward(roleId, roleName, sid, curDicExpeditionPoint.reward, 1); return resResult(STATUS.SUCCESS, { diff --git a/game-server/app/servers/battle/handler/guildBossHandler.ts b/game-server/app/servers/battle/handler/guildBossHandler.ts index c42bdb912..5cd8156f1 100644 --- a/game-server/app/servers/battle/handler/guildBossHandler.ts +++ b/game-server/app/servers/battle/handler/guildBossHandler.ts @@ -1,6 +1,6 @@ import { Application, BackendSession } from 'pinus'; import { resResult, genCode, getRandomByLen } from '../../../pubUtils/util'; -import { STATUS } from '../../../consts'; +import { STATUS, TASK_TYPE } from '../../../consts'; import { BossInstanceModel } from '../../../db/BossInstance'; import { BattleRecordModel } from '../../../db/BattleRecord'; import { nowSeconds, getTodayZeroPoint } from '../../../pubUtils/timeUtil'; @@ -15,6 +15,7 @@ import { GuildModel } from '../../../db/Guild'; import { getBossByLv } from '../../../pubUtils/data'; import { lockData } from '../../../services/redLockService'; import { pushGuildBossSucMsg } from '../../../services/chatService'; +import { checkTask } from '../../../services/taskService'; export default function (app: Application) { return new GuildHandler(app); @@ -166,6 +167,7 @@ export class GuildHandler { async battleBossEnd(msg: { battleCode: string }, session: BackendSession) { const { battleCode } = msg; const roleId = session.get('roleId'); + const sid = session.get('sid'); const serverId: number = parseInt(session.get('serverId')); let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); if (!userGuild) @@ -181,6 +183,8 @@ export class GuildHandler { let bossInstance = await BossInstanceModel.findBossInstance(code); let result = await getBossInstanceWhenEnd(bossInstance, roleId, battleRecord.record.recordNum); await addActive(roleId, serverId, GUILD_POINT_WAYS.BOSS_WAR);//获得活跃值 + // 任务 + await checkTask(roleId, sid, TASK_TYPE.GUILD_BOSS, 1, true, {}); return resResult(STATUS.SUCCESS, result); } diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index a83ed7cb5..a81858fd5 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -1,6 +1,6 @@ import { Application, BackendSession, pinus, ChannelService } from 'pinus'; import { resResult, getRandEelm, getRefTime, shouldRefresh, sortArrRandom } from '../../../pubUtils/util'; -import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_SELECT, USER_GUILD_SELECT } from '../../../consts'; +import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_SELECT, USER_GUILD_SELECT, TASK_TYPE } from '../../../consts'; import { UserGuildModel } from '../../../db/UserGuild'; import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, addActive, settleGuildWeekly } from '../../../services/guildService'; import { GuildModel, GuildType } from '../../../db/Guild'; @@ -23,6 +23,7 @@ import { removeBossRank } from '../../../services/guildBossService'; import { removeTrainRank } from '../../../services/guildTrainService'; import { pushGuildNoticeUpdateMsg, pushGuildUpStructureMsg, addRoleToGuildChannel, getGuildChannelSid } from '../../../services/chatService'; import { Rank } from '../../../services/rankService'; +import { checkTask } from '../../../services/taskService'; export default function (app: Application) { return new GuildHandler(app); } @@ -913,6 +914,9 @@ export class GuildHandler { let goods = await addItems(roleId, roleName, sid, activeDayReward.reward); userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive: userGuild.receivedActive }, {}, 'receivedActive'); + // 任务 + await checkTask(roleId, sid, TASK_TYPE.GUILD_RECEIVE_BOX, 1, true, {}); + return resResult(STATUS.SUCCESS, { goods, receivedActive: userGuild.receivedActive }); } diff --git a/game-server/app/servers/battle/handler/guildRefineHandler.ts b/game-server/app/servers/battle/handler/guildRefineHandler.ts index ce8731690..91000d9c3 100644 --- a/game-server/app/servers/battle/handler/guildRefineHandler.ts +++ b/game-server/app/servers/battle/handler/guildRefineHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, pinus } from 'pinus'; import { UserGuildModel } from '../../../db/UserGuild'; import { resResult } from '../../../pubUtils/util'; -import { STATUS, GUILD_OPERATE } from '../../../consts'; +import { STATUS, GUILD_OPERATE, TASK_TYPE } from '../../../consts'; import { GuildRefineModel } from '../../../db/GuildRefine'; import { getArmyDevelopConsumeById, getGoodById } from '../../../pubUtils/data'; import { nowSeconds } from '../../../pubUtils/timeUtil'; @@ -14,6 +14,7 @@ import { ARMY } from '../../../pubUtils/dicParam'; import { CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts/constModules/itemConst'; import { openGuildRefine } from '../../../services/guildRefineService'; import { DATA_NAME } from '../../../consts/dataName'; +import { checkTask } from '../../../services/taskService'; export default function (app: Application) { return new GuildRefineHandler(app); @@ -74,6 +75,9 @@ export class GuildRefineHandler { if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); let goods = await addItems(roleId, roleName, sid, [{id: pid, count: 1}]); + + // 任务 + await checkTask(roleId, sid, TASK_TYPE.GUILD_REFINE, 1, true, { quality: pieceInfo.lvLimited }); return resResult(STATUS.SUCCESS, { goods }); } /** @@ -171,6 +175,10 @@ export class GuildRefineHandler { scienceTree.endTime = scienceTree.endTime - ARMY.ARMY_DEVELOPMENT_SPEED * 60; let { scienceTrees } = await GuildRefineModel.updateRefine(code, { scienceTrees: guildRefine.scienceTrees }) res.releaseCallback(); + + // 任务 + await checkTask(roleId, sid, TASK_TYPE.GUILD_ASSIST_REFINE, 1, true, {}); + return resResult(STATUS.SUCCESS, { scienceTrees }); } } \ No newline at end of file diff --git a/game-server/app/servers/battle/handler/guildTrainHandler.ts b/game-server/app/servers/battle/handler/guildTrainHandler.ts index bd153caf0..dd8f05cc8 100644 --- a/game-server/app/servers/battle/handler/guildTrainHandler.ts +++ b/game-server/app/servers/battle/handler/guildTrainHandler.ts @@ -1,6 +1,6 @@ import { Application, BackendSession, pinus } from 'pinus'; import { resResult, genCode, getRandomByLen } from '../../../pubUtils/util'; -import { STATUS } from '../../../consts'; +import { STATUS, TASK_TYPE } from '../../../consts'; import { GuildTrainModel } from '../../../db/GuildTrain'; import { BattleRecordModel } from '../../../db/BattleRecord'; import { nowSeconds, getHourPoint, getCurHourPoint } from '../../../pubUtils/timeUtil'; @@ -18,6 +18,7 @@ import { addActive } from '../../../services/guildService'; import { GuildTrainReportModel } from '../../../db/GuildTrainReport'; import { DATA_NAME } from '../../../consts/dataName'; import { pushGuildTrainSucMsg } from '../../../services/chatService'; +import { checkTask } from '../../../services/taskService'; export default function (app: Application) { return new GuildTrainHandler(app); @@ -260,6 +261,13 @@ export class GuildTrainHandler { let result:any = getGuildTrainInfo(guildTrain, roleId, trainCount, trainRewards);//战斗后更新练兵场信息 result.battleGoods = goods; await addActive(roleId, serverId, GUILD_POINT_WAYS.TRAIN); + + // 任务 + if(isSuccess) { + await checkTask(roleId, sid, TASK_TYPE.GUILD_TRAIN_SUCESS, 1, true, {}); + } + await checkTask(roleId, sid, TASK_TYPE.GUILD_TRAIN, 1, true, {}); + return resResult(STATUS.SUCCESS, result); } /** diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index fdfc5ebe5..b3db49296 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -9,7 +9,7 @@ import { resResult, genCode } from '../../../pubUtils/util'; import { PvpDefenseModel, OppPlayers } from '../../../db/PvpDefense'; import { pvpEndParamInter } from '../../../pubUtils/interface'; import { PlayerDetail, PlayerDetailHero } from '../../../domain/battleField/guild'; -import { PVP_HERO_POS, PVP_HERO_ORDER, REDIS_KEY, LINEUP_NUM } from '../../../consts'; +import { PVP_HERO_POS, PVP_HERO_ORDER, REDIS_KEY, LINEUP_NUM, TASK_TYPE } from '../../../consts'; import { PVP } from '../../../pubUtils/dicParam'; import { addItems } from '../../../services/rewardService'; import { HeroModel } from '../../../db/Hero'; @@ -23,6 +23,7 @@ import { PvpSeasonResultModel } from '../../../db/PvpSeasonResult'; import { PvpHistoryOppModel, PvpHistoryOppType } from '../../../db/PvpHistoryOpp'; import { SystemConfigModel } from '../../../db/SystemConfig'; import { Rank } from '../../../services/rankService'; +import { checkTask, checkTaskInPvpEnd } from '../../../services/taskService'; export default function(app: Application) { return new PvpHandler(app); @@ -35,6 +36,7 @@ export class PvpHandler { async addRoleScore(msg: {heroScores: Array<{hid: number, score:number}>}, session: BackendSession) { let { heroScores: addHeroScores } = msg; let roleId = session.get('roleId'); + let sid = session.get('sid'); let {heroScores, hisScore} = await PvpDefenseModel.findByRoleId(roleId); let score = 0; for (let {hid, score: heroScore} of addHeroScores) { @@ -63,6 +65,10 @@ export class PvpHandler { // 加入排行榜 let r = new Rank(REDIS_KEY.PVP_RANK, {}); await r.setRankWithRoleInfo(roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), role); + + // 任务 + await checkTask(roleId, sid, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores }); + return resResult(STATUS.SUCCESS, {score, hisScore, heroScores}); } @@ -221,6 +227,7 @@ export class PvpHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); + let sid = session.get('sid'); const { battleCode, isSuccess, myHeroes, oppHeroes } = msg; @@ -287,6 +294,8 @@ export class PvpHandler { let r = new Rank(REDIS_KEY.PVP_RANK, {}); await r.setRankWithRoleInfo(roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), role); let myRank = await r.getMyRank({roleId}); + + await checkTaskInPvpEnd(roleId, sid, isSuccess, heroScores); return resResult(STATUS.SUCCESS, { battleCode, isSuccess, @@ -469,6 +478,8 @@ export class PvpHandler { let { challengeCnt, challengeRefTime } = refresh(lastChallengeCnt, lastChallengeRefTime, seasonEndTime); await PvpDefenseModel.updateInfo(roleId, {receivedBox, challengeCnt, challengeRefTime}); let result = await addItems(roleId, roleName, sid, pvpBox.reward ); + // 任务 + await checkTask(roleId, sid, TASK_TYPE.PVP_RECEIVE_BOX, 1, true, {}); return resResult(STATUS.SUCCESS,{goods: result, receivedBox, challengeCnt, challengeRefTime}); } diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index a10cc52ba..5b9ea79aa 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -1,5 +1,5 @@ import { Application, ChannelService, BackendSession, pinus } from "pinus"; -import { GUILD_ACTIVITY_TYPE, STATUS, REDIS_KEY, GUILD_POINT_WAYS, CITY_STATUS } from "../../../consts"; +import { GUILD_ACTIVITY_TYPE, STATUS, REDIS_KEY, GUILD_POINT_WAYS, CITY_STATUS, TASK_TYPE } from "../../../consts"; import { resResult } from "../../../pubUtils/util"; import { getGuildActivityStatus, getCityActivityObj, getCityStatus as pubGetCityStatus, getCities, getCityActivityRank, sendSingleCityActEndMsg, getMedianCe } from "../../../services/guildActivityService"; import { GuildActivityCityModel } from "../../../db/GuildActivityCity"; @@ -14,6 +14,7 @@ import { GUILDACTIVITY } from "../../../pubUtils/dicParam"; import { handleCost } from "../../../services/rewardService"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; +import { checkTask } from "../../../services/taskService"; export default function (app: Application) { return new CityActivityHandler(app); @@ -261,7 +262,7 @@ export class CityActivityHandler { // 结束挑战 async battleEnd(msg: { cityId: number, code: string, isSuccess: boolean }, session: BackendSession) { let roleId = session.get('roleId'); - let roleName = session.get('roleName'); + let sid = session.get('sid'); let guildCode = session.get('guildCode'); let serverId = session.get('serverId'); @@ -288,6 +289,9 @@ export class CityActivityHandler { let guildScore = await r.getMyScore({guildCode}); let gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp); + // 任务 + await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); + return resResult(STATUS.SUCCESS, { isSuccess, code, diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index 5f7c88ebe..29ea805d7 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, ChannelService, pinus } from "pinus"; import { getMedianCe, getGuildActivityStatus, getRecordScore, getGateActivityObj, sendSingleGateActEndMsg, participants, getGateActivityRank, getCityActivityObj } from "../../../services/guildActivityService"; import { resResult } from "../../../pubUtils/util"; -import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_WAYS } from "../../../consts"; +import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_WAYS, TASK_TYPE } from "../../../consts"; import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec"; import { GUILDACTIVITY } from "../../../pubUtils/dicParam"; import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; @@ -14,6 +14,7 @@ import { UserGuildModel } from "../../../db/UserGuild"; import { GuildActivityCityModel } from "../../../db/GuildActivityCity"; import { Rank } from "../../../services/rankService"; import { getNextHourPoint } from "../../../pubUtils/timeUtil"; +import { checkTask } from "../../../services/taskService"; export default function (app: Application) { return new GateActivityHandler(app); @@ -201,7 +202,7 @@ export class GateActivityHandler { // 结束挑战 async battleEnd(msg: { code: string, isSuccess: boolean }, session: BackendSession) { let roleId = session.get('roleId'); - let roleName = session.get('roleName'); + let sid = session.get('sid'); let guildCode = session.get('guildCode'); let serverId = session.get('serverId'); @@ -252,6 +253,8 @@ export class GateActivityHandler { isSuccess } + // 任务 + await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); return resResult(STATUS.SUCCESS, { code, ...statusResult, diff --git a/game-server/app/servers/guild/handler/raceActivityHandler.ts b/game-server/app/servers/guild/handler/raceActivityHandler.ts index c800c5c56..e15a90080 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -1,5 +1,5 @@ import { Application, ChannelService, BackendSession } from "pinus"; -import { GUILD_ACTIVITY_TYPE, STATUS, GUILD_ACTIVITY_STATUS, GUILD_POINT_WAYS, REDIS_KEY } from "../../../consts"; +import { GUILD_ACTIVITY_TYPE, STATUS, GUILD_ACTIVITY_STATUS, GUILD_POINT_WAYS, REDIS_KEY, TASK_TYPE } from "../../../consts"; import { resResult } from "../../../pubUtils/util"; import { getGuildActivityStatus, getRaceActivityObj, getRaceActivityRank, getWoodenHorseList, calWoodenHorseAndSend, raceActivitySettleReward } from "../../../services/guildActivityService"; import { UserGuildModel } from "../../../db/UserGuild"; @@ -7,6 +7,7 @@ import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; +import { checkTask } from "../../../services/taskService"; export default function (app: Application) { return new RaceActivityHandler(app); @@ -153,7 +154,7 @@ export class RaceActivityHandler { // 结束挑战 async battleEnd(msg: { code: string, isSuccess: boolean }, session: BackendSession) { let roleId = session.get('roleId'); - let roleName = session.get('roleName'); + let sid = session.get('sid'); let guildCode = session.get('guildCode'); let serverId = session.get('serverId'); @@ -173,6 +174,8 @@ export class RaceActivityHandler { let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }); let myGuildRank = await r.getMyRank({guildCode}); + // 任务 + await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); return resResult(STATUS.SUCCESS, { timestamp: Date.now(), woodenHorse: guildActivityRec.woodenHorse, diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 03c0a84b1..7a406bdd0 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -102,7 +102,7 @@ export class RoleHandler { role = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update); // 任务 - await checkTask(roleId, sid, TASK_TYPE.ROLE_TITLE, role.title, false, {}); + await checkTask(roleId, sid, TASK_TYPE.ROLE_TITLE, 1, false, { title }); return resResult(STATUS.SUCCESS, { roleId, title: role.title }); } diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index c1fde85f3..53f046d51 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -21,7 +21,7 @@ import { getRoleIds } from '../pubUtils/friendUtil'; import { getTeamSearchByQuality, rmRoleFromQueue } from './redisService'; import { addUserToChannel } from './roleService'; import { ChannelUser } from '../domain/ChannelUser'; - +import { checkTaskInComBattleEnd } from './taskService'; /** * 在给定的品质列表中随机返回一定数量的藏宝图Id @@ -233,7 +233,7 @@ function updateRobotKilled(bossHp: number, roleSt: RoleStatus) { } export async function handleComBtlProgress(teamStatus, robotHurtTimer: Map, teamMap: Map, channel: Channel) { - const { teamCode } = teamStatus; + const { teamCode, roleIds, capId, quality } = teamStatus; // 判断战斗是否结束 let battleSt = checkComBattleResult(teamStatus); teamStatus.status = battleSt; @@ -258,6 +258,10 @@ export async function handleComBtlProgress(teamStatus, robotHurtTimer: Map 1) { // 招募队友 + await checkTask(roleId, null, TASK_TYPE.COM_BATTLE_CREATE_TEAM, 1, true, {}); + } else if (roleId !== capId) { // 协助寻宝 + await checkTask(roleId, null, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, 1, true, {}); + } + await checkTask(roleId, null, TASK_TYPE.COM_BATTLE, 1, true, {}); + await checkTask(roleId, null, TASK_TYPE.COM_BATTLE_QUALITY, 1, true, { quality }); + } +} + +export async function checkTaskInPvpEnd(roleId: string, sid: string, isSuccess: boolean, heroScores: HeroScores[]) { + await checkTask(roleId, sid, TASK_TYPE.PVP, 1, true, {}); + 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, 0, false, { heroScores }); } \ No newline at end of file diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index cd9a0d264..f51a153ef 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -8,7 +8,7 @@ import { getPvpGkWarIds, getPvpRankRewards, getPvpHeroRewards, getResultMaxRank, import { deepCopy, getRandomArr, resResult } from '../pubUtils/util'; import { getLvByScore } from './pvpService'; import { getAllOnlineRoles, getAllServers, initSingleRank, delGuildActivityRank } from './redisService'; -import { MAIL_TYPE, REDIS_KEY, ADULT_AGE, GUEST_MAX_TIME, ADDICTION_PREVENTION_CODE, GUILD_ACTIVITY_STATUS, GUILD_ACTIVITY_TYPE } from '../consts'; +import { MAIL_TYPE, REDIS_KEY, ADULT_AGE, GUEST_MAX_TIME, ADDICTION_PREVENTION_CODE, GUILD_ACTIVITY_STATUS, GUILD_ACTIVITY_TYPE, TASK_TYPE } from '../consts'; import { RoleModel } from '../db/Role'; import { MailModel, MailType } from '../db/Mail'; import { pinus } from 'pinus'; @@ -25,6 +25,7 @@ import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity'; import { GuildModel } from '../db/Guild'; import { dispatch } from '../util/dispatcher'; import { Rank } from './rankService'; +import { checkTask } from './taskService'; const PER_SECOND = 1 * 1000; const PER_DAY = 24 * 60 * 60; @@ -184,6 +185,9 @@ export async function checkResult(pvpDefense: PvpDefenseType, seasonNum: number, oldSeasonData:{refOppCnt: pvpDefense.refOppCnt, rankLv, score: pvpDefense.score, pLv: oldPLv, heroScores: oldHeroScores, seasonNum: pvpDefense.seasonNum, challengeCnt, challengeRefTime, seasonEndTime: oldSeasonEndTime }, heroGoods, rankGoods, show: true });//结算修改玩家pvp信息 + // 更新任务 + await checkTask(pvpDefense.roleId, null, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores: pvpDefense.heroScores }); + await checkTask(pvpDefense.roleId, null, TASK_TYPE.PVP_RANK, 1, false, { rankLv }); return { rankLv, score, pLv, heroScores: pvpDefense.heroScores, seasonNum, challengeCnt:PVP.PVP_CHALLENGE_COUNTS, challengeRefTime:0, oldSeasonEndTime, heroGoods:heroGoods.map(({id, count})=>{ return {id, count}; }), rankGoods}; diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 6c0c78c91..bda654f27 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -623,5 +623,27 @@ export enum TASK_TYPE { BATTLE_TOWER_LV = 46, // 镇念塔层数 BATTLE_TOWER = 47, // 镇念塔 BATTLE_VESTIGE = 48, // 遗迹 - + BATTLE_EXPEDITION = 49, // 远征 + BATTLE_EXPEDITION_BOX = 50, // 领取远征宝箱 + COM_BATTLE_CREATE_TEAM = 51, // 寻宝招募队友 + COM_BATTLE_BLUEPRT = 52, // 合成藏宝图 + COM_BATTLE_ASSIST_TEAM = 53, // 队友协助寻宝 + COM_BATTLE = 54, // 寻宝 + COM_BATTLE_QUALITY = 55, // 按品质寻宝 + COM_BATTLE_DROP = 56, // 寻宝掉落碎片 + PVP = 57, // PVP挑战 + PVP_WIN = 58, // PVP胜利 + PVP_RECEIVE_BOX = 59, // 领取宝箱 + PVP_WIN_SERIES = 60, // PVP连胜 + PVP_HERO_SCORE = 61, // PVP武将积分 + PVP_RANK = 62, // PVP达到第几名 + GUILD_JOB = 63, // 军团官职 + GUILD_DONATE = 64, // 军团捐献 + GUILD_RECEIVE_BOX = 65, // 领取活跃宝箱 + GUILD_REFINE = 66, // 军团炼器 + GUILD_ASSIST_REFINE = 67, // 军团助力加速 + GUILD_TRAIN_SUCESS = 68, // 军团练兵场成功压制 + GUILD_BOSS = 69, // 军团演武台挑战 + GUILD_TRAIN = 70, // 挑战练兵场 + GUILD_ACTIVITY = 71, // 军团活动 } \ No newline at end of file diff --git a/shared/db/UserTaskRec.ts b/shared/db/UserTaskRec.ts index 8ffcc7216..3bd1a5e99 100644 --- a/shared/db/UserTaskRec.ts +++ b/shared/db/UserTaskRec.ts @@ -44,6 +44,20 @@ export default class UserTaskRec extends BaseModel { let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, type, group }, { $setOnInsert: { code: genCode(8), taskType, received: false }, $inc: { count } }, { new: true, upsert: true }).lean(); return rec; } + + public static async checkHistoryAndSetTaskRec(roleId: string, type: number, taskType: number, group: number, count: number) { + let rec: UserTaskRecType = await UserTaskRecModel.findOne({ roleId, type, group }).lean(); + if(rec) { + if(rec.count < count) { + rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count); + } + } else { + rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count); + } + return rec; + } + + } export const UserTaskRecModel = getModelForClass(UserTaskRec); diff --git a/shared/domain/roleField/task.ts b/shared/domain/roleField/task.ts index cb7a107c9..5c4cfd6e3 100644 --- a/shared/domain/roleField/task.ts +++ b/shared/domain/roleField/task.ts @@ -1,3 +1,5 @@ +import { HeroScores } from "../../db/PvpHistoryOpp"; + export class TaskParam { star?: number; quality?: number; @@ -13,4 +15,11 @@ export class TaskParam { heroes?: number[]; eventType?: number; dailyType?: number; + point?: number; + gid?: number; + heroScores?: HeroScores[]; + rankLv?: number; + title?: number; + job?: number; + aid?: number; } \ No newline at end of file diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index a8178453a..48d7a2dc7 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -1,12 +1,13 @@ import { gameData } from './data'; import { DicTask } from './dictionary/DicTask'; -import { TASK_TYPE, ABI_STAGE, WAR_TYPE } from '../consts'; +import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB } from '../consts'; import { UserTaskRecModel, UserTaskRecType } from '../db/UserTaskRec' import { RoleType } from '../db/Role'; import { TaskParam } from '../domain/roleField/task'; import { getTodayZeroPoint } from './timeUtil'; import { HeroType } from '../db/Hero'; import { EquipType, EquipModel } from '../db/Equip'; +import { RewardInter } from './interface'; export async function checkTaskWithRoles(taskType: number, roles: RoleType[]) { let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); @@ -275,11 +276,31 @@ export async function checkTaskWithWar(roleId: string, taskType: number, warId: pushMessage = await checkTask(roleId, taskType, count, true, {}); } } - else if (taskType == TASK_TYPE.BATTLE_VESTIGE) { + 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: RewardInter[]) { + let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); + if(taskType == TASK_TYPE.COM_BATTLE_DROP) + { + for(let { id, count } of goods) { + let push = await checkTask(roleId, taskType, count, true, { gid: id }); + pushMessage.concat(push); + } + } return pushMessage } @@ -311,37 +332,12 @@ export async function checkTask(roleId: string, taskType: number, count: number, // 检查各项任务是否达成,达成了就保存到数据库 export async function checkTaskRec(roleId: string, group: number, dicTask: DicTask, count: number, isInc: boolean, param: TaskParam ) { let { type, taskParam, taskType } = dicTask; - let isMatch = false; // 条件是否满足 + let isMatch = true; // 条件是否满足 + let checkHistory = false; // 是否检查历史 switch(taskType) { - case TASK_TYPE.LOGIN_SUM: - case TASK_TYPE.LOGIN_SERIES: - case TASK_TYPE.ROLE_LV: - case TASK_TYPE.GASHA: - case TASK_TYPE.HERO_NUM: - case TASK_TYPE.HERO_QUALITY_UP: - case TASK_TYPE.HERO_WAKE_UP: - case TASK_TYPE.HERO_TRAIN_SUM: - case TASK_TYPE.HERO_STAGE_UP: - case TASK_TYPE.ROLE_SCHOOL_UNLOCK: - case TASK_TYPE.ROLE_SCHOOL_PUT_HERO: case TASK_TYPE.ROLE_TITLE: - case TASK_TYPE.ROLE_TERAPH_STRENGTHEN: - case TASK_TYPE.ROLE_SCROLL_ACTIVE: - case TASK_TYPE.EQUIP_SUM: - case TASK_TYPE.EQUIP_JEWEL: - case TASK_TYPE.EQUIP_COMPOSE_SUIT: - case TASK_TYPE.EQUIP_SUIT: - case TASK_TYPE.EQUIP_RESTRENGTHEN: - case TASK_TYPE.EQUIP_REFINE: - case TASK_TYPE.EQUIP_JEWEL_SUM: - case TASK_TYPE.FRIEND_NUM: - case TASK_TYPE.FRIEND_SEND_HEART: - case TASK_TYPE.BATTLE_MAIN_SWEEP: - case TASK_TYPE.BATTLE_DUNGEON: - case TASK_TYPE.BATTLE_TOWER_LV: - case TASK_TYPE.BATTLE_TOWER: - case TASK_TYPE.BATTLE_VESTIGE: - isMatch = true; + isMatch = taskParam[0] == param.title; + checkHistory = true; break; case TASK_TYPE.HERO_STAR_UP: isMatch = taskParam[1] == param.star; @@ -366,6 +362,7 @@ export async function checkTaskRec(roleId: string, group: number, dicTask: DicTa isMatch = taskParam[1] == param.connectLv; break; case TASK_TYPE.EQUIP_BY_HERO: + isMatch = false; if(param.isPutOn && param.count == taskParam[1]) { // 装上之后达到 +1 isMatch = true; } else if (!param.isPutOn && param.count < taskParam[1]) { // 脱下后不能达到 -1 @@ -382,46 +379,80 @@ export async function checkTaskRec(roleId: string, group: number, dicTask: DicTa isMatch = taskParam[0] == 0 || param.chatType == taskParam[0]; break; case TASK_TYPE.BATTLE_WITH_HERO: - isMatch = checkWarId(taskParam, 2, param.warId) && checkHero(taskParam, 0, param.heroes); + isMatch = checkIdList(taskParam, 2, param.warId) && checkHero(taskParam, 0, param.heroes); break; case TASK_TYPE.BATTLE_MAIN: case TASK_TYPE.BATTLE_DUNGEON_WAR: - isMatch = checkWarId(taskParam, 0, param.warId); + 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]) && checkWarId(taskParam, 2, param.warId); + 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_BLUEPRT: + case TASK_TYPE.COM_BATTLE_QUALITY: + isMatch = taskParam[0] == 0 || param.quality == taskParam[0]; + 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; } - console.log('****isMatch', isMatch, type, taskType, group, count) + console.log('****isMatch', isMatch, checkHistory, type, taskType, group, count) if(isMatch) { if(isInc) { let rec = await UserTaskRecModel.incTaskRec(roleId, type, taskType, group, count); return rec; } else { - let rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count); - return rec; + 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[] 填法 warcount&warid&... 有多少warid就warcount填几 - * @param index warcount在第几位,0开始 - * @param warId 关卡id + * 检查id是否在某列表中 + * @param taskParam 条件number[] 填法 如: count&id&... 有多少id就count填几 + * @param index count在第几位,0开始 + * @param id 关卡id */ -function checkWarId(taskParam: number[], index: number, warId: number) { - let warCount = taskParam[index]; - if(!warCount) return false; - let warIdList = taskParam.slice(index + 1, index + 1 + warCount); - return warIdList.indexOf(warId) != -1; +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[]) {