diff --git a/game-server/app/servers/guild/handler/guildHandler.ts b/game-server/app/servers/guild/handler/guildHandler.ts index 94f6d8d7e..9ef3658ef 100644 --- a/game-server/app/servers/guild/handler/guildHandler.ts +++ b/game-server/app/servers/guild/handler/guildHandler.ts @@ -560,6 +560,8 @@ export class GuildHandler { const guild = await GuildModel.dismiss(code, serverId); if (!guild) return resResult(STATUS.GUILD_DELETE_ERROR); + if(guild.leagueCode) return resResult(STATUS.GVG_GUILD_HAS_LEAGUE); + await sendMailToGuildByContent(MAIL_TYPE.GUILD_DISSMISS, code, {}, guild); await UserGuildModel.dismiss(code); const { members } = guild; diff --git a/game-server/app/servers/guild/handler/gvgManageHandler.ts b/game-server/app/servers/guild/handler/gvgManageHandler.ts index 1d6d30288..8746115b2 100644 --- a/game-server/app/servers/guild/handler/gvgManageHandler.ts +++ b/game-server/app/servers/guild/handler/gvgManageHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession, ChannelService, HandlerService } from "pinus"; -import { CHANNEL_PREFIX, GUILD_AUTH, GVG_APPLY_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_AUTH, LEAGUE_MANAGE_TYPE, MAIL_TYPE, MSG_SOURCE, MSG_TYPE, PUSH_ROUTE, STATUS } from "../../../consts"; +import { CHANNEL_PREFIX, GUILD_AUTH, GVG_APPLY_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_AUTH, LEAGUE_MANAGE_TYPE, MAIL_TYPE, MSG_SOURCE, MSG_TYPE, PUSH_ROUTE, REDIS_KEY, STATUS } from "../../../consts"; import { resResult } from "../../../pubUtils/util"; import { GuildModel, GuildType } from "../../../db/Guild"; import { UserGuildModel } from "../../../db/UserGuild"; @@ -8,14 +8,14 @@ import { GVGLeagueApplyModel } from "../../../db/GVGLeagueApply"; import { calLeagueCe, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService"; import { checkCanManage, checkGuildLeader, checkLeagueAuth, createLeague, getLeagueApplyData, getLeagueInviteData, getMyAuth, joinGuildToLeague } from "../../../services/gvg/gvgTeamService"; import { LeagueGuildInfo, LeagueListInfo, LeagueMemberListInfo, LeagueSimpleInfo } from "../../../domain/gvgField/returnData"; -import { getAllServerName, getServerName } from "../../../services/redisService"; +import { getAllServerName, getServerName, updateUserInfo } from "../../../services/redisService"; import { GVG } from "../../../pubUtils/dicParam"; import { RoleModel } from "../../../db/Role"; import { GVGUserDataModel } from "../../../db/GVGUserData"; import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "../../../services/pushService"; import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare"; import { createGroupMsg, pushGroupMsgToRoom } from "../../../services/chatService"; -import { sendMailToGuildByContent } from "../../../services/mailService"; +import { sendMailByContent, sendMailToGuildByContent } from "../../../services/mailService"; import { getGVGCities } from "../../../services/gvg/gvgBattleService"; import { guildQuitLeagueRecord } from "../../../services/gvg/gvgRecService"; @@ -411,6 +411,7 @@ export class GVGManageHandler { // 发送消息 await sendMessageToGuildWithSuc(targetGuildCode, PUSH_ROUTE.LEAGUE_KICK, { leagueCode: myLeague.leagueCode }); guildQuitLeagueRecord(myLeague.leagueCode, guild.name); + await sendMailToGuildByContent(MAIL_TYPE.LEAGUE_KICK, guildCode, { params: [ myLeague.name ] }); // 返回 return resResult(STATUS.SUCCESS, { @@ -483,8 +484,10 @@ export class GVGManageHandler { await GVGLeagueModel.dismiss(myLeague.leagueCode); // 发送消息 for(let guildCode of myLeague.guildCodes) { - await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_DISSMISS, { leagueCode: myLeague.leagueCode }) + await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_DISSMISS, { leagueCode: myLeague.leagueCode }); + await sendMailToGuildByContent(MAIL_TYPE.LEAGUE_DISSMISS, guildCode, { params: [ myLeague.name ]}); } + // 返回 return resResult(STATUS.SUCCESS, { hasLeague: false @@ -555,7 +558,8 @@ export class GVGManageHandler { // 修改联军数据 members,leader myLeague = await GVGLeagueModel.abdicate(myLeague.leagueCode, roleId, targetRoleId, targetRole._id); // 推送 - await sendMessageToUserWithSuc(targetRoleId, PUSH_ROUTE.LEAGUE_ABDICATE, { leagueCode: myLeague.leagueCode }) + await sendMessageToUserWithSuc(targetRoleId, PUSH_ROUTE.LEAGUE_ABDICATE, { leagueCode: myLeague.leagueCode }); + await sendMailByContent(MAIL_TYPE.LEAGUE_ABDICATE, roleId, { params: [ myLeague.name ] }); let myAuth = getMyAuth(myLeague, roleId); // 返回 @@ -590,6 +594,12 @@ export class GVGManageHandler { // 修改联军数据 myLeague = await GVGLeagueModel.setInfo(targetLeagueCode, name, notice, icon); + if(name != undefined) { + await updateUserInfo(REDIS_KEY.LEAGUE_INFO, myLeague.leagueCode, [{ field: 'name', value: name }]); + } + if(icon != undefined) { + await updateUserInfo(REDIS_KEY.LEAGUE_INFO, myLeague.leagueCode, [{ field: 'icon', value: name }]); + } // 返回 return resResult(STATUS.SUCCESS, { diff --git a/game-server/app/services/gvg/gvgBattleService.ts b/game-server/app/services/gvg/gvgBattleService.ts index bc15cdfdb..e4c3cf511 100644 --- a/game-server/app/services/gvg/gvgBattleService.ts +++ b/game-server/app/services/gvg/gvgBattleService.ts @@ -1,5 +1,15 @@ import { GVGLeagueType } from "../../db/GVGLeague"; + +/** + * TODO 检查上周是否有占领城池 + * @param league + * @returns boolean 是否占领 + */ +export async function checkHasCities(league: GVGLeagueType) { + return false +} + /** * TODO 获取本联军上周占领的城池 * @param league diff --git a/game-server/app/services/gvg/gvgService.ts b/game-server/app/services/gvg/gvgService.ts index 2c0c75736..0eee25feb 100644 --- a/game-server/app/services/gvg/gvgService.ts +++ b/game-server/app/services/gvg/gvgService.ts @@ -11,6 +11,7 @@ import { getRandSingleEelm } from "../../pubUtils/util"; import { GVG } from "../../pubUtils/dicParam"; import { ServerlistModel } from "../../db/Serverlist"; import { GuildModel, GuildType } from "../../db/Guild"; +import { checkHasCities } from "./gvgBattleService"; // 定时器相关 export async function createNewGVGConfig() { @@ -24,7 +25,13 @@ export async function createNewGVGConfig() { } catch(e) { console.log('remote未初始完'); } - // TODO 每周自动解散一些联军 + // 每周自动解散一些联军 + let autoLeagues = await GVGLeagueModel.findAutoCreateLeague(); + let needDissmissLeagueId: string[] = []; + for(let league of autoLeagues) { + if(!await checkHasCities(league)) needDissmissLeagueId.push(league._id); + } + await GVGLeagueModel.dismissByIds(needDissmissLeagueId); return config; } diff --git a/game-server/app/services/gvg/gvgTeamService.ts b/game-server/app/services/gvg/gvgTeamService.ts index 64340de0a..437ad76d7 100644 --- a/game-server/app/services/gvg/gvgTeamService.ts +++ b/game-server/app/services/gvg/gvgTeamService.ts @@ -209,28 +209,20 @@ function getAuthFromManageType(type: LEAGUE_MANAGE_TYPE) { export async function memberJoinGuildToLeague(guild: GuildType, role: RoleType) { if(!guild.leagueCode) return; - let league = await GVGLeagueModel.joinMember(guild.leagueCode, guild.code, role.roleId); - // TODO redis联军更新 - console.log(league); + await GVGLeagueModel.joinMember(guild.leagueCode, guild.code, role.roleId); } export async function memberQuitGuildToLeague(guild: GuildType, role: RoleType) { if(!guild.leagueCode) return; - let league = await GVGLeagueModel.quitMember(guild.leagueCode, role.roleId); - // TODO redis联军更新 - console.log(league); + await GVGLeagueModel.quitMember(guild.leagueCode, role.roleId); } export async function guildDismissToLeague(guild: GuildType) { if(!guild.leagueCode) return; - let league = await GVGLeagueModel.quitGuild(guild.leagueCode, guild); - // TODO redis联军更新 - console.log(league); + await GVGLeagueModel.quitGuild(guild.leagueCode, guild); } export async function guildAbdicateToLeague(guild: GuildType, fromRoleId: string, toRole: RoleType) { if(!guild.leagueCode) return; - let league = await GVGLeagueModel.abdicateGuild(guild.leagueCode, fromRoleId, toRole.roleId, toRole._id); - // TODO redis联军更新 - console.log(league); + await GVGLeagueModel.abdicateGuild(guild.leagueCode, fromRoleId, toRole.roleId, toRole._id); } \ No newline at end of file diff --git a/shared/consts/constModules/mailConst.ts b/shared/consts/constModules/mailConst.ts index ade6a710c..aebd57b11 100644 --- a/shared/consts/constModules/mailConst.ts +++ b/shared/consts/constModules/mailConst.ts @@ -61,7 +61,10 @@ export enum MAIL_TYPE { GUILD_MAIL = 31, // 军团邮件 REBATE = 32, // 返利邮件 GROUP_SHOP_REFUND = 33, // 退费 - ARTIFACT_OVER = 34, // 退费 + ARTIFACT_OVER = 34, // 宝物数量超过 + LEAGUE_DISSMISS = 35, // 联军解散 + LEAGUE_KICK = 36, // 被踢出联军 + LEAGUE_ABDICATE = 37, // 被任命盟主 HELP_HARVEST = 38, // 帮收 }; diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index fabbc38a5..753fb7048 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -337,6 +337,7 @@ export const STATUS = { GVG_BATTLE_CITY_FULL: { code: 21331, simStr: '城市已满员' }, GVG_BATTLE_TEAM_INVALID: { code: 21332, simStr: '无效的队伍' }, GVG_CITY_NOT_FOUND: { code: 21333, simStr: '城池不存在' }, + GVG_GUILD_HAS_LEAGUE: { code: 21334, simStr: '需要先退出联军才能解散军团' }, // GVG征战中原 GVG_VESTIGE_ERR: { code: 21350, simStr: '今日未开放该遗迹' }, diff --git a/shared/db/GVGLeague.ts b/shared/db/GVGLeague.ts index 7af12e04f..845984207 100644 --- a/shared/db/GVGLeague.ts +++ b/shared/db/GVGLeague.ts @@ -146,6 +146,10 @@ export default class GVGLeague extends BaseModel { return league } + public static async dismissByIds(_ids: string[]) { + await GVGLeagueModel.updateMany({ _id: { $in: _ids } }, { $set: { status: 0 }}); + } + public static async abdicate(leagueCode: string, fromRoleId: string, toRoleId: string, leader: string) { let league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1, 'members.roleId': fromRoleId }, { $set: { 'members.$.auth': LEAGUE_AUTH.SUB_LEADER }}, { new: true }).lean(); league = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1, 'members.roleId': toRoleId }, { $set: { 'members.$.auth': LEAGUE_AUTH.LEADER, leader }}, { new: true }).lean(); @@ -179,6 +183,11 @@ export default class GVGLeague extends BaseModel { league = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1, 'members.roleId': toRoleId }, { $set: updateInfo }, { new: true }).lean(); return league } + + public static async findAutoCreateLeague() { + let leagues: GVGLeagueType[] = await GVGLeagueModel.find({ isAuto: true, status: 1 }).lean(); + return leagues + } } export const GVGLeagueModel = getModelForClass(GVGLeague);