镇念塔:保底
This commit is contained in:
@@ -5,7 +5,7 @@ import { HANG_UP_CONSTS, TOWER_TASK_CONST, REDIS_KEY, TASK_TYPE, TIME_OUTPUT_TYP
|
||||
import { BattleRecordModel } from './../db/BattleRecord';
|
||||
import { TowerRecordModel } from './../db/TowerRecord';
|
||||
import { RoleModel, RoleType } from './../db/Role';
|
||||
import { shouldRefresh, resResult, cal, getRandEelmWithWeight, calculateNum, genCode } from '../pubUtils/util';
|
||||
import { shouldRefresh, resResult, cal, getRandEelmWithWeight, calculateNum, genCode, getRandEelm } from '../pubUtils/util';
|
||||
import { STATUS } from '../consts/statusCode';
|
||||
import { HangUpSpdUpRecModel } from '../db/HangUpSpdUpRec';
|
||||
import { TowerTaskRecModel, TowerTaskRecType } from '../db/TowerTaskRec';
|
||||
@@ -378,6 +378,8 @@ export async function checkTaskConditions(roleId: string, heroes: number[], cond
|
||||
}
|
||||
|
||||
export async function refreshTasks(towerLv: number, batchCode: string, roleId: string, roleName: string, oldTasks:TowerTaskRecType[]) {
|
||||
let needFloor = !oldTasks || oldTasks.length <= 0; // 首次刷新需要一个保底
|
||||
|
||||
let ridTaskIds: number[] = [];
|
||||
let positions = new Map<number, TowerTaskRecType> (); // 需要创建或更新
|
||||
for(let i = 1; i <= TOWER_TASK_CONST.RAND_CNT; i++) { // TODO 改为系统参数表
|
||||
@@ -394,7 +396,13 @@ export async function refreshTasks(towerLv: number, batchCode: string, roleId: s
|
||||
|
||||
let tasks: TowerTaskRecType[] = [];
|
||||
for(let [ position, task ] of positions) {
|
||||
let taskId = randomTaskId(towerLv, task?task.taskId: 0, ridTaskIds);
|
||||
let dicOldTask = task? gameData.towerTask.get(task.taskId): null;
|
||||
|
||||
let dicTask = randomTask(towerLv, dicOldTask?dicOldTask.quality: 0, ridTaskIds);
|
||||
if(!dicTask) break; // 任务池没有可刷新了
|
||||
|
||||
let { taskId, quality } = dicTask;
|
||||
if(quality == 4 || quality == 5) needFloor = false;
|
||||
if(task) { // 更新
|
||||
tasks.push(await TowerTaskRecModel.updateTask(roleId, batchCode, position, taskId));
|
||||
} else {
|
||||
@@ -402,18 +410,25 @@ export async function refreshTasks(towerLv: number, batchCode: string, roleId: s
|
||||
}
|
||||
ridTaskIds.push(taskId);
|
||||
}
|
||||
|
||||
|
||||
if(needFloor) { // 塞一个保底
|
||||
let dicTask = randomTask(towerLv, 3, ridTaskIds);
|
||||
if(dicTask) {
|
||||
let index = Math.floor(Math.random() * tasks.length);
|
||||
tasks[index] = await TowerTaskRecModel.updateTask(roleId, batchCode, tasks[index].position, dicTask.taskId);
|
||||
}
|
||||
}
|
||||
|
||||
return tasks
|
||||
}
|
||||
|
||||
function randomTaskId(towerLv: number, oldTaskId: number, rids: number[]) {
|
||||
let dicTask = gameData.towerTask;
|
||||
let oldQuality = dicTask.has(oldTaskId)? dicTask.get(oldTaskId).quality: 0;
|
||||
function randomTask(towerLv: number, oldQuality: number, rids: number[]) {
|
||||
let qualityRange = oldQuality + 1;
|
||||
if(qualityRange >=5 ) qualityRange = 5;
|
||||
|
||||
let randomList: DicTowerTask[] = [];
|
||||
while(randomList.length <= 0) { // 如果这个品质范围里面没有,就降一品质再找
|
||||
for (let [_id, task] of dicTask) {
|
||||
for (let [_id, task] of gameData.towerTask) {
|
||||
if(task.quality >= qualityRange && !rids.includes(task.taskId)) {
|
||||
let { suitFloor: { min, max } } = task;
|
||||
let flag = max ? (towerLv >= min && towerLv <= max) : (towerLv >= min);
|
||||
@@ -423,12 +438,12 @@ function randomTaskId(towerLv: number, oldTaskId: number, rids: number[]) {
|
||||
}
|
||||
}
|
||||
if(randomList.length <= 0) qualityRange--;
|
||||
if(qualityRange == 0) return 0;
|
||||
if(qualityRange == 0) return null;
|
||||
}
|
||||
|
||||
let { dic } = getRandEelmWithWeight(randomList);
|
||||
|
||||
return dic.taskId;
|
||||
return dic;
|
||||
}
|
||||
|
||||
// /**
|
||||
|
||||
@@ -73,7 +73,7 @@ export default class TowerTaskRec extends BaseModel {
|
||||
}
|
||||
|
||||
public static async updateTask(roleId: string, batchCode: string, position: number, taskId: number) {
|
||||
const recs: TowerTaskRecType = await TowerTaskRecModel.findOneAndUpdate({ roleId, batchCode, position, status: TOWER_TASK_STATUS.WAITING }, { $set: { taskId } }).lean();
|
||||
const recs: TowerTaskRecType = await TowerTaskRecModel.findOneAndUpdate({ roleId, batchCode, position, status: TOWER_TASK_STATUS.WAITING }, { $set: { taskId } }, { new: true }).lean();
|
||||
return recs;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user