pvp:修复赛季相关

This commit is contained in:
luying
2021-11-02 10:16:50 +08:00
parent 15ed1f71fe
commit 4c80a22ccf
15 changed files with 178 additions and 91 deletions

View File

@@ -26,6 +26,7 @@ import { reportOneOnline } from './authenticateService';
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
const PER_HOUR = 1 * 60 * 60;
const SETTLE_DIFF_SECONDS = 29 * 60;
const PER_MINUTE = 1 * 60;
var seasonMakeRewardTimJobId: Job;
@@ -80,9 +81,15 @@ function getSeasonContinueDay(seasonNum: number) {
return maxDay;
}
async function setPvpSeason() {
let pvpConfig = await PVPConfigModel.findCurPVPConfig();
if(!pvpConfig || pvpConfig.seasonEndTime <= nowSeconds() ) {
async function setPvpSeasonJob() {
await setPvpSeason();
}
async function setPvpSeason(isForce?: boolean, hour?: number) {
let during = hour? hour * PER_HOUR: null;
let oldPvpConfig = await PVPConfigModel.findCurPVPConfig();
let pvpConfig = oldPvpConfig;
if(!pvpConfig || pvpConfig.seasonEndTime <= nowSeconds() || isForce) {
if(pvpConfig && !pvpConfig.hasSettleReward) {
await pvpSeasonEnd(pvpConfig);
}
@@ -91,7 +98,7 @@ async function setPvpSeason() {
let lastSeasonEndTime = pvpConfig? pvpConfig.seasonEndTime: 0;
let newSeasonStartTime = lastSeasonEndTime;
let during = getSeasonContinueDay(lastSeasonNum + 1) * PER_DAY;
if(!during) during = getSeasonContinueDay(lastSeasonNum + 1) * PER_DAY;
let rewardTime = SETTLE_DIFF_SECONDS;
if(nowSeconds() - lastSeasonEndTime > during) {
newSeasonStartTime = <number>getTimeFun().getDayZeroPoint(0);
@@ -99,8 +106,19 @@ async function setPvpSeason() {
let newSeasonNum = await CounterModel.getNewCounter(COUNTER.PVP_SEASON_NUM);
pvpConfig = await PVPConfigModel.createPVPConfig(newSeasonNum, newSeasonStartTime, newSeasonStartTime + during - rewardTime, newSeasonStartTime + during - PER_MINUTE);
}
await setPvpSeasonMakeRewardJob(pvpConfig);
await setPvpSeasonMakeRewardJob(oldPvpConfig);
await setNextSeasonJob(pvpConfig);
setPvpSeasonNum(pvpConfig);
return pvpConfig;
}
function setPvpSeasonNum(pvpConfig: PVPConfigType) {
if(pvpConfig) {
pinus.app.set('pvpSeasonNum', pvpConfig.seasonNum);
pinus.app.set('pvpSeasonEndTime', pvpConfig.seasonEndTime);
pinus.app.rpc.battle.battleRemote.setPvpSeasonNum.broadcast(pvpConfig);
pinus.app.rpc.role.roleRemote.setPvpSeasonNum.broadcast(pvpConfig);
}
}
async function setPvpSeasonMakeRewardJob(pvpConfig: PVPConfigType) {
@@ -121,7 +139,7 @@ async function setNextSeasonJob(pvpConfig: PVPConfigType) {
seasonRefreshTimeJobId.cancel();
}
//定时开启新赛季比seasonEndTime多定一分钟保证定时器时间没错
seasonRefreshTimeJobId = scheduleJob('seasonRefreshTimeJobId', pvpConfig.seasonEndTime + PER_MINUTE, setPvpSeason);
seasonRefreshTimeJobId = scheduleJob('seasonRefreshTimeJobId', pvpConfig.seasonEndTime + PER_MINUTE, setPvpSeasonJob);
}
/**
@@ -129,8 +147,7 @@ async function setNextSeasonJob(pvpConfig: PVPConfigType) {
* @param hour
*/
export async function resetPvpSeasonTime(hour: number) {
await PVPConfigModel.setCurPvpConfig({ seasonEndTime: <number>getTimeFun().getDayZeroPoint(0) });
return await setPvpSeason();
return await setPvpSeason(true);
}
export async function reportOnlineSchedule() {