✨ feat(gvg): 保存阵容、刷新对手、战报
This commit is contained in:
@@ -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 }
|
||||
}
|
||||
Reference in New Issue
Block a user