From f2a2aa112786f3be8d8445dc454bd2e01e286c60 Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 29 Mar 2023 11:49:25 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(gvg):=20=E5=90=8E=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E7=9A=84=E7=8E=A9=E5=AE=B6=E4=B8=8D=E5=8F=AF=E9=A2=86?= =?UTF-8?q?=E5=8F=96=E4=B9=8B=E5=89=8D=E7=9A=84=E9=81=97=E8=BF=B9=E5=A5=96?= =?UTF-8?q?=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/guild/handler/gvgFightHandler.ts | 8 +++-- game-server/app/services/gvg/gvgService.ts | 29 +++++++++++++++++-- shared/db/GVGLeague.ts | 14 +++++++-- shared/db/GVGVestigeLeagueRank.ts | 5 ++-- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/game-server/app/servers/guild/handler/gvgFightHandler.ts b/game-server/app/servers/guild/handler/gvgFightHandler.ts index 58fd61fcf..feeca38fe 100644 --- a/game-server/app/servers/guild/handler/gvgFightHandler.ts +++ b/game-server/app/servers/guild/handler/gvgFightHandler.ts @@ -23,7 +23,7 @@ import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestig import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService"; import { addGVGActive, getGVGActive } from "../../../services/gvg/gvgPrepareService"; import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService"; -import { getGroupKey, getGVGPeriodData } from "../../../services/gvg/gvgService"; +import { getGroupKey, getGVGPeriodData, getMemberJoinLeagueTime } from "../../../services/gvg/gvgService"; import { checkBattleHeroesByHid } from "../../../services/normalBattleService"; import { Rank } from "../../../services/rankService"; import { getAllServerName } from "../../../services/redisService"; @@ -444,7 +444,8 @@ export class GVGProduceHandler { const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, false, { groupKey, day: getDayKeyInfo() }, { roleId }, serverNames); let yesterdayRank = await GVGVestigeLeagueRankModel.getYesterdayRank(myLeague.leagueCode); - let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode, roleId); + let joinTime = await getMemberJoinLeagueTime(myLeague.leagueCode, roleId, myLeague); + let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode, roleId, joinTime); let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId); let { canReceiveBox, boxPreview } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks); @@ -509,7 +510,8 @@ export class GVGProduceHandler { if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); let { configId } = getGVGPeriodData(); - let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode, roleId); + let joinTime = await getMemberJoinLeagueTime(myLeague.leagueCode, roleId, myLeague); + let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode, roleId, joinTime); let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId); if(canReceiveLeagueRanks.length <= 0 && canReceivePlayerRanks.length <= 0) return resResult(STATUS.GVG_RECEIVE_NO_RANK_REWARD); diff --git a/game-server/app/services/gvg/gvgService.ts b/game-server/app/services/gvg/gvgService.ts index 301185a8a..5476f080f 100644 --- a/game-server/app/services/gvg/gvgService.ts +++ b/game-server/app/services/gvg/gvgService.ts @@ -1,6 +1,6 @@ import { pinus } from "pinus"; import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig"; -import { getTimeFun, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil"; +import { getSeconds, getTimeFun, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil"; import { getServerCreateTime } from "../redisService"; import { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, PUSH_ROUTE } from "../../consts"; import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague"; @@ -25,6 +25,7 @@ import { sendMessageToGuildWithSuc } from "../pushService"; import { GVGCityModel } from "../../db/GVGCity"; import { GVGRoleDataModel } from "../../db/GVGRoleData"; import { getGVGGroupIdOfServer } from "../serverService"; +import { UserGuildModel } from "../../db/UserGuild"; // 定时器相关 export async function createNewGVGConfig() { @@ -297,7 +298,8 @@ export async function getContribute(myUserData: GVGUserDataType) { } export async function getLeagueRankBox(configId: number, leagueCode: string, roleId: string) { - let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, leagueCode, roleId); + let joinTime = await getMemberJoinLeagueTime(leagueCode, roleId); + let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, leagueCode, roleId, joinTime); let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId); let { canReceiveBox } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks); return { canReceiveBox } @@ -311,4 +313,27 @@ export async function getGroupKey(serverId: number) { let groupId = await getGVGGroupIdOfServer(serverId); return `g${groupId}`; } +} + +/** + * 之前gvgLeague表的members没有记录加入联军时间,所以如果查询没有time的话,根据userGuild的time来更新一下这个数据 + * + * 获取玩家加入联军时间 + * @param leagueCode 联军id + * @param roleId + * @param league 联军表数据 + * @returns + */ +export async function getMemberJoinLeagueTime(leagueCode: string, roleId: string, league?: GVGLeagueType) { + if(!league) league = await GVGLeagueModel.findByCode(leagueCode, 'members'); + let members = league?.members||[]; + let member = members.find(cur => cur.roleId == roleId); + if(!member) return 0; + if(!member.time) { + let userGuild = await UserGuildModel.getMyGuild(roleId, 'createdAt'); + let time = getSeconds(userGuild.createdAt); + await GVGLeagueModel.setMemberTime(leagueCode, roleId, time); + return time; + } + return member.time; } \ No newline at end of file diff --git a/shared/db/GVGLeague.ts b/shared/db/GVGLeague.ts index b72be4411..1c249ad93 100644 --- a/shared/db/GVGLeague.ts +++ b/shared/db/GVGLeague.ts @@ -4,6 +4,7 @@ import Role, { RoleType } from '../db/Role'; import { genCode } from '../pubUtils/util'; import { GuildType } from './Guild'; import { LEAGUE_AUTH } from '../consts'; +import { nowSeconds } from '../pubUtils/timeUtil'; class Member { @prop({ required: true }) @@ -12,6 +13,8 @@ class Member { guildCode: string; @prop({ required: true }) auth: number; + @prop({ required: true }) + time: number; } @index({ leagueCode: 1, status: 1 }) @@ -68,7 +71,7 @@ export default class GVGLeague extends BaseModel { const doc = new GVGLeagueModel(); 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 })); + let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.LEADER: LEAGUE_AUTH.MEMBER, guildCode: code, time: nowSeconds() })); 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; @@ -128,7 +131,7 @@ export default class GVGLeague extends BaseModel { public static async joinGuild(leagueCode: string, guild: GuildType) { const { code, memberCnt, leader, members } = guild; let _leader = leader; - let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.SUB_LEADER: LEAGUE_AUTH.MEMBER, guildCode: code })); + let _members = members.map(roleId => ({ roleId, auth: _leader.roleId == roleId? LEAGUE_AUTH.SUB_LEADER: LEAGUE_AUTH.MEMBER, guildCode: code, time: nowSeconds() })); const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $push: { guildCodes: code, members: { $each: _members } }, $inc: { guildCnt: 1, memberCnt: memberCnt } @@ -185,7 +188,7 @@ export default class GVGLeague extends BaseModel { } public static async joinMember(leagueCode: string, roleId: string, guildCode: string) { - const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $push: { members: { roleId, auth: LEAGUE_AUTH.MEMBER, guildCode } }, $inc: { memberCnt: 1 } }, { new: true }).lean(); + const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 }, { $push: { members: { roleId, auth: LEAGUE_AUTH.MEMBER, guildCode, time: nowSeconds() } }, $inc: { memberCnt: 1 } }, { new: true }).lean(); return league; } @@ -207,6 +210,11 @@ export default class GVGLeague extends BaseModel { let leagues: GVGLeagueType[] = await GVGLeagueModel.find({ isAuto: true, status: 1 }).lean(); return leagues } + + public static async setMemberTime(leagueCode: string, roleId: string, time: number) { + let league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1, 'members.roleId': roleId }, { $set: { 'members.$.time': time} }, { new: true }).lean(); + return league + } } export const GVGLeagueModel = getModelForClass(GVGLeague); diff --git a/shared/db/GVGVestigeLeagueRank.ts b/shared/db/GVGVestigeLeagueRank.ts index a4cfdad77..31ebd7c62 100644 --- a/shared/db/GVGVestigeLeagueRank.ts +++ b/shared/db/GVGVestigeLeagueRank.ts @@ -61,8 +61,9 @@ export default class GVGVestigeLeagueRank extends BaseModel { return result; } - public static async getCanReceiveRanks(configId: number, leagueCode: string, roleId: string) { - let result: GVGVestigeLeagueRankType[] = await GVGVestigeLeagueRankModel.find({ configId, leagueCode, rank: { $gt: 0 }, receiveMembers: { $nin: [roleId] } }).lean(); + public static async getCanReceiveRanks(configId: number, leagueCode: string, roleId: string, joinTime: number) { + console.log('##### joinTime', joinTime); + let result: GVGVestigeLeagueRankType[] = await GVGVestigeLeagueRankModel.find({ configId, leagueCode, rank: { $gt: 0 }, day: { $gt: joinTime }, receiveMembers: { $nin: [roleId] } }).lean(); return result; }