✨ feat(gvg): 玩家驻扎排行榜
This commit is contained in:
@@ -72,9 +72,11 @@ function randomRank(min: number, max: number, len: number) {
|
||||
}
|
||||
|
||||
// 根据ranks获取oppPlayer显示数据
|
||||
export async function getOppPlayerByRanks(serverId: number, groupId: number, vestigeId: number, ranks: number[]) {
|
||||
export async function getOppPlayerByRanks(serverId: number, groupId: number, serverType: number, vestigeId: number, ranks: number[]) {
|
||||
let serverNames = await getAllServerName();
|
||||
let opps = await GVGVestigeRankModel.findByRanks(groupId, vestigeId, ranks);
|
||||
let opps = await GVGVestigeRankModel.findByRanks(groupId, serverType, vestigeId, ranks);
|
||||
let roleIds = opps.map(cur => cur.roleId);
|
||||
let roles = await RoleModel.findByRoleIds(roleIds, 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt')
|
||||
let dicRankMap = gameData.gvgVestige.get(vestigeId);
|
||||
if(!dicRankMap) return [];
|
||||
let result: GVGVestigeOppPlayer[] = [];
|
||||
@@ -83,7 +85,8 @@ export async function getOppPlayerByRanks(serverId: number, groupId: number, ves
|
||||
let opp = opps.find(cur => cur.rank == rank);
|
||||
let dicCurRank = dicRankMap.get(rank);
|
||||
if(opp) {
|
||||
let role = <RoleType>opp.role;
|
||||
let role = roles.find(cur => cur.roleId == opp.roleId);
|
||||
if(!role) continue;
|
||||
let lineupce = opp.lineup.reduce((pre, cur) => pre + cur.ce, 0);
|
||||
obj.setByRole(role, serverNames, lineupce, dicCurRank?.score||0);
|
||||
} else {
|
||||
@@ -142,13 +145,13 @@ export function isRobot(roleId: string) {
|
||||
return roleId.startsWith('robot');
|
||||
}
|
||||
|
||||
export async function checkVestigeOppStatus(configId: number, groupId: number, vestigeId: number, roleId: string, myRank: number, targetRoleId: string, rank: number) {
|
||||
export async function checkVestigeOppStatus(configId: number, groupId: number, serverType: number, vestigeId: number, roleId: string, myRank: number, targetRoleId: string, rank: number) {
|
||||
|
||||
let myData = await GVGVestigeRankModel.findByRole(vestigeId, roleId);
|
||||
if(!myData) {
|
||||
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
||||
let oppRanks = refreshVestigeOppRanks(-1);
|
||||
myData = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, role, oppRanks );
|
||||
myData = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, serverType, role, oppRanks );
|
||||
}
|
||||
if(myData?.rank != myRank) return VESTIGE_OPP_STATUS.MY_RANK_CHANGE;
|
||||
|
||||
@@ -159,7 +162,7 @@ export async function checkVestigeOppStatus(configId: number, groupId: number, v
|
||||
let targetData = await GVGVestigeRankModel.findByRole(vestigeId, targetRoleId);
|
||||
if(targetData?.rank != rank) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE;
|
||||
}
|
||||
let lockResult = await GVGVestigeLockModel.chooseOppLock(groupId, vestigeId, rank, configId, roleId, targetRoleId);
|
||||
let lockResult = await GVGVestigeLockModel.chooseOppLock(groupId, serverType, vestigeId, rank, configId, roleId, targetRoleId);
|
||||
if(!lockResult) return VESTIGE_OPP_STATUS.OPP_IS_LOCKED;
|
||||
|
||||
return VESTIGE_OPP_STATUS.BATTLE;
|
||||
|
||||
@@ -145,7 +145,7 @@ 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.serverId);
|
||||
let server = serverGroups.find(cur => cur.serverId == obj.id);
|
||||
return { serverId: obj.id, groupId: server? server.groupId: obj.groupId }
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -20,8 +20,6 @@ import { sendMessageToUserWithSuc } from './pushService';
|
||||
import { SkinType } from '../db/Skin';
|
||||
import { LadderMatchModel } from '../db/LadderMatch';
|
||||
import { ArtifactModelType } from '../db/Artifact';
|
||||
import { GVGLeagueModel } from '../db/GVGLeague';
|
||||
import { GVGVestigeRankModel } from '../db/GVGVestigeRank';
|
||||
|
||||
interface Param {
|
||||
isInitRole?: boolean,
|
||||
@@ -443,7 +441,6 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
|
||||
let hero = await HeroModel.updateHeroInfo(roleId, hid, { ce });
|
||||
await PvpDefenseModel.updateCe(roleId, hid, ce); // 更新pvp防守阵战力
|
||||
await LadderMatchModel.updateCe(roleId, hid, ce);
|
||||
await GVGVestigeRankModel.updateCe(roleId, hid, ce);
|
||||
pushHeros.push({ hid, ce: hero.ce, incHeroCe: inc });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import { ActivityTimeLimitRankModel } from "../db/ActivityTimeLimitRank";
|
||||
import { sendMessageToServerWithSuc } from "./pushService";
|
||||
import { LadderMatchModel } from "../db/LadderMatch";
|
||||
import { completeRanks } from "./ladderService";
|
||||
import { GVGVestigeRankModel } from "../db/GVGVestigeRank";
|
||||
|
||||
|
||||
/**
|
||||
@@ -757,7 +758,7 @@ export class Rank {
|
||||
|
||||
let param: RoleRankInfo | GuildRankInfo;
|
||||
if (this.infoKey == REDIS_KEY.USER_INFO) {
|
||||
if (this.key != REDIS_KEY.LADDER && nowSeconds() - userInfo.updatedAt > 2 * 30 * 24 * 60 * 60) {
|
||||
if (this.key != REDIS_KEY.LADDER && this.key != REDIS_KEY.GVG_VESTIGE_MEMBER && nowSeconds() - userInfo.updatedAt > 2 * 30 * 24 * 60 * 60) {
|
||||
return null;
|
||||
}
|
||||
param = new RoleRankInfo(userInfo);
|
||||
@@ -992,7 +993,7 @@ async function setRankFirst(rankFirstRec: RankFirstType) {
|
||||
* @param type 排行榜类型
|
||||
* @param serverId 分服
|
||||
*/
|
||||
export async function setRankRedisFromDb(type: string, args?: { serverId?: number }) {
|
||||
export async function setRankRedisFromDb(type: string, args?: { serverId?: number, groupId?: number }) {
|
||||
if (type == REDIS_KEY.TOWER_RANK) {
|
||||
let serverId = args.serverId;
|
||||
let ranks = await RoleModel.getRank('tower', serverId, ROLE_SELECT.RANK);
|
||||
|
||||
@@ -16,6 +16,8 @@ import { RoleModel, RoleType } from '../db/Role';
|
||||
import { GuildType } from '../db/Guild';
|
||||
import { ActivityGroupModel } from '../db/ActivityGroup';
|
||||
import { LadderMatchModel, LadderMatchType } from '../db/LadderMatch';
|
||||
import { GVGServerGroupModel } from '../db/GVGServerGroup';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
/**
|
||||
* 在服务重新启动时,将信息存入redis
|
||||
@@ -52,7 +54,7 @@ export async function initAllRank() {
|
||||
await setRankRedisFromDb(REDIS_KEY.PVP_RANK, {});
|
||||
|
||||
for(let {id} of serverList) {
|
||||
await initRank(id);
|
||||
await initRankByServerId(id);
|
||||
await initActivitiesRank(id)
|
||||
}
|
||||
}
|
||||
@@ -62,7 +64,7 @@ export async function initAllRank() {
|
||||
*
|
||||
* @param serverId 服务器
|
||||
*/
|
||||
export async function initRank(serverId: number) {
|
||||
export async function initRankByServerId(serverId: number) {
|
||||
// console.log('*****', 'initRank')
|
||||
await setRankRedisFromDb(REDIS_KEY.TOWER_RANK, { serverId });
|
||||
await setRankRedisFromDb(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
|
||||
|
||||
Reference in New Issue
Block a user