diff --git a/game-server/app.ts b/game-server/app.ts index ff9a3cd71..3d1f85f95 100644 --- a/game-server/app.ts +++ b/game-server/app.ts @@ -203,7 +203,7 @@ async function treatStartLogic(app: _pinus.Application) { if(app.getServerType() != 'systimer') { timeTaskService.initHiddenData(); } - if(app.getServerType() == 'guild'|| app.getServerType() == 'chat'|| app.getServerType() == 'connector') { + if(app.getServerType() == 'guild'|| app.getServerType() == 'chat'|| app.getServerType() == 'connector' || app.getServerType() == 'systimer' || app.getServerType() == 'gm') { setGVGServerGroup(); } if(app.getServerType() == 'guild') { diff --git a/game-server/app/servers/guild/handler/guildHandler.ts b/game-server/app/servers/guild/handler/guildHandler.ts index b5efc15d4..44d7093d1 100644 --- a/game-server/app/servers/guild/handler/guildHandler.ts +++ b/game-server/app/servers/guild/handler/guildHandler.ts @@ -32,6 +32,7 @@ import { GuildActiveModel } from '../../../db/GuildActive'; import { leaveRaceActivityToRemote, leaveRaceWhenDismissToRemote, leaveRaceWhenQuitGuildToRemote } from '../../../services/guildActivity/guildActivityService'; import { getGVGInfoInGuild } from '../../../services/gvg/gvgService'; import { guildAbdicateToLeague, guildDismissToLeague, memberQuitGuildToLeague } from '../../../services/gvg/gvgTeamService'; +import { leaveCity } from '../../../services/gvg/gvgBattleService'; export default function (app: Application) { @@ -624,6 +625,7 @@ export class GuildHandler { changeGuildActivity('', serverId, roleId, sid); leaveRaceWhenQuitGuildToRemote(serverId, guildCode, roleId); guildPayQuitGuild(serverId, code, roleId); + leaveCity(true, roleId, serverId, guildCode); return resResult(STATUS.SUCCESS, { hasGuild: role.hasGuild }); } @@ -665,6 +667,7 @@ export class GuildHandler { reportTAEvent(memberRoleId, TA_EVENT.GUILD_QUIT, { name: guild.name, way: GUILD_QUIT_WAY.KICK }); leaveRaceWhenQuitGuildToRemote(serverId, code, memberRoleId); guildPayQuitGuild(serverId, code, memberRoleId); + leaveCity(true, memberRoleId, serverId, code); return resResult(STATUS.SUCCESS, { memberCnt: guild.memberCnt }); } diff --git a/game-server/app/servers/guild/handler/gvgManageHandler.ts b/game-server/app/servers/guild/handler/gvgManageHandler.ts index c445fa709..28ffea314 100644 --- a/game-server/app/servers/guild/handler/gvgManageHandler.ts +++ b/game-server/app/servers/guild/handler/gvgManageHandler.ts @@ -4,7 +4,7 @@ import { resResult } from "../../../pubUtils/util"; import { GuildModel, GuildType } from "../../../db/Guild"; import { GVGLeagueModel, GVGLeagueType } from "../../../db/GVGLeague"; import { GVGLeagueApplyModel } from "../../../db/GVGLeagueApply"; -import { calLeagueCe, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService"; +import { calLeagueCe, getGroupIdOfServer, getGroupKey, getGVGConfig, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService"; import { checkCanManage, checkGuildLeader, checkLeagueAuth, createLeague, getLeagueApplyData, getLeagueInviteData, getMyAuth, joinGuildToLeague, updateGVGBattleLeagueInfo } from "../../../services/gvg/gvgTeamService"; import { LeagueGuildInfo, LeagueListInfo, LeagueMemberListInfo, LeagueSimpleInfo } from "../../../domain/gvgField/returnData"; import { getAllServerName, getServerName, isRoleOnline, updateUserInfo } from "../../../services/redisService"; @@ -18,6 +18,7 @@ import { sendMailByContent, sendMailToGuildByContent, sendMailToLeagueByContent import { getGVGCities } from "../../../services/gvg/gvgBattleService"; import { addLeagueRenameRecord, changeNoticeMessage, guildQuitLeagueRecord } from "../../../services/gvg/gvgRecService"; import { LeagueLeader } from "../../../domain/rank"; +import GVGCity from "../../../db/GVGCity"; export default function (app: Application) { new HandlerService(app, {}); @@ -479,6 +480,9 @@ export class GVGManageHandler { const guildCode = session.get('guildCode'); const { leagueCode: targetLeagueCode } = msg; + const { configId, period } = getGVGPeriodData(); + if(period != GVG_PERIOD.TEAM) return resResult(STATUS.GVG_NOT_TEAM_PERIOD); + const groupKey = await getGroupKey(serverId); const checkResult = await checkCanManage(serverId); if(checkResult.code != 0) return checkResult; @@ -501,6 +505,7 @@ export class GVGManageHandler { await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_DISSMISS, { leagueCode: myLeague.leagueCode }); await sendMailToGuildByContent(MAIL_TYPE.LEAGUE_DISSMISS, guildCode, { params: [ myLeague.name ]}); } + await GVGCity.leagueDismiss(configId, groupKey, targetLeagueCode); // 返回 return resResult(STATUS.SUCCESS, { diff --git a/game-server/app/services/gvg/gvgService.ts b/game-server/app/services/gvg/gvgService.ts index ace91c34a..02e23f41f 100644 --- a/game-server/app/services/gvg/gvgService.ts +++ b/game-server/app/services/gvg/gvgService.ts @@ -44,7 +44,7 @@ export async function createNewGVGConfig() { let needDissmissLeagueId: string[] = [], needDissmissLeagueCodes: string[] = []; for(let league of autoLeagues) { let groupKey = await getGroupKey(league.serverId); - if(!await GVGCityModel.checkLeagueHasGuard(config.configId, groupKey, league.leagueCode)) { + if(!await GVGCityModel.checkLeagueHasGuard(groupKey, league.leagueCode)) { needDissmissLeagueId.push(league._id); needDissmissLeagueCodes.push(league.leagueCode); } diff --git a/shared/db/GVGCity.ts b/shared/db/GVGCity.ts index 6bd49190c..9c09e1d2e 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, groupKey: string, leagueCode: string) { - return await GVGCityModel.exists({ configId: { $lte: configId }, groupKey, guardLeague: leagueCode, hasGuard: true }); + public static async checkLeagueHasGuard(groupKey: string, leagueCode: string) { + return await GVGCityModel.exists({ groupKey, guardLeague: leagueCode, hasGuard: true }); } // 查询联军驻守情况 @@ -120,6 +120,10 @@ export default class GVGCity extends BaseModel { if(icon != undefined) updateInfo.guardLeagueIcon = icon; await GVGCityModel.updateMany({ guardLeague: leagueCode }, { $set: updateInfo }); } + + public static async leagueDismiss(configId: number, groupKey: string, leagueCode: string) { + await GVGCityModel.updateMany({ configId, groupKey, guardLeague: leagueCode }, { $set: { hasGuard: false, guardLeague: '', guardLeagueIcon: 0, guardLeagueName: '' } }) + } }