✨ feat(pvp): 巅峰演武战区化

This commit is contained in:
luying
2023-03-18 16:59:39 +08:00
parent da86251116
commit e52c7b5241
25 changed files with 341 additions and 191 deletions
+3 -3
View File
@@ -17,7 +17,7 @@ import { sendMessageToAllWithSuc, sendMessageToCityWithSuc, sendMessageToGuildWi
import { comBtlLvInvalid } from './comBattleService';
import { gameData } from '../pubUtils/data';
import { RegionModel } from '../db/Region';
import { getGroupIdOfServer, getServersByGroupId } from './gvg/gvgService';
import { getGVGGroupIdOfServer, getGVGServersByGroupId } from './serverService';
import { GVGLeagueModel } from '../db/GVGLeague';
export * from './chatChannelService';
@@ -167,7 +167,7 @@ export async function pushGroupMsgToRoom(msg: GroupMessageType) {
await sendMessageToCityWithSuc(parseInt(arr[0]), parseInt(arr[1]), PUSH_ROUTE.GROUP_MSG, { ...msg, roleInfo });
} else if (msg.channel == CHANNEL_PREFIX.GVG) {
let groupId = parseInt(msg.channelId);
let serverIds = await getServersByGroupId(groupId);
let serverIds = await getGVGServersByGroupId(groupId);
for(let serverId of serverIds) {
await sendMessageToServerWithSuc(serverId, PUSH_ROUTE.GROUP_MSG, { ...msg, roleInfo });
}
@@ -236,7 +236,7 @@ async function recentGroupMsgs(roomId: string, count?: number) {
* @returns
*/
export async function recentServerGroupMsgs(serverId: number, count?: number) {
let groupId = await getGroupIdOfServer(serverId);
let groupId = await getGVGGroupIdOfServer(serverId);
const result = await recentGroupMsgs(groupRoomId(CHANNEL_PREFIX.GVG, groupId), count);
return result;
}
@@ -32,7 +32,7 @@ import { isDevelopEnv } from "../utilService";
import { addGVGReward, combinePushItem } from "./gvgItemService";
import { calFighterContribute } from "./gvgPrepareService";
import { addVestigeLeagueRankRec, addVestigeRankMessage } from "./gvgRecService";
import { getGroupIdOfServer, getGroupKey, getGVGServerType, getPeriodByTime } from "./gvgService";
import { getGroupKey, getGVGServerType, getPeriodByTime } from "./gvgService";
let gvgFightTime = undefined;
+11 -47
View File
@@ -1,15 +1,13 @@
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, LEAGUE_JOB, PUSH_ROUTE, SHOP_REFRESH_TYPE } from "../../consts";
import { 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";
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 { GuildModel, GuildType } from "../../db/Guild";
import { GVGLeagueApplyModel } from "../../db/GVGLeagueApply";
import { GVGMainData, LeagueContributeInfo } from "../../domain/gvgField/returnData";
@@ -26,6 +24,7 @@ import { GVGTeamModel } from "../../db/GVGTeam";
import { sendMessageToGuildWithSuc } from "../pushService";
import { GVGCityModel } from "../../db/GVGCity";
import { GVGRoleDataModel } from "../../db/GVGRoleData";
import { getGVGGroupIdOfServer } from "../serverService";
// 定时器相关
export async function createNewGVGConfig() {
@@ -33,11 +32,11 @@ export async function createNewGVGConfig() {
const config = await GVGConfigModel.createNewConfig(teamTime, prepareTime, battleTime, scheduleTime);
try {
await pinus.app.rpc.guild.guildRemote.setGVGConfig.broadcast(config);
await pinus.app.rpc.guild.guildRemote.setGVGServerGroup.broadcast();
await pinus.app.rpc.chat.chatRemote.setGVGServerGroup.broadcast();
await pinus.app.rpc.connector.connectorRemote.setGVGServerGroup.broadcast();
await pinus.app.rpc.gm.gmRemote.setGVGServerGroup.broadcast();
await pinus.app.rpc.systimer.systimerRemote.setGVGServerGroup.broadcast();
await pinus.app.rpc.guild.guildRemote.setServerGroup.broadcast();
await pinus.app.rpc.chat.chatRemote.setServerGroup.broadcast();
await pinus.app.rpc.connector.connectorRemote.setServerGroup.broadcast();
await pinus.app.rpc.gm.gmRemote.setServerGroup.broadcast();
await pinus.app.rpc.systimer.systimerRemote.setServerGroup.broadcast();
await pinus.app.rpc.guild?.guildRemote?.clearBattleMemory.broadcast();
} catch(e) {
console.log('remote未初始完');
@@ -165,7 +164,7 @@ export function getGVGPeriodData() {
}
}
console.log('######## getGVGPeriodData', configId, teamTime, prepareTime, battleTime, scheduleTime)
// console.log('######## getGVGPeriodData', configId, teamTime, prepareTime, battleTime, scheduleTime)
return { configId, period, countdownTime };
}
@@ -203,41 +202,6 @@ export async function initLeaguePrepare() {
}
}
export async function setGVGServerGroup() {
const servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
const serverGroups = await GVGServerGroupModel.findByTime(nowSeconds());
pinus.app.set('gvgServerGroup', servers.map(obj => {
let server = serverGroups.find(cur => cur.serverId == obj.id);
return { serverId: obj.id, groupId: server? server.groupId: obj.groupId }
}));
}
// 查询本小区所在的战区
// gvgServerGroup: id-小区唯一id serverId-小区在大区下的id
export async function getGroupIdOfServer(id: number) {
let arr: { serverId: number; groupId: number }[] = pinus.app.get('gvgServerGroup')||[];
let obj = arr.find(cur => cur.serverId == id);
return obj?.groupId||0;
}
// 查询当前和本小区同一个战区的其他小区
export async function getServersOfSameGroup(type: GVG_SERVER_TYPE, id: number) {
if(type == GVG_SERVER_TYPE.SINGLE) return [id];
let groupId = await getGroupIdOfServer(id);
return await getServersByGroupId(groupId);
}
export async function getServersByGroupId(groupId: number) {
let arr: { serverId: number; groupId: number }[] = pinus.app.get('gvgServerGroup')||[];
let serverCreateTimes = await getAllServerCreateTime();
return arr.filter(obj => {
let openTime = parseInt(serverCreateTimes[obj.serverId]);
return obj.groupId == groupId && getServerTypeByTime(openTime) == GVG_SERVER_TYPE.MULTI;
}).map(obj => obj.serverId);
}
export async function getGVGInfoInGuild(roleId: string, guild: GuildType) {
let hasLeague = !!guild.leagueCode;
let serverId = guild.serverId;
@@ -344,7 +308,7 @@ export async function getGroupKey(serverId: number) {
if(serverType == GVG_SERVER_TYPE.SINGLE) {
return `s${serverId}`;
} else {
let groupId = await getGroupIdOfServer(serverId);
let groupId = await getGVGGroupIdOfServer(serverId);
return `g${groupId}`;
}
}
+53 -24
View File
@@ -27,6 +27,8 @@ import { getVipPvpChallengeMaxCnt } from './activity/monthlyTicketService';
import { getHeroesAttributes } from './playerCeService';
import { setPvpSettleSeasonNumToRemote } from './timeTaskService';
import { ArtifactModel } from '../db/Artifact';
import { getPVPGroupIdOfServer, getPvpServersByGroupId } from './serverService';
import { findKeys } from './redisService';
/**
* 返回对手三人信息
@@ -61,15 +63,16 @@ export async function getEnemies(oppPlayers: OppPlayer[], winStreakNum: number)
* @param pLv 我的排名
*/
export async function refreshEnemies(role: RoleType, seasonNum: number, sumScore: number, score: number, pLv: number) {
let { roleId } = role;
let { roleId, serverId } = role;
let groupId = await getPVPGroupIdOfServer(serverId);
let chosenOpps: string[] = [];
let pvpHistoryOppParam: PvpOppCreateParam[] = [];
let opp = dicPvpOpponent.values()
for (let dicOpp of opp) {
let pvpHistoryOpp: PvpOppCreateParam; // 是否筛选成功
if (sumScore >= PVP.PVP_MATCH_ROBOT) {
pvpHistoryOpp = await matchPlayer(seasonNum, chosenOpps, roleId, pLv, dicOpp); // 按照等级匹配对手
if (!pvpHistoryOpp) pvpHistoryOpp = await matchPlayerByRank(seasonNum, chosenOpps, roleId, dicOpp.id); // 当前后分数段没有时,返回前一名的玩家
pvpHistoryOpp = await matchPlayer(groupId, seasonNum, chosenOpps, roleId, pLv, dicOpp); // 按照等级匹配对手
if (!pvpHistoryOpp) pvpHistoryOpp = await matchPlayerByRank(groupId, seasonNum, chosenOpps, roleId, dicOpp.id); // 当前后分数段没有时,返回前一名的玩家
if (!pvpHistoryOpp) pvpHistoryOpp = await matchRobot(chosenOpps, role, score, dicOpp);
} else {
pvpHistoryOpp = await matchRobot(chosenOpps, role, score, dicOpp);
@@ -97,9 +100,9 @@ export async function refreshEnemies(role: RoleType, seasonNum: number, sumScore
return oppPlayers;
}
export async function matchPlayerByRank(seasonNum: number, chosenOpps: string[], roleId: string, pos: number) {
export async function matchPlayerByRank(groupId: number, seasonNum: number, chosenOpps: string[], roleId: string, pos: number) {
// console.log('matchPlayerByRank', JSON.stringify(oppPlayers))
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum });
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId });
let ridRanks = new Array<number>(); // 已经被使用了的排名
for (let curRoleId of chosenOpps) {
let rankLv = await r.getMyRank({ roleId: robotIdComBack(curRoleId) });
@@ -167,18 +170,19 @@ export async function matchPlayerByRank(seasonNum: number, chosenOpps: string[],
let pvpdefense = await PvpDefenseModel.findByRoleIdIncludeAll(oppRoleId);
if (!pvpdefense || pvpdefense.seasonNum != seasonNum || !pvpdefense.hasDefense) return null;
let pvpHistoryOpp = await generPlayerOppHis(pvpdefense, roleId, pos);
let pvpHistoryOpp = await generPlayerOppHis(pvpdefense, roleId, pos, groupId);
if (!pvpHistoryOpp) return null;
chosenOpps.push(pvpHistoryOpp.oppRoleId);
return pvpHistoryOpp;
}
async function matchPlayer(seasonNum: number, chosenOpps: string[], roleId: string, pLv: number, dicOpp: DicPvpOpponent) {
async function matchPlayer(groupId: number, seasonNum: number, chosenOpps: string[], roleId: string, pLv: number, dicOpp: DicPvpOpponent) {
// console.log('matchPlayer', JSON.stringify(oppPlayers))
let serverIds = await getPvpServersByGroupId(groupId);
let { id: pos, minLv, maxLv } = dicOpp
let range = await PvpDefenseModel.findByTeamLv(seasonNum, pLv + minLv, pLv + maxLv);
let range = await PvpDefenseModel.findByTeamLv(serverIds, seasonNum, pLv + minLv, pLv + maxLv);
range = range.filter(cur => {
return chosenOpps.indexOf(makeRobotId(cur.roleId)) == -1;
});
@@ -193,7 +197,7 @@ async function matchPlayer(seasonNum: number, chosenOpps: string[], roleId: stri
index = getRandSingleIndex(range.length);
result = range[index];
}
let pvpHistoryOpp = await generPlayerOppHis(result, roleId, pos);
let pvpHistoryOpp = await generPlayerOppHis(result, roleId, pos, groupId);
if (!pvpHistoryOpp) return null;
chosenOpps.push(pvpHistoryOpp.oppRoleId);
@@ -206,14 +210,14 @@ async function matchPlayer(seasonNum: number, chosenOpps: string[], roleId: stri
* @param roleId 自己的玩家id
* @param pos 刷新这个对手的位置
*/
async function generPlayerOppHis(pvpdefense: PvpDefenseType, roleId: string, pos: number) {
async function generPlayerOppHis(pvpdefense: PvpDefenseType, roleId: string, pos: number, groupId: number) {
let { heroScores, defense } = pvpdefense;
if(!defense) return false;
let { warId, heroes: defenseHeroes } = defense;
let role = <RoleType>pvpdefense.role;
let seasonNum: number = pinus.app.get('pvpSeasonNum');
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum });
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId });
let rankLv = await r.getMyRank({ roleId: role.roleId });
let dbHeroes = await HeroModel.findByRole(role.roleId, [{ field: 'ce', sortBy: -1 }]);
let heroes = new Array<PvpEnemies>();
@@ -565,14 +569,18 @@ export async function generPVPOppRecInfo(isSuccess: boolean, curOpp: OppPlayer,
let resultMaxRank = getPvpRankMaxRewardsBySeasonNum(pvpConfig.seasonNum);//根据排行榜的奖励表,获得最大排名挡位的最小值,其余不在结算中结算的玩家按照最大排名挡位在登录或进入pvp时结算
if(!resultMaxRank) return;
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum: pvpConfig.seasonNum }, false, resultMaxRank.min - 1);
let allRank = <RoleRankInfo[]>(await r.getRankByRange());
console.log('******** allRank', 0, resultMaxRank.min - 2, allRank)
for(let { rank, roleId } of allRank) {
console.log('******** pvpSeasonEnd: ', rank, roleId);
let pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
let { pvpSeasonResult } = await sendPVPRewardToUser(pvpDefense, pvpConfig.seasonNum, pvpConfig.seasonEndTime);
reportTAEvent(roleId, TA_EVENT.PVP_SEASON_END, { top_rank: rank, hero_score: pvpSeasonResult.heroScores })
let pvpKeys = await findKeys(`${REDIS_KEY.PVP_RANK}:${pvpConfig.seasonNum}:`);
for(let key of pvpKeys) {
let [,, groupId] = key.split(':');
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum: pvpConfig.seasonNum, groupId: parseInt(groupId) }, false, resultMaxRank.min - 1);
let allRank = <RoleRankInfo[]>(await r.getRankByRange());
console.log('******** allRank', 0, resultMaxRank.min - 2, allRank)
for(let { rank, roleId } of allRank) {
console.log('******** pvpSeasonEnd: ', rank, roleId);
let pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
let { pvpSeasonResult } = await sendPVPRewardToUser(pvpDefense, pvpConfig.seasonNum, pvpConfig.seasonEndTime);
reportTAEvent(roleId, TA_EVENT.PVP_SEASON_END, { top_rank: rank, hero_score: pvpSeasonResult.heroScores })
}
}
await PvpDefenseModel.resetDefense();
let settledPvpConfig = await PVPConfigModel.setReward(pvpConfig.seasonNum);
@@ -648,8 +656,9 @@ async function resetPvpScores(pvpDefense: PvpDefenseType, pvpSeasonResult: PvpSe
* @param rankLv
*/
export async function savePvpSeasonResult(pvpDefense: PvpDefenseType, seasonNum: number, seasonEndTime: number, rankLv?: number) {
let groupId = await getPVPGroupIdOfServer(pvpDefense.serverId);
if (!rankLv) {
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum });
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId });
rankLv = await r.getMyRank({ roleId: pvpDefense.roleId });// 获得排行榜排名
}
let pvpRankReward: DicRankRewads = getPvpRankRewardsByRank(seasonNum, rankLv);
@@ -681,7 +690,7 @@ export async function savePvpSeasonResult(pvpDefense: PvpDefenseType, seasonNum:
receivedBox, score, seasonWinNum, heroScores, rankLv, heroGoods, rankGoods, show: true, newScore, newHeroScores, seasonEndTime
});//结算修改玩家pvp信息
if(newScore > 0) {
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum: seasonNum + 1 });
let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum: seasonNum + 1, groupId });
await r.setRankWithRoleInfo(pvpDefense.roleId, newScore, Date.now());
}
@@ -719,9 +728,7 @@ export async function generPvpLineupCe(roleId: string, lineupCe: LineupCe[], att
export function getPvpSeasonStatus() {
let seasonEndTime: number = pinus.app.get('pvpSeasonEndTime');
let seasonStartTime: number = pinus.app.get('pvpSeasonStartTime');
let seasonRewardTime: number = pinus.app.get('pvpSeasonRewardTime');
let { seasonEndTime, seasonStartTime, seasonRewardTime } = getPvpTime();
let now = nowSeconds();
if(now >= seasonStartTime && now < seasonEndTime) {
return PVP_SEASON_STATUS.START;
@@ -732,6 +739,28 @@ export function getPvpSeasonStatus() {
}
}
interface PvpTime {
seasonEndTime: number, seasonStartTime: number, seasonRewardTime: number
}
export function getPvpTime(): PvpTime {
return {
seasonEndTime: pinus.app.get('pvpSeasonEndTime'),
seasonStartTime: pinus.app.get('pvpSeasonStartTime'),
seasonRewardTime: pinus.app.get('pvpSeasonRewardTime')
}
}
export async function getPvpTimeFromRemote(): Promise<PvpTime> {
let serverType = pinus.app.getServerType();
if(serverType == 'battle') {
return getPvpTime();
} else {
let battleServers = pinus.app.getServersByType('battle');
let server = getRandSingleEelm(battleServers);
return await pinus.app.rpc.battle.battleRemote.getPvpTime.toServer(server.id);
}
}
export function checkPvpSeasonIsStart() {
let status = getPvpSeasonStatus();
return status == PVP_SEASON_STATUS.START;
+16 -11
View File
@@ -21,6 +21,7 @@ import { GVGLeagueModel, GVGLeagueType } from "../db/GVGLeague";
import { GVGVestigeLeagueRankModel } from "../db/GVGVestigeLeagueRank";
import { getDayKeyInfo } from "./gvg/gvgFightService";
import { ActivityMiniGameModel } from "../db/ActivityMiniGame";
import { getPVPServerGroup } from "./serverService";
/**
@@ -1082,18 +1083,22 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe
} else if (type == REDIS_KEY.PVP_RANK) {
let seasonNum = await CounterModel.getCounter(COUNTER.PVP_SEASON_NUM);
if(seasonNum > 0) {
let keyName = new KeyName(type, { seasonNum })
await delKeys(keyName.getName());
let ranks = await PvpDefenseModel.getRank(seasonNum);//获得全服前1000名的排名,加入到redis中
let r = new Rank(type, { seasonNum });
r.setIsInit(true);
for (let { roleId, role: _role, score, updatedAt } of ranks) {
let role = <RoleType>_role;
if (!role) {
continue;
let serverGroup = await getPVPServerGroup();
for(let [groupId, serverIds] of serverGroup) {
let keyName = new KeyName(type, { seasonNum, groupId })
await delKeys(keyName.getName());
let ranks = await PvpDefenseModel.getRank(serverIds, seasonNum);//获得全服前1000名的排名,加入到redis中
console.log('#####', seasonNum, groupId, serverIds, ranks.length)
let r = new Rank(type, { seasonNum, groupId });
r.setIsInit(true);
for (let { roleId, role: _role, score, updatedAt } of ranks) {
let role = <RoleType>_role;
if (!role) {
continue;
}
await r.setRankWithRoleInfo(roleId, score, updatedAt.getTime(), role);
}
await r.setRankWithRoleInfo(roleId, score, updatedAt.getTime(), role);
}
}
} else if (type == REDIS_KEY.TOP_LINEUP_RANK) {
+96
View File
@@ -0,0 +1,96 @@
import { pinus } from "pinus";
import { GVG_SERVER_TYPE, SERVER_GROUP_FUN_TYPE } from "../consts";
import { ServerGroupModel } from "../db/ServerGroup";
import { ServerlistModel } from "../db/Serverlist";
import { nowSeconds } from "../pubUtils/timeUtil";
import { getServerTypeByTime } from "./gvg/gvgService";
import { getAllServerCreateTime } from "./redisService";
export async function setServerGroup() {
const servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
let now = nowSeconds();
const gvgServerGroup = await ServerGroupModel.findByTime(now, SERVER_GROUP_FUN_TYPE.GVG);
const pvpServerGroup = await ServerGroupModel.findByTime(now, SERVER_GROUP_FUN_TYPE.PVP);
// const arenaServerGroup = await ServerGroupModel.findByTime(now, SERVER_GROUP_FUN_TYPE.ARENA);
pinus.app.set('gvgServerGroup', servers.map(obj => {
let server = gvgServerGroup.find(cur => cur.serverId == obj.id);
return [obj.id, server? server.groupId: obj.groupId]
}));
pinus.app.set('pvpServerGroup', servers.map(obj => {
let server = pvpServerGroup.find(cur => cur.serverId == obj.id);
return [obj.id, server? server.groupId: obj.groupId]
}));
// pinus.app.set('arenaServerGroup', servers.map(obj => {
// let server = arenaServerGroup.find(cur => cur.serverId == obj.id);
// return [obj.id, server? server.groupId: obj.groupId]
// }));
}
// GVG相关:查询本小区所在战区
export async function getGVGGroupIdOfServer(serverId: number) {
return await getGroupIdOfServer(serverId, SERVER_GROUP_FUN_TYPE.GVG);
}
// PVP相关:查询本小区所在战区
export async function getPVPGroupIdOfServer(serverId: number) {
return await getGroupIdOfServer(serverId, SERVER_GROUP_FUN_TYPE.PVP);
}
// 查询本小区所在的战区
export async function getGroupIdOfServer(serverId: number, fun: SERVER_GROUP_FUN_TYPE) {
let arr: number[][] = pinus.app.get(getPinusKeyOfFun(fun))||[];
let obj = arr.find(cur => cur[0] == serverId);
return obj[1]||0;
}
// 查询当前和本小区同一个战区的其他小区
export async function getGVGServersOfSameGroup(type: GVG_SERVER_TYPE, id: number) {
if(type == GVG_SERVER_TYPE.SINGLE) return [id];
let groupId = await getGroupIdOfServer(id, SERVER_GROUP_FUN_TYPE.GVG);
return await getServersByGroupId(groupId, SERVER_GROUP_FUN_TYPE.GVG);
}
export async function getPVPServersOfSameGroup(serverId: number) {
let groupId = await getGroupIdOfServer(serverId, SERVER_GROUP_FUN_TYPE.PVP);
return await getServersByGroupId(groupId, SERVER_GROUP_FUN_TYPE.PVP);
}
export async function getGVGServersByGroupId(groupId: number) {
return getServersByGroupId(groupId, SERVER_GROUP_FUN_TYPE.GVG);
}
export async function getPvpServersByGroupId(groupId: number) {
return getServersByGroupId(groupId, SERVER_GROUP_FUN_TYPE.PVP);
}
export async function getServersByGroupId(groupId: number, fun: SERVER_GROUP_FUN_TYPE) {
let arr: number[][] = pinus.app.get(getPinusKeyOfFun(fun))||[];
let serverCreateTimes = await getAllServerCreateTime();
return arr.filter(obj => {
let openTime = parseInt(serverCreateTimes[obj[0]]);
return obj[1] == groupId && getServerTypeByTime(openTime) == GVG_SERVER_TYPE.MULTI;
}).map(obj => obj[0]);
}
function getPinusKeyOfFun(fun: SERVER_GROUP_FUN_TYPE) {
switch(fun) {
case SERVER_GROUP_FUN_TYPE.GVG: return 'gvgServerGroup';
case SERVER_GROUP_FUN_TYPE.PVP: return 'pvpServerGroup';
case SERVER_GROUP_FUN_TYPE.ARENA: return 'arenaServerGroup';
default: return '';
}
}
export async function getPVPServerGroup() {
let now = nowSeconds();
const pvpServerGroup = await ServerGroupModel.findByTime(now, SERVER_GROUP_FUN_TYPE.PVP);
let map = new Map<number, number[]>();
for(let { serverId, groupId } of pvpServerGroup) {
if(!map.has(groupId)) map.set(groupId, []);
map.get(groupId).push(serverId);
}
return map
}
@@ -202,6 +202,13 @@ export async function setPvpSeasonNumToRemote(pvpConfig: PVPConfigType) {
await pinus.app.rpc.battle.battleRemote.setPvpSeasonNum.broadcast(pvpConfig);
await pinus.app.rpc.role.roleRemote.setPvpSeasonNum.broadcast(pvpConfig);
await pinus.app.rpc.connector.connectorRemote.setPvpSeasonNum.broadcast(pvpConfig);
await pinus.app.rpc.guild.guildRemote.setServerGroup.broadcast();
await pinus.app.rpc.chat.chatRemote.setServerGroup.broadcast();
await pinus.app.rpc.connector.connectorRemote.setServerGroup.broadcast();
await pinus.app.rpc.gm.gmRemote.setServerGroup.broadcast();
await pinus.app.rpc.systimer.systimerRemote.setServerGroup.broadcast();
await pinus.app.rpc.battle.battleRemote.setServerGroup.broadcast();
}
export async function setPvpSeasonNum(pvpConfig?: PVPConfigType) {