🐞 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
@@ -22,7 +22,7 @@ import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestig
import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService";
import { addGVGActive } from "../../../services/gvg/gvgPrepareService";
import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService";
import { getGroupIdOfServer, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService";
import { getGroupKey, getGVGPeriodData } from "../../../services/gvg/gvgService";
import { checkBattleHeroesByHid } from "../../../services/normalBattleService";
import { Rank } from "../../../services/rankService";
import { getAllServerName } from "../../../services/redisService";
@@ -56,19 +56,18 @@ export class GVGProduceHandler {
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let groupKey = await getGroupKey(serverId);
let dicRankMap = gameData.gvgVestige.get(vestigeId);
if(!dicRankMap) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId, myLeague);
let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId, myLeague);
if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let { rank, lineup, oppRanks, refreshCnt } = myVestigeRank;
let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 0);
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, oppRanks);
let oppPlayers = await getOppPlayerByRanks(serverId, groupKey, vestigeId, oppRanks);
let usedHeroes = await getVestigeUsedHeroes(roleId, vestigeId);
return resResult(STATUS.SUCCESS, {
@@ -94,10 +93,9 @@ export class GVGProduceHandler {
}
let { configId, period } = getGVGPeriodData();
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
let groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let groupKey = await getGroupKey(serverId);
let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId);
let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId);
if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
for(let { actorId } of heroes) {
@@ -172,17 +170,16 @@ export class GVGProduceHandler {
}
let { configId, period } = getGVGPeriodData();
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
let groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let groupKey = await getGroupKey(serverId);
let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId);
let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId);
let refreshCnt = myVestigeRank.refreshCnt||0;
if(refreshCnt >= GVG.GVG_REFRESH_TIME) return resResult(STATUS.GVG_VESTIGE_REFESH_CNT_MAX);
let oppRanks = refreshVestigeOppRanks(myVestigeRank.rank);
myVestigeRank = await GVGVestigeRankModel.refreshOpp(roleId, vestigeId, oppRanks );
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, myVestigeRank.oppRanks);
let oppPlayers = await getOppPlayerByRanks(serverId, groupKey, vestigeId, myVestigeRank.oppRanks);
// 返回
return resResult(STATUS.SUCCESS, { vestigeId, refreshCnt: myVestigeRank.refreshCnt, oppPlayers });
@@ -217,20 +214,19 @@ export class GVGProduceHandler {
const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, GVG_ITEM.FIGHT_COIN, 1);
if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
const groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
const groupKey = await getGroupKey(serverId);
let status = await checkVestigeOppStatus(configId, groupId, serverType, vestigeId, roleId, myRank, targetRoleId, rank); // 锁
let status = await checkVestigeOppStatus(configId, groupKey, vestigeId, roleId, myRank, targetRoleId, rank); // 锁
if(status != VESTIGE_OPP_STATUS.BATTLE) {
let oppRanks = refreshVestigeOppRanks(myRank);
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, oppRanks);
let oppPlayers = await getOppPlayerByRanks(serverId, groupKey, vestigeId, oppRanks);
return resResult(STATUS.SUCCESS, { status, oppPlayers });
}
// 扣征战令
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.FIGHT_COIN, count: 1 }], [], ITEM_CHANGE_REASON.GVG_VESTIGE_START);
if(!costResult) {
await GVGVestigeLockModel.releaseLock(groupId, serverType, vestigeId, rank);
await GVGVestigeLockModel.releaseLock(groupKey, vestigeId, rank);
return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
}
// 获取征战令对应奖励
@@ -240,7 +236,7 @@ export class GVGProduceHandler {
// 创建rec
const attackInfo = await generateAttackInfo(roleId, myLeague, myRank);
const defenseInfo = await generateDefenseInfo(targetRoleId, vestigeId, rank);
const rec = await GVGVestigeRecModel.createRec(configId, vestigeId, groupId, serverType, dicRank.warId, attackInfo, defenseInfo, leagueGoods);
const rec = await GVGVestigeRecModel.createRec(configId, vestigeId, groupKey, dicRank.warId, attackInfo, defenseInfo, leagueGoods);
const oppDetail = await getOppDetailData(rec);
checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_VESTIGE, { count: 1 });
@@ -257,7 +253,7 @@ export class GVGProduceHandler {
// 更新ladderMatchRec
let rec = await GVGVestigeRecModel.giveup(roleId, battleCode);
if(rec && rec.defenseInfo) {
await GVGVestigeLockModel.releaseLock(rec.groupId, rec.serverType, rec.vestigeId, rec.defenseInfo.oldRank);
await GVGVestigeLockModel.releaseLock(rec.groupKey, rec.vestigeId, rec.defenseInfo.oldRank);
}
return resResult(STATUS.SUCCESS, {
@@ -302,9 +298,8 @@ export class GVGProduceHandler {
if(await checkHeroIsUsedInOtherVestige(roleId, vestigeId, heroes)) return resResult(STATUS.GVG_VESTIGE_HERO_USED);
// 更新锁
const groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let lock = await GVGVestigeLockModel.checkBattleLock(groupId, serverType, vestigeId, rank, roleId);
const groupKey = await getGroupKey(serverId);
let lock = await GVGVestigeLockModel.checkBattleLock(groupKey, vestigeId, rank, roleId);
if(!lock) return resResult(STATUS.GVG_VESTIGE_CHECK_BATTLE_STATUS_ERR);
// 向vestigerec保存阵容
@@ -348,7 +343,7 @@ export class GVGProduceHandler {
// 更新vestigeRec
rec = await GVGVestigeRecModel.battleEnd(battleCode, isSuccess, endTime, atkData?.rank, defData?.rank||rec.attackInfo.oldRank);
// 更新锁
await GVGVestigeLockModel.releaseLock(rec.groupId, rec.serverType, rec.vestigeId, rec.defenseInfo.oldRank);
await GVGVestigeLockModel.releaseLock(rec.groupKey, rec.vestigeId, rec.defenseInfo.oldRank);
// 更新battleRecord
await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } });
@@ -367,7 +362,7 @@ export class GVGProduceHandler {
score: gameData.gvgVestige.get(rec.vestigeId)?.get(atkData.rank)?.score??0,
historyRank: atkData.historyRank,
...getVestigeRecStatus(rec),
oppPlayers: await getOppPlayerByRanks(serverId, rec.groupId, rec.serverType, rec.vestigeId, atkData.oppRanks),
oppPlayers: await getOppPlayerByRanks(serverId, rec.groupKey, rec.vestigeId, atkData.oppRanks),
// breakGoods,
lineup: atkData.lineup,
lineupCe: atkData.lineup.reduce((pre, cur) => pre + cur.ce, 0),
@@ -402,12 +397,11 @@ export class GVGProduceHandler {
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let groupKey = await getGroupKey(serverId);
let serverNames = await getAllServerName();
const { ranks: leagueRank, myRank: myLeagueRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, true, { groupId, serverType, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode });
const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, true, { groupId, serverType, day: getDayKeyInfo() }, { roleId }, serverNames);
const { ranks: leagueRank, myRank: myLeagueRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, true, { groupKey, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode });
const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, true, { groupKey, day: getDayKeyInfo() }, { roleId }, serverNames);
return resResult(STATUS.SUCCESS, {
leagueRank, myLeagueRank, memberRank, myMemberRank
@@ -423,13 +417,12 @@ export class GVGProduceHandler {
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let groupKey = await getGroupKey(serverId);
let serverNames = await getAllServerName();
let { configId } = getGVGPeriodData();
const { ranks, myRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, false, { groupId, serverType, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }, serverNames);
const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, false, { groupId, serverType, day: getDayKeyInfo() }, { roleId }, serverNames);
const { ranks, myRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, false, { groupKey, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }, serverNames);
const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, false, { groupKey, day: getDayKeyInfo() }, { roleId }, serverNames);
let yesterdayRank = await GVGVestigeLeagueRankModel.getYesterdayRank(myLeague.leagueCode);
let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode);
@@ -450,13 +443,12 @@ export class GVGProduceHandler {
let serverId = session.get('serverId');
let { vestigeId } = msg;
let groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let groupKey = await getGroupKey(serverId);
let dicRankMap = gameData.gvgVestige.get(vestigeId);
let serverNames = await getAllServerName();
let vestigeRanks = await GVGVestigeRankModel.findRankByVestige(groupId, serverType, vestigeId);
let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER, { groupId, serverType, vestigeId });
let vestigeRanks = await GVGVestigeRankModel.findRankByVestige(groupKey, vestigeId);
let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER, { groupKey, vestigeId });
let ranks: VestigeRank[] = [], myRank: VestigeRank;
for(let { roleId: targetRoleId, rank, lineup } of vestigeRanks) {
let param = <RoleRankInfo>await r.getParam(rank, targetRoleId, [rank]);
@@ -531,26 +523,25 @@ export class GVGProduceHandler {
let serverId = session.get('serverId');
let guildCode = session.get('guildCode');
let groupId = await getGroupIdOfServer(serverId);
let serverType = await getGVGServerType(serverId);
let groupKey = await getGroupKey(serverId);
let { configId } = getGVGPeriodData();
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let myData = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId, myLeague)
let myData = await getMyVestigeRank(configId, groupKey, vestigeId, roleId, myLeague)
let myRank = myData?.rank||0;
let targetData = await GVGVestigeRankModel.findByRank(configId, groupId, serverType, vestigeId, rank);
let targetData = await GVGVestigeRankModel.findByRank(configId, groupKey, vestigeId, rank);
if(targetData) {
myData = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { rank, oldRank: myRank, historyRank: rank });
targetData = await GVGVestigeRankModel.updateByRoleId(vestigeId, targetData.roleId, { rank: myRank, oldRank: rank });
} else {
myData = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { rank, oldRank: myRank, historyRank: rank });
}
await savePlayerRank(configId, groupId, serverType, vestigeId, { isRobot: false, newRank: rank, oldRank: myRank, roleId, leagueCode: myLeague.leagueCode });
await savePlayerRank(configId, groupKey, vestigeId, { isRobot: false, newRank: rank, oldRank: myRank, roleId, leagueCode: myLeague.leagueCode });
if(targetData) {
await savePlayerRank(configId, groupId, serverType, vestigeId, { isRobot: false, newRank: targetData.rank, oldRank: rank, roleId: targetData.roleId, leagueCode: targetData.leagueCode });
await savePlayerRank(configId, groupKey, vestigeId, { isRobot: false, newRank: targetData.rank, oldRank: rank, roleId: targetData.roleId, leagueCode: targetData.leagueCode });
}
return resResult(STATUS.SUCCESS);