diff --git a/game-server/app/servers/battle/handler/ladderHandler.ts b/game-server/app/servers/battle/handler/ladderHandler.ts index 33a57684a..6cf63c9c3 100644 --- a/game-server/app/servers/battle/handler/ladderHandler.ts +++ b/game-server/app/servers/battle/handler/ladderHandler.ts @@ -375,12 +375,13 @@ export class LadderHandler { } let roleId = session.get('roleId'); + let serverId = session.get('serverId'); let atkLadderMatch = await LadderMatchModel.findByRoleId(roleId); if(!atkLadderMatch || !atkLadderMatch.defense) return resResult(STATUS.LADDER_NOT_OPEN); let myRank = atkLadderMatch.rank; - let defLadderMatch = await LadderMatchModel.findByRank(rank); + let defLadderMatch = await LadderMatchModel.findByRank(serverId, rank); if(defLadderMatch) { atkLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId }, { $set: { rank, oldRank: myRank, historyRank: rank } }, { new: true }).lean(); defLadderMatch = await LadderMatchModel.findOneAndUpdate({ roleId: defLadderMatch.roleId }, { $set: { rank: myRank, oldRank: rank } }, { new: true }).lean(); diff --git a/game-server/app/services/ladderService.ts b/game-server/app/services/ladderService.ts index 3cfb58ca7..43d9384d8 100644 --- a/game-server/app/services/ladderService.ts +++ b/game-server/app/services/ladderService.ts @@ -203,7 +203,7 @@ export async function getLadderOppStatus(ladderData: LadderMatchType, targetRole let hisLadderData = await LadderMatchRecModel.checkByRank(ladderData.serverId, `robot${rank}`); if(hisLadderData) return { status: LADDER_OPP_STATUS.OPP_IS_LOCKED }; - let ladderMatch = await LadderMatchModel.isRankExist(rank); + let ladderMatch = await LadderMatchModel.isRankExist(ladderData.serverId, rank); if(ladderMatch) { return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE }; } diff --git a/shared/db/LadderMatch.ts b/shared/db/LadderMatch.ts index e637d5e08..3e039e1de 100644 --- a/shared/db/LadderMatch.ts +++ b/shared/db/LadderMatch.ts @@ -4,6 +4,7 @@ import { LadderDefense, LadderOppPlayerInDB } from '../domain/battleField/ladder import Role from './Role'; @index({ roleId: 1 }) +@index({ serverId: 1, rank: 1 }) export default class LadderMatch extends BaseModel { @prop({ required: true, default: 0 }) serverId: number; // 角色 id @@ -41,13 +42,13 @@ export default class LadderMatch extends BaseModel { return result; } - public static async findByRank(rank: number) { - const result: LadderMatchType = await LadderMatchModel.findOne({ rank }).lean(); + public static async findByRank(serverId: number, rank: number) { + const result: LadderMatchType = await LadderMatchModel.findOne({ serverId, rank }).lean(); return result; } - public static async isRankExist(rank: number) { - const result = await LadderMatchModel.exists({ rank }); + public static async isRankExist(serverId: number, rank: number) { + const result = await LadderMatchModel.exists({ serverId, rank }); return result; } public static async findByRoleIdAndInclude(roleId: string) {