feat(gvg): 遗迹生成数据

This commit is contained in:
luying
2023-01-31 11:04:44 +08:00
parent 3c8ac3c9e5
commit 4035645772
12 changed files with 2174 additions and 1270 deletions

View File

@@ -2,9 +2,16 @@
import { GVG_PERIOD } from "../../consts";
import { GVGVestigeModel } from "../../db/GVGVestige";
import { gameData } from "../../pubUtils/data";
import { GVGVestigeRankModel } from "../../db/GVGVestigeRank";
import { HeroModel } from "../../db/Hero";
import { RoleType } from "../../db/Role";
import { GVGVestigeOppPlayer } from "../../domain/gvgField/returnData";
import { gameData, getGVGVestigeRange } from "../../pubUtils/data";
import { getTimeFun } from "../../pubUtils/timeUtil";
import { getRandEelm } from "../../pubUtils/util";
import { getRandEelm, getRandValueByMinMax } from "../../pubUtils/util";
import { getNumberArr, uniqueArr } from "../ladderService";
import { calLineupScore } from "../pvpService";
import { getAllServerName } from "../redisService";
import { getGroupIdOfServer, getGVGServerType } from "./gvgService";
// 备战期的遗迹和激战期的开始结束战斗时间
@@ -30,4 +37,53 @@ export async function getVestiges(serverId: number) {
vestige = await GVGVestigeModel.initTodayVestigate(groupId, serverType, randResult);
}
return vestige.vestiges||[];
}
export async function checkVestige(groupId: number, vestigeId: number) {
let todayVestige = await GVGVestigeModel.getVestigate(groupId);
if(!todayVestige) return false;
return !!todayVestige.vestiges.find(cur => cur.vestigeId == vestigeId);
}
// 根据自己排名随机出对手排名
export function refreshVestigeOppRanks(rank: number) {
let dicRange = getGVGVestigeRange(rank);
if(!dicRange) return [];
let { rangeBeforeFrom, rangeBeforeTo, rangeBeforeNum, rangeAfterFrom, rangeAfterTo, rangeAfterNum } = dicRange;
let beforeRanks = randomRank(rangeBeforeFrom == -1? rank: rangeBeforeFrom, rangeBeforeTo == -1? rank: rangeBeforeTo, rangeBeforeNum);
let afterRanks = randomRank(rangeAfterFrom == -1? rank: rangeAfterFrom, rangeAfterTo == -1? rank: rangeAfterTo, rangeAfterNum);
let topRanks = getNumberArr(dicRange.topChallengeFrom + 1, dicRange.topChallengeTo);
let ranks = [...topRanks, ...beforeRanks, ...afterRanks];
return uniqueArr(ranks.sort((a, b) => a - b));
}
function randomRank(min: number, max: number, len: number) {
if(min == max || len == 0) return [];
let arr = getNumberArr(min + 1, max);
return getRandEelm(arr, len);
}
export async function getOppPlayerByRanks(serverId: number, groupId: number, vestigeId: number, ranks: number[]) {
let serverNames = await getAllServerName();
let opps = await GVGVestigeRankModel.findByRanks(groupId, vestigeId, ranks);
let dicRankMap = gameData.gvgVestige.get(vestigeId);
if(!dicRankMap) return [];
let result: GVGVestigeOppPlayer[] = [];
for(let rank of ranks) {
let obj = new GVGVestigeOppPlayer(rank);
let opp = opps.find(cur => cur.rank == rank);
let dicCurRank = dicRankMap.get(rank);
if(opp) {
let role = <RoleType>opp.role;
let lineupce = opp.lineup.reduce((pre, cur) => pre + cur.ce, 0);
obj.setByRole(role, serverNames, lineupce, dicCurRank?.score||0);
} else {
obj.setByDic(dicCurRank, serverNames[serverId]);
}
result.push(obj);
}
return result;
}