pvp:重写pvp定时器任务逻辑
This commit is contained in:
@@ -4,7 +4,7 @@ import { redisClient, setUserInfo } from "./redisService";
|
||||
import { RoleType, RoleModel } from "../db/Role";
|
||||
import { GuildType, GuildModel } from "../db/Guild";
|
||||
import { HeroModel, HeroType, HeroUpdate } from "../db/Hero";
|
||||
import { SystemConfigModel } from "../db/SystemConfig";
|
||||
import { PVPConfigModel } from "../db/SystemConfig";
|
||||
import { PvpDefenseModel } from "../db/PvpDefense";
|
||||
import { gameData } from "../pubUtils/data";
|
||||
import { nowSeconds } from "../pubUtils/timeUtil";
|
||||
@@ -42,7 +42,7 @@ export class Rank {
|
||||
this.timelen = 0; break;
|
||||
case REDIS_KEY.RACE_ACTIVITY:
|
||||
this.timelen = 6; break;
|
||||
default:
|
||||
default:
|
||||
this.timelen = 10; break;
|
||||
}
|
||||
|
||||
@@ -238,9 +238,9 @@ export class Rank {
|
||||
role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK, true);
|
||||
}
|
||||
let { dungeonWarId, dungeonHeroes } = role;
|
||||
if(dungeonWarId > 0) {
|
||||
if (dungeonWarId > 0) {
|
||||
let cur = dungeonHeroes.find(cur => cur.battleId == dungeonWarId);
|
||||
let lineup = cur?cur.heroes: [];
|
||||
let lineup = cur ? cur.heroes : [];
|
||||
let heroes = await HeroModel.findByRole(roleId, [], HERO_SELECT.RANK_LINEUP);
|
||||
let arr = new Array<LineupParam>();
|
||||
for (let seqId of lineup) {
|
||||
@@ -259,7 +259,7 @@ export class Rank {
|
||||
let { showLineup, topLineup = [] } = role;
|
||||
let heroes = await HeroModel.findByRole(roleId, [], HERO_SELECT.RANK_LINEUP);
|
||||
let arr = new Array<LineupParam>();
|
||||
if(!showLineup) showLineup = topLineup.map(cur => cur.hid);
|
||||
if (!showLineup) showLineup = topLineup.map(cur => cur.hid);
|
||||
for (let hid of showLineup) {
|
||||
let curHero = heroes.find(cur => cur.hid == hid);
|
||||
if (curHero) {
|
||||
@@ -292,7 +292,7 @@ export class Rank {
|
||||
*/
|
||||
public async setRank(myId: myIdInter, score: number, timestamp: number, isInc = false) {
|
||||
let oldTop = await this.getRankByRank(0, 0);
|
||||
let oldScore = oldTop.length > 0? oldTop[0].num: 0;
|
||||
let oldScore = oldTop.length > 0 ? oldTop[0].num : 0;
|
||||
// 更新分数
|
||||
let newScore = score;
|
||||
if (this.isUnion) {
|
||||
@@ -383,7 +383,7 @@ export class Rank {
|
||||
}
|
||||
|
||||
for (let extraKey of this.extraKeys) {
|
||||
await this.setExInfoToParam(extraKey, param, { roleId }, {role});
|
||||
await this.setExInfoToParam(extraKey, param, { roleId }, { role });
|
||||
}
|
||||
|
||||
return await this.generFields(param);
|
||||
@@ -408,7 +408,7 @@ export class Rank {
|
||||
}
|
||||
|
||||
for (let extraKey of this.extraKeys) {
|
||||
await this.setExInfoToParam(extraKey, param, { guildCode }, { guild } );
|
||||
await this.setExInfoToParam(extraKey, param, { guildCode }, { guild });
|
||||
}
|
||||
|
||||
return await this.generFields(param);
|
||||
@@ -420,7 +420,7 @@ export class Rank {
|
||||
|
||||
let hasCurUser = await redisClient().hexistsAsync(this.infoKey, roleId);
|
||||
if (!hasCurUser) {
|
||||
if(!role) {
|
||||
if (!role) {
|
||||
role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK, true);
|
||||
}
|
||||
param = new RoleRankInfo(role, true);
|
||||
@@ -473,13 +473,13 @@ export class Rank {
|
||||
|
||||
let hasCurUser = await redisClient().hexistsAsync(extraKey, this.composeFields(extraKey, myId));
|
||||
if (!hasCurUser) {
|
||||
if(!hero) {
|
||||
if (!hero) {
|
||||
hero = await HeroModel.findByHidAndRole(myId.hid, myId.roleId, HERO_SELECT.RANK_LINEUP);
|
||||
}
|
||||
let arr = new Array<LineupParam>();
|
||||
let lineParam = new LineupParam(hero);
|
||||
arr.push(lineParam);
|
||||
if(this.key == REDIS_KEY.HERO_RANK) {
|
||||
if (this.key == REDIS_KEY.HERO_RANK) {
|
||||
param.setSingleHero(arr);
|
||||
} else {
|
||||
param.setTopLine(arr);
|
||||
@@ -487,7 +487,7 @@ export class Rank {
|
||||
} else {
|
||||
const info = await redisClient().hgetAsync(extraKey, this.composeFields(extraKey, myId));
|
||||
const infoObj = JSON.parse(info);
|
||||
if(this.key == REDIS_KEY.HERO_RANK) {
|
||||
if (this.key == REDIS_KEY.HERO_RANK) {
|
||||
param.setSingleHero(infoObj);
|
||||
} else {
|
||||
param.setTopLine(infoObj);
|
||||
@@ -503,7 +503,7 @@ export class Rank {
|
||||
}
|
||||
let { dungeonWarId, dungeonHeroes } = role;
|
||||
let cur = dungeonHeroes.find(cur => cur.battleId == dungeonWarId);
|
||||
let lineup = cur?cur.heroes: [];
|
||||
let lineup = cur ? cur.heroes : [];
|
||||
let heroes = await HeroModel.findByRole(myId.roleId, [], HERO_SELECT.RANK_LINEUP);
|
||||
let arr = new Array<LineupParam>();
|
||||
for (let seqId of lineup) {
|
||||
@@ -531,7 +531,7 @@ export class Rank {
|
||||
let { showLineup, topLineup = [] } = role;
|
||||
let heroes = await HeroModel.findByRole(myId.roleId, [], HERO_SELECT.HERO_DETAIL);
|
||||
let arr = new Array<LineupParam>();
|
||||
if(!showLineup) showLineup = topLineup.map(cur => cur.hid);
|
||||
if (!showLineup) showLineup = topLineup.map(cur => cur.hid);
|
||||
for (let hid of showLineup) {
|
||||
let curHero = heroes.find(cur => cur.hid == hid);
|
||||
if (curHero) {
|
||||
@@ -579,7 +579,7 @@ export class Rank {
|
||||
|
||||
let num = 0;
|
||||
for (let ii = 0; ii < rankFromDb.length; ii += 2) {
|
||||
if(num >= this.limit) break;
|
||||
if (num >= this.limit) break;
|
||||
|
||||
const field = rankFromDb[ii];
|
||||
let myId = this.decodeFields(this.key, field);
|
||||
@@ -589,7 +589,7 @@ export class Rank {
|
||||
|
||||
let param: RoleRankInfo | GuildRankInfo;
|
||||
if (this.infoKey == REDIS_KEY.USER_INFO) {
|
||||
if(nowSeconds() - userInfo.updatedAt > 2 * 30 * 24 * 60 * 60) {
|
||||
if (nowSeconds() - userInfo.updatedAt > 2 * 30 * 24 * 60 * 60) {
|
||||
continue;
|
||||
}
|
||||
param = new RoleRankInfo(userInfo, false);
|
||||
@@ -603,7 +603,7 @@ export class Rank {
|
||||
await this.setExInfoToParam(extraKey, param, myId, {});
|
||||
}
|
||||
ranks.push(param);
|
||||
num ++;
|
||||
num++;
|
||||
}
|
||||
return ranks
|
||||
}
|
||||
@@ -620,7 +620,7 @@ export class Rank {
|
||||
|
||||
let num = 0;
|
||||
for (let ii = 0; ii < rankFromDb.length; ii += 2) {
|
||||
if(num >= this.limit) break;
|
||||
if (num >= this.limit) break;
|
||||
|
||||
const field = rankFromDb[ii];
|
||||
let myId = this.decodeFields(this.key, field);
|
||||
@@ -630,7 +630,7 @@ export class Rank {
|
||||
|
||||
let param: RoleRankInfo | GuildRankInfo;
|
||||
if (this.infoKey == REDIS_KEY.USER_INFO) {
|
||||
if(nowSeconds() - userInfo.updatedAt > 2 * 30 * 24 * 60 * 60) {
|
||||
if (nowSeconds() - userInfo.updatedAt > 2 * 30 * 24 * 60 * 60) {
|
||||
continue;
|
||||
}
|
||||
param = new RoleRankInfo(userInfo, false);
|
||||
@@ -644,7 +644,7 @@ export class Rank {
|
||||
await this.setExInfoToParam(extraKey, param, myId, {});
|
||||
}
|
||||
ranks.push(param);
|
||||
num ++;
|
||||
num++;
|
||||
}
|
||||
return ranks
|
||||
}
|
||||
@@ -658,7 +658,7 @@ export class Rank {
|
||||
}
|
||||
// console.log('**getMyRank',key, this.composeFields(this.key, myId), this.key, myId)
|
||||
let myRank = await redisClient().zrevrankAsync(key, this.composeFields(this.key, myId));
|
||||
if(!myRank && myRank != 0) {
|
||||
if (!myRank && myRank != 0) {
|
||||
return 0;
|
||||
} else {
|
||||
return myRank + 1;
|
||||
@@ -726,36 +726,36 @@ export class Rank {
|
||||
|
||||
private handleTimestamp(timestamp: number = 0) {
|
||||
let l = timestamp.toString().length;
|
||||
if(l > this.timelen) {
|
||||
if (l > this.timelen) {
|
||||
timestamp = Math.floor(timestamp / Math.pow(10, l - this.timelen));
|
||||
}
|
||||
return timestamp
|
||||
}
|
||||
|
||||
private async checkMyRankAndPush(myId: myIdInter, oldScore: number, newScore: number) {
|
||||
if(this.isInit) return;
|
||||
if (this.isInit) return;
|
||||
let myRank = await this.getMyRank(myId);
|
||||
if(myRank == 1 && newScore > oldScore) {
|
||||
if (myRank == 1 && newScore > oldScore) {
|
||||
let serverId = this.keyName.serverId;
|
||||
let sid = await getWorldChannelSid(serverId);
|
||||
for(let { id, general } of gameData.rank) {
|
||||
for (let { id, general } of gameData.rank) {
|
||||
let redisKey = RANK_TYPE_TO_KEY.get(id);
|
||||
if(redisKey == this.key) {
|
||||
if(general == 1) {
|
||||
if (redisKey == this.key) {
|
||||
if (general == 1) {
|
||||
let r = new Rank(redisKey, { serverId }, false, 1);
|
||||
let ranks = <RoleRankInfo[]> await r.getRankByRange();
|
||||
if(ranks.length > 0) {
|
||||
let param = new GeneralRankParamRole(id, ranks[0]||new RoleRankInfo({}, false));
|
||||
pinus.app.rpc.chat.chatRemote.sendRankTopUpdated.toServer(sid, serverId, {...param, general});
|
||||
let ranks = <RoleRankInfo[]>await r.getRankByRange();
|
||||
if (ranks.length > 0) {
|
||||
let param = new GeneralRankParamRole(id, ranks[0] || new RoleRankInfo({}, false));
|
||||
pinus.app.rpc.chat.chatRemote.sendRankTopUpdated.toServer(sid, serverId, { ...param, general });
|
||||
}
|
||||
} else if (general = 2) {
|
||||
let r = new Rank(redisKey, { serverId }, false, 1);
|
||||
let ranks = <RoleRankInfo[]> await r.getRankByRange();
|
||||
let ranks = <RoleRankInfo[]>await r.getRankByRange();
|
||||
let hero: HeroUpdate;
|
||||
if(ranks.length > 0) {
|
||||
if (ranks.length > 0) {
|
||||
hero = await HeroModel.getMyTopHero(ranks[0].roleId, 'hid skins');
|
||||
let param = new GeneralRankParamBattle(id, ranks[0]||new RoleRankInfo({}, false), hero);
|
||||
pinus.app.rpc.chat.chatRemote.sendRankTopUpdated.toServer(sid, serverId, {...param, general});
|
||||
let param = new GeneralRankParamBattle(id, ranks[0] || new RoleRankInfo({}, false), hero);
|
||||
pinus.app.rpc.chat.chatRemote.sendRankTopUpdated.toServer(sid, serverId, { ...param, general });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -772,23 +772,23 @@ export class Rank {
|
||||
* @param type 排行榜类型
|
||||
* @param serverId 分服
|
||||
*/
|
||||
export async function setRankRedisFromDb(type: string, args?: {serverId?: number}) {
|
||||
export async function setRankRedisFromDb(type: string, args?: { serverId?: number }) {
|
||||
|
||||
if(type == REDIS_KEY.TOWER_RANK) {
|
||||
if (type == REDIS_KEY.TOWER_RANK) {
|
||||
let serverId = args.serverId;
|
||||
let ranks = await RoleModel.getRank('tower', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let role of ranks) {
|
||||
for (let role of ranks) {
|
||||
// console.log(roleId);
|
||||
await r.setRankWithRoleInfo(role.roleId, role.towerLv, role.towerUpTime?role.towerUpTime.getTime():0, role);
|
||||
await r.setRankWithRoleInfo(role.roleId, role.towerLv, role.towerUpTime ? role.towerUpTime.getTime() : 0, role);
|
||||
}
|
||||
} else if (type == REDIS_KEY.GUILD_ACTIVE_RANK) {
|
||||
let serverId = args.serverId;
|
||||
let ranks = await GuildModel.getRank(type, serverId);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let guild of ranks) {
|
||||
for (let guild of ranks) {
|
||||
await r.setRankWithGuildInfo(guild.code, guild.activeWeekly, guild.activeUpdateTime, guild);
|
||||
}
|
||||
} else if (type == REDIS_KEY.GUILD_LV_RANK) {
|
||||
@@ -796,16 +796,16 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
let ranks = await GuildModel.getRank(type, serverId);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let guild of ranks) {
|
||||
for (let guild of ranks) {
|
||||
await r.setRankWithGuildInfo(guild.code, guild.lv, guild.lvUpdateTime, guild);
|
||||
}
|
||||
} else if ( type == REDIS_KEY.PVP_RANK) {
|
||||
let { seasonNum } = await SystemConfigModel.findSystemConfig();
|
||||
} else if (type == REDIS_KEY.PVP_RANK) {
|
||||
let { seasonNum } = await PVPConfigModel.findCurPVPConfig();
|
||||
console.log('execute season resetPvpRanks seasonNum = ' + seasonNum);
|
||||
let ranks = await PvpDefenseModel.getRank(seasonNum);//获得全服前1000名的排名,加入到redis中
|
||||
let r = new Rank(type, {});
|
||||
r.setIsInit(true);
|
||||
for(let {roleId, role: _role, score, updatedAt } of ranks) {
|
||||
for (let { roleId, role: _role, score, updatedAt } of ranks) {
|
||||
let role = <RoleType>_role;
|
||||
if (!role) {
|
||||
continue;
|
||||
@@ -817,7 +817,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
let ranks = await RoleModel.getRank('topLineup', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let role of ranks) {
|
||||
for (let role of ranks) {
|
||||
// console.log(roleId);
|
||||
await r.setRankWithRoleInfo(role.roleId, role.topLineupCe, role.updatedAt.getTime(), role);
|
||||
}
|
||||
@@ -826,7 +826,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
let ranks = await HeroModel.getAllRank(serverId, HERO_SELECT.RANK_LINEUP);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let hero of ranks) {
|
||||
for (let hero of ranks) {
|
||||
await r.setRankWithHeroInfo(hero.roleId, hero.hid, hero.ce, hero.updatedAt.getTime(), hero);
|
||||
}
|
||||
} else if (type == REDIS_KEY.HERO_NUM_RANK) {
|
||||
@@ -834,15 +834,15 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
let ranks = await RoleModel.getRank('heroNum', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let role of ranks) {
|
||||
await r.setRankWithRoleInfo(role.roleId, role.heroNum, role.heroNumUpdatedAt, role );
|
||||
for (let role of ranks) {
|
||||
await r.setRankWithRoleInfo(role.roleId, role.heroNum, role.heroNumUpdatedAt, role);
|
||||
}
|
||||
} else if (type == REDIS_KEY.USER_LV) {
|
||||
let serverId = args.serverId;
|
||||
let ranks = await RoleModel.getRank('lv', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let role of ranks) {
|
||||
for (let role of ranks) {
|
||||
await r.setRankWithRoleInfo(role.roleId, role.lv, role.updatedAt.getTime(), role);
|
||||
}
|
||||
} else if (type == REDIS_KEY.SUM_CE_RANK) {
|
||||
@@ -850,7 +850,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
let ranks = await RoleModel.getRank('ce', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let role of ranks) {
|
||||
for (let role of ranks) {
|
||||
await r.setRankWithRoleInfo(role.roleId, role.ce, role.updatedAt.getTime(), role);
|
||||
}
|
||||
} else if (type == REDIS_KEY.DUNGEON_RANK) {
|
||||
@@ -858,7 +858,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
let ranks = await RoleModel.getRank('dungeon', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let role of ranks) {
|
||||
for (let role of ranks) {
|
||||
await r.setRankWithRoleInfo(role.roleId, role.dungeonWarId, role.dungeonUpdatedAt, role);
|
||||
}
|
||||
} else if (type == REDIS_KEY.MAIN_RANK) {
|
||||
@@ -866,7 +866,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
let ranks = await RoleModel.getRank('main', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let role of ranks) {
|
||||
for (let role of ranks) {
|
||||
await r.setRankWithRoleInfo(role.roleId, role.mainWarId, role.mainUpdatedAt, role);
|
||||
}
|
||||
} else if (type == REDIS_KEY.MAIN_ELITE_RANK) {
|
||||
@@ -874,17 +874,17 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
let ranks = await RoleModel.getRank('mainElite', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId });
|
||||
r.setIsInit(true);
|
||||
for(let role of ranks) {
|
||||
for (let role of ranks) {
|
||||
await r.setRankWithRoleInfo(role.roleId, role.mainEliteWarId, role.mainEliteUpdatedAt, role);
|
||||
}
|
||||
} else if (type == REDIS_KEY.HERO_RANK) {
|
||||
let serverId = args.serverId;
|
||||
|
||||
for(let hid of gameData.dicMyHeroes) {
|
||||
for (let hid of gameData.dicMyHeroes) {
|
||||
let ranks = await HeroModel.getRank(hid, serverId, HERO_SELECT.RANK_LINEUP);
|
||||
let r = new Rank(type, { serverId, hid });
|
||||
r.setIsInit(true);
|
||||
for(let hero of ranks) {
|
||||
for (let hero of ranks) {
|
||||
await r.setRankWithHeroInfo(hero.roleId, hid, hero.ce, hero.updatedAt.getTime(), hero);
|
||||
}
|
||||
}
|
||||
@@ -896,35 +896,35 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
* @param role 玩家数据
|
||||
* @param serverId 所在服务器
|
||||
*/
|
||||
export async function getGeneralRank(role: RoleType&{rankReceived: number[]}, serverId: number) {
|
||||
let { rankReceived = []} = role;
|
||||
export async function getGeneralRank(role: RoleType & { rankReceived: number[] }, serverId: number) {
|
||||
let { rankReceived = [] } = role;
|
||||
|
||||
let res = {
|
||||
role: new Array<GeneralRankParamRole>(),
|
||||
battle: new Array<GeneralRankParamBattle>()
|
||||
};
|
||||
|
||||
for(let { id, general } of gameData.rank) {
|
||||
for (let { id, general } of gameData.rank) {
|
||||
let redisKey = RANK_TYPE_TO_KEY.get(id);
|
||||
if(redisKey) {
|
||||
if (redisKey) {
|
||||
let received = rankReceived.filter(rewardId => {
|
||||
let dic = gameData.generalRankReward.get(rewardId);
|
||||
return dic && dic.rankId == id;
|
||||
});
|
||||
if(general == 1) {
|
||||
if (general == 1) {
|
||||
let r = new Rank(redisKey, { serverId }, false, 1);
|
||||
let ranks = <RoleRankInfo[]> await r.getRankByRange();
|
||||
if(ranks.length > 0) {
|
||||
let param = new GeneralRankParamRole(id, ranks[0]||new RoleRankInfo({}, false), received);
|
||||
let ranks = <RoleRankInfo[]>await r.getRankByRange();
|
||||
if (ranks.length > 0) {
|
||||
let param = new GeneralRankParamRole(id, ranks[0] || new RoleRankInfo({}, false), received);
|
||||
res.role.push(param);
|
||||
}
|
||||
} else if (general = 2) {
|
||||
let r = new Rank(redisKey, { serverId }, false, 1);
|
||||
let ranks = <RoleRankInfo[]> await r.getRankByRange();
|
||||
let ranks = <RoleRankInfo[]>await r.getRankByRange();
|
||||
let hero: HeroUpdate;
|
||||
if(ranks.length > 0) {
|
||||
if (ranks.length > 0) {
|
||||
hero = await HeroModel.getMyTopHero(ranks[0].roleId, 'hid skins');
|
||||
let param = new GeneralRankParamBattle(id, ranks[0]||new RoleRankInfo({}, false), hero, received);
|
||||
let param = new GeneralRankParamBattle(id, ranks[0] || new RoleRankInfo({}, false), hero, received);
|
||||
res.battle.push(param);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user