fix pvp刷新对手时保存数据

This commit is contained in:
luying
2021-01-14 15:57:05 +08:00
parent f3c76b8d6d
commit 5823a1b3eb
11 changed files with 372 additions and 221 deletions

View File

@@ -1,26 +1,27 @@
import {Application, BackendSession, pinus} from 'pinus';
import { uniq, findWhere, findIndex } from 'underscore';
import { gameData, getPvpBoxs } from '../../../pubUtils/data';
import { refreshEnemies, getEnemies, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, checkRoleIsRobot, getRefOppCnt, findPvpDefAllByRoleId, generPVPOppRecInfo, generMyRecInfo, getRobotLineup, getPlayerLineup } from '../../../services/pvpService';
import { refreshEnemies, getEnemies, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, checkRoleIsRobot, getRefOppCnt, findPvpDefAllByRoleId, generPVPOppRecInfo, generMyRecInfo } from '../../../services/pvpService';
import { RoleModel, RoleType } from '../../../db/Role';
import { STATUS } from '../../../consts/statusCode';
import { resResult, genCode } from '../../../pubUtils/util';
import { SystemConfigModel } from '../../../db/SystemConfig'
import { PvpDefenseModel, OppPlayers } from '../../../db/PvpDefense';
import { oppHeroesDefenseInter, pvpEndParamInter, RankParam, PlayerDetail, PlayerDetailHero } from '../../../pubUtils/interface';
import { pvpEndParamInter, RankParam, PlayerDetail, PlayerDetailHero } from '../../../pubUtils/interface';
import { PVP_HERO_POS, REDIS_KEY } from '../../../consts';
import { PVP } from '../../../pubUtils/dicParam';
import { addItems } from '../../../services/rewardService';
import { HeroModel } from '../../../db/Hero';
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
import { BattleRecordModel } from '../../../db/BattleRecord';
import { PvpRecordModel, HeroesRecord } from '../../../db/PvpRecord';
import { PvpRecordModel } from '../../../db/PvpRecord';
import { existsRank, initRank, getRank, setRank, getMyRank } from '../../../services/redisService';
import { handleCost } from '../../../services/rewardService';
import { nowSeconds } from '../../../pubUtils/timeUtil';
import { setPvpSeasonResult, resetPvpWarId, resetPvpSeasonTime } from '../../../services/timeTaskService';
import { PvpSeasonResultModel } from '../../../db/PvpSeasonResult';
import { PvpHistoryOppModel, PvpHistoryOppType } from '../../../db/PvpHistoryOpp';
export default function(app: Application) {
return new PvpHandler(app);
}
@@ -158,22 +159,13 @@ export class PvpHandler {
let oppoRoleId = msg.roleId;
let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId);
let { oppPlayers } = pvpDefense;
let role = <RoleType>pvpDefense.role;
let curOpp = oppPlayers.find(cur => cur.roleId == oppoRoleId);
if(!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND);
let system = await SystemConfigModel.findSystemConfig();
let mapWarJson = gameData.warJson.get(system.warId);
let { oppRoleId, heroes } = <PvpHistoryOppType>curOpp.oppDef;
let heroes = new Array<oppHeroesDefenseInter>();
if(curOpp.isRobot) { // 机器人
heroes = await getRobotLineup(mapWarJson, curOpp, role.topFiveCe, role.lv);
} else { // 真人
heroes = await getPlayerLineup(mapWarJson, curOpp);
}
return resResult(STATUS.SUCCESS, { roleId: oppoRoleId, pos: curOpp.pos, heroes });
return resResult(STATUS.SUCCESS, { roleId: oppRoleId, pos: curOpp.pos, heroes });
}
// 开战
@@ -287,6 +279,9 @@ export class PvpHandler {
await setRank(REDIS_KEY.PVP_RANK, 0, roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), params);
let myRank = await getMyRank(REDIS_KEY.PVP_RANK, 0, roleId);
// 对手记录更新
await PvpHistoryOppModel.setStatus(roleId, oppRoleId, 1);
return resResult(STATUS.SUCCESS, {
battleCode, isSuccess,
score, pLv, myRank, hisScore,
@@ -386,34 +381,17 @@ export class PvpHandler {
let result: PlayerDetail;
if(isRobot) { // 如果是机器人从自己的pvpDefense中寻找
let role = await RoleModel.findByRoleId(roleId);
let pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
let { oppPlayers } = pvpDefense;
let curOpp = oppPlayers.find(cur => cur.roleId == oppoRoleId);
if(!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND);
let heroes = new Array<PlayerDetailHero>();
let { robot } = curOpp;
let { warId } = robot;
let dicWarJson = gameData.warJson.get(warId);
for(let json of dicWarJson) {
const { actorId, relation } = json;
if(relation == 2 && actorId > 0) { // 默认格子
let dicHero = gameData.hero.get(actorId);
heroes.push({
actorId,
star: dicHero.initialStars,
colorStar: 0,
quality: dicHero.quality,
score: 0,
lv: role.lv
});
}
let pvpHistoryOpp = await PvpHistoryOppModel.findByRoleIdAndOppId(roleId, oppoRoleId);
if(!pvpHistoryOpp) {
return resResult(STATUS.PVP_ROLE_NOT_FOUND);
}
result = new PlayerDetail({...robot, lv: role.lv, heroes})
let heroes = pvpHistoryOpp.heroes.map(hero => {
let newHero = new PlayerDetailHero();
newHero.setPvpHeroInfo(hero);
return newHero;
})
result = new PlayerDetail({...pvpHistoryOpp, roleId: pvpHistoryOpp.oppRoleId, heroes});
} else { // 查询对方pvpDefense
let pvpDefense = await PvpDefenseModel.findByRoleId(oppoRoleId);
let dbHeroes = await HeroModel.findByRole(oppoRoleId);