fix 修复刷新任务数量错误

This commit is contained in:
luying
2020-11-10 19:46:52 +08:00
parent 76e8157ad3
commit 5a700b87c7
5 changed files with 21 additions and 17 deletions

View File

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

View File

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

View File

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

View File

@@ -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: '任务派遣失败,请检查任务编号' },

View File

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