pvp结算展示

This commit is contained in:
mamengke01
2021-01-14 14:47:24 +08:00
parent ab20a62531
commit 2fad019a2e
5 changed files with 127 additions and 27 deletions

View File

@@ -1,6 +1,3 @@
/**
* 体力系统
*/
import { scheduleJob, Job } from 'node-schedule';
import { SystemConfigModel } from '../db/SystemConfig';
@@ -17,7 +14,7 @@ import { RoleModel } from '../db/Role';
import { MailModel, MailType } from '../db/Mail';
import { pinus } from 'pinus';
import { indexOf } from 'underscore';
import { JsxEmit } from 'typescript';
import { PvpSeasonResultModel } from '../db/PvpSeasonResult'
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
const SETTLE_DIFF = 29 * 60;
@@ -72,14 +69,14 @@ export async function setPvpDefResultOnTime(pvpDefense: PvpDefenseType, seasonNu
if (!role) {
return;
}
let {score, pLv, heroScores, winStreakNum, challengeCnt, challengeRefTime, goods } = await checkResult(pvpDefense, seasonNum, seasonEndTime);
pvpDefense = await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score:score, pLv, heroScores, winStreakNum, seasonNum, challengeCnt, challengeRefTime, seasonEndTime});
let { score, pLv, heroScores, winStreakNum, challengeCnt, challengeRefTime, goods } = await checkResult(pvpDefense, seasonNum, seasonEndTime);
pvpDefense = await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score, pLv, heroScores, winStreakNum, seasonNum, challengeCnt, challengeRefTime, seasonEndTime, oldSeasonEndTime: pvpDefense.oldSeasonEndTime});
let { roleName, lv, vLv, headHid, sHid, title } = role;
let params = new RankParam(roleName, lv, vLv, headHid, sHid, title);
setRank(REDIS_KEY.PVP_RANK, 0, pvpDefense.roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), params);
//下发邮件
const doc = new MailModel();
const mail = Object.assign(doc.toJSON(), {roleId: pvpDefense.roleId, goods, sendName: '系统', mailId: 1, sendTime: nowSeconds()});
const mail = Object.assign(doc.toJSON(), {roleId: pvpDefense.roleId, goods, sendName: '系统', mailId: 1, sendTime: pvpDefense.seasonEndTime});
addMails.push(mail);
let key = 'login_roleId_' + pvpDefense.roleId;
let sid = await getRedis(key);
@@ -94,6 +91,8 @@ export async function checkResult(pvpDefense: PvpDefenseType, seasonNum: number,
let pvpHeroRewards = getPvpHeroRewards();
let goods = [];
let rankLv = await getMyRank(REDIS_KEY.PVP_RANK, 0, pvpDefense.roleId);// 排行榜排名
let oldPLv = getLvByScore(pvpDefense.heroScores);
let { winStreakNum, challengeCnt, challengeRefTime } = pvpDefense;
let pvpRankReward = getScore(pvpRankRewards, rankLv);
if(pvpRankReward) {
goods = goods.concat(pvpRankReward.reward);
@@ -109,7 +108,11 @@ export async function checkResult(pvpDefense: PvpDefenseType, seasonNum: number,
score += heroScore.score;
}
let pLv = getLvByScore(pvpDefense.heroScores);
return {score, pLv, heroScores: pvpDefense.heroScores, winStreakNum:0, seasonNum, challengeCnt:PVP.PVP_CHALLENGE_COUNTS, challengeRefTime:0, seasonEndTime, goods};
await PvpSeasonResultModel.updatePvpSeasonResult(pvpDefense.roleId, {
oldSeasonData:{refOppCnt: pvpDefense.refOppCnt, rankLv, score: pvpDefense.score, pLv: oldPLv, heroScores: deepCopy(pvpDefense.heroScores), winStreakNum,
seasonNum: pvpDefense.seasonNum, challengeCnt, challengeRefTime, seasonEndTime: pvpDefense.seasonEndTime
}, goods});
return { rankLv, score, pLv, heroScores: pvpDefense.heroScores, winStreakNum:0, seasonNum, challengeCnt:PVP.PVP_CHALLENGE_COUNTS, challengeRefTime:0, seasonEndTime, goods};
}
export async function setPvpDefResult(pvpDefense: PvpDefenseType, seasonNum: number, seasonEndTime:number) {
@@ -118,12 +121,12 @@ export async function setPvpDefResult(pvpDefense: PvpDefenseType, seasonNum: num
return;
}
let {score, pLv, heroScores, winStreakNum, challengeCnt, challengeRefTime, goods } = await checkResult(pvpDefense, seasonNum, seasonEndTime);
pvpDefense = await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score:score, pLv, heroScores, winStreakNum, seasonNum, challengeCnt, challengeRefTime, seasonEndTime});
pvpDefense = await PvpDefenseModel.updateInfo(pvpDefense.roleId, {score, pLv, heroScores, winStreakNum, seasonNum, challengeCnt, challengeRefTime, seasonEndTime, oldSeasonEndTime: pvpDefense.oldSeasonEndTime});
let { roleName, lv, vLv, headHid, sHid, title , roleId } = role;
let params = new RankParam(roleName, lv, vLv, headHid, sHid, title);
setRank(REDIS_KEY.PVP_RANK, 0, pvpDefense.roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), params);
//下发邮件
let sendTime = seasonEndTime - PVP.PVP_SEASON_DAYS * PER_DAY + SETTLE_DIFF;
let sendTime = seasonEndTime - PVP.PVP_SEASON_DAYS * PER_DAY;
let mail = await MailModel.addMail({roleId, goods, sendName: '系统', mailId: 1, sendTime: sendTime});
let key = 'login_roleId_' + roleId;
let sid = await getRedis(key);
@@ -147,18 +150,15 @@ export async function resetPvpWarId() {
}
async function setNextPvpTime(notSetNext: boolean) {
let systemConfig = await SystemConfigModel.findSystemConfig();
let seasonEndTime = (PVP.PVP_SEASON_DAYS + 1) * PER_DAY + getTodayZeroPoint();
if (!notSetNext) {
return { seasonEndTime, seasonNum: systemConfig.seasonNum + 1 };
let {seasonEndTime, seasonNum} = await SystemConfigModel.findSystemConfig();
if (!!notSetNext) {
return { seasonEndTime, seasonNum };
}
seasonEndTimeJobId = scheduleJob(systemConfig.seasonEndTime * PER_SECOND, async function () {
seasonEndTime = PVP.PVP_SEASON_DAYS * PER_DAY + getTodayZeroPoint();
systemConfig = await SystemConfigModel.updateSeason(seasonEndTime);
let settleTime = (seasonEndTime - SETTLE_DIFF)* PER_SECOND;
seasonJobId = scheduleJob(settleTime, setPvpSeasonResult, { name: 'setPvpSeasonResult' });
});
return { seasonEndTime, seasonNum: systemConfig.seasonNum + 1 };
seasonEndTime = (PVP.PVP_SEASON_DAYS) * PER_DAY + seasonEndTime;
await SystemConfigModel.updateSeason(seasonEndTime);
let settleTime = (seasonEndTime - SETTLE_DIFF)* PER_SECOND;
seasonJobId = scheduleJob(settleTime, setPvpSeasonResult, { name: 'setPvpSeasonResult' });
return { seasonEndTime, seasonNum: seasonNum + 1 };
}
function getScore(arr, score) {