任务:group字段自动生成

This commit is contained in:
luying
2021-11-18 18:04:20 +08:00
parent 624aa2b5f1
commit 231b29c86e
4 changed files with 66 additions and 4 deletions

View File

@@ -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]});
}
}

View File

@@ -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<number, DicTaskType>();
for(let obj of gameData.taskTypeDesc) {
taskType2Desc.set(obj.id, obj);
}
let taskByGroup = new Map<number, { params: number[], ids: number[] }[]>(); // 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

View File

@@ -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);

View File

@@ -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);