✨ feat(gvg): 遗迹生成数据

This commit is contained in:
luying
2023-02-17 10:58:06 +08:00
parent 3c8ac3c9e5
commit 4035645772
12 changed files with 2174 additions and 1270 deletions
@@ -1,4 +1,14 @@
import { Application, BackendSession, ChannelService, HandlerService } from "pinus";
import { GVG_PERIOD, STATUS } from "../../../consts";
import { GVGVestigeRankModel } from "../../../db/GVGVestigeRank";
import { HeroModel } from "../../../db/Hero";
import { RoleModel } from "../../../db/Role";
import { GVGVestigeOppLineup } from "../../../domain/gvgField/returnData";
import { gameData } from "../../../pubUtils/data";
import { resResult } from "../../../pubUtils/util";
import { checkVestige, getOppPlayerByRanks, refreshVestigeOppRanks } from "../../../services/gvg/gvgFightService";
import { getGroupIdOfServer, getGVGPeriodData } from "../../../services/gvg/gvgService";
import { getAllServerName } from "../../../services/redisService";
export default function (app: Application) {
new HandlerService(app, {});
@@ -18,7 +28,40 @@ export class GVGProduceHandler {
// 遗迹页面
async getVestige(msg: { vestigeId: number }, session: BackendSession) {
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const { vestigeId } = msg;
let { configId, period } = getGVGPeriodData();
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
let groupId = await getGroupIdOfServer(serverId);
if(!await checkVestige(groupId, vestigeId)) {
return resResult(STATUS.GVG_VESTIGE_ERR);
}
let dicRankMap = gameData.gvgVestige.get(vestigeId);
if(!dicRankMap) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let myVestigateRank = await GVGVestigeRankModel.findRankByRole(vestigeId, roleId); // 我在这个遗迹的排名
if(!myVestigateRank) {
let role = await RoleModel.findByRoleId(roleId, 'roleId');
let oppRanks = refreshVestigeOppRanks(-1);
myVestigateRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, role, oppRanks );
}
let { rank, lineup, oppRanks, refreshCnt } = myVestigateRank;
let score = dicRankMap?.get(rank)||0;
let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 0);
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, vestigeId, oppRanks);
return resResult(STATUS.SUCCESS, {
vestigeId,
myRank: rank,
score,
lineup, lineupCe,
oppPlayers,
refreshCnt
})
}
// 编辑阵容
@@ -28,7 +71,36 @@ export class GVGProduceHandler {
// 获取对手阵容消息
async getOppLineup(msg: { vestigeId: number, roleId: string, rank: number }, session: BackendSession) {
const roleId: string = session.get('roleId');
const serverId: number = session.get('serverId');
let { vestigeId, roleId: targetRoleId, rank } = msg;
let myVestigateRank = await GVGVestigeRankModel.findRankByRole(vestigeId, roleId); // 我在这个遗迹的排名
const serverNames = await getAllServerName();
let isRobot = targetRoleId.startsWith('robot');
let result = new GVGVestigeOppLineup(vestigeId);
result.setMyRank(myVestigateRank?.rank||0);
let dicGVGVestige = gameData.gvgVestige.get(vestigeId)?.get(rank);
if(!dicGVGVestige) return resResult(STATUS.DIC_DATA_NOT_FOUND);
if(isRobot) {
let dicWar = gameData.war.get(dicGVGVestige?.warId);
let dicWarJson = gameData.warJson.get(dicWar.dispatchJsonId);
result.setRobot(dicGVGVestige, dicWarJson, serverNames[serverId]);
} else {
let hisVestigateRank = await GVGVestigeRankModel.findRankByRole(vestigeId, roleId); // 我在这个遗迹的排名
if(!hisVestigateRank) return resResult(STATUS.GVG_VESTIGE_TARGET_NOT_FOUND);
let role = await RoleModel.findByRoleId(hisVestigateRank.roleId, 'roleId roleName serverId guildName title lv heads head spines spine frames frame')
if(!hisVestigateRank) return resResult(STATUS.GVG_VESTIGE_TARGET_NOT_FOUND);
let hids = hisVestigateRank.lineup?.map(cur => cur.actorId)||[];
let heroes = await HeroModel.findByHidRange(hids, roleId, 'hid skinId quality star colorStar lv');
result.setPlayer(dicGVGVestige, role, heroes, serverNames);
}
return resResult(STATUS.SUCCESS, result);
}
// 刷新对手