feat(gvg): 保存阵容、刷新对手、战报

This commit is contained in:
luying
2023-02-02 15:37:37 +08:00
parent ddce23d7fd
commit 31a286d82e
13 changed files with 9712 additions and 2799 deletions

View File

@@ -18,6 +18,7 @@ import { getRandEelm, getRandValueByMinMax, resResult } from "../../pubUtils/uti
import { getNumberArr, uniqueArr } from "../ladderService";
import { getHeroesAttributes } from "../playerCeService";
import { getAllServerName } from "../redisService";
import { combineItems } from "../role/util";
import { getGroupIdOfServer, getGVGServerType } from "./gvgService";
// 备战期的遗迹和激战期的开始结束战斗时间
@@ -170,7 +171,7 @@ export async function generateDefenseInfo(roleId: string, vestigeId: number, ran
let dicRank = gameData.gvgVestige.get(vestigeId)?.get(rank); // 调用之前已经验证过了
let dicWar = gameData.war.get(dicRank?.warId);
let dicWarJson = gameData.warJson.get(dicWar?.dispatchJsonId);
if(!dicWarJson) return null;
if(!dicWarJson) return new OppPlayerInfo();
let heroes: OppPlayerHeroInfo[] = [];
for(let json of dicWarJson) {
@@ -208,13 +209,13 @@ export async function generateAttackInfo(roleId: string, rank: number) {
export async function generateAttackHeroInfo(lineup: { actorId: number, dataId: number, order: number }[], dbHeroes: HeroType[]) {
let info = new OppPlayerInfo();
info.setPlayerHeroes(dbHeroes, lineup);
return info.heroes;
return info;
}
export async function getOppDetailData(rec: GVGVestigeRecType) {
let isRobot = rec.defenseInfo.isRobot;
let dicLadderDifficultRatio = gameData.ladderDifficultRatio.get(rec.defenseInfo.oldRank);
let result = new OppDetailData();
let result = new OppDetailData(rec, getVestigeRecStatus(rec));
if(!isRobot) {
const dicWar = gameData.war.get(dicLadderDifficultRatio.gkId);
const dicWarJson = gameData.warJson.get(dicWar.dispatchJsonId);
@@ -237,12 +238,14 @@ export async function getOppDetailData(rec: GVGVestigeRecType) {
// 根据记录里的时间判断当前状态
export function getVestigeRecStatus(rec: GVGVestigeRecType) {
let { checkTime = 0, battleTime = 0, endTime = 0, cancel } = rec;
if(cancel) return VESTIGE_STATUS.COMPLETE;
if(endTime > 0 && endTime <= Date.now()) return VESTIGE_STATUS.COMPLETE;
if(battleTime > 0 && battleTime <= Date.now() && battleTime + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 > Date.now()) return VESTIGE_STATUS.BATTLE;
if(checkTime > 0 && checkTime <= Date.now() && checkTime + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000 > Date.now()) return VESTIGE_STATUS.CHECK;
return VESTIGE_STATUS.NO;
if(cancel) return { status: VESTIGE_STATUS.COMPLETE, time: endTime };
if(endTime > 0 && endTime <= Date.now()) return { status: VESTIGE_STATUS.COMPLETE, time: endTime };
if(battleTime > 0 && battleTime <= Date.now() && battleTime + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 > Date.now()) return { status: VESTIGE_STATUS.BATTLE, time: battleTime + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 };
if(checkTime > 0 && checkTime <= Date.now() && checkTime + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000 > Date.now()) return { status: VESTIGE_STATUS.CHECK, time: checkTime + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000 };
// 超时的
if(battleTime > 0 && endTime == 0 && battleTime + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 <= Date.now()) return { status: VESTIGE_STATUS.COMPLETE, time: battleTime + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN };
if(checkTime > 0 && battleTime == 0 && checkTime + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000 <= Date.now()) return { status: VESTIGE_STATUS.COMPLETE, time: checkTime + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN };
return { status: VESTIGE_STATUS.NO, time: 0 };
}
// 将开始战斗时候的阵容存到防守阵容
@@ -253,6 +256,7 @@ export async function updateMyVestigeRank(isChange: boolean, atkData: GVGVestige
let heroes = rec.attackInfo.heroes||[];
let lineup = heroes.map(hero => ({ actorId: hero.hid, dataId: hero.dataId, order: hero.order, ce: hero.ce }));
update.lineup = lineup;
update.hasDefense = true;
needUpdate = true;
}
if(atkData && atkData.rank > historyRank) { // 更新历史最高排名
@@ -262,6 +266,7 @@ export async function updateMyVestigeRank(isChange: boolean, atkData: GVGVestige
if(atkData) { // 排名变化时刷新对手
let oppRanks = refreshVestigeOppRanks(atkData.rank);
update.oppRanks = oppRanks;
needUpdate = true;
}
}
if(needUpdate) {
@@ -277,8 +282,22 @@ export function calBreakGoods(vestige: number, historyRank: number, rank: number
for(let i = historyRank + 1; i <= rank; i++) {
let dicRank = dicRankMap.get(i);
if(!dicRank) continue;
rewards.push(...dicRank.onceReward);
leagueRewards.push(...dicRank.onceLeagueReward);
for(let { id, count } of dicRank.onceReward) {
let obj = rewards.find(obj => obj.id == id);
if(!obj) {
rewards.push({ id, count });
} else {
obj.count += count;
}
}
for(let { id, count } of dicRank.onceLeagueReward) {
let obj = leagueRewards.find(obj => obj.id == id);
if(!obj) {
leagueRewards.push({ id, count });
} else {
obj.count += count;
}
}
}
return { rewards, leagueRewards }
}