diff --git a/game-server/app/servers/battle/handler/towerBattleHandler.ts b/game-server/app/servers/battle/handler/towerBattleHandler.ts index b9618e875..d2eb9f7d7 100644 --- a/game-server/app/servers/battle/handler/towerBattleHandler.ts +++ b/game-server/app/servers/battle/handler/towerBattleHandler.ts @@ -10,6 +10,7 @@ import { getTaskById, getTowerDataByLv } from '../../../pubUtils/gamedata'; import { decodeArrayStr, resResult, shouldRefresh, calculateNum, getRefTime, genCode } from '../../../pubUtils/util'; import { calcuHangUpReward, checkTaskConditions, checkHangUpSpdUpCnt, createCurTasks, treatTask, getRemainTime, getTasksReward, getTaskStatus, getDoingOrWaitingTasks } from '../../../services/battleService'; import { handleFixedReward, handleReward } from '../../../services/rewardService'; +import { checkBattleHeroes } from '../../../services/normalBattleService'; export default function(app: Application) { return new TowerBattleHandler(app); @@ -145,10 +146,10 @@ export class TowerBattleHandler { if(needRefresh) { const batchCode = genCode(8); await RoleModel.resetTowerCnt(roleId, curTime); // 重置派遣次数 - let {waitingTaskCode, doingTaskCode} = getDoingOrWaitingTasks(curTasks, curTime); + let {waitingTaskCode, doingTaskCode, doingIds} = getDoingOrWaitingTasks(curTasks, curTime); await TowerTaskRecModel.hideTask(roleId, waitingTaskCode); // 隐藏没有在做的任务 await TowerTaskRecModel.updateBatchCode(roleId, doingTaskCode, batchCode); // 更新留下来的旧任务的batchCode - await createCurTasks(towerLv, batchCode, roleId, roleName, doingTaskCode.length); // 新建任务 + await createCurTasks(towerLv, batchCode, roleId, roleName, doingTaskCode.length, TOWER_TASK_CONST.RAND_CNT-doingTaskCode.length, doingIds); // 新建任务 curTasks = await TowerTaskRecModel.getCurTasks(roleId); } @@ -175,10 +176,10 @@ export class TowerBattleHandler { // 只刷掉当前面板上没有做派遣的任务 const batchCode = genCode(8); let curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务 - let {waitingTaskCode, doingTaskCode} = getDoingOrWaitingTasks(curTasks, curTime); + let {waitingTaskCode, doingTaskCode, doingIds} = getDoingOrWaitingTasks(curTasks, curTime); await TowerTaskRecModel.hideTask(roleId, waitingTaskCode); // 隐藏没有在做的任务 await TowerTaskRecModel.updateBatchCode(roleId, doingTaskCode, batchCode); // 更新留下来的旧任务的batchCode - await createCurTasks(towerLv, batchCode, roleId, roleName, 0); + await createCurTasks(towerLv, batchCode, roleId, roleName, 0, waitingTaskCode.length, doingIds); curTasks = await TowerTaskRecModel.getCurTasks(roleId); let refRemainTime = getRemainTime(curTime); @@ -207,13 +208,15 @@ export class TowerBattleHandler { return resResult(STATUS.TOWER_TASK_MISSING) } let taskInfo = getTaskById(curTask.taskId); - if (task.heroes.length == taskInfo.actorNeeded) { // 武将数,从策划表中读取 + if (task.heroes.length !== taskInfo.actorNeeded) { // 武将数,从策划表中读取 return resResult(STATUS.TOWER_TASK_MAX_HERO); } if (tasksCode.indexOf(task.taskCode) === -1) { return resResult(STATUS.TOWER_TASK_CODE_NOT_FOUND); } if (usedHeroes.length > 0) { // 是否在其他任务重使用了武将 + let hasHero = await checkBattleHeroes(roleId, usedHeroes); + if(!hasHero) return resResult(STATUS.BATTLE_HERO_NOT_FOUND); let used = !!task.heroes.find(seqId => usedHeroes.indexOf(seqId) !== -1); if (used) { return resResult(STATUS.TOWER_TASK_HERO_HAS_USED); @@ -230,7 +233,8 @@ export class TowerBattleHandler { let refRemainTime = getRemainTime(curTime); curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务 - return resResult(STATUS.SUCCESS, { tasks: treatTask(curTasks, curTime), refRemainTime }); + let costGold = TOWER_TASK_CONST.COST_GOLD; + return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), refRemainTime, nextCostGold: costGold }); } async settleTask(msg: {batchCode: string, taskCode: string}, session: BackendSession) { @@ -269,7 +273,8 @@ export class TowerBattleHandler { let refRemainTime = getRemainTime(curTime); curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务 - return resResult(STATUS.SUCCESS, { compTasks: treatTask(curTasks, curTime), goods, refRemainTime }); + let costGold = TOWER_TASK_CONST.COST_GOLD; + return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), goods, refRemainTime, nextCostGold: costGold }); } diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index d6d9d1998..3c83c7006 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -253,8 +253,7 @@ export async function checkTaskConditions(roleId: string, heroes: Array, * @param roleName 玩家名 * @param hideNum 隐藏的任务数量 */ -export async function createCurTasks(towerLv: number, batchCode: string, roleId: string, roleName: string, hideNum: number) { - +export async function createCurTasks(towerLv: number, batchCode: string, roleId: string, roleName: string, hideNum: number, showNum: number, rids: Array) { let randomList = []; let dicTask = getGamedata('dic_zyz_search'); for(let task of dicTask) { @@ -266,18 +265,19 @@ export async function createCurTasks(towerLv: number, batchCode: string, roleId: } } let returnTasks = new Array(); - let showNum = TOWER_TASK_CONST.RAND_CNT - hideNum; const arr = [{refreshStatus: 0, num: hideNum}, {refreshStatus: 1, num: showNum}]; for(let {refreshStatus, num} of arr) { let taskIds = []; for(let i = 0; i < num; i++) { - let list = randomList.filter(cur => !taskIds.includes(cur.taskId)); + let list = randomList.filter(cur => !rids.includes(cur.taskId)); let {dic: tmp} = getRandomWithWeight(list); if(tmp) { taskIds.push(tmp.taskId); + rids.push(tmp.taskId) } } const curTasks = await TowerTaskRecModel.createTasks(roleId, roleName, batchCode, taskIds, refreshStatus); + console.log(curTasks.length) if(refreshStatus == 1) { returnTasks = curTasks; } @@ -302,16 +302,17 @@ export function treatTask(recs: Array, curTime: Date) { // 刷新任务,正在进行中的部分保留,没有进行中的刷掉 export function getDoingOrWaitingTasks (taskList: Array, curTime: Date) { - let doingTaskCode = new Array(), waitingTaskCode = new Array(); + let doingTaskCode = new Array(), waitingTaskCode = new Array(), doingIds = new Array(); for(let task of taskList) { let {status} = getTaskStatus(task.status, task.completeTime, curTime); if(status == 1||status == 2) { doingTaskCode.push(task.taskCode); + doingIds.push(task.taskId); } else if(status == 0|| status == 3) { waitingTaskCode.push(task.taskCode); } } - return {doingTaskCode, waitingTaskCode} + return {doingTaskCode, waitingTaskCode, doingIds} } export function getTaskStatus(status: number, completeTime: Date, curTime: Date) { diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index 3cb295f5a..7dd2f2b58 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -31,7 +31,7 @@ export async function roleLevelup(roleId: string, kingExp: number) { export async function checkBattleHeroes(roleId: string, heroes: Array) { let flag = true; for(let seqId of heroes) { - let hero = await HeroModel.findBySeqIdAndRole(seqId, roleId); + let hero = await HeroModel.findBySeqIdAndRole(seqId||0, roleId); if(!hero) flag = false; } return flag; diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 99f260a2f..cba12fa12 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -60,7 +60,7 @@ export const STATUS = { TOWER_NOT_ENOUGH_HANG_UP_TIME: { code: 20508, simStr: '今日加速次数不足' }, TOWER_HANG_UP_FAILED: { code: 20509, simStr: '不满足加速条件' }, TOWER_TASK_NOT_FOUND: { code: 20510, simStr: '没有可用派遣任务' }, - TOWER_TASK_MAX_HERO: { code: 20511, simStr: '超过派遣武将最大人数' }, + TOWER_TASK_MAX_HERO: { code: 20511, simStr: '派遣武将人数不满足' }, TOWER_TASK_HERO_HAS_USED: { code: 20512, simStr: '武将已经派遣到其他任务' }, TOWER_TASK_CODE_NOT_FOUND: { code: 20513, simStr: '未找到此任务编号' }, TOWER_TASK_SEND_ERR: { code: 20514, simStr: '任务派遣失败,请检查任务编号' }, diff --git a/shared/db/TowerTaskRec.ts b/shared/db/TowerTaskRec.ts index 7979d711e..8d0140712 100644 --- a/shared/db/TowerTaskRec.ts +++ b/shared/db/TowerTaskRec.ts @@ -1,7 +1,5 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop } from '@typegoose/typegoose'; -import { getRefTime } from '../pubUtils/util'; -import { TOWER_TASK_CONST } from '../consts/consts'; function genCodeTmp(len) { const chars = '123456789ABCDEFGHJKLMNPQRSTWXYZabcdefghijklmnopqrstuvwxyz';