diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index c97dcd226..a26c51543 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -25,7 +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'; +import { checkTask, checkTaskWithGoods } from '../../../services/taskService'; export default function(app: Application) { return new ComBattleHandler(app); @@ -533,6 +533,7 @@ export class ComBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); + const funcs: number[] = session.get('funcs'); let { teamCode } = msg; let team = await ComBattleTeamModel.getTeamByCode(teamCode); clearRobotHurtTimer(team, this.robotHurtTimer); @@ -553,7 +554,7 @@ export class ComBattleHandler { } const now = Date.now(); // 当前时间戳 - let apJson = await setAp(now, roleId, sid, -1 * warInfo.cost); // 扣除体力 + let apJson = await setAp(now, roleId, sid, funcs, -1 * warInfo.cost); // 扣除体力 if(!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } @@ -570,7 +571,7 @@ export class ComBattleHandler { const goods = await handleFixedReward(roleId, roleName, sid, roleSt.fixReward, 1); let actordata = await roleLevelup(roleId, warInfo.kingExp, session);// 主公升级经验 // 任务 - + await checkTaskWithGoods(roleId, sid, funcs, TASK_TYPE.COM_BATTLE_DROP, goods); return resResult(STATUS.SUCCESS, { battleGoods: goods, ...actordata, teamInfo: {status, teamCode, roleStatus, bossHpArr} }); } @@ -741,6 +742,7 @@ export class ComBattleHandler { const roleName = session.get('roleName'); const sid = session.get('sid'); const serverId = session.get('serverId'); + const funcs: number[] = session.get('funcs'); const { original } = msg; @@ -783,7 +785,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 }); + await checkTask(roleId, sid, funcs, 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 9a778cf8f..dde557709 100644 --- a/game-server/app/servers/battle/handler/donateHandler.ts +++ b/game-server/app/servers/battle/handler/donateHandler.ts @@ -48,6 +48,7 @@ export class DonationHandler { const roleName: string = session.get('roleName'); const serverId: number = parseInt(session.get('serverId')); const sid: string = session.get('sid'); + const funcs: number[] = session.get('funcs'); let userGuild = await getUserGuildWithRefActive(roleId, 'donateCnt receiveBoxs guildCode'); if (!userGuild) return resResult(STATUS.WRONG_PARMS); @@ -71,7 +72,7 @@ export class DonationHandler { 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, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_DONATE, 1, true, {}); return resResult(STATUS.SUCCESS, { donateFund, reports, donateCnt, goods }); } diff --git a/game-server/app/servers/battle/handler/eventBattleHandler.ts b/game-server/app/servers/battle/handler/eventBattleHandler.ts index 5dfd29c3b..001b9b7f7 100644 --- a/game-server/app/servers/battle/handler/eventBattleHandler.ts +++ b/game-server/app/servers/battle/handler/eventBattleHandler.ts @@ -80,6 +80,7 @@ export class EventBattleHandler { let roleName = session.get('roleName'); let eventStatus = session.get('eventStatus'); let sid = session.get('sid'); + const funcs: number[] = session.get('funcs'); let event = await EventRecordModel.getEventRecordByCode(roleId, eventCode); if(!event) { @@ -120,7 +121,7 @@ export class EventBattleHandler { // 推送消息刷新 await checkEvent(session, true); // 任务 - await checkTask(roleId, sid, TASK_TYPE.BATTLE_EVENT, 1, true, { eventType: dicEvent.eventType }) + await checkTask(roleId, sid, funcs, TASK_TYPE.BATTLE_EVENT, 1, true, { eventType: dicEvent.eventType }) return resResult(STATUS.SUCCESS, { isSuccess, eventCode: result.eventCode, diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index eb4113e2b..c96b15805 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -212,6 +212,7 @@ export class ExpeditionBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); + let funcs: number[] = session.get('funcs'); let warInfo = getWarById(battleId); if(!warInfo) { @@ -236,7 +237,7 @@ export class ExpeditionBattleHandler { } const now = Date.now(); // 当前时间戳 - let apJson = await setAp(now, roleId, sid, -1 * warInfo.cost); // 扣除体力 + let apJson = await setAp(now, roleId, sid, funcs, -1 * warInfo.cost); // 扣除体力 if(!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } @@ -269,7 +270,7 @@ export class ExpeditionBattleHandler { // 更新下一关状态 await ExpeditionWarRecordModel.updateStatus(expeditionCode, expeditionId + 1, EXPEDITION_WAR_RECORD_STATUS.WAITING); } - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_WITH_HERO, battleId, dbHeroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_WITH_HERO, battleId, dbHeroes, 1, star); return resResult(STATUS.SUCCESS, { expeditionCode, expeditionId, @@ -292,6 +293,7 @@ export class ExpeditionBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); + const funcs: number[] = session.get('funcs'); let role = await RoleModel.findByRoleId(roleId); let {expeditionPoint} = role; @@ -330,7 +332,7 @@ export class ExpeditionBattleHandler { let pointRewards = await getPointRewardStatus(roleId); // 任务 - await checkTask(roleId, sid, TASK_TYPE.BATTLE_EXPEDITION_BOX, 1, true, { point }); + await checkTask(roleId, sid, funcs, TASK_TYPE.BATTLE_EXPEDITION_BOX, 1, true, { point }); let goods = await handleFixedReward(roleId, roleName, sid, curDicExpeditionPoint.reward, 1); diff --git a/game-server/app/servers/battle/handler/guildBossHandler.ts b/game-server/app/servers/battle/handler/guildBossHandler.ts index 5cd8156f1..78ccb6e46 100644 --- a/game-server/app/servers/battle/handler/guildBossHandler.ts +++ b/game-server/app/servers/battle/handler/guildBossHandler.ts @@ -168,6 +168,7 @@ export class GuildHandler { const { battleCode } = msg; const roleId = session.get('roleId'); const sid = session.get('sid'); + const funcs: number[] = session.get('funcs'); const serverId: number = parseInt(session.get('serverId')); let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); if (!userGuild) @@ -184,7 +185,7 @@ export class GuildHandler { 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, {}); + await checkTask(roleId, sid, funcs, 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 a81858fd5..df59083b1 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -888,6 +888,7 @@ export class GuildHandler { const roleName = session.get('roleName'); const sid = session.get('sid'); const serverId = session.get('serverId'); + const funcs: number[] = session.get('funcs'); const { code, id } = msg; let userGuild = await getUserGuildWithRefActive(roleId, 'receivedActive auth guildCode'); @@ -915,7 +916,7 @@ export class GuildHandler { userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive: userGuild.receivedActive }, {}, 'receivedActive'); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_RECEIVE_BOX, 1, true, {}); + await checkTask(roleId, sid, funcs, 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 91000d9c3..100190d7d 100644 --- a/game-server/app/servers/battle/handler/guildRefineHandler.ts +++ b/game-server/app/servers/battle/handler/guildRefineHandler.ts @@ -51,6 +51,7 @@ export class GuildRefineHandler { const roleId: string = session.get('roleId'); const sid: string = session.get('sid'); const roleName: string = session.get('roleName'); + const funcs: number[] = session.get('funcs'); let pieceInfo = getGoodById(pid); let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); if (!userGuild) @@ -77,7 +78,7 @@ export class GuildRefineHandler { let goods = await addItems(roleId, roleName, sid, [{id: pid, count: 1}]); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_REFINE, 1, true, { quality: pieceInfo.lvLimited }); + await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_REFINE, 1, true, { quality: pieceInfo.lvLimited }); return resResult(STATUS.SUCCESS, { goods }); } /** @@ -143,6 +144,7 @@ export class GuildRefineHandler { const roleId: string = session.get('roleId'); const serverId: number = session.get('serverId'); const sid: string = session.get('sid'); + const funcs: number[] = session.get('funcs'); let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); if (!userGuild) return resResult(STATUS.WRONG_PARMS); @@ -177,7 +179,7 @@ export class GuildRefineHandler { res.releaseCallback(); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_ASSIST_REFINE, 1, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_ASSIST_REFINE, 1, true, {}); return resResult(STATUS.SUCCESS, { scienceTrees }); } diff --git a/game-server/app/servers/battle/handler/guildTrainHandler.ts b/game-server/app/servers/battle/handler/guildTrainHandler.ts index dd8f05cc8..0c7ab9705 100644 --- a/game-server/app/servers/battle/handler/guildTrainHandler.ts +++ b/game-server/app/servers/battle/handler/guildTrainHandler.ts @@ -156,6 +156,7 @@ export class GuildTrainHandler { const serverId: number = parseInt(session.get('serverId')); const roleName: string = session.get('roleName'); const sid: string = session.get('sid'); + const funcs: number[] = session.get('funcs'); let userGuild = await getUserGuild(roleId, serverId); if (!userGuild) return resResult(STATUS.WRONG_PARMS); @@ -264,9 +265,9 @@ export class GuildTrainHandler { // 任务 if(isSuccess) { - await checkTask(roleId, sid, TASK_TYPE.GUILD_TRAIN_SUCESS, 1, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_TRAIN_SUCESS, 1, true, {}); } - await checkTask(roleId, sid, TASK_TYPE.GUILD_TRAIN, 1, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_TRAIN, 1, true, {}); return resResult(STATUS.SUCCESS, result); } diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index ca452b13b..2692707a0 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -160,6 +160,7 @@ export class NormalBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); + const funcs: number[] = session.get('funcs'); let serverId = session.get('serverId'); let warInfo = gameData.war.get(battleId); if(!warInfo) { @@ -185,7 +186,7 @@ export class NormalBattleHandler { } const now = Date.now(); // 当前时间戳 - let apJson = await setAp(now, roleId, sid, -1 * warInfo.cost); // 扣除体力 + let apJson = await setAp(now, roleId, sid, funcs, -1 * warInfo.cost); // 扣除体力 if(!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } @@ -206,7 +207,7 @@ export class NormalBattleHandler { // 记录事件状态 await setBattleStatus(session, roleId, battleId, isSuccess, battleCode); } else if (warInfo.warType == WAR_TYPE.TOWER) { - let towerEndResult = await towerBattleEnd(sid, roleId, serverId, battleCode, battleId, isSuccess, heroes); + let towerEndResult = await towerBattleEnd(sid, funcs, roleId, serverId, battleCode, battleId, isSuccess, heroes); if(towerEndResult) { if(towerEndResult.status == -1) { return towerEndResult.resResult; @@ -269,7 +270,7 @@ export class NormalBattleHandler { let actordata = await roleLevelup(roleId, isSuccess?warInfo.kingExp:0, session);// 主公升级经验 - await checkTaskInBattleEnd(roleId, sid, battleId, dbHeroes, star); + await checkTaskInBattleEnd(roleId, sid, funcs, battleId, dbHeroes, star); // 返回值: // towerStatus: false-本层未通过, true-本层已通过 return resResult(STATUS.SUCCESS, { @@ -287,6 +288,7 @@ export class NormalBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); + let funcs: number[] = session.get('funcs'); let warInfo = getWarById(battleId); if(!warInfo) { return resResult(STATUS.BATTLE_MISS_INFO); @@ -303,7 +305,7 @@ export class NormalBattleHandler { warInfo['cost'] = 0; } const now = Date.now(); // 当前时间戳 - let apJson = await setAp(now, roleId, sid, -1 * warInfo.cost * count); // 扣除体力 + let apJson = await setAp(now, roleId, sid, funcs, -1 * warInfo.cost * count); // 扣除体力 if(!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } @@ -342,7 +344,7 @@ export class NormalBattleHandler { }); // 任务 - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_MAIN_SWEEP, warInfo, [], count, 0); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_MAIN_SWEEP, warInfo, [], count, 0); return resResult(STATUS.SUCCESS, { battleId, count, diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index b3db49296..2a712ed05 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -37,6 +37,7 @@ export class PvpHandler { let { heroScores: addHeroScores } = msg; let roleId = session.get('roleId'); let sid = session.get('sid'); + const funcs: number[] = session.get('funcs'); let {heroScores, hisScore} = await PvpDefenseModel.findByRoleId(roleId); let score = 0; for (let {hid, score: heroScore} of addHeroScores) { @@ -67,7 +68,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(roleId, sid, funcs, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores }); return resResult(STATUS.SUCCESS, {score, hisScore, heroScores}); } @@ -228,6 +229,7 @@ export class PvpHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); + const funcs: number[] = session.get('funcs'); const { battleCode, isSuccess, myHeroes, oppHeroes } = msg; @@ -295,7 +297,7 @@ export class PvpHandler { await r.setRankWithRoleInfo(roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), role); let myRank = await r.getMyRank({roleId}); - await checkTaskInPvpEnd(roleId, sid, isSuccess, heroScores); + await checkTaskInPvpEnd(roleId, sid, funcs, isSuccess, heroScores); return resResult(STATUS.SUCCESS, { battleCode, isSuccess, @@ -464,6 +466,7 @@ export class PvpHandler { let roleId = session.get('roleId'); let sid: string = session.get('sid'); let roleName = session.get('roleName'); + const funcs: number[] = session.get('funcs'); let { seasonEndTime } = await SystemConfigModel.findSystemConfig(); let { hisScore, receivedBox, challengeCnt: lastChallengeCnt, challengeRefTime: lastChallengeRefTime } = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); let pvpBoxs = getPvpBoxs(); @@ -479,7 +482,7 @@ export class PvpHandler { 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, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.PVP_RECEIVE_BOX, 1, true, {}); return resResult(STATUS.SUCCESS,{goods: result, receivedBox, challengeCnt, challengeRefTime}); } diff --git a/game-server/app/servers/chat/handler/chatHandler.ts b/game-server/app/servers/chat/handler/chatHandler.ts index 8306c0c25..4c382f920 100644 --- a/game-server/app/servers/chat/handler/chatHandler.ts +++ b/game-server/app/servers/chat/handler/chatHandler.ts @@ -87,6 +87,7 @@ export class ChatHandler { const roleName = session.get('roleName'); const serverId = session.get('serverId'); const guildCode = session.get('guildCode'); + const funcs: number[] = session.get('funcs'); const sid = session.get('guildCode'); let channelId = ''; if (channel === CHANNEL_PREFIX.WORLD) channelId = `${serverId}`; @@ -96,7 +97,7 @@ export class ChatHandler { if (!msgData) return resResult(STATUS.WRONG_PARMS); await pushGroupMsgToRoom(msgData); // 任务 - await checkTaskWithArgs(roleId, sid, TASK_TYPE.CHAT, [ CHANNEL_TYPE.get(channel) ]); + await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.CHAT, [ CHANNEL_TYPE.get(channel) ]); return resResult(STATUS.SUCCESS); } @@ -110,13 +111,14 @@ export class ChatHandler { const { type, content, targetRoleId, targetMsgCode } = msg; const roleId = session.get('roleId'); const roleName = session.get('roleName'); + const funcs: number[] = session.get('funcs'); const sid = session.get('sid'); const msgData = await createPrivateMsg(roleId, roleName, type, MSG_SOURCE.ROLE_SEND_TEXT, content, targetRoleId, targetMsgCode); await pushMsgToRole(msgData); if (!msgData) return resResult(STATUS.WRONG_PARMS); // 任务 - await checkTaskWithArgs(roleId, sid, TASK_TYPE.CHAT, [ CHANNEL_TYPE.get('private') ]); + await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.CHAT, [ CHANNEL_TYPE.get('private') ]); return resResult(STATUS.SUCCESS, msgData); } diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index c1ed84073..55abdd2d1 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -58,7 +58,7 @@ export class EntryHandler { await self.app.rpc.connector.connectorRemote.remoteLogin.toServer(connect.sid, role.roleId); } let serverName = this.app.getServerId(); - await roleLogin(role.roleId, user.userCode, serverName, user.pkgName); // 保存在线用户 + await roleLogin(role.roleId, user.userCode, serverName, user.pkgName, role.funcs||[]); // 保存在线用户 await session.abind(role.roleId); session.set('uid', role.roleId); session.set('roleId', role.roleId); @@ -112,8 +112,8 @@ export class EntryHandler { r2.setRankWithRoleInfo(role.roleId, role.lv, role.updatedAt.getTime(), role); // 任务 - checkTaskWithRole(role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SUM, role); - checkTaskWithRole(role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SERIES, role); + checkTaskWithRole(role.roleId, self.app.get('serverId'), role.funcs, TASK_TYPE.LOGIN_SUM, role); + checkTaskWithRole(role.roleId, self.app.get('serverId'), role.funcs, TASK_TYPE.LOGIN_SERIES, role); role['heros'] = heros; role['equips'] = equips; diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index 5b9ea79aa..4cde1657b 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -265,6 +265,7 @@ export class CityActivityHandler { let sid = session.get('sid'); let guildCode = session.get('guildCode'); let serverId = session.get('serverId'); + const funcs: number[] = session.get('funcs'); let { cityId, code, isSuccess } = msg; let obj = getCityActivityObj(); @@ -290,7 +291,7 @@ export class CityActivityHandler { let gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); + await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); return resResult(STATUS.SUCCESS, { isSuccess, diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index 29ea805d7..87013d360 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -205,6 +205,7 @@ export class GateActivityHandler { let sid = session.get('sid'); let guildCode = session.get('guildCode'); let serverId = session.get('serverId'); + const funcs: number[] = session.get('funcs'); let { code, isSuccess } = msg; let obj = getGateActivityObj(); @@ -254,7 +255,7 @@ export class GateActivityHandler { } // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); + await checkTask(roleId, sid, funcs, 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 e15a90080..7c0d0897b 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -157,6 +157,7 @@ export class RaceActivityHandler { let sid = session.get('sid'); let guildCode = session.get('guildCode'); let serverId = session.get('serverId'); + const funcs: number[] = session.get('funcs'); let { code, isSuccess } = msg; @@ -175,7 +176,7 @@ export class RaceActivityHandler { let myGuildRank = await r.getMyRank({guildCode}); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); + await checkTask(roleId, sid, funcs, 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/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 8b8ccef2b..e1674c076 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -92,6 +92,7 @@ export class EquipHandler { let roleId: string = session.get('roleId'); // let roleName: string = session.get('roleName'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { hid, ePlaceId, type } = msg; let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId); @@ -150,7 +151,7 @@ export class EquipHandler { await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_BASE, sid, roleId, hero, { ePlace }); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs); const curHero = { hid, @@ -165,6 +166,7 @@ export class EquipHandler { let roleId: string = session.get('roleId'); // let roleName: string = session.get('roleName'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { hid, lv: maxLv } = msg; // lv: 升到哪一级 let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId); @@ -214,7 +216,7 @@ export class EquipHandler { await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_BASE, sid, roleId, hero, { ePlace }); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs); const curHero = { hid, @@ -229,6 +231,7 @@ export class EquipHandler { let roleName: string = session.get('roleName'); let serverId = session.get('serverId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { hid, ePlaceId, material } = msg; @@ -290,7 +293,7 @@ export class EquipHandler { if (isSuccess) { let curEquip = equip; pushEquipRefineSucMsg(roleId, roleName, serverId, curEplace, curEquip?curEquip.quality: 0); - await checkTask(roleId, sid, TASK_TYPE.EQUIP_REFINE, 1, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_REFINE, 1, true, {}); } return resResult(STATUS.SUCCESS, { isSuccess, curHero }); } @@ -343,6 +346,7 @@ export class EquipHandler { let roleId: string = session.get('roleId'); // let roleName: string = session.get('roleName'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { eid } = msg; let equip = await EquipModel.findbySeqId(eid); @@ -408,7 +412,7 @@ export class EquipHandler { const hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.RESTRENGTHEN, sid, roleId, hero, {}, [ePlaceId, ...removeSeidList]); - await checkTask(roleId, sid, TASK_TYPE.EQUIP_RESTRENGTHEN, 1, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_RESTRENGTHEN, 1, true, {}); return resResult(STATUS.SUCCESS,{curEquip}); } @@ -444,6 +448,7 @@ export class EquipHandler { let roleId: string = session.get('roleId'); let equip = await EquipModel.getEquip(eid); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let goodInfo = getGoodById(equip.id); let obj = ITID.get(goodInfo.itid); let id = obj.type; @@ -465,16 +470,16 @@ export class EquipHandler { if (index < 0) return resResult(STATUS.WRONG_PARMS); let equipOffInfo = hero.ePlace[index].equip; - let curEquip = await changeEquip(roleId, sid, equipOffInfo, equip.hid, id, equip); + let curEquip = await changeEquip(roleId, sid, equipOffInfo, equip.hid, id, equip, funcs); if (!!curEquip) curEquips.push(curEquip); - curEquip = await dressEquip(roleId, sid, hero, equip); + curEquip = await dressEquip(roleId, sid, hero, equip, funcs); if (!!curEquip) curEquips.push(curEquip); } else if (type == 2) { if (!equip.hid) return resResult(STATUS.EQUIP_NOT_EQUIPED); - let curEquip = await takeOffEquipAndCalPlayerCe(roleId, sid, hero, equip, id) + let curEquip = await takeOffEquipAndCalPlayerCe(roleId, sid, hero, equip, id, funcs); curEquips.push(curEquip); } return resResult(STATUS.SUCCESS, { curEquips: curEquips }); @@ -512,6 +517,7 @@ export class EquipHandler { let { eid, id, jewel } = msg; let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let consumes: Array<{ id: number, count: number }> = []; let goods: Array<{ id: number, count: number }> = []; let equip = await EquipModel.getEquip(eid); @@ -545,9 +551,9 @@ export class EquipHandler { } // 任务 - await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_JEWEL, equip, [oldJewelCount]); - await checkTaskWithArgs(roleId, sid, TASK_TYPE.EQUIP_JEWEL_STAGE, [jewel, oldJewel]); - await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]); + await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL, equip, [oldJewelCount]); + await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_STAGE, [jewel, oldJewel]); + await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]); return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } }); } @@ -585,6 +591,7 @@ export class EquipHandler { let { eid, id } = msg; let roleId: string = session.get('roleId'); let roleName: string = session.get('roleName'); + let funcs: number[] = session.get('funcs'); let sid: string = session.get('sid'); let goods: Array<{ id: number, count: number }> = []; let equip = await EquipModel.getEquip(eid); @@ -605,9 +612,9 @@ export class EquipHandler { } // 任务 - await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_JEWEL, equip, [oldJewelCount]); - await checkTaskWithArgs(roleId, sid, TASK_TYPE.EQUIP_JEWEL_STAGE, [0, jewel]); - await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]); + await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL, equip, [oldJewelCount]); + await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_STAGE, [0, jewel]); + await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]); return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } }); } @@ -670,6 +677,7 @@ export class EquipHandler { let roleName: string = session.get('roleName'); let sid: string = session.get('sid'); let serverId = session.get('serverId'); + let funcs: number[] = session.get('funcs'); let goodInfo = getGoodById(jewel); let good = ITID.get(goodInfo.itid); let needUpdate = false; @@ -713,9 +721,9 @@ export class EquipHandler { } // 任务 - await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_JEWEL, equip, [oldJewelCount]); - await checkTaskWithArgs(roleId, sid, TASK_TYPE.EQUIP_JEWEL_STAGE, [jewel, oldJewel]); - await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]); + await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL, equip, [oldJewelCount]); + await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_STAGE, [jewel, oldJewel]); + await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]); return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } }); } else { diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index 270a34b4f..37a8ba929 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -22,7 +22,7 @@ import { FRIEND } from "../../../pubUtils/dicParam"; import { PlayerDetail, PlayerDetailHero } from "../../../domain/battleField/guild"; import { createPrivateMsg, pushMsgToRole, pushPresent } from "../../../services/chatService"; import { Rank } from "../../../services/rankService"; -import { checkTaskWithRole, checkTaskWithRoles, checkTask } from "../../../services/taskService"; +import { checkTaskWithRoles, checkTask } from "../../../services/taskService"; export default function (app: Application) { @@ -202,6 +202,7 @@ export class FriendHandler { public async handleApply(msg: { applyCodeList: string[], isPass: boolean }, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { applyCodeList, isPass } = msg; @@ -264,7 +265,7 @@ export class FriendHandler { role = await RoleModel.increaseFriendApplyCnt(roleId, -1 * resultApplyCodeList.length, 50); roles.push(role); // 任务 - await checkTaskWithRoles(roleId, sid, TASK_TYPE.FRIEND_NUM, roles); + await checkTaskWithRoles(roleId, sid, funcs, TASK_TYPE.FRIEND_NUM, roles); // 特殊处理:如果他点一键同意,有很多人,这个单独的人就不做这个额外的提示,直接把他好友申请删掉就好 if(str == getResStr(STATUS.FRIEND_HAS_ADD) && resultApplyCodeList.length > 1) str = ''; @@ -371,6 +372,7 @@ export class FriendHandler { public async setBlackList(msg: { roleId: string, type: number }, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { roleId: hisRoleId, type } = msg; let role = await RoleModel.findByRoleId(roleId); @@ -473,7 +475,7 @@ export class FriendHandler { let { friendCnt = 0, blockCnt = 0 } = role; // 任务 - await checkTaskWithRoles(roleId, sid, TASK_TYPE.FRIEND_NUM, [role, friend]); + await checkTaskWithRoles(roleId, sid, funcs, TASK_TYPE.FRIEND_NUM, [role, friend]); return resResult(STATUS.SUCCESS, { frdRoleIds, blackRoleIds, @@ -489,6 +491,7 @@ export class FriendHandler { let roleId: string = session.get('roleId'); let roleName: string = session.get('roleName'); let sid: string = session.get('sid'); + const funcs: number[] = session.get('funcs'); let { roleId: hisRoleId } = msg; @@ -543,7 +546,7 @@ export class FriendHandler { // 更新情谊值 frdPointRec = await FriendPointModel.updateSendCntToday(roleId, roleName, todaySendInc, max, FRIEND_DROP_TYPE.SEND_GIFT); // 任务 - await checkTask(roleId, sid, TASK_TYPE.FRIEND_SEND_HEART, todaySendInc, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.FRIEND_SEND_HEART, todaySendInc, true, {}); return resResult(STATUS.SUCCESS, { todaySendCnt, list diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index d61e4a551..a11aa8b8e 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -151,6 +151,7 @@ export class HeroHandler { public async lvUp(msg: { hid: number, type: number}, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { hid, type } = msg; @@ -208,7 +209,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.LVUP, sid, roleId, hero, update); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_LV, hero); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_LV, hero); const curHero = { hid, lv : hero.lv, exp : hero.exp @@ -221,6 +222,7 @@ export class HeroHandler { public async starUp(msg: { hid: number, star: number, starStage: number}, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let {hid, star, starStage} = msg; // 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质 @@ -256,8 +258,8 @@ 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 checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_QUALITY_STAR_UP, hero); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_STAR_UP, hero); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_QUALITY_STAR_UP, hero); } const curHero = { @@ -276,6 +278,7 @@ export class HeroHandler { let roleName: string = session.get('roleName'); let sid: string = session.get('sid'); let serverId: string = session.get('serverId'); + let funcs: number[] = session.get('funcs'); let {hid, quality} = msg; let dicHero = gameData.hero.get(hid); @@ -310,7 +313,7 @@ export class HeroHandler { await calAllHeroCe(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, {}, [hid, 0]); // 升品可能影响到百家学院全局加成 // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_QUALITY_UP, hero); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_QUALITY_UP, hero); const curHero = { hid, @@ -327,6 +330,7 @@ export class HeroHandler { let sid: string = session.get('sid'); let roleName: string = session.get('roleName'); let serverId: string = session.get('serverId'); + let funcs: number[] = session.get('funcs'); let {hid, colorStar, colorStarStage} = msg; // 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质 @@ -370,8 +374,8 @@ export class HeroHandler { await calAllHeroCe(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, {}, [hid, isUpStar?1:0]); // 升星可能影响到百家学院全局加成 ; // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_STAR_UP, hero); - await checkTask(roleId, sid, TASK_TYPE.HERO_WAKE_UP, 1, true, {}); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_STAR_UP, hero); + await checkTask(roleId, sid, funcs, TASK_TYPE.HERO_WAKE_UP, 1, true, {}); } const curHero = { hid, @@ -389,6 +393,7 @@ export class HeroHandler { async heroJobTrain (msg: {hid:number}, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { hid } = msg; let hero = await HeroModel.findByHidAndRole(hid, roleId); if (!hero) return resResult(STATUS.HERO_NOT_FIND); @@ -415,8 +420,8 @@ export class HeroHandler { jobStage: hero.jobStage + 1 }); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_TRAIN, hero); - await checkTask(roleId, sid, TASK_TYPE.HERO_TRAIN_SUM, 1, true, {}); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_TRAIN, hero); + await checkTask(roleId, sid, funcs, TASK_TYPE.HERO_TRAIN_SUM, 1, true, {}); return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, job : hero.job, jobStage: hero.jobStage}}); } @@ -425,6 +430,7 @@ export class HeroHandler { async heroJobStageUp(msg: {hid:number}, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { hid } = msg; let hero = await HeroModel.findByHidAndRole(hid, roleId); if (!hero) @@ -448,7 +454,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 checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_STAGE_UP, hero); return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, job : hero.job, jobStage : hero.jobStage}}); } @@ -457,6 +463,7 @@ export class HeroHandler { async heroConectionActivate(msg: { shipId: number }, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + const funcs: number[] = session.get('funcs'); let { shipId } = msg; let shipHidAndLevel = gameData.friendShipHidAandIds.get(shipId); if (!shipHidAndLevel) return resResult(STATUS.HERO_CONECTION_IS_NOT_EXIT); @@ -498,7 +505,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.CONNECT, sid, roleId, hero, { connections: heroConnections }, [shipId]); // 任务 - await checkTask(roleId, sid, TASK_TYPE.HERO_CONNECT, 1, true, { connectLv: level }) + await checkTask(roleId, sid, funcs, TASK_TYPE.HERO_CONNECT, 1, true, { connectLv: level }) return resResult(STATUS.SUCCESS, { curHero: {hid : hero.hid, connections : hero.connections}}); } @@ -506,6 +513,7 @@ export class HeroHandler { async heroGiveFavor(msg: {hid:number, type: number}, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { hid, type } = msg; let addLv = 0; @@ -571,7 +579,7 @@ export class HeroHandler { }, [oldLv]); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, hero); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_FAVOUR_LV, hero); } else { hero = await HeroModel.updateHeroInfo(roleId, hero.hid, { favour: newExp, favourLv: newLv }); } diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 7a406bdd0..57198e9a8 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -84,6 +84,7 @@ export class RoleHandler { async roleTitleLevelUp(msg: {}, session: BackendSession){ let roleId = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let role = await RoleModel.findByRoleId(roleId); @@ -102,7 +103,7 @@ export class RoleHandler { role = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update); // 任务 - await checkTask(roleId, sid, TASK_TYPE.ROLE_TITLE, 1, false, { title }); + await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TITLE, 1, false, { title }); return resResult(STATUS.SUCCESS, { roleId, title: role.title }); } @@ -112,6 +113,7 @@ export class RoleHandler { let {id, count} = msg; let roleId = session.get('roleId'); let sid: string = session.get('sid'); + let funcs: number[] = session.get('funcs'); let role = await RoleModel.findByRoleId(roleId); let teraphs = role.teraphs; @@ -144,7 +146,7 @@ export class RoleHandler { role = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]); // 任务 - await checkTask(roleId, sid, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, count, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, count, true, {}); return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs }); } @@ -231,6 +233,7 @@ export class RoleHandler { async changeSchoolHero(msg: { schoolId: number, positionId: number, hid: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { schoolId, positionId, hid } = msg; if (!gameData.school.has(schoolId)) { @@ -268,7 +271,7 @@ export class RoleHandler { await calAllHeroCe(HERO_SYSTEM_TYPE.SCHOOL, sid, roleId, {}, [schoolId, hid, preHid]); // 任务 - await checkTaskWithArgs(roleId, sid, TASK_TYPE.ROLE_SCHOOL_UNLOCK, [ hid, preHid ]); + await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.ROLE_SCHOOL_UNLOCK, [ hid, preHid ]); return resResult(STATUS.SUCCESS, { schoolId, positionId, hid, preHid, isOpen @@ -280,6 +283,7 @@ export class RoleHandler { async unlockSchoolPosition(msg: { schoolId: number, positionId: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { schoolId, positionId } = msg; if (!gameData.school.has(schoolId)) { @@ -305,7 +309,7 @@ export class RoleHandler { curSchool = await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { isOpen: true }) // 任务 - await checkTask(roleId, sid, TASK_TYPE.ROLE_SCHOOL_UNLOCK, 1, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_SCHOOL_UNLOCK, 1, true, {}); return resResult(STATUS.SUCCESS, { schoolId, positionId, hid: curSchool.hid, isOpen: curSchool.isOpen @@ -316,6 +320,7 @@ export class RoleHandler { async activeHeroScroll(msg: { hid: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); + let funcs: number[] = session.get('funcs'); let { hid } = msg; @@ -363,8 +368,8 @@ export class RoleHandler { calAllHeroCe(HERO_SYSTEM_TYPE.SCROLL, sid, roleId, {}, [hid]); // 全局增加战力 // 任务 - if(favourLv != hero.favourLv) await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, hero); - if(!scrollActive) await checkTask(roleId, sid, TASK_TYPE.ROLE_SCROLL_ACTIVE, 1, true, {}); + if(favourLv != hero.favourLv) await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_FAVOUR_LV, hero); + if(!scrollActive) await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_SCROLL_ACTIVE, 1, true, {}); return resResult(STATUS.SUCCESS, { curHero: { diff --git a/game-server/app/services/actionPointService.ts b/game-server/app/services/actionPointService.ts index f988542a8..722dd333a 100644 --- a/game-server/app/services/actionPointService.ts +++ b/game-server/app/services/actionPointService.ts @@ -30,7 +30,7 @@ export async function getAp(now: number, roleId: string) { } } -export async function setAp(now: number, roleId: string, sid: string, changeAp: number) { +export async function setAp(now: number, roleId: string, sid: string, funcs: number[], changeAp: number) { let ApResult = await getAp(now, roleId); let { ap, maxAp, refTime, apRemainTime, isOver } = ApResult; // 更新ap ap += changeAp; @@ -44,7 +44,7 @@ export async function setAp(now: number, roleId: string, sid: string, changeAp: if(isOver && ap < maxAp) apRemainTime = Math.floor(ACTION_POIN.PER / 1000); // 特殊处理 if(changeAp < 0) { - await checkTask(roleId, sid, TASK_TYPE.BATTLE_COST_AP, -1 * changeAp, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.BATTLE_COST_AP, -1 * changeAp, true, {}); } return {ap, maxAp, refTime, apRemainTime} } diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index 445fb96ca..f083704af 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -48,7 +48,7 @@ export async function checkTowerWar(roleId: string, battleId: number, heroes: Ar }}; } -export async function towerBattleEnd(sid: string, roleId: string, serverId: number, battleCode: string, battleId: number, succeed: boolean, heroes: Array) { +export async function towerBattleEnd(sid: string, funcs: number[], roleId: string, serverId: number, battleCode: string, battleId: number, succeed: boolean, heroes: Array) { if (succeed) { let battleRec = await BattleRecordModel.getBattleRecordByCode(battleCode); if (battleRec.battleId != battleId) { @@ -93,7 +93,7 @@ export async function towerBattleEnd(sid: string, roleId: string, serverId: numb pinus.app.get('channelService').pushMessageByUids('hangUpEnable', resResult(STATUS.SUCCESS, {enable: true}), [{uid: roleId, sid}]); } // 任务 - await checkTask(roleId, sid, TASK_TYPE.BATTLE_TOWER_LV, role.towerLv, false, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.BATTLE_TOWER_LV, role.towerLv, false, {}); } return { status: 0, diff --git a/game-server/app/services/equipService.ts b/game-server/app/services/equipService.ts index f2e5cf46d..9d3f85675 100644 --- a/game-server/app/services/equipService.ts +++ b/game-server/app/services/equipService.ts @@ -54,7 +54,7 @@ export function checkMaterialEnough(consumes:Array<{id: number, count: number}>, * @param id 装备类型 * @param seqId 要装上的装备的唯一id 装备B */ -export async function changeEquip(roleId: string, sid: string, equipA: EquipType, hid: number, id: number, equipB: EquipType) { +export async function changeEquip(roleId: string, sid: string, equipA: EquipType, hid: number, id: number, equipB: EquipType, funcs: number[]) { let heroB: HeroType; if (!!hid) //需要卸下或者替换的武将 heroB = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);//需要替换的武将 @@ -63,24 +63,24 @@ export async function changeEquip(roleId: string, sid: string, equipA: EquipType if (!!heroB) { let goodInfo = getGoodById(equipA.id); if (goodInfo.lvLimited > heroB.lv) { - let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id);//卸下装备并重算战力 + let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id, funcs);//卸下装备并重算战力 return res; } let { jobid } = gameData.hero.get(hid); let { job_class } = getHeroJob(jobid); let { classId } = getHeroEquipByClassId(goodInfo.itid); if (indexOf(classId, job_class) < 0) { - let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id);//卸下装备并重算战力 + let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id, funcs);//卸下装备并重算战力 return res; } - let res = await dressEquip(roleId, sid, heroB, equipA);//替换给武将,并计算战力 + let res = await dressEquip(roleId, sid, heroB, equipA, funcs);//替换给武将,并计算战力 return res; } else { - let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id);//卸下装备并重算战力 + let res = await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id, funcs);//卸下装备并重算战力 return res; } } else if (!!heroB) {//从穿戴装备的武将上卸下装备 - await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id);//卸下装备并重算战力 + await takeOffEquipAndCalPlayerCe(roleId, sid, heroB, equipB, id, funcs);//卸下装备并重算战力 } } /** @@ -91,16 +91,16 @@ export async function changeEquip(roleId: string, sid: string, equipA: EquipType * @param hero * @param id */ -export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, hero:HeroType, equip: EquipType, id: number ) { +export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, hero:HeroType, equip: EquipType, id: number, funcs: number[] ) { let args = calEquipSeids(hero); hero = await HeroModel.removeEquip(roleId, hero.hid, id, equip._id); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, args); // 任务 - await checkTask(roleId, sid, TASK_TYPE.EQUIP_SUM, 1, true, {}); - await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [1]); - await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_QUALITY, equip, [1]); + await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_SUM, 1, true, {}); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_BY_HERO, hero, [1]); + await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_QUALITY, equip, [1]); return { seqId: equip.seqId, hid: 0}; } @@ -111,16 +111,16 @@ export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, he * @param hero * @param equip */ -export async function dressEquip(roleId: string, sid: string, hero:HeroType, equip: EquipType) { +export async function dressEquip(roleId: string, sid: string, hero:HeroType, equip: EquipType, funcs: number[]) { let args = calEquipSeids(hero); hero = await HeroModel.addEquip(roleId, hero.hid, equip.ePlaceId, equip._id); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, args); // 任务 - await checkTask(roleId, sid, TASK_TYPE.EQUIP_SUM, -1, true, {}); - await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [-1]); - await checkTaskWithEquip(roleId, sid, TASK_TYPE.EQUIP_QUALITY, equip, [-1]); + await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_SUM, -1, true, {}); + await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_BY_HERO, hero, [-1]); + await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_QUALITY, equip, [-1]); return { seqId: equip.seqId, hid: hero.hid }; } \ No newline at end of file diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index dce2ebcf9..0f4e0dbfe 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -279,7 +279,7 @@ export async function settleGuildWeekly() { }); await sendMail(MAIL_TYPE.GUILD_ACTIVE_REWARD, roleId, '系统', [], reward); // 任务 - await checkTask(roleId, null, TASK_TYPE.GUILD_JOB, 1, false, { job }); + await checkTask(roleId, null, null, TASK_TYPE.GUILD_JOB, 1, false, { job }); } await GuildModel.updateInfo(code, { activeWeekly: 0 }, {}); diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index 44b0b2abe..be39836be 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -32,7 +32,7 @@ export async function roleLevelup(roleId: string, kingExp: number, session: Back await r.setRankWithRoleInfo(roleId, newLv, Date.now(), role); // 任务 - await checkTask(roleId, session.get('sid'), TASK_TYPE.ROLE_LV, newLv, false, {}); + await checkTask(roleId, session.get('sid'), session.get('funcs'), TASK_TYPE.ROLE_LV, newLv, false, {}); } let actordata = []; for(let i = lv; i <= newLv; i++) { diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 0d20223d3..6cbbc9a21 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -281,8 +281,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, funcs: number[]) { + let param = { userCode, sid, pkgName, funcs }; return await redisClient().hsetAsync(REDIS_KEY.ONLINE_USERS, roleId, JSON.stringify(param)); } @@ -318,7 +318,8 @@ export async function getRoleOnlineInfo(roleId: string) { isOnline: true, userCode: result.userCode, sid: result.sid, - pkgName: result.pkgName + pkgName: result.pkgName, + funcs: result.funcs } } catch(e) { return { isOnline: false } diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/rewardService.ts index cc44303f3..b1c9bc2e9 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/rewardService.ts @@ -126,14 +126,14 @@ export async function addItems(roleId: string, roleName: string, sid: string, go if (!!equipInfos.length) pinus.app.get('channelService').pushMessageByUids('onEquipAdd', resResult(STATUS.SUCCESS, {equipInfos}), uids); - pushTaskUpdate(roleId, sid, taskPushMessage); + pushTaskUpdate(roleId, sid, null, taskPushMessage); //货币推送 if (!!Object.keys(currencysMap).length) { let role = await RoleModel.findByRoleId(roleId); for (let key in currencysMap) { if (key == 'ap') { - let {ap} = await setAp(Date.now(), roleId, sid, currencysMap[key]); + let {ap} = await setAp(Date.now(), roleId, sid, null, currencysMap[key]); currencysMap.ap = ap; } else { currencysMap[key] += role[key]; @@ -315,7 +315,7 @@ export async function createHero(roleId: string, sid: string, serverId: number, hero = await pushCalPlayerCe(roleId, sid, calHeroResult); await pushCalAllHeroCe(roleId, sid, calAllHeroResult); - pushTaskUpdate(roleId, sid, taskPushMessage); + pushTaskUpdate(roleId, sid, null, taskPushMessage); return hero; } \ No newline at end of file diff --git a/game-server/app/services/taskService.ts b/game-server/app/services/taskService.ts index 0849cacb9..607a6848b 100644 --- a/game-server/app/services/taskService.ts +++ b/game-server/app/services/taskService.ts @@ -8,47 +8,54 @@ import { HeroType } from '../db/Hero'; import { EquipType } from '../db/Equip'; import { getRoleOnlineInfo } from './redisService'; import { HeroScores } from '../db/PvpHistoryOpp'; +import { ItemInter } from '../pubUtils/interface'; -export async function checkTaskWithRoles(roleId: string, sid: string, taskType: number, roles: RoleType[]) { +export async function checkTaskWithRoles(roleId: string, sid: string, funcs: number[], taskType: number, roles: RoleType[]) { for(let role of roles) { - await checkTaskWithRole(role.roleId, role.roleId == roleId? sid: null, taskType, role); + await checkTaskWithRole(role.roleId, role.roleId == roleId? sid: null, role.roleId == roleId? funcs: null, taskType, role); } } -export async function checkTaskWithRole(roleId: string, sid: string, taskType: number, role: RoleType) { - let pushMessage = await taskUtil.checkTaskWithRole(roleId, taskType, role); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskWithRole(roleId: string, sid: string, funcs: number[], taskType: number, role: RoleType) { + let pushMessage = await taskUtil.checkTaskWithRole(roleId, taskType, role, funcs); + pushTaskUpdate(roleId, sid, funcs, pushMessage); } -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 checkTaskWithHero(roleId: string, sid: string, funcs: number[], taskType: number, hero: HeroType, args?: number[]) { + let pushMessage = await taskUtil.checkTaskWithHero(roleId, taskType, hero, args, funcs); + pushTaskUpdate(roleId, sid, funcs, pushMessage); } -export async function checkTaskWithEquip(roleId: string, sid: string, taskType: number, equip: EquipType, args?: number[]) { - let pushMessage = await taskUtil.checkTaskWithEquip(roleId, taskType, equip, args); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskWithEquip(roleId: string, sid: string, funcs: number[], taskType: number, equip: EquipType, args?: number[]) { + let pushMessage = await taskUtil.checkTaskWithEquip(roleId, taskType, equip, args, funcs); + pushTaskUpdate(roleId, sid, funcs, pushMessage); } -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 checkTaskWithArgs(roleId: string, sid: string, funcs: number[], taskType: number, args: number[]) { + let pushMessage = await taskUtil.checkTaskWithArgs(roleId, taskType, args, funcs); + pushTaskUpdate(roleId, sid, funcs, pushMessage); } -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 checkTaskWithWar(roleId: string, sid: string, funcs: number[], taskType: number, warId: number, heroes: number[], count: number, star: number) { + let pushMessage = await taskUtil.checkTaskWithWar(roleId, taskType, warId, heroes, count, star, funcs); + pushTaskUpdate(roleId, sid, funcs, pushMessage); } -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 checkTaskWithGoods(roleId: string, sid: string, funcs: number[], taskType: number, goods: ItemInter[]) { + let pushMessage = await taskUtil.checkTaskWithGoods(roleId, taskType, goods, funcs); + pushTaskUpdate(roleId, sid, funcs, pushMessage); } -export async function pushTaskUpdate(roleId: string, sid: string, pushMessage: {type: number, id: number, count: number, received: boolean}[]) { - if(!sid) { +export async function checkTask(roleId: string, sid: string, funcs: number[], taskType: number, count: number, isInc: boolean, param: TaskParam) { + let pushMessage = await taskUtil.checkTask(roleId, taskType, count, isInc, param, funcs); + pushTaskUpdate(roleId, sid, funcs, pushMessage); +} + +export async function pushTaskUpdate(roleId: string, sid: string, funcs: number[], pushMessage: {type: number, id: number, count: number, received: boolean}[]) { + if(!sid || !funcs) { let onlineUser = await getRoleOnlineInfo(roleId); sid = onlineUser.sid; + funcs = onlineUser.funcs||[]; } if(!!sid) { let uids = [{uid: roleId, sid}]; @@ -59,40 +66,40 @@ export async function pushTaskUpdate(roleId: string, sid: string, pushMessage: { /** * battle.normalBattleHandler.battleEnd 中会触发的任务,因为有点多提出来了 */ -export async function checkTaskInBattleEnd(roleId: string, sid: string, battleId: number, heroes: number[], star: number) { +export async function checkTaskInBattleEnd(roleId: string, sid: string, funcs: number[], 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); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_WITH_HERO, battleId, heroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_MAIN, battleId, heroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_DAILY_STAR, battleId, heroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_DAILY, battleId, heroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_DUNGEON, battleId, heroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_DUNGEON_WAR, battleId, heroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_TOWER, battleId, heroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_VESTIGE, battleId, heroes, 1, star); + await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_EXPEDITION, battleId, heroes, 1, star); } export async function checkTaskInComBattleEnd(roleIds: string[], capId: string, quality: number) { for(let roleId of roleIds) { if(roleId == capId && roleIds.length > 1) { // 招募队友 - await checkTask(roleId, null, TASK_TYPE.COM_BATTLE_CREATE_TEAM, 1, true, {}); + await checkTask(roleId, null, 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, 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 }); + await checkTask(roleId, null, null, TASK_TYPE.COM_BATTLE, 1, true, {}); + await checkTask(roleId, null, 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, {}); +export async function checkTaskInPvpEnd(roleId: string, sid: string, funcs: number[], isSuccess: boolean, heroScores: HeroScores[]) { + await checkTask(roleId, sid, funcs, 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, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.PVP_WIN, 1, true, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.PVP_WIN_SERIES, 1, true, {}); } else { - await checkTask(roleId, sid, TASK_TYPE.PVP_WIN_SERIES, 0, false, {}); + await checkTask(roleId, sid, funcs, TASK_TYPE.PVP_WIN_SERIES, 0, false, {}); } - await checkTask(roleId, sid, TASK_TYPE.PVP, 0, false, { heroScores }); + await checkTask(roleId, sid, funcs, 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 f51a153ef..d325f6f65 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -186,8 +186,8 @@ export async function checkResult(pvpDefense: PvpDefenseType, seasonNum: number, 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 }); + await checkTask(pvpDefense.roleId, null, null, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores: pvpDefense.heroScores }); + await checkTask(pvpDefense.roleId, null, 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 bda654f27..ea087c5e7 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -364,7 +364,10 @@ export const FUNC_OPT_TYPE = { export const FUNCS_ID = { EVENT: 1, - PVP: 2 + PVP: 2, + MAIN_TASK: 3, + DAILY_TASK: 4, + ACHIEVEMENT: 4 } export const FRIEND_DROP_TYPE = { diff --git a/shared/db/UserTaskRec.ts b/shared/db/UserTaskRec.ts index 3bd1a5e99..5d0da1858 100644 --- a/shared/db/UserTaskRec.ts +++ b/shared/db/UserTaskRec.ts @@ -2,6 +2,7 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; import { TASK_FUN_TYPE } from '../consts'; import { genCode } from '../pubUtils/util'; +import { getTodayZeroDate } from '../pubUtils/timeUtil'; /** * 玩家购买商店记录表,每个商品一条,每次刷新新建一条 @@ -34,19 +35,31 @@ export default class UserTaskRec extends BaseModel { @prop({ required: true, default: false }) received: boolean; // 是否已领取 + private static getRefreshCondition(type: number) { + let today = getTodayZeroDate(5); + + if(type == TASK_FUN_TYPE.DAILY) { + return { createdAt: { $gte: today } }; + } else { + return {}; + } + } + public static async setTaskRec(roleId: string, type: number, taskType: number, group: number, count: number) { - let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, type, group }, { $setOnInsert: { code: genCode(8), taskType, received: false }, $set: { count } }, { new: true, upsert: true }).lean(); + let condition = this.getRefreshCondition(type); + let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, type, group, ...condition }, { $setOnInsert: { code: genCode(8), taskType, received: false }, $set: { count } }, { new: true, upsert: true }).lean(); return rec; } public static async incTaskRec(roleId: string, type: number, taskType: number, group: number, count: number) { - - let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, type, group }, { $setOnInsert: { code: genCode(8), taskType, received: false }, $inc: { count } }, { new: true, upsert: true }).lean(); + let condition = this.getRefreshCondition(type); + let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, type, group, ...condition }, { $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(); + let condition = this.getRefreshCondition(type); + let rec: UserTaskRecType = await UserTaskRecModel.findOne({ roleId, type, group, ...condition }).lean(); if(rec) { if(rec.count < count) { rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count); diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index 48d7a2dc7..36d4d7b90 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -1,31 +1,31 @@ import { gameData } from './data'; import { DicTask } from './dictionary/DicTask'; -import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB } from '../consts'; +import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB, TASK_FUN_TYPE, FUNCS_ID } from '../consts'; import { UserTaskRecModel, UserTaskRecType } from '../db/UserTaskRec' -import { RoleType } from '../db/Role'; +import { RoleType, RoleModel } 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'; +import { ItemInter } from './interface'; -export async function checkTaskWithRoles(taskType: number, roles: RoleType[]) { +export async function checkTaskWithRoles(taskType: number, roles: RoleType[], funcs?: number[]) { let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); for(let role of roles) { - let singlePush = await checkTaskWithRole(role.roleId, taskType, role); + let singlePush = await checkTaskWithRole(role.roleId, taskType, role, funcs); pushMessage.concat(singlePush); } return pushMessage } -export async function checkTaskWithRole(roleId: string, taskType: number, role: RoleType) { +export async function checkTaskWithRole(roleId: string, taskType: number, role: RoleType, funcs?: number[]) { let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); if(taskType == TASK_TYPE.LOGIN_SUM) { let today = getTodayZeroPoint(); if(today > role.loginTime) { - pushMessage = await checkTask(roleId, taskType, 1, true, {}); + pushMessage = await checkTask(roleId, taskType, 1, true, {}, funcs); } } else if (taskType == TASK_TYPE.LOGIN_SERIES) @@ -33,53 +33,53 @@ export async function checkTaskWithRole(roleId: string, taskType: number, role: let today = getTodayZeroPoint(); if(today > role.loginTime) { if(today - role.loginTime > 24 * 60 * 60 ) { - pushMessage = await checkTask(roleId, taskType, 0, false, {}); + pushMessage = await checkTask(roleId, taskType, 0, false, {}, funcs); } else { - pushMessage = await checkTask(roleId, taskType, 1, true, {}); + pushMessage = await checkTask(roleId, taskType, 1, true, {}, funcs); } } } else if (taskType == TASK_TYPE.FRIEND_NUM) { let { friendCnt } = role; - pushMessage = await checkTask(roleId, taskType, friendCnt, false, {}); + pushMessage = await checkTask(roleId, taskType, friendCnt, false, {}, funcs); } return pushMessage } -export async function checkTaskWithHeroes(roleId: string, taskType: number, heroes: HeroType[]) { +export async function checkTaskWithHeroes(roleId: string, taskType: number, heroes: HeroType[], funcs?: number[]) { let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); for(let hero of heroes) { - let singlePush = await checkTaskWithHero(roleId, taskType, hero); + let singlePush = await checkTaskWithHero(roleId, taskType, hero, [], funcs); pushMessage.concat(singlePush); } return pushMessage } -export async function checkTaskWithHero(roleId: string, taskType: number, hero: HeroType, args?: number[]) { +export async function checkTaskWithHero(roleId: string, taskType: number, hero: HeroType, args: number[] = [], funcs?: number[]) { let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); 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 }) + pushMessage = await checkTask(roleId, taskType, 1, true, { star: starUp }, funcs) } else if(taskType == TASK_TYPE.HERO_QUALITY) { let dicHero = gameData.hero.get(hero.hid); - pushMessage = await checkTask(roleId, taskType, 1, true, { quality: dicHero.quality }); + pushMessage = await checkTask(roleId, taskType, 1, true, { quality: dicHero.quality }, funcs); } 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 }); + pushMessage = await checkTask(roleId, taskType, 1, true, { quality: dicHero.quality, star: hero.star }, funcs); } else if (taskType == TASK_TYPE.HERO_LV) { - pushMessage = await checkTask(roleId, taskType, 1, true, { lv: hero.lv }); + pushMessage = await checkTask(roleId, taskType, 1, true, { lv: hero.lv }, funcs); } else if (taskType == TASK_TYPE.HERO_TRAIN) { @@ -87,13 +87,13 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero: let initGrage = gameData.job.get(dicHero.jobid).grade; let curGrade = gameData.job.get(hero.job).grade; let count = (curGrade - initGrage) * (ABI_STAGE.END - ABI_STAGE.START) + (hero.jobStage - ABI_STAGE.START); // 训练次数 - pushMessage = await checkTask(roleId, taskType, 1, true, { count }); + pushMessage = await checkTask(roleId, taskType, 1, true, { count }, funcs); } else if (taskType == TASK_TYPE.HERO_QUALITY_UP) { let dicHero = gameData.hero.get(hero.hid); if(hero.quality - dicHero.quality == 1) { // 每个武将升品算一次 - pushMessage = await checkTask(roleId, taskType, 1, true, {}); + pushMessage = await checkTask(roleId, taskType, 1, true, {}, funcs); } } else if (taskType == TASK_TYPE.HERO_STAGE_UP) @@ -102,18 +102,18 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero: 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 }); + pushMessage = await checkTask(roleId, taskType, 1, true, { count }, funcs); } else if (taskType == TASK_TYPE.HERO_FAVOUR_LV) { - pushMessage = await checkTask(roleId, taskType, 1, true, { favourLv: hero.favourLv }) + pushMessage = await checkTask(roleId, taskType, 1, true, { favourLv: hero.favourLv }, funcs) } else if (taskType == TASK_TYPE.EQUIP_BY_HERO) { // arg[0] 1:穿上 -1:脱下 let { ePlace } = hero; let count = ePlace.filter(cur => cur.equip).length; - pushMessage = await checkTask(roleId, taskType, args[0], true, { count, isPutOn: args[0] }); + pushMessage = await checkTask(roleId, taskType, args[0], true, { count, isPutOn: args[0] }, funcs); } else if (taskType == TASK_TYPE.EQUIP_STRENGTHEN) { @@ -121,7 +121,7 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero: let { ePlace } = hero; let index = 0; for(let { lv } of ePlace) { - let p = await checkTask(roleId, taskType, 1, true, { oldLv: args[index++], lv }); + let p = await checkTask(roleId, taskType, 1, true, { oldLv: args[index++], lv }, funcs); pushMessage = pushMessage.concat(p); } } @@ -130,13 +130,13 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero: } -export async function checkTaskWithEquip(roleId: string, taskType: number, equip: EquipType, args?: number[]) { +export async function checkTaskWithEquip(roleId: string, taskType: number, equip: EquipType, args: number[] = [], funcs?: number[]) { let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); 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 }) + pushMessage = await checkTask(roleId, taskType, args[0], true, { quality: dicGood.quality }, funcs) } else if (taskType == TASK_TYPE.EQUIP_JEWEL) { @@ -144,16 +144,16 @@ export async function checkTaskWithEquip(roleId: string, taskType: number, equip 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, {}); + pushMessage = await checkTask(roleId, taskType, 1, true, {}, funcs); } else if (jewelCount <= 0 && args[0] > 0) { // 原来镶嵌着,现在没了 - pushMessage = await checkTask(roleId, taskType, -1, true, {}); + pushMessage = await checkTask(roleId, taskType, -1, true, {}, funcs); } } 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, {}); + pushMessage = await checkTask(roleId, taskType, 1, true, {}, funcs); } } else if (taskType == TASK_TYPE.EQUIP_SUIT) @@ -177,7 +177,7 @@ export async function checkTaskWithEquip(roleId: string, taskType: number, equip if(id == equip.id) curCount = count; } if(curCount == minCount) { - pushMessage = await checkTask(roleId, taskType, 1, true, {}); + pushMessage = await checkTask(roleId, taskType, 1, true, {}, funcs); } } } @@ -186,21 +186,21 @@ export async function checkTaskWithEquip(roleId: string, taskType: number, equip // args[0] 原来镶嵌了多少宝石 let { holes } = equip; let jewelCount = holes.filter(cur => cur.jewel > 0).length; - pushMessage = await checkTask(roleId, taskType, jewelCount - args[0], true, {}); + pushMessage = await checkTask(roleId, taskType, jewelCount - args[0], true, {}, funcs); } return pushMessage } -export async function checkTaskWithArgs(roleId: string, taskType: number, args: number[]) { +export async function checkTaskWithArgs(roleId: string, taskType: number, args: number[], funcs?: number[]) { let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); if(taskType == TASK_TYPE.ROLE_SCHOOL_PUT_HERO) { let [ hid, preHid ] = args; if(hid > 0 && preHid <= 0) { // 放置 - pushMessage = await checkTask(roleId, taskType, 1, true, {}); + pushMessage = await checkTask(roleId, taskType, 1, true, {}, funcs); } else if (hid <= 0 && preHid > 0) { // 卸下 - pushMessage = await checkTask(roleId, taskType, -1, true, {}); + pushMessage = await checkTask(roleId, taskType, -1, true, {}, funcs); } } else if (taskType == TASK_TYPE.EQUIP_JEWEL_STAGE) @@ -209,95 +209,95 @@ export async function checkTaskWithArgs(roleId: string, taskType: number, args: let [putOnJewel, putOffJewel] = args; if(putOnJewel > 0) { let dicGood = gameData.goods.get(putOnJewel); - let push = await checkTask(roleId, taskType, 1, true, { stage: dicGood.lvLimited }); + let push = await checkTask(roleId, taskType, 1, true, { stage: dicGood.lvLimited }, funcs); pushMessage.concat(push); } if(putOffJewel > 0) { let dicGood = gameData.goods.get(putOffJewel); - let push = await checkTask(roleId, taskType, -1, true, { stage: dicGood.lvLimited }); + let push = await checkTask(roleId, taskType, -1, true, { stage: dicGood.lvLimited }, funcs); pushMessage.concat(push); } } else if (taskType == TASK_TYPE.CHAT) { // args[0] 聊天type 1-系统 2-世界 3-军团 4-组队 5-私聊 - pushMessage = await checkTask(roleId, taskType, 1, true, { chatType: args[0] }) + pushMessage = await checkTask(roleId, taskType, 1, true, { chatType: args[0] }, funcs) } return pushMessage } -export async function checkTaskWithWar(roleId: string, taskType: number, warId: number, heroes: number[], count: number, star: number) { +export async function checkTaskWithWar(roleId: string, taskType: number, warId: number, heroes: number[], count: number, star: number, funcs?: number[]) { let dicWar = gameData.war.get(warId); let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); if(taskType == TASK_TYPE.BATTLE_WITH_HERO) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId, heroes }); + pushMessage = await checkTask(roleId, taskType, count, true, { warId, heroes }, funcs); } else if (taskType == TASK_TYPE.BATTLE_MAIN) { if(dicWar.warType == WAR_TYPE.NORMAL) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId }); + pushMessage = await checkTask(roleId, taskType, count, true, { warId }, funcs); } } else if (taskType == TASK_TYPE.BATTLE_MAIN_SWEEP) { if(dicWar.warType == WAR_TYPE.NORMAL) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); + pushMessage = await checkTask(roleId, taskType, count, true, {}, funcs); } } else if (taskType == TASK_TYPE.BATTLE_DAILY_STAR) { if(dicWar.warType == WAR_TYPE.DAILY) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId, star }); + pushMessage = await checkTask(roleId, taskType, count, true, { warId, star }, funcs); } } else if (taskType == TASK_TYPE.BATTLE_DAILY) { if(dicWar.warType == WAR_TYPE.DAILY) { - pushMessage = await checkTask(roleId, taskType, count, true, { dailyType: dicWar.dailyType }) + pushMessage = await checkTask(roleId, taskType, count, true, { dailyType: dicWar.dailyType }, funcs) } } 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, {}); + pushMessage = await checkTask(roleId, taskType, count, true, {}, funcs); } } 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 }); + pushMessage = await checkTask(roleId, taskType, count, true, { warId }, funcs); } } else if (taskType == TASK_TYPE.BATTLE_TOWER) { if(dicWar.warType == WAR_TYPE.TOWER) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); + pushMessage = await checkTask(roleId, taskType, count, true, {}, funcs); } } else if (taskType == TASK_TYPE.BATTLE_VESTIGE) { if(dicWar.warType == WAR_TYPE.VESTIGE) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); + pushMessage = await checkTask(roleId, taskType, count, true, {}, funcs); } } else if (taskType == TASK_TYPE.BATTLE_EXPEDITION) { if(dicWar.warType == WAR_TYPE.EXPEDITION) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); + pushMessage = await checkTask(roleId, taskType, count, true, {}, funcs); } } return pushMessage } -export async function checkTaskWithGoods(roleId: string, taskType: number, goods: RewardInter[]) { +export async function checkTaskWithGoods(roleId: string, taskType: number, goods: ItemInter[], funcs?: number[]) { 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 }); + let push = await checkTask(roleId, taskType, count, true, { gid: id }, funcs); pushMessage.concat(push); } } @@ -305,7 +305,7 @@ export async function checkTaskWithGoods(roleId: string, taskType: number, goods } // 根据taskType判断有哪些任务需要check的 -export async function checkTask(roleId: string, taskType: number, count: number, isInc: boolean, param: TaskParam) { +export async function checkTask(roleId: string, taskType: number, count: number, isInc: boolean, param: TaskParam, funcs?: number[]) { let tasks = gameData.taskType.get(taskType); let pushMessage = new Array<{type: number, id: number, count: number, received: boolean}>(); let groups = new Map(); @@ -315,9 +315,13 @@ export async function checkTask(roleId: string, taskType: number, count: number, } groups.get(dicTask.group).tasks.push(dicTask); } + if(!funcs) { + let role = await RoleModel.findByRoleId(roleId, 'funcs'); + funcs = role.funcs||[]; + } for(let [ group, { task0, tasks } ] of groups) { - let rec = await checkTaskRec(roleId, group, task0, count, isInc, param); + let rec = await checkTaskRec(roleId, group, task0, count, isInc, param, funcs); if(rec) { for(let dicTask of tasks) { if(checkRecResult(rec, dicTask.condition)) { @@ -330,8 +334,15 @@ 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 ) { +export async function checkTaskRec(roleId: string, group: number, dicTask: DicTask, count: number, isInc: boolean, param: TaskParam, funcs: number[] ) { let { type, taskParam, taskType } = dicTask; + + let sp = [TASK_TYPE.LOGIN_SUM, TASK_TYPE.LOGIN_SERIES]; + if(type == TASK_FUN_TYPE.DAILY && funcs.indexOf(FUNCS_ID.DAILY_TASK) == -1 && sp.indexOf(taskType) == -1) { // 功能未开启 + return false; + } + + let isMatch = true; // 条件是否满足 let checkHistory = false; // 是否检查历史 switch(taskType) { diff --git a/shared/resource/jsons/dic_func_switch.json b/shared/resource/jsons/dic_func_switch.json index 56fab94fd..d1e21e7dc 100644 --- a/shared/resource/jsons/dic_func_switch.json +++ b/shared/resource/jsons/dic_func_switch.json @@ -12,5 +12,26 @@ "conditionType": 1, "param": 1, "script": "&" + }, + { + "id": 3, + "desc": "主线任务", + "conditionType": 1, + "param": 6, + "script": "&" + }, + { + "id": 4, + "desc": "每日任务", + "conditionType": 1, + "param": 15, + "script": "&" + }, + { + "id": 5, + "desc": "成就", + "conditionType": 1, + "param": 15, + "script": "&" } ] \ No newline at end of file