天梯派遣刷新逻辑
This commit is contained in:
@@ -145,8 +145,10 @@ export const HANG_UP_CONSTS = {
|
||||
|
||||
export const TOWER_TASK_CONST = {
|
||||
REFRESH_TIME: 5,
|
||||
RAND_CNT: 5,
|
||||
MAX_HEROES_NUM: 3
|
||||
RAND_CNT: 8,
|
||||
MAX_TASK_REF_CNT: 8, // 完成的派遣人数最多
|
||||
MAX_HEROES_NUM: 3,
|
||||
COST_GOLD: 50
|
||||
}
|
||||
|
||||
export const DAILY_CONST = {
|
||||
|
||||
@@ -68,6 +68,7 @@ export const STATUS = {
|
||||
TOWER_GOLD_NOT_ENOUGH: { code: 20516, simStr: '元宝不足' },
|
||||
TOWER_TASK_MISSING: { code: 20517, simStr: '未找到该任务' },
|
||||
TOWER_HANG_UP_NOT_START: { code: 20518, simStr: '挂机尚未开启' },
|
||||
TOWER_REF_CNT_NOT_ENOUGH: { code: 20518, simStr: '派遣次数不足' },
|
||||
// 共斗 20600 - 20699
|
||||
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
|
||||
// 养成相关状态 30000 - 39999
|
||||
|
||||
+8
-9
@@ -110,7 +110,7 @@ export default class Role extends BaseModel {
|
||||
lastSpdUpTime: Date; // 最后一次挂机加速时间
|
||||
|
||||
@prop({ required: true, default: 0})
|
||||
towerTaskReCnt: number; // 刷新派遣任务的次数,向上累加,消耗元宝和这个相关
|
||||
towerTaskCnt: number; // 刷新派遣任务的次数,向上累加,每天8个
|
||||
@prop({ required: true, default: new Date()})
|
||||
towerTaskRefTime: Date; // 刷新派遣任务的时间
|
||||
|
||||
@@ -251,15 +251,14 @@ export default class Role extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
// 重置派遣次数
|
||||
public static async resetTowerCnt(roleId: string, curTime: Date, lean = true) {
|
||||
const role = await RoleModel.findOneAndUpdate({roleId}, {towerTaskCnt: 0, towerTaskRefTime: curTime}, {new: true}).lean(lean);
|
||||
return role;
|
||||
}
|
||||
// 刷新派遣任务次数增长
|
||||
public static async increaseTowerRefCnt(roleId: string, needRefresh: boolean, curTime: Date, lean = true) {
|
||||
|
||||
let role = null;
|
||||
if (needRefresh) {
|
||||
role = await RoleModel.findOneAndUpdate({roleId}, {towerTaskReCnt: 1, towerTaskRefTime: curTime}, {new: true}).lean(lean);
|
||||
} else {
|
||||
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerTaskReCnt: 1}}, {new: true}).lean(lean);
|
||||
}
|
||||
public static async increaseTowerCnt(roleId: string, num: number, lean = true) {
|
||||
const role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerTaskCnt: num}}, {new: true}).lean(lean);
|
||||
return role;
|
||||
}
|
||||
|
||||
|
||||
+19
-25
@@ -31,7 +31,7 @@ export default class TowerTaskRec extends BaseModel {
|
||||
@prop({ required: true, default: 0})
|
||||
status: number; // 派遣任务当前状态,0-可派遣,1-已派遣,2-已完成,3-已领取
|
||||
@prop({ required: true, default: 1})
|
||||
refreshStatus: number; // 派遣任务是否显示 0-不显示,被刷新掉了 1-显示
|
||||
refreshStatus: number; // 派遣任务是否显示 -1-刷掉 0-隐藏 1-显示
|
||||
@prop({ required: true, type: Number, default: [] })
|
||||
heroes: Array<number>; // 此批派遣使用的全部武将
|
||||
|
||||
@@ -45,18 +45,15 @@ export default class TowerTaskRec extends BaseModel {
|
||||
completeTime: Date; // 派遣结束时间
|
||||
|
||||
public static async getCurTasks(roleId: string, lean = true) {
|
||||
let curTime = new Date();
|
||||
const refTime = getRefTime(curTime, TOWER_TASK_CONST.REFRESH_TIME);
|
||||
const recs = await TowerTaskRecModel.find({roleId, createdAt: {$gte: refTime}, refreshStatus: 1}).sort({createdAt: 1}).lean(lean);
|
||||
const recs = await TowerTaskRecModel.find({roleId, refreshStatus: 1}).sort({createdAt: 1}).lean(lean);
|
||||
return recs;
|
||||
}
|
||||
|
||||
public static async createTasks(roleId: string, roleName: string, taskIds: Array<number>/*, lean = true*/) {
|
||||
const batchCode = genCodeTmp(8);
|
||||
public static async createTasks(roleId: string, roleName: string, batchCode: string, taskIds: Array<number>, refreshStatus: number) {
|
||||
const tasksData = taskIds.map(id => {
|
||||
const taskModel = new TowerTaskRecModel();
|
||||
const taskCode = genCodeTmp(6);
|
||||
const taskData = Object.assign(taskModel.toJSON(), {batchCode, taskId: id, taskCode, roleId, roleName});
|
||||
const taskData = Object.assign(taskModel.toJSON(), {batchCode, taskId: id, taskCode, roleId, roleName, refreshStatus});
|
||||
return taskData;
|
||||
});
|
||||
const recs = await TowerTaskRecModel.insertMany(tasksData, {ordered: false});
|
||||
@@ -70,11 +67,9 @@ export default class TowerTaskRec extends BaseModel {
|
||||
|
||||
public static async sendHeroes(_roleId: string, batchCode: string, tasks: Array<{taskCode:string, heroes: Array<number>, completeTime: number}>, sendTime: Date, lean = true) {
|
||||
let recs = new Array();
|
||||
let curTime = new Date();
|
||||
const refTime = getRefTime(curTime, TOWER_TASK_CONST.REFRESH_TIME);
|
||||
for (let {taskCode, heroes, completeTime} of tasks) {
|
||||
const rec = await TowerTaskRecModel.findOneAndUpdate(
|
||||
{batchCode, taskCode: taskCode, createdAt: {$gte: refTime}},
|
||||
{batchCode, taskCode: taskCode, refreshStatus: 1},
|
||||
{heroes: heroes, status: 1, sendTime, completeTime: new Date(sendTime.getTime() + completeTime * 1000)},
|
||||
{new: true}).lean(lean);
|
||||
|
||||
@@ -84,25 +79,24 @@ export default class TowerTaskRec extends BaseModel {
|
||||
}
|
||||
|
||||
public static async finishTask(batchCode: string, tasks: Array<string>, lean = true) {
|
||||
let recs = new Array();
|
||||
// const refTime = getRefTime();
|
||||
for (let task of tasks) {
|
||||
const rec = await TowerTaskRecModel.findOneAndUpdate(
|
||||
{batchCode, taskCode: task},
|
||||
{status: 3},
|
||||
{new: true}).lean(lean);
|
||||
|
||||
recs.push(rec);
|
||||
}
|
||||
const recs = await TowerTaskRecModel.updateMany({batchCode, taskCode: {$in:tasks}}, {status: 3, refreshStatus: -1}).lean(lean);
|
||||
return recs;
|
||||
}
|
||||
|
||||
// 刷掉旧任务
|
||||
public static async refreshTask(roleId: string, lean = true) {
|
||||
let curTime = new Date();
|
||||
const refTime = getRefTime(curTime, TOWER_TASK_CONST.REFRESH_TIME);
|
||||
// 将隐藏的任务显示出来 0=>1
|
||||
public static async showTask(roleId: string, bactchCode: string, num: number, lean = true) {
|
||||
const recs = await TowerTaskRecModel.updateMany({roleId, refreshStatus: 0}, {bactchCode, refreshStatus: 1}).sort({createdAt: 1}).limit(num).lean(lean);
|
||||
return recs;
|
||||
}
|
||||
// 刷掉旧任务 1=>-1
|
||||
public static async hideTask(roleId: string, taskIds: Array<string>, lean = true) {
|
||||
// console.log(refTime)
|
||||
const recs = await TowerTaskRecModel.updateMany({roleId, createdAt: {$gte: refTime}, refreshStatus: 1}, {refreshStatus: 0}, {new: true}).lean(lean);
|
||||
const recs = await TowerTaskRecModel.updateMany({roleId, taskCode: {$in: taskIds}, refreshStatus: 1}, {refreshStatus: -1}).lean(lean);
|
||||
return recs;
|
||||
}
|
||||
|
||||
public static async updateBatchCode(roleId: string, taskIds: Array<string>, batchCode: string, lean = true) {
|
||||
const recs = await TowerTaskRecModel.updateMany({roleId, taskCode: {$in: taskIds}}, {batchCode}).lean(lean);
|
||||
return recs;
|
||||
}
|
||||
|
||||
|
||||
@@ -179,9 +179,11 @@ export function deltaDays(preTime: Date, proTime: Date): number {
|
||||
* @param deltaDay 间隔几天刷新,默认每天刷新(deltaDay = 1)
|
||||
*/
|
||||
export function shouldRefresh(preTime: Date, now: Date, hour: number, deltaDay = 1): boolean {
|
||||
if(!preTime) return true;
|
||||
let curTime = new Date(now.getTime());
|
||||
let refeshTime = setLocalHours(hour, curTime);
|
||||
if (refeshTime - preTime.getTime() > deltaDay * 24 * 60 * 60 * 1000 && curTime.getTime() >= refeshTime) {
|
||||
console.log(refeshTime - preTime.getTime())
|
||||
if (refeshTime - preTime.getTime() > (deltaDay>=1?deltaDay-1:0) * 24 * 60 * 60 * 1000 && curTime.getTime() >= refeshTime) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -306,7 +308,7 @@ export function calculateNum(ratio: {A: number, B: number}, params: {num: number
|
||||
export function setLocalHours(hour: number, curTime = new Date()) {
|
||||
// curTime: 格林威治时间
|
||||
let offset = curTime.getTimezoneOffset(); // 格林威治时间和本地时间之间的时差(分)
|
||||
let localTime = new Date(curTime.getTime() - offset * 60 * 1000 + 8 * 60 * 60 * 1000); // 中国时间
|
||||
let localTime = new Date(curTime.getTime() + offset * 60 * 1000 + 8 * 60 * 60 * 1000); // 中国时间
|
||||
localTime.setUTCHours(hour, 0, 0, 0); // 中国的几点
|
||||
return localTime.getTime() + offset * 60 * 1000 - 8 * 60 * 60 * 1000; // 回到格林威治时间
|
||||
return localTime.getTime() - offset * 60 * 1000 - 8 * 60 * 60 * 1000; // 回到格林威治时间
|
||||
}
|
||||
Reference in New Issue
Block a user