🐞 fix(gvg): 添加个人积分排行榜
This commit is contained in:
@@ -456,7 +456,7 @@ export async function redisAddBattleScore(gvgTeam: GVGTeamType, incScore: number
|
||||
}
|
||||
|
||||
export async function redisAddSettleScore(gvgTeam: GVGTeamType, incScore: number) {
|
||||
let { configId, groupKey, cityId, leagueCode, isRobot } = gvgTeam;
|
||||
let { configId, groupKey, cityId, leagueCode, isRobot, roleId } = gvgTeam;
|
||||
if(isRobot) return;
|
||||
let nextWeek = <number>getTimeFun().getAfterDayWithHour(7);
|
||||
|
||||
@@ -467,6 +467,14 @@ export async function redisAddSettleScore(gvgTeam: GVGTeamType, incScore: number
|
||||
let r2 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId });
|
||||
await r2.setExpire(nextWeek);
|
||||
await r2.setRankWithLeagueInfo(leagueCode, incScore, Date.now(), null, true);
|
||||
|
||||
let r3 = new Rank(REDIS_KEY.GVG_BATTLE_USR_SETTLE_RANK, { configId, groupKey });
|
||||
await r3.setExpire(nextWeek);
|
||||
await r3.setRankWithRoleInfo(roleId, incScore, Date.now(), null, true)
|
||||
|
||||
let r4 = new Rank(REDIS_KEY.GVG_BATTLE_USR_SETTLE_RANK_BY_CITY, { configId, groupKey, cityId });
|
||||
await r4.setExpire(nextWeek);
|
||||
await r4.setRankWithRoleInfo(roleId, incScore, Date.now(), null, true)
|
||||
}
|
||||
|
||||
export async function getSpineCnt() {
|
||||
@@ -474,7 +482,7 @@ export async function getSpineCnt() {
|
||||
return cnt? parseInt(cnt): 20;
|
||||
}
|
||||
|
||||
// 获取排行榜
|
||||
// 获取联军分城池排行榜
|
||||
export async function getBattleRanksByCity(configId: number, groupKey: string, cityId: number, myLeague?: GVGLeagueType) {
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
let pointByLeague = teamObj.findSettledPointMapByLeague(cityId);
|
||||
@@ -496,6 +504,44 @@ export async function getBattleRanksByCity(configId: number, groupKey: string, c
|
||||
return { ranks, myRank }
|
||||
}
|
||||
|
||||
// 玩家进驻的积分排行榜
|
||||
export async function getPlayerSettleRanksByCity(configId: number, groupKey: string, cityId: number, roleId?: string) {
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_USR_SETTLE_RANK_BY_CITY, { configId, groupKey, cityId });
|
||||
r.setGenerFieldsFun((obj => {
|
||||
if(obj instanceof RoleRankInfo) {
|
||||
let pointIds = teamObj.rolePoints.get(obj.roleId)||[];
|
||||
let incScore = 0;
|
||||
for(let [pointId] of pointIds) incScore += gameData.gvgAreaPoint.get(pointId)?.score||0;
|
||||
return { rank: obj.rank, roleId: obj.roleId, name: obj.roleName, score: obj.num, incScore }
|
||||
}
|
||||
return obj
|
||||
}));
|
||||
|
||||
let { ranks, myRank } = await r.getRankListWithMyRank({ roleId });
|
||||
if (roleId && !myRank) {
|
||||
myRank = await r.generMyRankWithRole(roleId, 0, 0);
|
||||
}
|
||||
return { ranks, myRank }
|
||||
}
|
||||
|
||||
// 玩家挑战的积分排行榜,按城池
|
||||
export async function getPlayerRanksByCity(configId: number, groupKey: string, cityId: number, roleId?: string) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_USER_RANK_BY_CITY, { configId, groupKey, cityId });
|
||||
r.setGenerFieldsFun((obj => {
|
||||
if(obj instanceof RoleRankInfo) {
|
||||
return { rank: obj.rank, roleId: obj.roleId, name: obj.roleName, score: obj.num }
|
||||
}
|
||||
return obj
|
||||
}));
|
||||
|
||||
let { ranks, myRank } = await r.getRankListWithMyRank({ roleId });
|
||||
if (roleId && !myRank) {
|
||||
myRank = await r.generMyRankWithRole(roleId, 0, 0);
|
||||
}
|
||||
return { ranks, myRank }
|
||||
}
|
||||
|
||||
// 每5秒一次结算
|
||||
export async function gvgBattleSeconds() {
|
||||
const { configId, period } = getGVGPeriodData();
|
||||
@@ -538,7 +584,9 @@ export async function gvgBattleSeconds() {
|
||||
// console.log('#### cityRank keys', JSON.stringify(keys), 'appid', pinus.app.getServerId())
|
||||
for(let { groupKey, cityId } of keys) {
|
||||
let { ranks } = await getBattleRanksByCity(configId, groupKey, cityId);
|
||||
await sendMessageToGVGCityWithSuc(groupKey, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks });
|
||||
let { ranks: memberRanks } = await getPlayerRanksByCity(configId, groupKey, cityId);
|
||||
let { ranks: memberSettleRanks } = await getPlayerSettleRanksByCity(configId, groupKey, cityId);
|
||||
await sendMessageToGVGCityWithSuc(groupKey, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks, memberRanks, memberSettleRanks });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -579,6 +627,19 @@ export async function gvgBattleEnd() {
|
||||
}
|
||||
}
|
||||
|
||||
// 个人积分排行榜发放奖励
|
||||
let playerSettleKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_USR_SETTLE_RANK}:${configId}:`);
|
||||
for(let key of playerSettleKeys) {
|
||||
let [,, groupKey] = key.split(':');
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_USR_SETTLE_RANK, { configId, groupKey });
|
||||
let ranks = await r.getRankByRange();
|
||||
|
||||
for(let _obj of ranks) {
|
||||
let obj = <RoleRankInfo>_obj;
|
||||
let dicRank = getGVGBattleRankReward(GVG_BATTLE_RANK_TYPE.PLAYER_SETTLE, obj.rank);
|
||||
await sendMailByContent(MAIL_TYPE.GVG_BATTLE_PLAYER_SETTLE_RANK_REWARD, obj.roleId, { params: [`${obj.rank}`], goods: dicRank.reward }, dontSendReward);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface SortCities { cityType: number, cityId: number, index: number, league: string, score: number };
|
||||
@@ -760,6 +821,8 @@ export async function getBattleRank(redisKey: REDIS_KEY, keyParam: KeyNameParam,
|
||||
myRank = await r.generMyRankWithRole(myId.roleId, 0, 0);
|
||||
} else if (redisKey == REDIS_KEY.GVG_BATTLE_LEAGUE_RANK) {
|
||||
myRank = await r.generMyRankWithLeague(myId.leagueCode, 0, 0);
|
||||
} else if (redisKey == REDIS_KEY.GVG_BATTLE_USR_SETTLE_RANK) {
|
||||
myRank = await r.generMyRankWithRole(myId.roleId, 0, 0);
|
||||
}
|
||||
}
|
||||
return { ranks, myRank }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
// 动态
|
||||
import { CHANNEL_PREFIX, GVG_REC_ID, GVG_REC_TYPE, GVG_RESOURCE_TYPE, MSG_SOURCE, MSG_TYPE } from "../../consts";
|
||||
import { CHANNEL_PREFIX, GVG_REC_ID, GVG_REC_TYPE, GVG_RESOURCE_TYPE, MSG_SOURCE, MSG_TYPE, PUSH_ROUTE } from "../../consts";
|
||||
import { GVGBattleRecType } from "../../db/GVGBattleRec";
|
||||
import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
|
||||
import { GVGRecModel, GVGRecUpdate } from "../../db/GVGRec";
|
||||
@@ -8,6 +8,7 @@ import { GVGVestigeRecType } from "../../db/GVGVestigeRec";
|
||||
import { gameData } from "../../pubUtils/data";
|
||||
import { nowSeconds } from "../../pubUtils/timeUtil";
|
||||
import { createGroupMsg, pushGroupMsgToRoom } from "../chatService";
|
||||
import { sendMessageToUserWithSuc } from "../pushService";
|
||||
import { getGVGConfig } from "./gvgService";
|
||||
|
||||
// 加入军团
|
||||
@@ -96,6 +97,10 @@ export async function addBattleEndRec(rec: GVGBattleRecType) {
|
||||
}
|
||||
|
||||
await GVGRecModel.addRecs(params.getUpdateParam());
|
||||
let mapByRoleId = params.getMapByRoleId();
|
||||
for(let [roleId, recs] of mapByRoleId) {
|
||||
if(recs.length > 0) sendMessageToUserWithSuc(roleId, PUSH_ROUTE.GVG_REC_ADD, { recs });
|
||||
}
|
||||
}
|
||||
|
||||
class GVGRecUpArr {
|
||||
@@ -122,6 +127,15 @@ class GVGRecUpArr {
|
||||
public getUpdateParam() {
|
||||
return this.arr;
|
||||
}
|
||||
|
||||
public getMapByRoleId() {
|
||||
let map = new Map<string, { recId: number, params: string[] }[]>();
|
||||
for(let { roleId, recId, params } of this.arr) {
|
||||
if(!map.has(roleId)) map.set(roleId, []);
|
||||
map.get(roleId).push({ recId, params });
|
||||
}
|
||||
return map
|
||||
}
|
||||
}
|
||||
|
||||
function getPointName(pointId: number) {
|
||||
|
||||
@@ -126,6 +126,7 @@ export async function guild(session: Session, msg: any, app: Application, cb: (e
|
||||
'guild.gvgBattleHandler.checkMyTeam',
|
||||
'guild.gvgBattleHandler.enterCity',
|
||||
'guild.gvgBattleHandler.leaveCity',
|
||||
'guild.gvgBattleHandler.getRankByCity',
|
||||
'guild.gvgBattleHandler.getAreaOfMyTeam',
|
||||
'guild.gvgBattleHandler.debugAddRobots',
|
||||
'guild.gvgBattleHandler.debugMoveRobots',
|
||||
|
||||
Reference in New Issue
Block a user