diff --git a/game-server/app/servers/guild/handler/gvgBattleHandler.ts b/game-server/app/servers/guild/handler/gvgBattleHandler.ts index d1f2448c1..79f1f57b5 100644 --- a/game-server/app/servers/guild/handler/gvgBattleHandler.ts +++ b/game-server/app/servers/guild/handler/gvgBattleHandler.ts @@ -1,7 +1,7 @@ import { GVGCityType } from './../../../db/GVGCity'; import { GVGRecModel } from '../../../db/GVGRec'; import { LeagueGood } from '../../../domain/gvgField/returnData'; -import { GVGTeamModel } from '../../../db/GVGTeam'; +import { GVGTeamModel, GVGTeamType } from '../../../db/GVGTeam'; import { GVGUserDataModel } from '../../../db/GVGUserData'; import { GVGCityModel } from '../../../db/GVGCity'; import { Application, BackendSession, ChannelService, HandlerService } from "pinus"; @@ -120,6 +120,7 @@ export class GVGBattleHandler { return resResult(STATUS.GVG_USER_NOT_FOUND); } + let teams: GVGTeamType[] = []; // 检测是否已经在城池中,玩家不在这个城池中时进行处理 if (gvgUserData.cityId !== cityId) { if(gvgUserData.cityId > 0) { // 如果leaveCity没有退出成功,玩家还遗留在上一座城中,做一下处理 @@ -132,12 +133,23 @@ export class GVGBattleHandler { // 更新内存队伍信息 let areaId = getBirthAreaOfCity(city, myLeague.leagueCode); await GVGTeamModel.enterCity(roleId, cityId, areaId, groupId, serverType); - let teams = await GVGTeamModel.findByRole(roleId); + teams = await GVGTeamModel.findByRole(roleId); let teamObj = getGVGBattleData(groupId, serverType); teamObj.enterCity(teams); } - return resResult(STATUS.SUCCESS, { city }); + if (!teams || teams.length === 0) { + teams = await GVGTeamModel.findByRole(roleId); + } + + const recs = await GVGRecModel.findByCity(cityId, configId); + + return resResult(STATUS.SUCCESS, { + cityId, + ranks: [], // ! redis 中积分排行榜 + recs, + teams, + }); } // 离开城池 diff --git a/game-server/test/gvgBattle.test.ts b/game-server/test/gvgBattle.test.ts index edbbafa8e..59c89f8a5 100644 --- a/game-server/test/gvgBattle.test.ts +++ b/game-server/test/gvgBattle.test.ts @@ -70,16 +70,16 @@ describe('gvg激战期测试', function () { }, (data) => { checkSuccessResponse(data); // 检查返回值中的 city - expect(data.data.cityId).to.be.an('number'); + expect(data.data.cityId).to.be.a('number'); expect(data.data.guardLeague).to.be.an('object'); - expect(data.data.guardLeague.leagueCode).to.be.an('string'); - expect(data.data.guardLeague.name).to.be.an('string'); - expect(data.data.guardLeague.icon).to.be.an('number'); - expect(data.data.guardStartTime).to.be.an('number'); - expect(data.data.startTime).to.be.an('number'); - expect(data.data.endTime).to.be.an('number'); - expect(data.data.ourTeamCnt).to.be.an('number'); - expect(data.data.oppTeamCnt).to.be.an('number'); + expect(data.data.guardLeague.leagueCode).to.be.a('string'); + expect(data.data.guardLeague.name).to.be.a('string'); + expect(data.data.guardLeague.icon).to.be.a('number'); + expect(data.data.guardStartTime).to.be.a('number'); + expect(data.data.startTime).to.be.a('number'); + expect(data.data.endTime).to.be.a('number'); + expect(data.data.ourTeamCnt).to.be.a('number'); + expect(data.data.oppTeamCnt).to.be.a('number'); done(); }); // }); @@ -93,7 +93,13 @@ describe('gvg激战期测试', function () { }, (data) => { checkSuccessResponse(data); // 检查 city 中的属性类型是否合法 - checkCity(data.data.city); + expect(data.data.cityId).to.be.a('number'); + expect(data.data.ranks).to.be.an('array'); + expect(data.data.recs).to.be.an('array'); + expect(data.data.teams).to.be.an('array'); + data.data.teams.forEach((team) => { + checkTeam(team); + }); done(); }); }); diff --git a/shared/db/GVGRec.ts b/shared/db/GVGRec.ts index fe92c7279..9332a157e 100644 --- a/shared/db/GVGRec.ts +++ b/shared/db/GVGRec.ts @@ -3,6 +3,7 @@ import { index, getModelForClass, prop, DocumentType, } from '@typegoose/typegoo import { GVG_REC_TYPE } from '../consts'; @index({ leagueCode: 1, guildCode: 1, configId: 1 }) +@index({ cityId: 1, configId: 1 }) @index({ createTime: -1 }) export default class GVGRec extends BaseModel { @@ -42,6 +43,13 @@ export default class GVGRec extends BaseModel { const result: GVGRecType[] = await GVGRecModel.find({ leagueCode, type }, { _id: 0, recId: 1, params: 1, createTime: 1 }).sort({ createTime: -1 }).limit(50).lean(); return result; } + + // 查询城池战报 + public static async findByCity(cityId: number, configId: number) { + const result: GVGRecType[] = await GVGRecModel.find({ cityId, configId }, { _id: 0, recId: 1, params: 1, createTime: 1 }).sort({ createTime: -1 }).limit(50).lean(); + return result; + } + } export const GVGRecModel = getModelForClass(GVGRec);