排行榜:奖励显示首通信息

This commit is contained in:
luying
2021-09-09 20:42:05 +08:00
parent 4c42c45fba
commit e859d5c778
11 changed files with 259 additions and 96 deletions
+3 -2
View File
@@ -10,7 +10,7 @@ import { FrontendOrBackendSession, pinus } from 'pinus';
import { resResult } from '../pubUtils/util';
import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE } from '../consts';
import { getAllShopList } from './shopService';
import { getGeneralRank } from './rankService';
import { getGeneralRank, getRankFirstReward } from './rankService';
import { getFriendList, getApplyList } from './friendService';
import { getDailyBattleList } from './dailyBattleService';
import { getExpeditionStatus } from './expeditionService';
@@ -77,7 +77,8 @@ async function getModuleData(type: string, data: { role: RoleType, session: Fron
case 'shop': // 商店
return await getAllShopList(roleId);
case 'rank': // 排名
return await getGeneralRank(role, serverId);
const rewards = await getRankFirstReward(role, serverId);
return { rewards }
case 'mail': // 邮件
return await getMails(roleId, serverId);
case 'friend': // 好友
+63 -11
View File
@@ -10,6 +10,9 @@ import { gameData } from "../pubUtils/data";
import { nowSeconds } from "../pubUtils/timeUtil";
import { getWorldChannelSid } from "./chatChannelService";
import { pinus } from "pinus";
import ts = require("typescript");
import { RankFirstModel, RankFirstType, RankFirstUpdateParam } from "../db/RankFirst";
import { getRandSingleEelm } from "../pubUtils/util";
/**
@@ -61,8 +64,7 @@ export class Rank {
case REDIS_KEY.GUILD_LV_RANK:
this.valueConfig = [
new ValueConfig(true, 'lv', 0, false, false),
new ValueConfig(false, 'active', 5, false, false),
new ValueConfig(false, 'time', 10, true, true)
new ValueConfig(false, 'active', 5, false, false)
];
break;
default:
@@ -844,22 +846,45 @@ export class Rank {
}
private async checkMyRankAndPush(myId: myIdInter, oldScore: number, newScore: number) {
if (this.isInit) return;
let ts = this;
if (ts.isInit) return;
let myRank = await this.getMyRank(myId);
console.log('*******', ts.key, myRank, newScore, oldScore);
if (myRank == 1 && newScore > oldScore) {
let serverId = this.keyName.serverId;
let sid = await getWorldChannelSid(serverId);
for (let { id, general } of gameData.rank) {
let dicRank = gameData.rank.find(({ id }) => {
let redisKey = RANK_TYPE_TO_KEY.get(id);
if (redisKey == this.key) {
let r = new Rank(redisKey, { serverId }, false, 1);
let ranks = <RoleRankInfo[]>await r.getRankByRange();
if (ranks.length > 0) {
let param = new GeneralRankParam(id, ranks[0] || new RoleRankInfo({}, false), general);
pinus.app.rpc.chat.chatRemote.sendRankTopUpdated.toServer(sid, serverId, { ...param, general });
return redisKey == ts.key
});
console.log('*******', dicRank);
if(dicRank) {
let r = new Rank(ts.key, { serverId }, false, 1);
let ranks = await r.getRankByRange();
let rankFirstRecs: (RankFirstType & { status: number })[] = [];
if(ranks.length > 0 && ranks[0]) {
let userInfo: RankParam, guildInfo: GuildRankParam;
if(ranks[0] instanceof RoleRankInfo) {
userInfo = ranks[0];
}
if(ranks[0] instanceof GuildRankInfo) {
guildInfo = ranks[0];
}
break;
for(let [id, { rankId, condition }] of gameData.generalRankReward) {
console.log(rankId, dicRank.id, oldScore, condition, newScore);
if(dicRank.id == rankId && oldScore < condition && newScore >= condition) {
let rankFirstRec = await RankFirstModel.createRankFirst(serverId, id, rankId, { userInfo, guildInfo });
let roleServers = pinus.app.getServersByType('role');
for(let server of roleServers) {
pinus.app.rpc.role.roleRemote.setRankFirst.toServer(server.id, rankFirstRec);
}
rankFirstRecs.push({ ... rankFirstRec, status: 1});
}
}
}
if(rankFirstRecs.length > 0) {
pinus.app.rpc.chat.chatRemote.sendRankTopUpdated.toServer(sid, serverId, rankFirstRecs);
}
}
}
@@ -1017,4 +1042,31 @@ export async function getGeneralRank(role: RoleType & { rankReceived: number[] }
}
}
return result;
}
/**
* 获取排行榜总览
* @param role 玩家数据
* @param serverId 所在服务器
*/
export async function getRankFirstReward(role: RoleType & { rankReceived: number[] }, serverId: number) {
let { rankReceived = [] } = role;
let result: (RankFirstUpdateParam & {status: number})[] = [];
for (let [id, { rankId: type } ] of gameData.generalRankReward) {
let roleServers = pinus.app.getServersByType('role');
let curServer = roleServers.find(cur => cur.id == pinus.app.getServerId());
if(!curServer) {
curServer = getRandSingleEelm(roleServers);
}
let rankFirst = await pinus.app.rpc.role.roleRemote.getRankFirstById.toServer(curServer.id, serverId, id);
if(rankFirst) {
let status = rankReceived.includes(id)?2: 1;
result.push({...rankFirst, status});
} else {
result.push({ id, type, status: 0 });
}
}
return result;
}