🐞 fix(gvg): 修复战区问题,不跨服服务器应单列
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user