pvp结算保存战报

This commit is contained in:
luying
2021-01-07 21:02:21 +08:00
parent 2470f7582f
commit b8d2f2136b
4 changed files with 173 additions and 63 deletions

View File

@@ -9,12 +9,13 @@ import { SystemConfigModel } from '../../../db/SystemConfig'
import { PvpDefenseModel, PvpDefenseType, OppPlayers } from '../../../db/PvpDefense';
import { oppHeroesDefenseInter, pvpEndParamInter } from '../../../pubUtils/interface';
import { PVP_HERO_POS, ROBOT_NAME } from '../../../consts';
import { HeroType, HeroModel } from '../../../db/Hero';
import { CeAttrNumber } from '../../../db/generalField';
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
import { BattleRecordModel } from '../../../db/BattleRecord';
import { HeroModel, HeroType } from '../../../db/Hero';
import { PVP_HERO_POS, ROBOT_NAME } from '../../../consts';
import { PvpRecordModel, HeroesRecord } from '../../../db/PvpRecord';
export default function(app: Application) {
return new PvpHandler(app);
}
@@ -177,14 +178,13 @@ export class PvpHandler {
return resResult(STATUS.BATTLE_STATUS_WRONG);
}
let flag = 1; // 对比hero信息
let { record: { heroes: dbHeroes, oppRoleId, pos } } = BattleRecord;
let flag = 1; // 对比hero信息
for(let {hid} of myHeroes) {
if(dbHeroes.indexOf(hid) == -1) flag = 0;
}
if(!flag) {
return resResult(STATUS.BATTLE_INFO_VALIDATE_ERR);
}
if(!flag) return resResult(STATUS.BATTLE_INFO_VALIDATE_ERR);
// 更新军功
let pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
@@ -196,8 +196,10 @@ export class PvpHandler {
const dicOpp = gameData.pvpOpponent.get(pos);
let plusScore = getPlusScore(winStreakNum);
let myHeroRecords = new Array<HeroesRecord>();
let showHeroScores = new Array<{hid: number, addScore: number, plusScore: number, score: number}>();
for(let { hid, damage, heal, hurt } of myHeroes) {
let addSumScore = 0;
for(let { hid, damage, heal, underDamage } of myHeroes) {
let curHeroScore = heroScores.find(cur => cur.hid == hid);
if(isSuccess) {
if(!curHeroScore) {
@@ -208,7 +210,7 @@ export class PvpHandler {
} else {
curHeroScore.score += dicOpp.score + plusScore;
}
score += dicOpp.score + plusScore;
addSumScore += dicOpp.score + plusScore;
showHeroScores.push({
hid, addScore: dicOpp.score, plusScore, score: curHeroScore.score
});
@@ -219,7 +221,31 @@ export class PvpHandler {
});
winStreakNum = 0;
}
const myHero = await HeroModel.findByHidAndRole(hid, roleId, 'quality star colorStar lv');
let { quality, star, colorStar, lv} = myHero;
myHeroRecords.push({
hid, quality, star, colorStar, lv, damage, heal, underDamage
});
}
let oppHeroRecords = new Array<HeroesRecord>();
for(let { hid, damage, heal, underDamage } of myHeroes) {
if(curOpp.isRobot) {
let dicHero = gameData.hero.get(hid);
let { quality, initialStars: star } = dicHero;
oppHeroRecords.push({
hid, quality, star, colorStar: 0, lv: 0, damage, heal, underDamage
});
} else {
const myHero = await HeroModel.findByHidAndRole(hid, roleId, 'quality star colorStar lv');
let { quality, star, colorStar, lv} = myHero;
oppHeroRecords.push({
hid, quality, star, colorStar, lv, damage, heal, underDamage
});
}
}
score += addSumScore;
let pLv = getLvByScore(heroScores);
// 刷新对手
@@ -235,7 +261,19 @@ export class PvpHandler {
$set: { status: isSuccess?1:2 }
}, true);
// TODO 记录战报
let oppRole;
if(curOpp.isRobot) {
oppRole = { ...curOpp.robot, title: 1, topFiveCe: curOpp.robot.defCe};
} else {
oppRole = await RoleModel.findByRoleId(oppRoleId);
}
// TODO 战报记录方法抽象
await PvpRecordModel.createRec({roleId1: roleId, roleId2: oppRoleId, warId: BattleRecord.battleId, attackInfo: {
roleId, roleName, lv: role.lv, sHid: role.sHid, headHid: role.headHid, title: role.title, ce: role.topFiveCe, heroes: myHeroRecords, isSuccess, score: isSuccess?addSumScore:0
}, defenseInfo: {
roleId: oppRole.roleId, roleName: oppRole.roleName, lv: oppRole.lv, sHid: oppRole.sHid, headHid: oppRole.headHid, title: oppRole.title, ce: oppRole.topFiveCe, heroes: myHeroRecords, isSuccess: !isSuccess, score: 0
}})
return resResult(STATUS.SUCCESS, {
battleCode, isSuccess,