天梯派遣刷新逻辑
This commit is contained in:
@@ -6,12 +6,13 @@ import { BattleRecordModel } from './../db/BattleRecord';
|
||||
import { TowerRecordModel } from './../db/TowerRecord';
|
||||
import { RoleModel } from './../db/Role';
|
||||
import { getHeroInfoById, getJobInfoById, getTowerDataByLv, getTaskById, getGamedata } from "../pubUtils/gamedata"
|
||||
import { decodeArrayStr, shouldRefresh, resResult, decodeStr, cal, getRandomWithWeight, getRefTime, decodeStrSingle } from '../pubUtils/util';
|
||||
import { decodeArrayStr, shouldRefresh, resResult, decodeStr, cal, getRandomWithWeight, getRefTime, decodeStrSingle, genCode } from '../pubUtils/util';
|
||||
import { handleFixedReward } from './rewardService';
|
||||
import { STATUS } from '../consts/statusCode';
|
||||
import { HangUpSpdUpRecModel } from '../db/HangUpSpdUpRec';
|
||||
import TowerTaskRec, { TowerTaskRecModel } from '../db/TowerTaskRec';
|
||||
import { PvpDefenseModel } from '../db/PvpDefense';
|
||||
import { Document } from 'mongoose';
|
||||
|
||||
export async function checkTowerWar(roleId: string, battleId: number, heroes: Array<number>) {
|
||||
const battleIdStr = `${battleId}`;
|
||||
@@ -250,10 +251,10 @@ export async function checkTaskConditions(roleId: string, heroes: Array<number>,
|
||||
* @param towerLv 玩家层数
|
||||
* @param roleId 玩家id
|
||||
* @param roleName 玩家名
|
||||
* @param hideNum 隐藏的任务数量
|
||||
*/
|
||||
export async function createCurTasks(towerLv: number, roleId: string, roleName: string) {
|
||||
export async function createCurTasks(towerLv: number, batchCode: string, roleId: string, roleName: string, hideNum: number) {
|
||||
|
||||
let taskIds = [];
|
||||
let randomList = [];
|
||||
let dicTask = getGamedata('dic_zyz_search');
|
||||
for(let task of dicTask) {
|
||||
@@ -264,16 +265,25 @@ export async function createCurTasks(towerLv: number, roleId: string, roleName:
|
||||
randomList.push(task);
|
||||
}
|
||||
}
|
||||
for(let i = 0; i < TOWER_TASK_CONST.RAND_CNT; i++) {
|
||||
let list = randomList.filter(cur => !taskIds.includes(cur.taskId));
|
||||
let {dic: tmp} = getRandomWithWeight(list);
|
||||
if(tmp) {
|
||||
taskIds.push(tmp.taskId);
|
||||
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 {dic: tmp} = getRandomWithWeight(list);
|
||||
if(tmp) {
|
||||
taskIds.push(tmp.taskId);
|
||||
}
|
||||
}
|
||||
const curTasks = await TowerTaskRecModel.createTasks(roleId, roleName, batchCode, taskIds, refreshStatus);
|
||||
if(refreshStatus == 1) {
|
||||
returnTasks = curTasks;
|
||||
}
|
||||
}
|
||||
|
||||
const curTasks = await TowerTaskRecModel.createTasks(roleId, roleName, taskIds);
|
||||
return curTasks
|
||||
return returnTasks;
|
||||
}
|
||||
|
||||
export function getRemainTime(curTime: Date) {
|
||||
@@ -284,18 +294,39 @@ export function getRemainTime(curTime: Date) {
|
||||
export function treatTask(recs: Array<any>, curTime: Date) {
|
||||
return recs.map(cur => {
|
||||
let { heroes, batchCode, taskId, taskCode, status, completeTime} = cur;
|
||||
let remainTime = 0;
|
||||
if(status == 1) {
|
||||
// console.log(curTime.getTime(), completeTime.getTime())
|
||||
remainTime = Math.floor((completeTime.getTime() - curTime.getTime())/1000);
|
||||
if(remainTime < 0) {
|
||||
status = 2; remainTime = 0;
|
||||
}
|
||||
}
|
||||
return { heroes, batchCode, taskId, taskCode, status, completeTime, remainTime }
|
||||
|
||||
let getStatusResult = getTaskStatus(status, completeTime, curTime);
|
||||
return { heroes, batchCode, taskId, taskCode, completeTime, ...getStatusResult }
|
||||
});
|
||||
}
|
||||
|
||||
// 刷新任务,正在进行中的部分保留,没有进行中的刷掉
|
||||
export function getDoingOrWaitingTasks (taskList: Array<any>, curTime: Date) {
|
||||
let doingTaskCode = new Array<string>(), waitingTaskCode = new Array<string>();
|
||||
for(let task of taskList) {
|
||||
let {status} = getTaskStatus(task.status, task.completeTime, curTime);
|
||||
if(status == 1||status == 2) {
|
||||
doingTaskCode.push(task.taskCode);
|
||||
} else if(status == 0|| status == 3) {
|
||||
waitingTaskCode.push(task.taskCode);
|
||||
}
|
||||
}
|
||||
return {doingTaskCode, waitingTaskCode}
|
||||
}
|
||||
|
||||
export function getTaskStatus(status: number, completeTime: Date, curTime: Date) {
|
||||
let remainTime = 0;
|
||||
if(status == 1) {
|
||||
// console.log(curTime.getTime(), completeTime.getTime())
|
||||
remainTime = Math.floor((completeTime.getTime() - curTime.getTime())/1000);
|
||||
if(remainTime < 0) {
|
||||
status = 2; remainTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return {status, remainTime}
|
||||
}
|
||||
|
||||
export async function getTasksReward(roleId: string, curTime: Date) {
|
||||
let oldTasks = await TowerTaskRecModel.getCurTasks(roleId);
|
||||
let goods = [];
|
||||
|
||||
Reference in New Issue
Block a user