From 0f28628a64d8355ab08b6f5c07b7ee9203d8715c Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 1 Mar 2023 19:43:10 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(gvg):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=9B=B6=E6=95=A3=E5=B0=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/guild/handler/gvgBattleHandler.ts | 19 ++++++++++++++++++- .../app/services/gvg/gvgBattleMemory.ts | 4 ++-- .../app/services/gvg/gvgBattleService.ts | 9 ++++----- game-server/app/services/gvg/gvgService.ts | 3 ++- shared/db/GVGCity.ts | 4 ++-- shared/db/GVGCityAreaPoint.ts | 1 + shared/db/GVGLeague.ts | 5 ----- shared/domain/gvgField/returnData.ts | 2 ++ 8 files changed, 31 insertions(+), 16 deletions(-) diff --git a/game-server/app/servers/guild/handler/gvgBattleHandler.ts b/game-server/app/servers/guild/handler/gvgBattleHandler.ts index 669082980..92024dcb5 100644 --- a/game-server/app/servers/guild/handler/gvgBattleHandler.ts +++ b/game-server/app/servers/guild/handler/gvgBattleHandler.ts @@ -134,10 +134,19 @@ export class GVGBattleHandler { // 进入城池之前的检查 async checkMyTeam(msg: { cityId: number }, session: BackendSession) { const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const guildCode = session.get('guildCode'); const { cityId } = msg; let hasSettled = false, otherCityId = 0; - const teams = await GVGTeamModel.findByRole(roleId, 'cityId'); + let { configId, period } = getGVGPeriodData(); + if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD); + + let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); + if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); + + let groupKey = await getGroupKey(serverId); + let teams = await refreshTeams(configId, groupKey, roleId, myLeague); // 玩家队伍信息中城池id不一致,说明玩家已经进入了其他城池 for(let { cityId: teamCityId } of teams) { if(teamCityId > 0 && teamCityId != cityId) { @@ -384,6 +393,9 @@ export class GVGBattleHandler { // addTeamSettleRec(curTeam); + await sendMessageToGVGAreaByTeamWithSuc(groupKey, curTeam.areaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, { + cityId: curTeam.cityId, areaId: curTeam.areaId, point: new GVGTeamInListOnPoint(curTeam.pointId, true, curTeam) + }); return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(curTeam) }); } @@ -408,6 +420,9 @@ export class GVGBattleHandler { let teamObj = getGVGBattleData(groupKey); teamObj.teamSettle(roleId, teamCode, 0); + await sendMessageToGVGAreaByTeamWithSuc(groupKey, curTeam.areaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, { + cityId: curTeam.cityId, areaId: curTeam.areaId, point: new GVGTeamInListOnPoint(myTeam.pointId, true, curTeam) + }); return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(curTeam) }); } @@ -474,7 +489,9 @@ export class GVGBattleHandler { } if(defenseTeam.curTeamBreak) { let attackScore = calBattleScoreByCe(isSuccess, defenseTeam.lineupCe); + let attackCurTeamBreak = attackTeam.curTeamBreak; attackTeam = await GVGTeamModel.addScore(attackTeam.teamCode, attackScore, 0); + attackTeam.curTeamBreak = attackCurTeamBreak; await redisAddBattleScore(attackTeam, attackScore); } diff --git a/game-server/app/services/gvg/gvgBattleMemory.ts b/game-server/app/services/gvg/gvgBattleMemory.ts index 042b78306..6f021703e 100644 --- a/game-server/app/services/gvg/gvgBattleMemory.ts +++ b/game-server/app/services/gvg/gvgBattleMemory.ts @@ -170,12 +170,12 @@ class GVGBattleData { return teams; } - public findSettledPointMapByLeague() { + public findSettledPointMapByLeague(cityId: number) { let pointByLeague = new Map(); for(let [_roleId, pointIds] of this.rolePoints) { for(let [pointId, teamCode] of pointIds) { let team = this.teams.get(teamCode); - if(pointId > 0 && team && team.leagueCode) { + if(pointId > 0 && team && team.leagueCode && team.cityId == cityId) { if(!pointByLeague.has(team.leagueCode)) pointByLeague.set(team.leagueCode, []); pointByLeague.get(team.leagueCode).push(team.pointId); }; diff --git a/game-server/app/services/gvg/gvgBattleService.ts b/game-server/app/services/gvg/gvgBattleService.ts index 86ba713a9..8e78a5df6 100644 --- a/game-server/app/services/gvg/gvgBattleService.ts +++ b/game-server/app/services/gvg/gvgBattleService.ts @@ -404,10 +404,10 @@ export async function catapultHurt() { cityId: catapult.cityId, areaId, attackType: GVG_ATTACK_TYPE.CATAPULT, teams: myTeams }); } - await sendMessageToGVGCityWithSuc(teamObj.groupKey, catapult.cityId, PUSH_ROUTE.GVG_SPINE_ATTACKED, { - cityId: catapult.cityId, areaId, teamCode: catapult.teamCode, attackType: GVG_ATTACK_TYPE.CATAPULT, spines: teams.map(team => new GVGAttackSpine(team, catapult.captapultAtk)) - }); } + await sendMessageToGVGCityWithSuc(teamObj.groupKey, catapult.cityId, PUSH_ROUTE.GVG_SPINE_ATTACKED, { + cityId: catapult.cityId, areaId, teamCode: catapult.teamCode, attackType: GVG_ATTACK_TYPE.CATAPULT, spines: teams.map(team => new GVGAttackSpine(team, catapult.captapultAtk)) + }); } } } @@ -440,7 +440,7 @@ export async function redisAddSettleScore(gvgTeam: GVGTeamType, incScore: number // 获取排行榜 export async function getBattleRanksByCity(configId: number, groupKey: string, cityId: number, myLeague?: GVGLeagueType) { let teamObj = getGVGBattleData(groupKey); - let pointByLeague = teamObj.findSettledPointMapByLeague(); + let pointByLeague = teamObj.findSettledPointMapByLeague(cityId); let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId }); r.setGenerFieldsFun((obj => { if(obj instanceof LeagueRankInfo) { @@ -591,7 +591,6 @@ async function addGuardCity(configId: number, groupKey: string, cityId: number, await GVGCityModel.guardCity(configId, groupKey, cityId, league); await sendMailToLeagueByContent(MAIL_TYPE.GVG_GUARD_CITY_REWARD, leagueCode, { params: [dicCity.cityName], goods: dicCityAdd.occupyReward }, league); await addCityGuardMessage(league, cityId); - await GVGLeagueModel.removeAuto(leagueCode); } // —————————— 定时器相关 end —————————— // diff --git a/game-server/app/services/gvg/gvgService.ts b/game-server/app/services/gvg/gvgService.ts index a6005c827..ace91c34a 100644 --- a/game-server/app/services/gvg/gvgService.ts +++ b/game-server/app/services/gvg/gvgService.ts @@ -43,7 +43,8 @@ export async function createNewGVGConfig() { let autoLeagues = await GVGLeagueModel.findAutoCreateLeague(); let needDissmissLeagueId: string[] = [], needDissmissLeagueCodes: string[] = []; for(let league of autoLeagues) { - if(!await GVGCityModel.checkLeagueHasGuard(config.configId, league.leagueCode)) { + let groupKey = await getGroupKey(league.serverId); + if(!await GVGCityModel.checkLeagueHasGuard(config.configId, groupKey, league.leagueCode)) { needDissmissLeagueId.push(league._id); needDissmissLeagueCodes.push(league.leagueCode); } diff --git a/shared/db/GVGCity.ts b/shared/db/GVGCity.ts index 8c6cc571a..6bd49190c 100644 --- a/shared/db/GVGCity.ts +++ b/shared/db/GVGCity.ts @@ -78,8 +78,8 @@ export default class GVGCity extends BaseModel { } // 查询联军驻守情况 - public static async checkLeagueHasGuard(configId: number, leagueCode: string) { - return await GVGCityModel.exists({ configId, guardLeague: leagueCode, hasGuard: true }); + public static async checkLeagueHasGuard(configId: number, groupKey: string, leagueCode: string) { + return await GVGCityModel.exists({ configId: { $lte: configId }, groupKey, guardLeague: leagueCode, hasGuard: true }); } // 查询联军驻守情况 diff --git a/shared/db/GVGCityAreaPoint.ts b/shared/db/GVGCityAreaPoint.ts index f3a96e48f..d9bf429d7 100644 --- a/shared/db/GVGCityAreaPoint.ts +++ b/shared/db/GVGCityAreaPoint.ts @@ -37,6 +37,7 @@ export default class GVGCityAreaPoint extends BaseModel { public static async settlePoint(cityId: number, areaId: number, pointId: number, team: GVGTeamType) { let { configId, groupKey, leagueCode, leagueName, roleId, roleName, teamCode } = team; + await GVGCityAreaPointModel.updateMany({ configId, groupKey, teamCode }, { $set: { teamCode: '', roleId: '', roleName: '', leagueCode: '', leagueName: '' } }); await GVGCityAreaPointModel.findOneAndUpdate({ configId, groupKey, pointId }, { $setOnInsert: { teamCode: '' }}, { upsert: true }); let result: GVGCityAreaPointType = await GVGCityAreaPointModel.findOneAndUpdate( { configId, groupKey, pointId, teamCode: '' }, diff --git a/shared/db/GVGLeague.ts b/shared/db/GVGLeague.ts index cda64a91e..cf6c15536 100644 --- a/shared/db/GVGLeague.ts +++ b/shared/db/GVGLeague.ts @@ -199,11 +199,6 @@ export default class GVGLeague extends BaseModel { let leagues: GVGLeagueType[] = await GVGLeagueModel.find({ isAuto: true, status: 1 }).lean(); return leagues } - - public static async removeAuto(leagueCode: string) { - let league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode }, { $set: { isAuto: false } }).lean(); - return league - } } export const GVGLeagueModel = getModelForClass(GVGLeague); diff --git a/shared/domain/gvgField/returnData.ts b/shared/domain/gvgField/returnData.ts index 296b87282..bf4bbc4ea 100644 --- a/shared/domain/gvgField/returnData.ts +++ b/shared/domain/gvgField/returnData.ts @@ -689,6 +689,7 @@ export class GVGAreaInMap { // 地图右边列表上的队伍信息 export class GVGTeamInList { areaId: number; + pointId: number; teamCode: string; roleName: string; head: number; @@ -705,6 +706,7 @@ export class GVGTeamInList { constructor(team: GVGTeamType) { if(!team) return; this.areaId = team.areaId; + this.pointId = team.pointId; this.teamCode = team.teamCode; this.roleName = team.roleName; this.head = team.head;