名将擂台:排行榜
This commit is contained in:
@@ -221,6 +221,9 @@ export class LadderHandler {
|
|||||||
let roleName = session.get('roleName');
|
let roleName = session.get('roleName');
|
||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
let { roleId: targetRoleId, rank, count } = msg;
|
let { roleId: targetRoleId, rank, count } = msg;
|
||||||
|
if(count > LADDER.LADDER_INITIAL_CHALLENGE_TIMES) {
|
||||||
|
return resResult(STATUS.LADDER_SWEEP_TIMES_OVER);
|
||||||
|
}
|
||||||
|
|
||||||
let ladderData = await LadderMatchModel.findByRoleId(roleId);
|
let ladderData = await LadderMatchModel.findByRoleId(roleId);
|
||||||
if(!ladderData) return resResult(STATUS.LADDER_NOT_OPEN);
|
if(!ladderData) return resResult(STATUS.LADDER_NOT_OPEN);
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ import { LadderMatchModel, LadderMatchType, LadderUpdateInter } from "../db/Ladd
|
|||||||
import { LadderMatchRecModel } from "../db/LadderMatchRec";
|
import { LadderMatchRecModel } from "../db/LadderMatchRec";
|
||||||
import { RoleModel, RoleType } from "../db/Role";
|
import { RoleModel, RoleType } from "../db/Role";
|
||||||
import { LadderDataReturn, LadderDefense, LadderOppPlayerHeroInfo, LadderOppPlayerInDB, LadderOppPlayerInfo, LadderOppPlayerReturn } from "../domain/battleField/ladder";
|
import { LadderDataReturn, LadderDefense, LadderOppPlayerHeroInfo, LadderOppPlayerInDB, LadderOppPlayerInfo, LadderOppPlayerReturn } from "../domain/battleField/ladder";
|
||||||
import { RoleRankInfo } from "../domain/rank";
|
import { RoleAndGuildRankInfo, RoleRankInfo } from "../domain/rank";
|
||||||
import { gameData, getDicLadderMatchByMyRank } from "../pubUtils/data";
|
import { gameData, getDicLadderMatchByMyRank } from "../pubUtils/data";
|
||||||
|
import { EXTERIOR, LADDER } from "../pubUtils/dicParam";
|
||||||
import { ItemInter } from "../pubUtils/interface";
|
import { ItemInter } from "../pubUtils/interface";
|
||||||
import { getRandValueByMinMax, shouldRefresh } from "../pubUtils/util";
|
import { getRandValueByMinMax, shouldRefresh } from "../pubUtils/util";
|
||||||
import { sendMessageToUserWithSuc } from "./pushService";
|
import { sendMessageToUserWithSuc } from "./pushService";
|
||||||
@@ -273,8 +274,10 @@ export async function battleEndWhenChange(ladderMatch: LadderMatchType) {
|
|||||||
if(!ladderMatch) return;
|
if(!ladderMatch) return;
|
||||||
|
|
||||||
// 更新redis
|
// 更新redis
|
||||||
let r = new Rank(REDIS_KEY.LADDER, { serverId: ladderMatch.serverId });
|
if(ladderMatch.rank > 0 && ladderMatch.rank < 3001) {
|
||||||
r.setRankWithRoleInfo(ladderMatch.roleId, ladderMatch.rank, 0);
|
let r = new Rank(REDIS_KEY.LADDER, { serverId: ladderMatch.serverId });
|
||||||
|
r.setRankWithRoleInfo(ladderMatch.roleId, ladderMatch.rank, 0);
|
||||||
|
}
|
||||||
|
|
||||||
// 刷新对手
|
// 刷新对手
|
||||||
let oppPlayers = await refreshLadderEnemies(ladderMatch);
|
let oppPlayers = await refreshLadderEnemies(ladderMatch);
|
||||||
@@ -296,3 +299,20 @@ export async function ladderBattleEndReward(roleId: string, roleName: string, si
|
|||||||
let breakGoods = isBreak? await addItems(roleId, roleName, sid, dicLadderDifficultRatio?.onceReward||[], ITEM_CHANGE_REASON.LADDER_BATTLE_REWARD): [];
|
let breakGoods = isBreak? await addItems(roleId, roleName, sid, dicLadderDifficultRatio?.onceReward||[], ITEM_CHANGE_REASON.LADDER_BATTLE_REWARD): [];
|
||||||
return { battleGoods, breakGoods };
|
return { battleGoods, breakGoods };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function completeLadderRanks(ranks: RoleAndGuildRankInfo[]) {
|
||||||
|
let result: RoleAndGuildRankInfo[] = [];
|
||||||
|
for(let i = 1; i <= 200; i++) {
|
||||||
|
let dicLadderDifficultRatio = gameData.ladderDifficultRatio.get(i);
|
||||||
|
let { head, ce, spine, level } = dicLadderDifficultRatio;
|
||||||
|
let rank = ranks.find(cur => cur.rank == i);
|
||||||
|
if(rank) {
|
||||||
|
result.push(rank);
|
||||||
|
} else {
|
||||||
|
let rank = new RoleAndGuildRankInfo(i, 0);
|
||||||
|
rank.setByField(`robot${i}`, LADDER.LADDER_ROBOT_NAME, head, EXTERIOR.EXTERIOR_FACECASE, spine, level, 1, '', ce );
|
||||||
|
result.push(rank);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ import { CounterModel } from "../db/Counter";
|
|||||||
import { ActivityTimeLimitRankModel } from "../db/ActivityTimeLimitRank";
|
import { ActivityTimeLimitRankModel } from "../db/ActivityTimeLimitRank";
|
||||||
import { sendMessageToServerWithSuc } from "./pushService";
|
import { sendMessageToServerWithSuc } from "./pushService";
|
||||||
import { LadderMatchModel } from "../db/LadderMatch";
|
import { LadderMatchModel } from "../db/LadderMatch";
|
||||||
|
import { completeLadderRanks } from "./ladderService";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -659,8 +660,8 @@ export class Rank {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getRankListWithMyRank(myId: myIdInter) {
|
public async getRankListWithMyRank(myId: myIdInter, isReverse = false) {
|
||||||
let ranks = await this.getRankByRange();
|
let ranks = await this.getRankByRange('+inf', '-inf', isReverse);
|
||||||
let newRanks = [], newMyRank: any;
|
let newRanks = [], newMyRank: any;
|
||||||
let myRank = ranks.find(cur => {
|
let myRank = ranks.find(cur => {
|
||||||
return cur.isMyInfo(myId);
|
return cur.isMyInfo(myId);
|
||||||
@@ -1173,6 +1174,9 @@ export async function getRankInHandler(redisKey: REDIS_KEY, type: RANK_TYPE, key
|
|||||||
let r = new Rank(redisKey, keyParam);
|
let r = new Rank(redisKey, keyParam);
|
||||||
r.setGenerFieldsFun((obj => {
|
r.setGenerFieldsFun((obj => {
|
||||||
let result = new RoleAndGuildRankInfo(obj.rank, obj.num);
|
let result = new RoleAndGuildRankInfo(obj.rank, obj.num);
|
||||||
|
if(type == RANK_TYPE.LADDER) {
|
||||||
|
result = new RoleAndGuildRankInfo(obj.num, 0);
|
||||||
|
}
|
||||||
if(obj instanceof GuildRankInfo) {
|
if(obj instanceof GuildRankInfo) {
|
||||||
result.setGuildInfo(obj);
|
result.setGuildInfo(obj);
|
||||||
}
|
}
|
||||||
@@ -1182,7 +1186,7 @@ export async function getRankInHandler(redisKey: REDIS_KEY, type: RANK_TYPE, key
|
|||||||
return result
|
return result
|
||||||
}));
|
}));
|
||||||
|
|
||||||
let { ranks, myRank } = await r.getRankListWithMyRank({ roleId, guildCode });
|
let { ranks, myRank } = await r.getRankListWithMyRank({ roleId, guildCode }, type == RANK_TYPE.LADDER);
|
||||||
if (!myRank) {
|
if (!myRank) {
|
||||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK, true);
|
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK, true);
|
||||||
if (type == RANK_TYPE.TOP_LINTUP) {
|
if (type == RANK_TYPE.TOP_LINTUP) {
|
||||||
@@ -1214,7 +1218,12 @@ export async function getRankInHandler(redisKey: REDIS_KEY, type: RANK_TYPE, key
|
|||||||
let limitRank = await ActivityTimeLimitRankModel.findByCode(serverId, keyParam.activityId, guildCode);
|
let limitRank = await ActivityTimeLimitRankModel.findByCode(serverId, keyParam.activityId, guildCode);
|
||||||
myRank = await r.generMyRankWithGuild(guildCode, limitRank?.score||0, limitRank?.time);
|
myRank = await r.generMyRankWithGuild(guildCode, limitRank?.score||0, limitRank?.time);
|
||||||
}
|
}
|
||||||
|
} else if (type == RANK_TYPE.LADDER) {
|
||||||
|
myRank = await r.generMyRankWithRole(roleId, 0, 0, role);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(type == RANK_TYPE.LADDER) {
|
||||||
|
ranks = completeLadderRanks(ranks);
|
||||||
|
}
|
||||||
return { ranks, myRank }
|
return { ranks, myRank }
|
||||||
}
|
}
|
||||||
@@ -309,6 +309,7 @@ export enum RANK_TYPE {
|
|||||||
MAIN = 7, // 主线
|
MAIN = 7, // 主线
|
||||||
MAIN_ELITE = 8, // 精英
|
MAIN_ELITE = 8, // 精英
|
||||||
GUILD_LV = 9, // 军团按等级排序
|
GUILD_LV = 9, // 军团按等级排序
|
||||||
|
LADDER = 10, // 名将擂台
|
||||||
GUILD_ACTIVE = 11, // 军团活跃度排序
|
GUILD_ACTIVE = 11, // 军团活跃度排序
|
||||||
HERO = 12, // 武将排行
|
HERO = 12, // 武将排行
|
||||||
GUILD_FUND = 13, // 军团积分排行,限时类型的排行榜,仅计算期限内增加的值
|
GUILD_FUND = 13, // 军团积分排行,限时类型的排行榜,仅计算期限内增加的值
|
||||||
@@ -341,6 +342,8 @@ export function getRedisKeyByRankType(rankType: RANK_TYPE, isTimelimit = false)
|
|||||||
return REDIS_KEY.HERO_RANK;
|
return REDIS_KEY.HERO_RANK;
|
||||||
case RANK_TYPE.GUILD_FUND: // 军团积分排行,限时类型的排行榜,仅计算期限内增加的值
|
case RANK_TYPE.GUILD_FUND: // 军团积分排行,限时类型的排行榜,仅计算期限内增加的值
|
||||||
return REDIS_KEY.GUILD_FUND;
|
return REDIS_KEY.GUILD_FUND;
|
||||||
|
case RANK_TYPE.LADDER: // 军团积分排行,限时类型的排行榜,仅计算期限内增加的值
|
||||||
|
return REDIS_KEY.LADDER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -268,6 +268,7 @@ export const STATUS = {
|
|||||||
LADDER_CHALLENGE_CNT_MAX: { code: 21206, simStr: '挑战次数已达上限' },
|
LADDER_CHALLENGE_CNT_MAX: { code: 21206, simStr: '挑战次数已达上限' },
|
||||||
LADDER_REC_STATUS_ERR: { code: 21207, simStr: '战斗状态错误' },
|
LADDER_REC_STATUS_ERR: { code: 21207, simStr: '战斗状态错误' },
|
||||||
LADDER_RANK_ERR: { code: 21208, simStr: '不可连战比排名自己高的玩家' },
|
LADDER_RANK_ERR: { code: 21208, simStr: '不可连战比排名自己高的玩家' },
|
||||||
|
LADDER_SWEEP_TIMES_OVER: { code: 21209, simStr: '连战次数过多' },
|
||||||
|
|
||||||
// 通用 30000 - 30099
|
// 通用 30000 - 30099
|
||||||
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
||||||
|
|||||||
@@ -243,6 +243,10 @@ export class RoleAndGuildRankInfo {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setByField(roleId: string, roleName: string, head: number, frame: number, spine: number, lv: number, title: number, guildName: string, ce: number) {
|
||||||
|
this.userInfo = { roleId, roleName, head, frame, spine, lv, title, guildName, ce }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SimpleGuildRankParam {
|
export class SimpleGuildRankParam {
|
||||||
|
|||||||
Reference in New Issue
Block a user