diff --git a/game-server/app/servers/role/handler/taskHandler.ts b/game-server/app/servers/role/handler/taskHandler.ts index 7ae4968f5..0d71476ef 100644 --- a/game-server/app/servers/role/handler/taskHandler.ts +++ b/game-server/app/servers/role/handler/taskHandler.ts @@ -1,13 +1,13 @@ import { Application, BackendSession, pinus } from "pinus"; -import { resResult, parseGoodStr } from "../../../pubUtils/util"; +import { resResult, parseGoodStr, getRandEelm } from "../../../pubUtils/util"; import { STATUS, TASK_FUN_TYPE } from "../../../consts"; import { gameData } from "../../../pubUtils/data"; import { UserTaskRecModel } from "../../../db/UserTaskRec"; import { addItems } from "../../../services/rewardService"; import { UserTaskModel } from "../../../db/UserTask"; import { getCurWeekDate, nowSeconds } from "../../../pubUtils/timeUtil"; -import { DicDailyTask, DicAchievement } from "../../../pubUtils/dictionary/DicTask"; -import { getMainTask, refDailyTaskBox, removeHistoryTask, getDailyTask, getCurTask } from "../../../services/taskService"; +import { DicDailyTask, DicAchievement, DicMainTask } from "../../../pubUtils/dictionary/DicTask"; +import { getMainTask, refDailyTaskBox, removeHistoryTask, getDailyTask, getCurTask, checkTask } from "../../../services/taskService"; import { TASK } from "../../../pubUtils/dicParam"; export default function(app: Application) { @@ -179,6 +179,28 @@ export class ShopHandler { }); } + /** + * @description 随机完成某一个任务 + * @param {{ type: number }} msg + * @param {BackendSession} session + * @memberof TaskHandler + */ + async debugCompleteRandTask(msg: { type: number }, session: BackendSession) { + const roleId: string = session.get('roleId'); + const sid: string = session.get('sid'); + const funcs: number[] = session.get('funcs'); + const { type } = msg + let tasks: (DicMainTask|DicDailyTask|DicAchievement)[] = []; + for(let [_id, task] of gameData.tasks.get(type)) { + tasks.push(task); + } + let task = getRandEelm(tasks, 1)[0]; + await checkTask(roleId, sid, funcs, task.taskType, task.condition, false, { isDebug: true }); + return resResult(STATUS.SUCCESS, { + task + }); + } + async debugRefTask(msg: { type: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); diff --git a/game-server/test/Client.ts b/game-server/test/Client.ts index 82f8aa512..de97eb274 100644 --- a/game-server/test/Client.ts +++ b/game-server/test/Client.ts @@ -6,7 +6,7 @@ import { ON_ADD_CHANNEL_ROUTE } from '../app/consts'; export class Client { private _client; private _roleInfo; - constructor(tel: string = '13911134885') { + constructor(tel: string = '13636354764') { this._client = new PinusWSClient(); let host = '127.0.0.1'; diff --git a/game-server/test/task.test.ts b/game-server/test/task.test.ts new file mode 100644 index 000000000..9b867d5ed --- /dev/null +++ b/game-server/test/task.test.ts @@ -0,0 +1,120 @@ +import { Client } from './Client'; +import 'mocha'; +import { PinusWSClient } from 'pinus-robot-plugin'; +import { expect } from 'chai'; +import { checkSuccessResponse, checkDisplayItems } from './CheckPatten'; +import { DEBUG_MAGIC_WORD, AUCTION_SOURCE, CURRENCY_BY_TYPE, CURRENCY_TYPE, AUCTION_STAGE, DIVIDEND_STATUS } from '../app/consts'; +import { LOT_STATUS, TASK_FUN_TYPE } from '../../shared/consts'; +import { take } from 'underscore'; + +const GOOD_ID_TIEJIAN = 1; +const GOOD_ID_GANGJIAN = 2; + +describe('任务测试', function () { + let pinusClient: PinusWSClient; + let roleInfo; + + beforeEach(function (done) { + const c = new Client(); + const cT = new Client('13121622738'); + const timer = setInterval(() => { + if (c.client && cT.client) { + pinusClient = c.client; + roleInfo = c.roleInfo; + clearInterval(timer); + done(); + } + }, 500); + }); + + afterEach(function (done) { + pinusClient.disconnect(); + // disconnect 后等待 500ms,供服务器清理环境、退出频道等 + setTimeout(() => { + done(); + }, 500); + }); + + it('检查entery中返回的任务状态', function (done) { + checkMainTask(roleInfo.mainTask); + checkDailyTask(roleInfo.dailyTask); + checkAchievement(roleInfo.achievement); + done(); + }); + + it('检查领取主线任务', function (done) { + checkReceiveTask(pinusClient, done, TASK_FUN_TYPE.MAIN); + }); + it('检查领取每日任务', function (done) { + checkReceiveTask(pinusClient, done, TASK_FUN_TYPE.DAILY); + }); + it('检查领取成就', function (done) { + checkReceiveTask(pinusClient, done, TASK_FUN_TYPE.ACHIEVEMENT); + }); + +}); + +// 检查领取 +function checkReceiveTask(pinusClient, done, type: number) { + // 清空任务 + pinusClient.request('role.taskHandler.debugRefTask', { magicWord: DEBUG_MAGIC_WORD, type }, (res) => { + checkSuccessResponse(res); + // 完成一个任务 + pinusClient.request('role.taskHandler.debugCompleteRandTask', { magicWord: DEBUG_MAGIC_WORD, type }, (res) => { + checkSuccessResponse(res); + expect(res.data.task).to.be.an('object'); + expect(res.data.task.id).to.be.a('number'); + + pinusClient.request('role.taskHandler.receiveTask', { type, id: res.data.task.id }, (res) => { + checkSuccessResponse(res); + expect(res.data.type).to.be.a('number'); + expect(res.data.id).to.be.a('number'); + expect(res.data.count).to.be.a('number'); + expect(res.data.received).equal(true); + expect(res.data.point).to.be.a('number'); + expect(res.data.weeklyPoint).to.be.a('number'); + checkDisplayItems(res.data.goods); + done(); + }); + + }); + }); +} + + +// 检查主线任务数据 +function checkMainTask(mainTask) { + expect(mainTask).to.be.an('object'); + expect(mainTask.stage).to.be.a('number'); + expect(mainTask.taskList).to.be.an('array'); + mainTask.taskList.forEach(task => checkSingleTask(task)); +} + +// 检查日常任务数据 +function checkDailyTask(dailyTask) { + expect(dailyTask).to.be.an('object'); + expect(dailyTask.point).to.be.a('number'); + expect(dailyTask.weeklyPoint).to.be.an('number'); + dailyTask.taskList.forEach(task => checkSingleTask(task)); + dailyTask.box.forEach(id => { + expect(id).to.be.a('number'); + }) +} + +// 检查成就 +function checkAchievement(achievement) { + expect(achievement).to.be.an('object'); + expect(achievement.point).to.be.a('number'); + achievement.taskList.forEach(task => checkSingleTask(task)); + achievement.box.forEach(id => { + expect(id).to.be.a('number'); + }) +} + +// 检查在taskList中的某一个任务数据 +function checkSingleTask(task) { + expect(task).to.be.an('object'); + expect(task.id).to.be.a('number'); + expect(task.count).to.be.a('number'); + expect(task.received).to.be.a('boolean'); +} \ No newline at end of file diff --git a/shared/domain/roleField/task.ts b/shared/domain/roleField/task.ts index ad6b5ee0b..1db7bd313 100644 --- a/shared/domain/roleField/task.ts +++ b/shared/domain/roleField/task.ts @@ -22,6 +22,7 @@ export class TaskParam { title?: number; job?: number; aid?: number; + isDebug?: boolean; } export class TaskListReturn { diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index 39c519c18..8a01ba86d 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -423,6 +423,9 @@ export async function checkTaskRec(roleId: string, type: number, group: number, break; } console.log('****isMatch', isMatch, checkHistory, type, taskType, group, count) + if(param.isDebug) { + isMatch = true; + } if (isMatch) { if (isInc) {