pvp:修改等级和军功对应关系
This commit is contained in:
@@ -354,14 +354,14 @@ export class PvpHandler {
|
||||
let seasonEndTime: number = this.app.get('pvpSeasonEndTime');
|
||||
let refChallengeObj = refChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, seasonEndTime);
|
||||
// 更新挑战阵容
|
||||
let score = 0;
|
||||
let scores: number[] = [];
|
||||
for(let { actorId } of heroes) {
|
||||
let heroScore = pvpDefense.heroScores.find(cur => cur.hid == actorId);
|
||||
if(heroScore) {
|
||||
score += heroScore.score;
|
||||
scores.push(heroScore.score);
|
||||
}
|
||||
}
|
||||
let attack = new Attack(heroes, score);
|
||||
let attack = new Attack(heroes, scores);
|
||||
let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, attack.heroes, []);
|
||||
// 刷对手
|
||||
let role = <RoleType>pvpDefense.role;
|
||||
@@ -391,11 +391,11 @@ export class PvpHandler {
|
||||
let seasonEndTime: number = this.app.get('pvpSeasonEndTime');
|
||||
let refChallengeObj = refChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, seasonEndTime);
|
||||
// 更新防守阵容
|
||||
let score = 0, heroIdMap = new Map<number, string>(), hids: number[] = [];
|
||||
let scores: number[] = [], heroIdMap = new Map<number, string>(), hids: number[] = [];
|
||||
for(let { actorId } of heroes) {
|
||||
let heroScore = pvpDefense.heroScores.find(cur => cur.hid == actorId);
|
||||
if(heroScore) {
|
||||
score += heroScore.score;
|
||||
scores.push(heroScore.score);
|
||||
}
|
||||
// 记录hero的objectId,用于存defense.heroes.hero
|
||||
if(pvpDefense.defense && pvpDefense.defense.heroes) {
|
||||
@@ -417,7 +417,7 @@ export class PvpHandler {
|
||||
let defenseHeroes = heroes.map(cur => {
|
||||
return new DefenseHero(cur, heroIdMap.get(cur.actorId));
|
||||
});
|
||||
let defense = new Defense(defenseHeroes, score, warId, buff);
|
||||
let defense = new Defense(defenseHeroes, scores, warId, buff);
|
||||
let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, defense.heroes, dbHeroes);
|
||||
|
||||
pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { ...refChallengeObj, defense, lineupCe });
|
||||
|
||||
@@ -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 } from "../pubUtils/data";
|
||||
import { gameData, getPLvByScore, getPvpHeroRewardsByScore, getPvpRankRewardsByRank, getPvpDifficultByScore, getPlvAndScore } from "../pubUtils/data";
|
||||
import { PVP } from '../pubUtils/dicParam';
|
||||
import { PVPConfigModel, PVPConfigType } from '../db/SystemConfig'
|
||||
import { nowSeconds, getTimeFun } from '../pubUtils/timeUtil';
|
||||
@@ -414,7 +414,6 @@ export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType,
|
||||
|
||||
const dicOpp = gameData.pvpOpponent.get(pos);
|
||||
const plusScore = getPlusScore(winStreakNum);
|
||||
let pLv = getLvByScore(heroScores);
|
||||
|
||||
let myHeroRecords: HeroesRecord[] = []; // 存入rec里面的数据
|
||||
let showHeroScores = new Array<{ hid: number, addScore: number, plusScore: number, score: number }>();
|
||||
@@ -449,7 +448,7 @@ export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType,
|
||||
}
|
||||
|
||||
let attackInfo = new PvpRecordPlayerInfo();
|
||||
attackInfo.setByRole(role, myHeroRecords, isSuccess, isSuccess ? addSumScore : 0, pLv)
|
||||
attackInfo.setByRole(role, myHeroRecords, isSuccess, isSuccess ? addSumScore : 0, attack.pLv);
|
||||
|
||||
let newAttack = <Attack>calLineupScore(attack, heroScores);
|
||||
let newDefense = <Defense>calLineupScore(defense, heroScores);
|
||||
@@ -463,14 +462,14 @@ export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType,
|
||||
|
||||
function calLineupScore(lineup: Attack|Defense, heroScores: HeroScore[]) {
|
||||
if(!lineup) return lineup;
|
||||
let score = 0;
|
||||
let scores: number[] = [];
|
||||
for(let { actorId } of lineup.heroes) {
|
||||
let hs = heroScores.find(cur => cur.hid == actorId);
|
||||
if(hs) {
|
||||
score += hs.score;
|
||||
scores.push(hs.score);
|
||||
}
|
||||
}
|
||||
let pLv = getPLvByScore(score);
|
||||
let { pLv, score } = getPlvAndScore(scores);
|
||||
return {...lineup, score, pLv}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import Hero from '../../db/Hero';
|
||||
import { PvpDefenseType } from '../../db/PvpDefense';
|
||||
import PvpHistoryOpp from '../../db/PvpHistoryOpp';
|
||||
import { PvpSeasonResultType } from '../../db/PvpSeasonResult';
|
||||
import { getPLvByScore } from '../../pubUtils/data';
|
||||
import { getPlvAndScore } from '../../pubUtils/data';
|
||||
import { RewardInter } from '../../pubUtils/interface';
|
||||
|
||||
|
||||
@@ -43,10 +43,12 @@ export class Defense {
|
||||
@prop({ required: true })
|
||||
pLv: number; // 防守阵容的等级
|
||||
|
||||
constructor(heroes: DefenseHero[], score: number, warId: number, buff: number) {
|
||||
constructor(heroes: DefenseHero[], scores: number[], warId: number, buff: number) {
|
||||
this.heroes = heroes;
|
||||
this.score = scores.reduce((pre, cur) => pre + cur, 0);
|
||||
let {pLv, score} = getPlvAndScore(scores);
|
||||
this.pLv = pLv,
|
||||
this.score = score;
|
||||
this.pLv = getPLvByScore(score);
|
||||
this.warId = warId;
|
||||
this.buff = buff;
|
||||
}
|
||||
@@ -69,10 +71,12 @@ export class Attack {
|
||||
@prop({ required: true })
|
||||
pLv: number; // 防守阵容的等级
|
||||
|
||||
constructor(heroes: AttackHero[], score: number) {
|
||||
constructor(heroes: AttackHero[], scores: number[]) {
|
||||
this.heroes = heroes;
|
||||
this.score = scores.reduce((pre, cur) => pre + cur, 0);
|
||||
let {pLv, score} = getPlvAndScore(scores);
|
||||
this.pLv = pLv;
|
||||
this.score = score;
|
||||
this.pLv = getPLvByScore(score);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -461,6 +461,13 @@ export function getPLvByScore(score: number) {
|
||||
return lv;
|
||||
}
|
||||
|
||||
export function getPlvAndScore(scores: number[] = []) {
|
||||
if(scores.length <= 0) scores = [0];
|
||||
let maxScore = Math.max(...scores); // 等级:军功最高者的军功*6
|
||||
let score = scores.reduce((pre, cur) => pre + cur, 0);
|
||||
return { score, pLv: getPLvByScore(maxScore)};
|
||||
}
|
||||
|
||||
export function getPvpHeroRewardsByScore(score: number) {
|
||||
for (let item of gameData.pvpHeroRewards) {
|
||||
if ((item.max >= score || item.max == -1) && score >= item.min) {
|
||||
|
||||
Reference in New Issue
Block a user