🐞 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 }
|
||||
|
||||
Reference in New Issue
Block a user