pvp:巅峰之路修改
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
|
||||
import { Application, BackendSession, pinus, HandlerService, } from 'pinus';
|
||||
import { uniq, findWhere, findIndex } from 'underscore';
|
||||
import { gameData, getPvpBoxs, getPLvByScore } from '../../../pubUtils/data';
|
||||
import { gameData, getPvpBoxBySeasonNumAndIndex } from '../../../pubUtils/data';
|
||||
import { refreshEnemies, getEnemies, getLvByScore, comsumeChallengeCnt, refChallengeCnt, generPVPOppRecInfo, generMyRecInfo, sendLastSeasonRewardIfNotSent, refreshRefOppCnt, generPvpLineupCe } from '../../../services/pvpService';
|
||||
import { RoleModel, RoleType } from '../../../db/Role';
|
||||
import { STATUS } from '../../../consts/statusCode';
|
||||
@@ -517,11 +517,13 @@ export class PvpHandler {
|
||||
let serverId = session.get('serverId');
|
||||
let roleName = session.get('roleName');
|
||||
|
||||
let seasonNum: number = this.app.get('pvpSeasonNum');
|
||||
let seasonEndTime: number = this.app.get('pvpSeasonEndTime');
|
||||
let { hisScore, receivedBox, challengeCnt: lastChallengeCnt, challengeRefTime: lastChallengeRefTime } = await PvpDefenseModel.findByRoleIdIncludeAll(roleId);
|
||||
let pvpBoxs = getPvpBoxs();
|
||||
let pvpBox = findWhere(pvpBoxs, { id });
|
||||
if (hisScore < pvpBox.score) {
|
||||
let { seasonWinNum, receivedBox, challengeCnt: lastChallengeCnt, challengeRefTime: lastChallengeRefTime } = await PvpDefenseModel.findByRoleIdIncludeAll(roleId);
|
||||
let dicPvpBox = getPvpBoxBySeasonNumAndIndex(seasonNum, id);
|
||||
if(!dicPvpBox) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
if (seasonWinNum < dicPvpBox.winTimes) {
|
||||
return resResult(STATUS.PVP_NOT_REACH_BOX_SCORE);
|
||||
}
|
||||
if (receivedBox.indexOf(id) != -1) {
|
||||
@@ -530,7 +532,7 @@ export class PvpHandler {
|
||||
receivedBox.push(id);
|
||||
let { challengeCnt, challengeRefTime } = await refChallengeCnt(lastChallengeCnt, lastChallengeRefTime, seasonEndTime, roleId, session.get('vipStartTime'));
|
||||
await PvpDefenseModel.updateInfo(roleId, { receivedBox, challengeCnt, challengeRefTime });
|
||||
let result = await addItems(roleId, roleName, sid, pvpBox.reward, ITEM_CHANGE_REASON.PVP_BOX_REWARD);
|
||||
let result = await addItems(roleId, roleName, sid, dicPvpBox.reward, ITEM_CHANGE_REASON.PVP_BOX_REWARD);
|
||||
// 任务
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_RECEIVE_BOX);
|
||||
return resResult(STATUS.SUCCESS, { goods: result, receivedBox, challengeCnt, challengeRefTime });
|
||||
|
||||
@@ -6,7 +6,7 @@ import { PVP_HERO_POS, REDIS_KEY, PVP_CONST, COUNTER, TASK_TYPE, MAIL_TYPE, TA_E
|
||||
import { dicPvpOpponent, DicPvpOpponent } from "../pubUtils/dictionary/DicPvpOpponent";
|
||||
import { getRandSingleIndex, genCode, shouldRefresh, getChineseName, makeRobotId, robotIdComBack, getRandSingleEelm } from '../pubUtils/util';
|
||||
import { pvpEndParamInter, RewardInter } from '../pubUtils/interface';
|
||||
import { gameData, getPLvByScore, getPvpHeroRewardsByScore, getPvpRankRewardsByRank, getPvpDifficultByScore, getPlvAndScore } from "../pubUtils/data";
|
||||
import { gameData, getPLvByScore, getPvpHeroRewardsByScore, getPvpRankRewardsByRank, getPvpDifficultByScore, getPlvAndScore, getPvpBoxsBySeasonNum } from "../pubUtils/data";
|
||||
import { PVP } from '../pubUtils/dicParam';
|
||||
import { PVPConfigModel, PVPConfigType } from '../db/SystemConfig'
|
||||
import { nowSeconds, getTimeFun } from '../pubUtils/timeUtil';
|
||||
@@ -387,10 +387,11 @@ export function getRobotAttribute(hid: number, posRatio: number, score: number)
|
||||
|
||||
// 获取我方战报记录
|
||||
export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType, isSuccess: boolean, pos: number, myHeroes: pvpEndParamInter[]) {
|
||||
let { attack, defense, heroScores, winStreakNum, hisWinStreakNum = 0, score, hisScore } = pvpDefense;
|
||||
let { attack, defense, heroScores, winStreakNum, hisWinStreakNum = 0, score, hisScore, seasonWinNum } = pvpDefense;
|
||||
let { roleId } = role;
|
||||
if (isSuccess) {
|
||||
winStreakNum ++;
|
||||
seasonWinNum ++;
|
||||
} else {
|
||||
winStreakNum = 0;
|
||||
}
|
||||
@@ -440,7 +441,7 @@ export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType,
|
||||
let newDefense = <Defense>calLineupScore(defense, heroScores);
|
||||
|
||||
let updateParam = {
|
||||
winStreakNum, hisWinStreakNum, attack: newAttack, defense: newDefense, heroScores, score: score + addSumScore, hisScore: hisScore > score + addSumScore? hisScore: score + addSumScore
|
||||
winStreakNum, hisWinStreakNum, attack: newAttack, defense: newDefense, heroScores, score: score + addSumScore, hisScore: hisScore > score + addSumScore? hisScore: score + addSumScore, seasonWinNum
|
||||
}
|
||||
|
||||
return { attackInfo, showHeroScores, updateParam }
|
||||
@@ -542,25 +543,43 @@ export async function generPVPOppRecInfo(isSuccess: boolean, curOpp: OppPlayer,
|
||||
export async function sendPVPRewardToUser(pvpDefense: PvpDefenseType, seasonNum: number, seasonEndTime: number) {
|
||||
//检查并返回排名结算以及武将功勋结算
|
||||
let pvpSeasonResult = await savePvpSeasonResult(pvpDefense, seasonNum, seasonEndTime);
|
||||
let { rankGoods, heroGoods, rankLv } = pvpSeasonResult;
|
||||
let { rankGoods, heroGoods, rankLv, seasonWinNum, receivedBox } = pvpSeasonResult;
|
||||
//下发邮件
|
||||
if (!!rankGoods.length) //排名奖励
|
||||
if (rankGoods.length > 0) //排名奖励
|
||||
await sendMailByContent(MAIL_TYPE.PVP_RANK_REWARD, pvpDefense.roleId, {
|
||||
params: [JSON.stringify(seasonNum), (rankLv > 1000 ? '999+' : JSON.stringify(rankLv))],
|
||||
goods: rankGoods
|
||||
});
|
||||
if (!!heroGoods.length) //武将功勋奖励
|
||||
if (heroGoods.length > 0) //武将功勋奖励
|
||||
await sendMailByContent(MAIL_TYPE.PVP_RESULT, pvpDefense.roleId, {
|
||||
params: [JSON.stringify(seasonNum)],
|
||||
goods: heroGoods
|
||||
});
|
||||
|
||||
if(receivedBox.length > 0)
|
||||
await sendUnreceivedPvpBox(pvpDefense.roleId, seasonNum, seasonWinNum, receivedBox);
|
||||
|
||||
return {
|
||||
pvpSeasonResult,
|
||||
pvpDefense: await resetPvpScores(pvpDefense, seasonNum + 1, pvpSeasonResult)
|
||||
}
|
||||
}
|
||||
|
||||
async function sendUnreceivedPvpBox(roleId: string, seasonNum: number, seasonWinNum: number, receivedBox: number[]) {
|
||||
let rewards: RewardInter[] = [];
|
||||
let pvpBoxes = getPvpBoxsBySeasonNum(seasonNum);
|
||||
for(let { index, winTimes, reward } of pvpBoxes) {
|
||||
if(seasonWinNum >= winTimes && receivedBox.indexOf(index) == -1) {
|
||||
rewards.push(...reward);
|
||||
}
|
||||
}
|
||||
if(rewards.length > 0) {
|
||||
await sendMailByContent(MAIL_TYPE.PVP_BOX, roleId, {
|
||||
goods: rewards
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function resetPvpScores(pvpDefense: PvpDefenseType, seasonNum: number, pvpSeasonResult: PvpSeasonResultType) {
|
||||
let { roleId, attack, defense } = pvpDefense;
|
||||
let { newHeroScores, newScore } = pvpSeasonResult;
|
||||
@@ -571,7 +590,8 @@ async function resetPvpScores(pvpDefense: PvpDefenseType, seasonNum: number, pvp
|
||||
|
||||
pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, {
|
||||
heroScores: newHeroScores, score: newScore, attack: newAttack, defense: newDefense,
|
||||
seasonNum, challengeCnt: initCount, challengeRefTime: 0, winStreakNum: 0, isFirstEntry: true
|
||||
seasonNum, challengeCnt: initCount, challengeRefTime: 0, winStreakNum: 0, isFirstEntry: true,
|
||||
seasonWinNum: 0, receivedBox: []
|
||||
});
|
||||
return pvpDefense;
|
||||
}
|
||||
|
||||
@@ -632,9 +632,9 @@ export async function stopMaintenance(batchCode: string, serverIds: number[]) {
|
||||
export async function initAutoCreateServer(region?: RegionType) {
|
||||
if(!region) region = await RegionModel.findRegionByEnv(pinus.app.get('env'));
|
||||
if(region && region.stategy && region.stategy.isOpen) {
|
||||
for(let timer of region.stategy.timers) {
|
||||
setStategyTimer(timer, region)
|
||||
}
|
||||
for(let timer of region.stategy.timers) {
|
||||
setStategyTimer(timer, region)
|
||||
}
|
||||
} else {
|
||||
if(scheduledJobs[`autoServer${SERVER_TIMER.FIVE_HALF}`]) scheduledJobs[`autoServer${SERVER_TIMER.FIVE_HALF}`].cancel();
|
||||
if(scheduledJobs[`autoServer${SERVER_TIMER.TEN_HALF}`]) scheduledJobs[`autoServer${SERVER_TIMER.FIVE_HALF}`].cancel();
|
||||
|
||||
Reference in New Issue
Block a user