🐞 fix(gvg): 后加入的玩家不可领取之前的遗迹奖励
This commit is contained in:
@@ -23,7 +23,7 @@ import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestig
|
|||||||
import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
||||||
import { addGVGActive, getGVGActive } from "../../../services/gvg/gvgPrepareService";
|
import { addGVGActive, getGVGActive } from "../../../services/gvg/gvgPrepareService";
|
||||||
import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService";
|
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 { checkBattleHeroesByHid } from "../../../services/normalBattleService";
|
||||||
import { Rank } from "../../../services/rankService";
|
import { Rank } from "../../../services/rankService";
|
||||||
import { getAllServerName } from "../../../services/redisService";
|
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);
|
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 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 canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId);
|
||||||
let { canReceiveBox, boxPreview } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks);
|
let { canReceiveBox, boxPreview } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks);
|
||||||
|
|
||||||
@@ -509,7 +510,8 @@ export class GVGProduceHandler {
|
|||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
|
|
||||||
let { configId } = getGVGPeriodData();
|
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);
|
let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId);
|
||||||
if(canReceiveLeagueRanks.length <= 0 && canReceivePlayerRanks.length <= 0) return resResult(STATUS.GVG_RECEIVE_NO_RANK_REWARD);
|
if(canReceiveLeagueRanks.length <= 0 && canReceivePlayerRanks.length <= 0) return resResult(STATUS.GVG_RECEIVE_NO_RANK_REWARD);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { pinus } from "pinus";
|
import { pinus } from "pinus";
|
||||||
import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig";
|
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 { getServerCreateTime } from "../redisService";
|
||||||
import { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, PUSH_ROUTE } from "../../consts";
|
import { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, PUSH_ROUTE } from "../../consts";
|
||||||
import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
|
import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
|
||||||
@@ -25,6 +25,7 @@ import { sendMessageToGuildWithSuc } from "../pushService";
|
|||||||
import { GVGCityModel } from "../../db/GVGCity";
|
import { GVGCityModel } from "../../db/GVGCity";
|
||||||
import { GVGRoleDataModel } from "../../db/GVGRoleData";
|
import { GVGRoleDataModel } from "../../db/GVGRoleData";
|
||||||
import { getGVGGroupIdOfServer } from "../serverService";
|
import { getGVGGroupIdOfServer } from "../serverService";
|
||||||
|
import { UserGuildModel } from "../../db/UserGuild";
|
||||||
|
|
||||||
// 定时器相关
|
// 定时器相关
|
||||||
export async function createNewGVGConfig() {
|
export async function createNewGVGConfig() {
|
||||||
@@ -297,7 +298,8 @@ export async function getContribute(myUserData: GVGUserDataType) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getLeagueRankBox(configId: number, leagueCode: string, roleId: string) {
|
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 canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId);
|
||||||
let { canReceiveBox } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks);
|
let { canReceiveBox } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks);
|
||||||
return { canReceiveBox }
|
return { canReceiveBox }
|
||||||
@@ -311,4 +313,27 @@ export async function getGroupKey(serverId: number) {
|
|||||||
let groupId = await getGVGGroupIdOfServer(serverId);
|
let groupId = await getGVGGroupIdOfServer(serverId);
|
||||||
return `g${groupId}`;
|
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;
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ import Role, { RoleType } from '../db/Role';
|
|||||||
import { genCode } from '../pubUtils/util';
|
import { genCode } from '../pubUtils/util';
|
||||||
import { GuildType } from './Guild';
|
import { GuildType } from './Guild';
|
||||||
import { LEAGUE_AUTH } from '../consts';
|
import { LEAGUE_AUTH } from '../consts';
|
||||||
|
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||||
|
|
||||||
class Member {
|
class Member {
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
@@ -12,6 +13,8 @@ class Member {
|
|||||||
guildCode: string;
|
guildCode: string;
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
auth: number;
|
auth: number;
|
||||||
|
@prop({ required: true })
|
||||||
|
time: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@index({ leagueCode: 1, status: 1 })
|
@index({ leagueCode: 1, status: 1 })
|
||||||
@@ -68,7 +71,7 @@ export default class GVGLeague extends BaseModel {
|
|||||||
const doc = new GVGLeagueModel();
|
const doc = new GVGLeagueModel();
|
||||||
const leagueCode = genCode(6);
|
const leagueCode = genCode(6);
|
||||||
let _leader = <RoleType>leader;
|
let _leader = <RoleType>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);
|
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;
|
delete update._id;
|
||||||
|
|
||||||
@@ -128,7 +131,7 @@ export default class GVGLeague extends BaseModel {
|
|||||||
public static async joinGuild(leagueCode: string, guild: GuildType) {
|
public static async joinGuild(leagueCode: string, guild: GuildType) {
|
||||||
const { code, memberCnt, leader, members } = guild;
|
const { code, memberCnt, leader, members } = guild;
|
||||||
let _leader = <RoleType>leader;
|
let _leader = <RoleType>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 },
|
const league: GVGLeagueType = await GVGLeagueModel.findOneAndUpdate({ leagueCode, status: 1 },
|
||||||
{ $push: { guildCodes: code, members: { $each: _members } }, $inc: { guildCnt: 1, memberCnt: memberCnt }
|
{ $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) {
|
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;
|
return league;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,6 +210,11 @@ export default class GVGLeague extends BaseModel {
|
|||||||
let leagues: GVGLeagueType[] = await GVGLeagueModel.find({ isAuto: true, status: 1 }).lean();
|
let leagues: GVGLeagueType[] = await GVGLeagueModel.find({ isAuto: true, status: 1 }).lean();
|
||||||
return leagues
|
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);
|
export const GVGLeagueModel = getModelForClass(GVGLeague);
|
||||||
|
|||||||
@@ -61,8 +61,9 @@ export default class GVGVestigeLeagueRank extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async getCanReceiveRanks(configId: number, leagueCode: string, roleId: string) {
|
public static async getCanReceiveRanks(configId: number, leagueCode: string, roleId: string, joinTime: number) {
|
||||||
let result: GVGVestigeLeagueRankType[] = await GVGVestigeLeagueRankModel.find({ configId, leagueCode, rank: { $gt: 0 }, receiveMembers: { $nin: [roleId] } }).lean();
|
console.log('##### joinTime', joinTime);
|
||||||
|
let result: GVGVestigeLeagueRankType[] = await GVGVestigeLeagueRankModel.find({ configId, leagueCode, rank: { $gt: 0 }, day: { $gt: joinTime }, receiveMembers: { $nin: [roleId] } }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user