pvp:赛季奖励

This commit is contained in:
luying
2022-07-04 19:16:23 +08:00
parent 65d68d7db4
commit d307aa96f3
3 changed files with 53 additions and 21 deletions

View File

@@ -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 { dicPvpOpponent, DicPvpOpponent } from "../pubUtils/dictionary/DicPvpOpponent";
import { getRandSingleIndex, genCode, shouldRefresh, getChineseName, makeRobotId, robotIdComBack, getRandSingleEelm } from '../pubUtils/util'; import { getRandSingleIndex, genCode, shouldRefresh, getChineseName, makeRobotId, robotIdComBack, getRandSingleEelm } from '../pubUtils/util';
import { pvpEndParamInter, RewardInter } from '../pubUtils/interface'; import { pvpEndParamInter, RewardInter } from '../pubUtils/interface';
import { gameData, getPLvByScore, getPvpHeroRewardsByScore, getPvpRankRewardsByRank, getPvpDifficultByScore, getPlvAndScore, getPvpBoxsBySeasonNum } from "../pubUtils/data"; import { gameData, getPLvByScore, getPvpHeroRewardsByScore, getPvpRankRewardsByRank, getPvpDifficultByScore, getPlvAndScore, getPvpBoxsBySeasonNum, getPvpRankMaxRewardsBySeasonNum } from "../pubUtils/data";
import { PVP } from '../pubUtils/dicParam'; import { PVP } from '../pubUtils/dicParam';
import { PVPConfigModel, PVPConfigType } from '../db/SystemConfig' import { PVPConfigModel, PVPConfigType } from '../db/SystemConfig'
import { nowSeconds, getTimeFun } from '../pubUtils/timeUtil'; import { nowSeconds, getTimeFun } from '../pubUtils/timeUtil';
@@ -523,11 +523,13 @@ export async function generPVPOppRecInfo(isSuccess: boolean, curOpp: OppPlayer,
let pvpConfig = await PVPConfigModel.findPVPConfig(seasonNum); let pvpConfig = await PVPConfigModel.findPVPConfig(seasonNum);
if(pvpConfig.hasSettleReward) return; if(pvpConfig.hasSettleReward) return;
console.log('exce pvpSeasonEnd' + pvpConfig.seasonNum); console.log('exce pvpSeasonEnd ' + pvpConfig.seasonNum);
let resultMaxRank = gameData.pvpRankMax.max;//根据排行榜的奖励表获得最大排名挡位的最小值其余不在结算中结算的玩家按照最大排名挡位在登录或进入pvp时结算 let resultMaxRank = getPvpRankMaxRewardsBySeasonNum(pvpConfig.seasonNum);//根据排行榜的奖励表获得最大排名挡位的最小值其余不在结算中结算的玩家按照最大排名挡位在登录或进入pvp时结算
if(!resultMaxRank) return;
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum: pvpConfig.seasonNum }, false, resultMaxRank.min - 1); let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum: pvpConfig.seasonNum }, false, resultMaxRank.min - 1);
let allRank = <RoleRankInfo[]>(await r.getRankByRange()); let allRank = <RoleRankInfo[]>(await r.getRankByRange());
// console.log('******** allRank', 0, resultMaxRank.min - 2, allRank) console.log('******** allRank', 0, resultMaxRank.min - 2, allRank)
for(let { rank, roleId } of allRank) { for(let { rank, roleId } of allRank) {
console.log('******** pvpSeasonEnd: ', rank, roleId); console.log('******** pvpSeasonEnd: ', rank, roleId);
let pvpDefense = await PvpDefenseModel.findByRoleId(roleId); let pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
@@ -611,7 +613,7 @@ export async function savePvpSeasonResult(pvpDefense: PvpDefenseType, seasonNum:
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum }); let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum });
rankLv = await r.getMyRank({ roleId: pvpDefense.roleId });// 获得排行榜排名 rankLv = await r.getMyRank({ roleId: pvpDefense.roleId });// 获得排行榜排名
} }
let pvpRankReward: DicRankRewads = getPvpRankRewardsByRank(rankLv); let pvpRankReward: DicRankRewads = getPvpRankRewardsByRank(seasonNum, rankLv);
let rankGoods: RewardInter[] = []; let rankGoods: RewardInter[] = [];
if (pvpRankReward) { if (pvpRankReward) {
rankGoods = pvpRankReward.reward;//排名奖励 rankGoods = pvpRankReward.reward;//排名奖励

View File

@@ -30,7 +30,7 @@ import { dicPvpOpponent, loadPvpOpponent } from './dictionary/DicPvpOpponent';
import { dicPvpTeamLevel, loadPvpTeamLevel } from './dictionary/DicPvpTeamLevel'; import { dicPvpTeamLevel, loadPvpTeamLevel } from './dictionary/DicPvpTeamLevel';
import { dicPvpRefreshConsume, maxPvpRefreshCnt, loadPvpRefreshConsume } from './dictionary/DicPvpRefreshConsume'; import { dicPvpRefreshConsume, maxPvpRefreshCnt, loadPvpRefreshConsume } from './dictionary/DicPvpRefreshConsume';
import { dicHeroRewads, loadPvpHeroReward } from './dictionary/DicPvpHeroReward'; import { dicHeroRewads, loadPvpHeroReward } from './dictionary/DicPvpHeroReward';
import { dicRankRewads, dicRankMax, loadPvpRankReward } from './dictionary/DicPvpRankReward'; import { dicRankRewads, dicRankMax, loadPvpRankReward, DicRankRewads } from './dictionary/DicPvpRankReward';
import { DicPvpBox, dicPvpBoxesBySeasonNum, dicPvpBoxs, loadPvpBox } from './dictionary/DicPvpBox'; import { DicPvpBox, dicPvpBoxesBySeasonNum, dicPvpBoxs, loadPvpBox } from './dictionary/DicPvpBox';
import { dicGuildAuth, loadGuildAuth } from './dictionary/DicGuildAuth'; import { dicGuildAuth, loadGuildAuth } from './dictionary/DicGuildAuth';
import { dicCenterBase, dicEquipPriduceBase, dicBossBase, dicTrainBase, dicDonateBase, dicWishPoolBase, dicStoreBase, dicStructureConsume, dicBossBaseByBossLv, loadStructure } from "./dictionary/DicStructure"; import { dicCenterBase, dicEquipPriduceBase, dicBossBase, dicTrainBase, dicDonateBase, dicWishPoolBase, dicStoreBase, dicStructureConsume, dicBossBaseByBossLv, loadStructure } from "./dictionary/DicStructure";
@@ -468,14 +468,44 @@ function getMaxPvpHeroRewards() {
}, gameData.pvpHeroRewards[0]) }, gameData.pvpHeroRewards[0])
} }
export function getPvpRankRewardsByRank(rankLv: number) {
function getPvpRankRewardsBySeasonNum(seasonNum: number) {
if(gameData.pvpRankRewards.has(seasonNum)) {
return gameData.pvpRankRewards.get(seasonNum);
} else {
let result: DicRankRewads[] = [];
for(let [_seasonNum, ranks] of gameData.pvpRankRewards) {
result = ranks;
if(_seasonNum >= seasonNum) break;
}
return result
}
}
export function getPvpRankMaxRewardsBySeasonNum(seasonNum: number) {
if(gameData.pvpRankMax.has(seasonNum)) {
return gameData.pvpRankMax.get(seasonNum);
} else {
let result: DicRankRewads = undefined;
for(let [_seasonNum, max] of gameData.pvpRankMax) {
result = max;
if(_seasonNum >= seasonNum) break;
}
return result
}
}
export function getPvpRankRewardsByRank(seasonNum: number, rankLv: number) {
if(rankLv == 0) return null if(rankLv == 0) return null
for (let item of gameData.pvpRankRewards) { let ranks = getPvpRankRewardsBySeasonNum(seasonNum)??[];
for (let item of ranks) {
if ((item.max >= rankLv || item.max == -1) && rankLv >= item.min) { if ((item.max >= rankLv || item.max == -1) && rankLv >= item.min) {
return item; return item;
} }
} }
return gameData.pvpRankMax.max; return getPvpRankMaxRewardsBySeasonNum(seasonNum);
} }
function getPvpBoxKeysBySeasonNum(seasonNum: number) { function getPvpBoxKeysBySeasonNum(seasonNum: number) {
@@ -507,10 +537,6 @@ export function getPvpBoxsBySeasonNum(seasonNum: number) {
return result; return result;
} }
export function getResultMaxRank() {
return gameData.pvpRankMax.max;
}
export function getStructureConsume(structureId: number, level: number) { export function getStructureConsume(structureId: number, level: number) {
return gameData.structureConsume.get(structureId).get(level); return gameData.structureConsume.get(structureId).get(level);
} }
@@ -659,7 +685,6 @@ export function getAuctionRewardByPoolId(poolId: number) {
* @param rank 成员在军团内部排名 * @param rank 成员在军团内部排名
*/ */
export function getCityActivityRewards(type: number, guildRank: number, rank: number) { export function getCityActivityRewards(type: number, guildRank: number, rank: number) {
console.log('######## getCityActivityRewards', type, guildRank, rank);
let ranksReward = gameData.cityActivityReward.get(type) || []; let ranksReward = gameData.cityActivityReward.get(type) || [];
let dic = ranksReward.find(cur => { let dic = ranksReward.find(cur => {
return cur.guildRank == guildRank && (rank >= cur.min && (rank <= cur.max || cur.max == 0)); return cur.guildRank == guildRank && (rank >= cur.min && (rank <= cur.max || cur.max == 0));

View File

@@ -4,6 +4,7 @@ import { RewardInter } from '../interface';
export interface DicRankRewads { export interface DicRankRewads {
readonly id: number; readonly id: number;
readonly seasonNum: number;
readonly min: number; readonly min: number;
readonly max: number; readonly max: number;
readonly reward: Array<RewardInter>; readonly reward: Array<RewardInter>;
@@ -11,20 +12,24 @@ export interface DicRankRewads {
} }
export const dicRankRewads = new Array<DicRankRewads>(); export const dicRankRewads = new Map<number, DicRankRewads[]>();
export const dicRankMax: { max: DicRankRewads } = { max: undefined }; export const dicRankMax = new Map<number, DicRankRewads>();
export function loadPvpRankReward() { export function loadPvpRankReward() {
dicRankRewads.splice(0, dicRankRewads.length); dicRankRewads.clear();
dicRankMax.max = undefined; dicRankMax.clear();
let arr = readFileAndParse(FILENAME.DIC_PVP_RANK_REWARD); let arr = readFileAndParse(FILENAME.DIC_PVP_RANK_REWARD);
arr.forEach(o => { arr.forEach(o => {
o.reward = parseGoodStr(o.reward); o.reward = parseGoodStr(o.reward);
if (!dicRankMax.max || o.min > dicRankMax.max.min) { if(!dicRankRewads.has(o.seasonNum)) {
dicRankMax.max = o; dicRankRewads.set(o.seasonNum, []);
}
dicRankRewads.get(o.seasonNum).push(o);
if (!dicRankMax.has(o.seasonNum) || o.min > dicRankMax.get(o.seasonNum).min) {
dicRankMax.set(o.seasonNum, o);
} }
dicRankRewads.push(o);
}); });
arr = undefined; arr = undefined;
} }