🐞 fix(gvg): 修复战区问题,不跨服服务器应单列

This commit is contained in:
luying
2023-02-20 20:46:20 +08:00
parent 015b4293fb
commit 5b3747a78e
27 changed files with 324 additions and 390 deletions
+25 -29
View File
@@ -28,7 +28,7 @@ import { Rank } from "../rankService";
import { findKeys, getAllServerName, redisClient } from "../redisService";
import { combinePushItem } from "./gvgItemService";
import { addVestigeLeagueRankRec } from "./gvgRecService";
import { getGroupIdOfServer, getGVGServerType } from "./gvgService";
import { getGroupIdOfServer, getGroupKey, getGVGServerType } from "./gvgService";
// 备战期的遗迹和激战期的开始结束战斗时间
export function getFightTimeByPeriod(period: GVG_PERIOD, time?: number) {
@@ -49,14 +49,14 @@ export function checkFightTime() {
// 征战中原每天随机的遗迹点
export async function getVestiges(serverId: number) {
let groupId = await getGroupIdOfServer(serverId);
let groupKey = await getGroupKey(serverId);
let serverType = await getGVGServerType(serverId);
let vestige = await GVGVestigeModel.getVestige(groupId);
let vestige = await GVGVestigeModel.getVestige(groupKey);
if(!vestige) {
let dicGVGVestige = gameData.gvgVestigeByServerType.get(serverType)||[];
let cnt = gameData.gvgVestigeCntByServerType.get(serverType)||0;
let randResult = getRandEelm(dicGVGVestige, cnt);
vestige = await GVGVestigeModel.initTodayVestige(groupId, serverType, randResult);
vestige = await GVGVestigeModel.initTodayVestige(groupKey, randResult);
}
return vestige.vestiges||[];
}
@@ -98,9 +98,9 @@ function randomRank(min: number, max: number, len: number) {
}
// 根据ranks获取oppPlayer显示数据
export async function getOppPlayerByRanks(serverId: number, groupId: number, serverType: number, vestigeId: number, ranks: number[]) {
export async function getOppPlayerByRanks(serverId: number, groupKey: string, vestigeId: number, ranks: number[]) {
let serverNames = await getAllServerName();
let opps = await GVGVestigeRankModel.findByRanks(groupId, serverType, vestigeId, ranks);
let opps = await GVGVestigeRankModel.findByRanks(groupKey, vestigeId, ranks);
let roleIds = opps.map(cur => cur.roleId);
let roles = await RoleModel.findByRoleIds(roleIds, 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt')
let dicRankMap = gameData.gvgVestige.get(vestigeId);
@@ -171,19 +171,19 @@ export function isRobot(roleId: string) {
return roleId.startsWith('robot');
}
export async function checkVestigeOppStatus(configId: number, groupId: number, serverType: number, vestigeId: number, roleId: string, myRank: number, targetRoleId: string, rank: number) {
export async function checkVestigeOppStatus(configId: number, groupKey: string, vestigeId: number, roleId: string, myRank: number, targetRoleId: string, rank: number) {
let myData = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId);
let myData = await getMyVestigeRank(configId, groupKey, vestigeId, roleId);
if(!myData || myData.rank != myRank) return VESTIGE_OPP_STATUS.MY_RANK_CHANGE;
if(isRobot(targetRoleId)) {
let targetData = await GVGVestigeRankModel.findByRank(configId, groupId, serverType, vestigeId, rank);
let targetData = await GVGVestigeRankModel.findByRank(configId, groupKey, vestigeId, rank);
if(targetData) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE;
} else {
let targetData = await GVGVestigeRankModel.findByRole(vestigeId, targetRoleId);
if(targetData?.rank != rank) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE;
}
let lockResult = await GVGVestigeLockModel.chooseOppLock(groupId, serverType, vestigeId, rank, configId, roleId, targetRoleId);
let lockResult = await GVGVestigeLockModel.chooseOppLock(groupKey, vestigeId, rank, configId, roleId, targetRoleId);
if(!lockResult) return VESTIGE_OPP_STATUS.OPP_IS_LOCKED;
return VESTIGE_OPP_STATUS.BATTLE;
@@ -314,7 +314,7 @@ export function calBreakGoods(vestige: number, historyRank: number, rank: number
}
// 玩家当天的驻扎记录,没有的话就创建一个
export async function getMyVestigeRank(configId: number, groupId: number, serverType: number, vestigeId: number, roleId: string, myLeague?: GVGLeagueType) {
export async function getMyVestigeRank(configId: number, groupKey: string, vestigeId: number, roleId: string, myLeague?: GVGLeagueType) {
let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名
if(!myVestigeRank) {
@@ -324,31 +324,31 @@ export async function getMyVestigeRank(configId: number, groupId: number, server
myLeague = await GVGLeagueModel.findLeagueByGuild(role.guildCode);
if(!myLeague) return null
}
myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, serverType, role, myLeague.leagueCode, oppRanks );
myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupKey, role, myLeague.leagueCode, oppRanks );
}
return myVestigeRank;
}
// 保存排行榜
export async function saveScoreToRank(rec: GVGVestigeRecType) {
await savePlayerRank(rec.configId, rec.groupId, rec.serverType, rec.vestigeId, rec.attackInfo);
await savePlayerRank(rec.configId, rec.groupId, rec.serverType, rec.vestigeId, rec.defenseInfo);
await savePlayerRank(rec.configId, rec.groupKey, rec.vestigeId, rec.attackInfo);
await savePlayerRank(rec.configId, rec.groupKey, rec.vestigeId, rec.defenseInfo);
}
export function getDayKeyInfo() {
return moment().format('YYMMDD');
}
export async function savePlayerRank(configId: number, groupId: number, serverType: number, vestigeId: number, playerInfo: Partial<OppPlayerInfo>) {
export async function savePlayerRank(configId: number, groupKey: string, vestigeId: number, playerInfo: Partial<OppPlayerInfo>) {
if(playerInfo.isRobot) return
let dicRankMap = gameData.gvgVestige.get(vestigeId);
let newRank = dicRankMap?.get(playerInfo.newRank)?.score||0;
let oldRank = dicRankMap?.get(playerInfo.oldRank)?.score||0;
let myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, playerInfo.leagueCode, configId, groupId, serverType, newRank - oldRank);
let r1 = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { serverType, groupId, day: getDayKeyInfo() });
let myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, playerInfo.leagueCode, configId, groupKey, newRank - oldRank);
let r1 = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupKey, day: getDayKeyInfo() });
await r1.setRankWithRoleInfo(playerInfo.roleId, myScore.score, myScore.updatedAt.getTime());
let leagueScore = await GVGVestigeLeagueRankModel.incScore(configId, playerInfo.leagueCode, groupId, serverType, newRank - oldRank);
let r2 = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { serverType, groupId, day: getDayKeyInfo() });
let leagueScore = await GVGVestigeLeagueRankModel.incScore(configId, playerInfo.leagueCode, groupKey, newRank - oldRank);
let r2 = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupKey, day: getDayKeyInfo() });
await r2.setRankWithLeagueInfo(playerInfo.leagueCode, leagueScore.score, leagueScore.updatedAt.getTime());
}
@@ -389,23 +389,19 @@ export async function saveVestigeRankSchedule() {
let day = getDayKeyInfo();
let keys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_LEAGUE}:${day}:`);
for(let key of keys) {
let [,, _groupId, _serverType] = key.split(':');
let groupId = parseInt(_groupId);
let serverType = parseInt(_serverType);
let r = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupId, serverType, day});
let [,, groupKey] = key.split(':');
let r = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupKey, day});
let ranks = await r.getRankByRangeRaw();
await GVGVestigeLeagueRankModel.saveRank(groupId, serverType, ranks);
await GVGVestigeLeagueRankModel.saveRank(groupKey, ranks);
await addVestigeLeagueRankRec(config.configId, ranks);
}
let memberKeys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_MEMBER_ALL}:${day}:`);
for(let key of memberKeys) {
let [,, _groupId, _serverType] = key.split(':');
let groupId = parseInt(_groupId);
let serverType = parseInt(_serverType);
let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupId, serverType, day});
let [,, groupKey] = key.split(':');
let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupKey, day});
let ranks = await r.getRankByRangeRaw();
await GVGVestigeSumRankModel.saveRank(groupId, serverType, ranks);
await GVGVestigeSumRankModel.saveRank(groupKey, ranks);
}
let playerSumRanks = await GVGVestigeSumRankModel.findAllScores();
await GVGUserDataModel.addVestigeScores(config.configId, playerSumRanks);