fix 修复刷新任务数量错误
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -253,8 +253,7 @@ export async function checkTaskConditions(roleId: string, heroes: Array<number>,
|
||||
* @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<number>) {
|
||||
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<any>, curTime: Date) {
|
||||
|
||||
// 刷新任务,正在进行中的部分保留,没有进行中的刷掉
|
||||
export function getDoingOrWaitingTasks (taskList: Array<any>, curTime: Date) {
|
||||
let doingTaskCode = new Array<string>(), waitingTaskCode = new Array<string>();
|
||||
let doingTaskCode = new Array<string>(), waitingTaskCode = new Array<string>(), doingIds = new Array<number>();
|
||||
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) {
|
||||
|
||||
@@ -31,7 +31,7 @@ export async function roleLevelup(roleId: string, kingExp: number) {
|
||||
export async function checkBattleHeroes(roleId: string, heroes: Array<number>) {
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user