diff --git a/game-server/app/servers/role/handler/taskHandler.ts b/game-server/app/servers/role/handler/taskHandler.ts index ee1ffd0c9..ba18dedad 100644 --- a/game-server/app/servers/role/handler/taskHandler.ts +++ b/game-server/app/servers/role/handler/taskHandler.ts @@ -1,6 +1,6 @@ import { Application, BackendSession, pinus, HandlerService, } from "pinus"; import { resResult, parseGoodStr, getRandSingleEelm } from "../../../pubUtils/util"; -import { STATUS, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, KING_EXP_RATIO_TYPE } from "../../../consts"; +import { STATUS, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, KING_EXP_RATIO_TYPE, DEBUG_MAGIC_WORD } from "../../../consts"; import { gameData } from "../../../pubUtils/data"; import { UserTaskRecModel } from "../../../db/UserTaskRec"; import { addItems } from "../../../services/rewardService"; @@ -14,6 +14,7 @@ import { ActivityTaskPointModel, ActivityTaskPointModelType } from "../../../db/ import { ItemInter, RewardInter } from "../../../pubUtils/interface"; import { RoleModel } from "../../../db/Role"; import { roleLevelup } from "../../../services/normalBattleService"; +import _ = require("underscore"); export default function (app: Application) { new HandlerService(app, {}); @@ -316,4 +317,14 @@ export class ShopHandler { type, point, weeklyPoint }); } + + + async debugGetDicTask(msg: { magicWord: string }, session: BackendSession) { + const { magicWord } = msg; + if (magicWord !== DEBUG_MAGIC_WORD) { + return resResult(STATUS.TOKEN_ERR); + } + console.log('******', _.isEqual([1,2], [1,2,2])) + return resResult(STATUS.SUCCESS, { tasks: [...gameData.taskType]}); + } } \ No newline at end of file diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 30032e05c..9a8f3e3e7 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -82,7 +82,7 @@ import { dicGiftPackage, loadGiftPackage } from "./dictionary/DicGiftPackage"; import { dicRecruit, loadRecruit } from './dictionary/DicRecruit'; import { loadRMB, dicRMB } from './dictionary/DicRMB'; import { dicActivityType, loadActivityType } from './dictionary/DicActivityType'; -import { dicTaskTypeDesc, loadTaskType } from './dictionary/DicTaskType'; +import { DicTaskType, dicTaskTypeDesc, loadTaskType } from './dictionary/DicTaskType'; import { dicServerName, dicServerGroupName, loadServerName } from "./dictionary/DicServerName"; import { dicAp, loadAp, dicApMaxLevel } from './dictionary/DicAp'; import { dicApBuy, dicApMaxBuyTimes, loadApBuy } from "./dictionary/DicApBuy"; @@ -96,6 +96,7 @@ import { dicGuildTrainInfo, loadGuildTrainInfo } from './dictionary/DicGuildTrai import { dicPvpDifficultRatio, loadPvpDifficultRatio } from './dictionary/DicPvpDifficultRatio'; import { dicWhiteIp, loadWhiteIp } from './dictionary/DicWhiteIp'; import { pick } from "underscore"; +import _ = require("underscore"); export const gameData = { blurprtCompose: dicBlueprtCompose, @@ -848,6 +849,54 @@ function parseDicParam() { loadAuctionTime(); } +/** + * 处理任务的group属性 + * group为如果两个任务,除了condition以外的其他所有taskParam都是一样的,他们的group相同 + */ +function treatTaskGroup() { + let taskType2Desc = new Map(); + for(let obj of gameData.taskTypeDesc) { + taskType2Desc.set(obj.id, obj); + } + let taskByGroup = new Map(); // taskType => obj + for(let [taskType, tasks] of gameData.taskType) { + for(let obj of tasks) { + let dicTaskType = taskType2Desc.get(taskType); + let index = dicTaskType.param.split('&').indexOf(dicTaskType.condition); + console.log(index); + let params = obj.taskParam.filter((_, i) => index != i); + // console.log('params: ', obj.id, obj.type, obj.taskType, obj.taskParam, obj.condition, params); + + if(!taskByGroup.has(taskType)) { + taskByGroup.set(taskType, [{ params, ids: [obj.id]}]); + } else { + let arr = taskByGroup.get(taskType)||[]; + let hasGroup = arr.find(cur => { + return _.isEqual(cur.params, params); + }); + if(hasGroup) { + hasGroup.ids.push(obj.id); + } else { + arr.push({ params, ids: [obj.id] }); + } + taskByGroup.set(taskType, arr); + } + } + } + + for(let [taskType, arr] of taskByGroup) { + let tasks = gameData.taskType.get(taskType); + for(let i = 0; i < arr.length; i++) { + let group = i + 1; + let { ids } = arr[i]; + for(let id of ids) { + let task = tasks.find(cur => cur.id == id); + if(task) task.group = group; + } + } + } +} + // 加载json function loadDatas() { loadHero(); @@ -940,6 +989,7 @@ function loadDatas() { loadGuildTrainInfo(); loadPvpDifficultRatio(); loadWhiteIp(); + treatTaskGroup(); } // 重载dicParam diff --git a/shared/pubUtils/dictionary/DicTask.ts b/shared/pubUtils/dictionary/DicTask.ts index f77de29f8..17c7b1a5c 100644 --- a/shared/pubUtils/dictionary/DicTask.ts +++ b/shared/pubUtils/dictionary/DicTask.ts @@ -12,7 +12,7 @@ interface DicTaskBase { // 任务类型 readonly taskType: number; // 类型下面的分组 - readonly group: number; + group: number; // 任务参数 readonly taskParam: number[]; // 条件 @@ -123,6 +123,7 @@ export function loadTask() { dicPvpDailyTask.clear(); const arrMainTask = readFileAndParse(FILENAME.DIC_MAIN_TASK); + arrMainTask.forEach(o => { o.taskParam = parseNumberList(o.taskParam); o.taskReward = parseGoodStr(o.taskReward); diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index b1baadc3b..8b580f23c 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -101,7 +101,7 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero: pushMessage = await checkTask(roleId, taskType, 1, true, { quality: dicHero.quality, star: hero.star }); } else if (taskType == TASK_TYPE.HERO_LV) { - pushMessage = await checkTask(roleId, taskType, 1, true, { lv: hero.lv, oldLv: args[0] }); + pushMessage = await checkTask(roleId, taskType, 1, true, { lv: hero.lv, oldLv: args[0]||0 }); } else if (taskType == TASK_TYPE.HERO_TRAIN) { let dicHero = gameData.hero.get(hero.hid);