✨ feat(gvg): 添加红点
This commit is contained in:
@@ -283,7 +283,7 @@ export class GuildHandler {
|
||||
}
|
||||
|
||||
let result = await getMyGuildInfo(roleId, sid, userGuild, guild, serverId, session);
|
||||
let gvg = await getGVGInfoInGuild(guild);
|
||||
let gvg = await getGVGInfoInGuild(roleId, guild);
|
||||
return resResult(STATUS.SUCCESS, { ...result, gvg });
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { pinus } from "pinus";
|
||||
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 { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, SHOP_REFRESH_TYPE } from "../../consts";
|
||||
import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
|
||||
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
|
||||
import { GVGServerGroupModel } from "../../db/GVGServerGroup";
|
||||
@@ -12,6 +12,17 @@ import { GVG } from "../../pubUtils/dicParam";
|
||||
import { ServerlistModel } from "../../db/Serverlist";
|
||||
import { GuildModel, GuildType } from "../../db/Guild";
|
||||
import { checkHasCities } from "./gvgBattleService";
|
||||
import { GVGLeagueApplyModel } from "../../db/GVGLeagueApply";
|
||||
import { GVGMainData, LeagueContributeInfo } from "../../domain/gvgField/returnData";
|
||||
import { Contribute, GVGUserDataModel, GVGUserDataType } from "../../db/GVGUserData";
|
||||
import { GVGUserItemModel } from "../../db/GVGUserItem";
|
||||
import { GVGUserTaskModel } from "../../db/GVGUserTask";
|
||||
import { getMyAuth } from "./gvgTeamService";
|
||||
import { pick } from "underscore";
|
||||
import { calFighterContribute, calProducerContribute } from "./gvgPrepareService";
|
||||
import { calVestigeLeagueBoxRewards } from "./gvgFightService";
|
||||
import { GVGVestigeLeagueRankModel } from "../../db/GVGVestigeLeagueRank";
|
||||
import { GVGVestigeSumRankModel } from "../../db/GVGVestigeSumRank";
|
||||
|
||||
// 定时器相关
|
||||
export async function createNewGVGConfig() {
|
||||
@@ -187,15 +198,28 @@ export async function getServersByGroupId(groupId: number) {
|
||||
}).map(obj => obj.serverId);
|
||||
}
|
||||
|
||||
export async function getGVGInfoInGuild(guild: GuildType) {
|
||||
export async function getGVGInfoInGuild(roleId: string, guild: GuildType) {
|
||||
let hasLeague = !!guild.leagueCode;
|
||||
let serverId = guild.serverId;
|
||||
let { configId, period, countdownTime } = getGVGPeriodData();
|
||||
let type = await getGVGServerType(serverId);
|
||||
return {
|
||||
hasLeague,
|
||||
configId, period, countdownTime,
|
||||
type
|
||||
|
||||
if(hasLeague) {
|
||||
return {
|
||||
hasLeague,
|
||||
configId, period, countdownTime,
|
||||
type,
|
||||
applyCnt: await getApplyCnt(guild.leagueCode),
|
||||
...await getMainData(roleId, guild.leagueCode, configId, period, countdownTime, type),
|
||||
leagueDetailRank: await getLeagueRankBox(configId, guild.leagueCode, roleId),
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
hasLeague,
|
||||
configId, period, countdownTime,
|
||||
type,
|
||||
invitationCnt: await getInviteCnt(guild.code)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,4 +233,63 @@ export async function calLeagueCe(league: GVGLeagueType) {
|
||||
export async function checkGVGPeriod(p : GVG_PERIOD) {
|
||||
let { period } = getGVGPeriodData();
|
||||
return period == p;
|
||||
}
|
||||
|
||||
// —————— 红点相关 —————— //
|
||||
// 邀请
|
||||
export async function getInviteCnt(guildCode: string) {
|
||||
let invitation = await GVGLeagueApplyModel.findInviteFromGuildWithoutPopulate(guildCode);
|
||||
return invitation.length
|
||||
}
|
||||
|
||||
// 申请
|
||||
export async function getApplyCnt(leagueCode: string) {
|
||||
let applies = await GVGLeagueApplyModel.findApplyFromLeagueWithoutPopulate(leagueCode);
|
||||
return applies.length
|
||||
}
|
||||
|
||||
export async function getMainData(roleId: string, leagueCode: string, configId: number, period: number, countdownTime: number, serverType: number) {
|
||||
let data = new GVGMainData(configId, period, countdownTime, serverType);
|
||||
|
||||
let league = await GVGLeagueModel.findByCode(leagueCode);
|
||||
if(league) {
|
||||
data.setLeague(league, {});
|
||||
|
||||
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, league.leagueCode);
|
||||
data.setLeagueParpare(leaguePrepare);
|
||||
data.setTechQueue(leaguePrepare.techQueue);
|
||||
|
||||
let userData = await GVGUserDataModel.findByRole(configId, league.leagueCode, roleId);
|
||||
let items = await GVGUserItemModel.findByRole(configId, league.leagueCode, roleId);
|
||||
let tasks = await GVGUserTaskModel.findByRole(configId, league.leagueCode, roleId);
|
||||
data.setPlayerInfo(userData, getMyAuth(league, roleId), undefined, undefined, items, tasks);
|
||||
data.setLeagueCe(await calLeagueCe(league));
|
||||
data.setConstribute(await getContribute(userData));
|
||||
}
|
||||
|
||||
let myInfo = pick(data.myInfo, ['auth', 'items', 'tasks', 'receivedLv']);
|
||||
return { ...pick(data, ['guildCnt', 'leagueLv', 'techQueue', 'constribute']), myInfo }
|
||||
}
|
||||
|
||||
export async function getContribute(myUserData: GVGUserDataType) {
|
||||
const { contribute = new Contribute(), box = [] } = myUserData||{};
|
||||
|
||||
const result: LeagueContributeInfo[] = [];
|
||||
for(let curJob of [LEAGUE_JOB.PRODUCER, LEAGUE_JOB.FIGHTER]) {
|
||||
let sumContribute = curJob == LEAGUE_JOB.PRODUCER? calProducerContribute(contribute): calFighterContribute(contribute);
|
||||
let boxReceived = box.filter(boxId => {
|
||||
let dicBox = gameData.gvgContributeBox.get(boxId);
|
||||
return dicBox.job == curJob;
|
||||
});
|
||||
let disObj = new LeagueContributeInfo(curJob, sumContribute, boxReceived);
|
||||
result.push(disObj)
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function getLeagueRankBox(configId: number, leagueCode: string, roleId: string) {
|
||||
let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, leagueCode);
|
||||
let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId);
|
||||
let { canReceiveBox } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks);
|
||||
return { canReceiveBox }
|
||||
}
|
||||
@@ -41,6 +41,11 @@ export default class GVGLeagueApply extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findApplyFromLeagueWithoutPopulate(leagueCode: string) {
|
||||
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ leagueCode, type: GVG_APPLY_TYPE.APPLY }).select('_id').lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findApplyFromLeague(leagueCode: string) {
|
||||
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ leagueCode, type: GVG_APPLY_TYPE.APPLY })
|
||||
.select({ _id: 0, guild: 1, guildCode: 1 })
|
||||
@@ -63,6 +68,11 @@ export default class GVGLeagueApply extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findInviteFromGuildWithoutPopulate(guildCode: string) {
|
||||
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ guildCode, type: GVG_APPLY_TYPE.INVITE }).select('_id').lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findInviteFromGuild(guildCode: string) {
|
||||
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ guildCode, type: GVG_APPLY_TYPE.INVITE })
|
||||
.select({ _id: 0, guild: 1, guildCode: 1 })
|
||||
|
||||
@@ -25,7 +25,7 @@ export default class GVGUserItem extends BaseModel {
|
||||
expireTime: number;
|
||||
|
||||
public static async findByRole(configId: number, leagueCode: string, roleId: string) {
|
||||
const result: GVGUserItemType[] = await GVGUserItemModel.find({ configId, leagueCode, roleId, expireTime: { $gte: nowSeconds() } }, { _id: 0, id: 1, count: 1 }).lean();
|
||||
const result: GVGUserItemType[] = await GVGUserItemModel.find({ configId, leagueCode, roleId, expireTime: { $gte: nowSeconds() }, count: { $gt: 0 } }, { _id: 0, id: 1, count: 1 }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { RoleType } from "../../db/Role";
|
||||
import { GVGLeagueType } from "../../db/GVGLeague";
|
||||
import { GVGLeaguePrepareType } from "../../db/GVGLeaguePrepare";
|
||||
import { GVGLeaguePrepareType, Tech } from "../../db/GVGLeaguePrepare";
|
||||
import { GVGUserDataType } from "../../db/GVGUserData";
|
||||
import { GuildType } from "../../db/Guild";
|
||||
import { GVGLeagueFarmType } from "../../db/GVGLeagueFarm";
|
||||
@@ -82,9 +82,11 @@ export class GVGMainData {
|
||||
// 内政相关
|
||||
resources: LeagueResource = new LeagueResource(); // 联盟的物资
|
||||
activeTech: number[] = []; // 已激活了的科技树的id
|
||||
techQueue: Tech[];
|
||||
maxMemberCnt: number; // 进入备战期总玩家人数
|
||||
producerCnt: number; // 贤臣人数
|
||||
fighterCnt: number; // 猛将人数
|
||||
constribute: LeagueContributeInfo[];
|
||||
|
||||
sumTime: number = 0; // 今日贡献结算时间 10位时间戳
|
||||
|
||||
@@ -147,6 +149,14 @@ export class GVGMainData {
|
||||
setCities(cities: number[]) {
|
||||
this.cities = cities;
|
||||
}
|
||||
|
||||
setTechQueue(techQueue: Tech[]) {
|
||||
this.techQueue = techQueue;
|
||||
}
|
||||
|
||||
setConstribute(constribute: LeagueContributeInfo[]) {
|
||||
this.constribute = constribute;
|
||||
}
|
||||
}
|
||||
|
||||
export class LeagueListInfo {
|
||||
|
||||
Reference in New Issue
Block a user