diff --git a/game-server/app/servers/guild/handler/gvgHandler.ts b/game-server/app/servers/guild/handler/gvgHandler.ts index 85f3e9804..b5141755d 100644 --- a/game-server/app/servers/guild/handler/gvgHandler.ts +++ b/game-server/app/servers/guild/handler/gvgHandler.ts @@ -4,7 +4,7 @@ import { GVGLeagueModel } from "../../../db/GVGLeague"; import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare"; import { GVGMainData, LeagueDistributeInfo, LeagueMemberDistributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData"; import { resResult } from "../../../pubUtils/util"; -import { getGVGConfig, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService"; +import { calLeagueCe, getGVGConfig, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService"; import { autoCreateLeague, checkCanChooseJob, checkCanPrepare, checkLeagueAuth, getMyAuth } from "../../../services/gvg/gvgTeamService"; import { getAllServerName } from "../../../services/redisService"; import { Distribute, GVGUserDataModel } from "../../../db/GVGUserData"; @@ -18,6 +18,7 @@ import { gameData } from "../../../pubUtils/data"; import { lockLeagueData } from "../../../services/redLockService"; import { addGVGReward, handleGVGCost } from "../../../services/gvg/gvgItemService"; import { RewardInter } from "../../../pubUtils/interface"; +import { GuildModel } from "../../../db/Guild"; export default function (app: Application) { new HandlerService(app, {}); @@ -62,6 +63,8 @@ export class GVGHandler { let { reward: dailyReward } = await getDailyLoginReward(roleId, roleName, sid, league.leagueCode, userData?.job); if(dailyReward) data.setFistLogin(dailyReward); + + data.setLeagueCe(await calLeagueCe(league)); } return resResult(STATUS.SUCCESS, data) diff --git a/game-server/app/servers/guild/handler/gvgManageHandler.ts b/game-server/app/servers/guild/handler/gvgManageHandler.ts index 8b0651f34..00cd1c196 100644 --- a/game-server/app/servers/guild/handler/gvgManageHandler.ts +++ b/game-server/app/servers/guild/handler/gvgManageHandler.ts @@ -5,7 +5,7 @@ import { GuildModel, GuildType } from "../../../db/Guild"; import { UserGuildModel } from "../../../db/UserGuild"; import { GVGLeagueModel, GVGLeagueType } from "../../../db/GVGLeague"; import { GVGLeagueApplyModel } from "../../../db/GVGLeagueApply"; -import { getGroupIdOfServer, getGVGPeriodData, getGVGServerType, getServersOfSameGroup } from "../../../services/gvg/gvgService"; +import { calLeagueCe, getGroupIdOfServer, 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"; @@ -74,6 +74,7 @@ export class GVGManageHandler { let data = new LeagueListInfo(league, serverNames); let hasApply = !!applies.find(cur => cur.leagueCode == league.leagueCode); data.setHasApply(hasApply); + data.setLeagueCe(await calLeagueCe(league)); result.push(data); } return resResult(STATUS.SUCCESS, { @@ -126,6 +127,7 @@ export class GVGManageHandler { await GVGLeagueApplyModel.createApply(league, guild, GVG_APPLY_TYPE.APPLY); let data = new LeagueListInfo(league, serverNames); data.setHasApply(true); + data.setLeagueCe(await calLeagueCe(league)); result.push(data); } @@ -185,7 +187,7 @@ export class GVGManageHandler { return resResult(STATUS.SUCCESS, { guildCnt: myLeague.guildCnt, memberCnt: myLeague.memberCnt, - leagueCe: myLeague.leagueCe + leagueCe: await calLeagueCe(myLeague), }); } @@ -261,7 +263,11 @@ export class GVGManageHandler { const invitations = await GVGLeagueApplyModel.findInviteFromGuild(guildCode); const applies = await GVGLeagueApplyModel.findApplyFromGuild(guildCode); - let result: LeagueListInfo[] = invitations.map(apply => getLeagueInviteData(apply, serverNames, applies)); + let result: LeagueListInfo[] = []; + for(let invitation of invitations) { + let obj = await getLeagueInviteData(invitation, serverNames, applies); + result.push(obj); + } // 返回 return resResult(STATUS.SUCCESS, { leagues: result }); @@ -404,7 +410,7 @@ export class GVGManageHandler { return resResult(STATUS.SUCCESS, { guildCnt: myLeague.guildCnt, memberCnt: myLeague.memberCnt, - leagueCe: myLeague.leagueCe, + leagueCe: await calLeagueCe(myLeague), }); } diff --git a/game-server/app/services/gvg/gvgService.ts b/game-server/app/services/gvg/gvgService.ts index 7daeeee0a..b417b0b21 100644 --- a/game-server/app/services/gvg/gvgService.ts +++ b/game-server/app/services/gvg/gvgService.ts @@ -3,14 +3,14 @@ import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig"; import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil"; import { getAllServerCreateTime, getServerCreateTime } from "../redisService"; import { GVG_PERIOD, GVG_SERVER_TYPE, SHOP_REFRESH_TYPE } from "../../consts"; -import { GVGLeagueModel } from "../../db/GVGLeague"; +import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague"; import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare"; import { GVGServerGroupModel } from "../../db/GVGServerGroup"; import { gameData } from "../../pubUtils/data"; import { getRandSingleEelm } from "../../pubUtils/util"; import { GVG } from "../../pubUtils/dicParam"; import { ServerlistModel } from "../../db/Serverlist"; -import { GuildType } from "../../db/Guild"; +import { GuildModel, GuildType } from "../../db/Guild"; // 定时器相关 export async function createNewGVGConfig() { @@ -190,4 +190,10 @@ export async function getGVGInfoInGuild(guild: GuildType) { configId, period, countdownTime, type } +} + +export async function calLeagueCe(league: GVGLeagueType) { + const guildCodes = league?.guildCodes||[]; + const guilds = await GuildModel.findByCodes(guildCodes); + return guilds.reduce((pre, guild) => pre + guild.guildCe, 0); } \ No newline at end of file diff --git a/game-server/app/services/gvg/gvgTeamService.ts b/game-server/app/services/gvg/gvgTeamService.ts index 12398e3bd..40821ebaa 100644 --- a/game-server/app/services/gvg/gvgTeamService.ts +++ b/game-server/app/services/gvg/gvgTeamService.ts @@ -12,7 +12,7 @@ import { GVG } from "../../pubUtils/dicParam"; import { getZeroPointD } from "../../pubUtils/timeUtil"; import { resResult } from "../../pubUtils/util"; import { sendMessageToUserWithSuc } from "../pushService"; -import { getCurPeriod, getGVGConfig, getGVGPeriodData, getGVGServerType } from "./gvgService"; +import { calLeagueCe, getCurPeriod, getGVGConfig, getGVGPeriodData, getGVGServerType } from "./gvgService"; /** * 自动创建联军 @@ -101,10 +101,11 @@ export function getLeagueApplyData(apply: GVGLeagueApplyType, serverNames: any, * @param applies 本军团向其他联军发出的申请 * @returns */ -export function getLeagueInviteData(invite: GVGLeagueApplyType, serverNames: any, applies: GVGLeagueApplyType[]) { +export async function getLeagueInviteData(invite: GVGLeagueApplyType, serverNames: any, applies: GVGLeagueApplyType[]) { let data = new LeagueListInfo(invite.league, serverNames); let hasApply = !!applies.find(cur => cur.leagueCode == invite.guildCode); data.setHasApply(hasApply); + data.setLeagueCe(await calLeagueCe(invite.league)) return data; } diff --git a/game-server/app/services/playerCeService.ts b/game-server/app/services/playerCeService.ts index c4df11656..16d9cc58c 100644 --- a/game-server/app/services/playerCeService.ts +++ b/game-server/app/services/playerCeService.ts @@ -455,7 +455,6 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve roleCe = await RoleCeModel.updateRoleCe(roleId, roleCeUpdate); let role = await RoleModel.incRoleInfo(roleId, { ...roleIncUpdate, ce: roleInc }, { ...roleUpdate, topLineup, topLineupCe }); let guild = await GuildModel.updateCe(roleId, roleInc); // 公会更新战力 - let league = await GVGLeagueModel.updateCe(roleId, roleInc); // 联军更新战力 saveCeChangeLog(role, roleInc, role.ce, type, ceChangeTxt); updateRank(roleId, serverId, topLineupCe, role, pushHeros, guild); @@ -463,9 +462,6 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve if(hasTopCeChange) await updateRoleOnlineInfo(roleId, { topLineupCe }); if(guild) { await updateUserInfo(REDIS_KEY.GUILD_INFO, guild.code, [{ field: 'guildCe', value: guild.guildCe }]); - } - if(league) { // TODO 联军排行榜需要更新数据 - } return { heroes, curRole: role } } diff --git a/shared/db/GVGLeague.ts b/shared/db/GVGLeague.ts index 6d5d47420..3460204a2 100644 --- a/shared/db/GVGLeague.ts +++ b/shared/db/GVGLeague.ts @@ -43,9 +43,6 @@ export default class GVGLeague extends BaseModel { @prop({ required: true, default: 0 }) memberCnt: number; // 玩家人数 - @prop({ required: true, default: 0 }) - leagueCe: number; // 联军总战力 - @prop({ required: true, default: false }) isAuto: boolean; // 是否是自动创建的 @@ -72,7 +69,7 @@ export default class GVGLeague extends BaseModel { const leagueCode = genCode(6); let _leader = leader; let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.LEADER: LEAGUE_AUTH.MEMBER, guildCode: code })); - const update = Object.assign(doc.toJSON(), { guildCodes: [code], name: `${name}联军`, guildCnt: 1, memberCnt, isAuto: true, leagueCe: guildCe, leader: _leader?._id, members: _members, leagueCode }, params); + const update = Object.assign(doc.toJSON(), { guildCodes: [code], name: `${name}联军`, guildCnt: 1, memberCnt, isAuto: true, leader: _leader?._id, members: _members, leagueCode }, params); delete update._id; const result: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ guildCodes: code, status: 1 }, { $setOnInsert: update }, { upsert: true, new: true }) @@ -123,7 +120,7 @@ export default class GVGLeague extends BaseModel { let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.SUB_LEADER: LEAGUE_AUTH.MEMBER, guildCode: code })); const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, - { $push: { guildCodes: code, members: { $each: _members } }, $inc: { guildCnt: 1, memberCnt: memberCnt, leagueCe: guildCe } + { $push: { guildCodes: code, members: { $each: _members } }, $inc: { guildCnt: 1, memberCnt: memberCnt } }, { new: true }).lean(); return league } @@ -139,7 +136,7 @@ export default class GVGLeague extends BaseModel { public static async quitGuild(leagueCode: string, guild: GuildType) { const { code, memberCnt, members, guildCe } = guild; const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, - { $pull: { guildCodes: code, members: { roleId: { $in: members } } }, $inc: { guildCnt: -1, memberCnt: -memberCnt, leagueCe: -guildCe } + { $pull: { guildCodes: code, members: { roleId: { $in: members } } }, $inc: { guildCnt: -1, memberCnt: -memberCnt } }, { new: true }).lean(); return league } @@ -164,18 +161,13 @@ export default class GVGLeague extends BaseModel { return league; } - public static async updateCe(roleId: string, incCe: number) { - const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ 'members.roleId': roleId, status: 1 }, { $inc: { leagueCe: incCe } }, { new: true }).lean(); - return league; - } - public static async joinMember(leagueCode: string, roleId: string, guildCode: string, ce: number) { - const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $push: { members: { roleId, auth: LEAGUE_AUTH.MEMBER, guildCode } }, $inc: { memberCnt: 1, leagueCe: ce } }, { new: true }).lean(); + const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $push: { members: { roleId, auth: LEAGUE_AUTH.MEMBER, guildCode } }, $inc: { memberCnt: 1 } }, { new: true }).lean(); return league; } public static async quitMember(leagueCode: string, roleId: string, ce: number) { - const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $pull: { members: { roleId } }, $inc: { memberCnt: -1, leagueCe: -ce } }, { new: true }).lean(); + const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $pull: { members: { roleId } }, $inc: { memberCnt: -1 } }, { new: true }).lean(); return league; } diff --git a/shared/domain/gvgField/returnData.ts b/shared/domain/gvgField/returnData.ts index f29955ee5..60e5032f5 100644 --- a/shared/domain/gvgField/returnData.ts +++ b/shared/domain/gvgField/returnData.ts @@ -95,7 +95,6 @@ export class GVGMainData { this.notice = league.notice; this.guildCnt = league.guildCnt; this.memberCnt = league.memberCnt; - this.leagueCe = league.leagueCe; } setLeagueParpare(leaguePrepare: GVGLeaguePrepareType) { @@ -121,6 +120,10 @@ export class GVGMainData { this.isFirst = true; this.leagueGoods = item; } + + setLeagueCe(leagueCe: number) { + this.leagueCe = leagueCe; + } } export class LeagueListInfo { @@ -143,12 +146,15 @@ export class LeagueListInfo { this.guildCnt = league.guildCnt; this.leaderName = (league.leader).roleName; this.leaderServerName = serverNames[(league.leader).serverId]; - this.leagueCe = league.leagueCe; } setHasApply(hasApply: boolean) { this.hasApply = hasApply; } + + setLeagueCe(leagueCe: number) { + this.leagueCe = leagueCe; + } } export class LeagueSimpleInfo extends LeagueListInfo { diff --git a/shared/resource/jsons/server_const.json b/shared/resource/jsons/server_const.json index e9d1ce6c6..8a7d9bb03 100644 --- a/shared/resource/jsons/server_const.json +++ b/shared/resource/jsons/server_const.json @@ -33,6 +33,6 @@ "DEBUG_TIME": 1, "CHECK_WORD": 1, "CAN_PAY": 1, - "SKIP_ENCODE": 0, + "SKIP_ENCODE": 1, "NEED_REBATE": 0 } \ No newline at end of file