✨ feat(gvg): 激战期数据补充、排行榜等
This commit is contained in:
@@ -23,33 +23,42 @@ import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
|
||||
|
||||
|
||||
/**
|
||||
* TODO 检查上周是否有占领城池
|
||||
* 检查上周是否有占领城池
|
||||
* @param league
|
||||
* @returns boolean 是否占领
|
||||
*/
|
||||
export async function checkHasCities(league: GVGLeagueType) {
|
||||
return false
|
||||
let { configId } = getGVGConfig();
|
||||
return await GVGCityModel.checkLeagueHasGuard(configId, league.leagueCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO 获取本联军上周占领的城池
|
||||
* 获取本联军上周占领的城池
|
||||
* @param league
|
||||
* @returns number[] 城池id
|
||||
*/
|
||||
export async function getGVGCities(league: GVGLeagueType) {
|
||||
return []
|
||||
let { configId } = getGVGConfig();
|
||||
let cities = await GVGCityModel.findGuardCityByLeague(configId, league.leagueCode, 'cityId');
|
||||
return cities.map(city => city.cityId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前城池状态
|
||||
* @returns [{cityId: number, guardLeagueCode: string, guardLeagueName: string, teamCnt: number }]
|
||||
*/
|
||||
export async function getGVGCitiesInfo(configId: number, groupId: number, serverType: number, league: GVGLeagueType): Promise<{cityId: number, guardLeagueName: string, teamCnt: number }[]> {
|
||||
let cities = await GVGCityModel.findGuardCityByLeague(configId, groupId, serverType);
|
||||
export async function getGVGCitiesInfo(configId: number, groupId: number, serverType: number, league?: GVGLeagueType) {
|
||||
let cities = await GVGCityModel.findGuardCity(configId, groupId, serverType);
|
||||
let result: GVGCityMapInfo[] = [];
|
||||
for(let city of cities) {
|
||||
let players = (city.players||[]).filter(cur => cur.leagueCode == league.leagueCode);
|
||||
let obj = new GVGCityMapInfo(city, players.length);
|
||||
let obj = new GVGCityMapInfo(city);
|
||||
if(league) {
|
||||
let players = (city.players||[]).filter(cur => cur.leagueCode == league.leagueCode);
|
||||
obj.setTeamCnt(players.length);
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType });
|
||||
let score = await r.getMyScore({ leagueCode: league.leagueCode });
|
||||
obj.setScore(score||0);
|
||||
}
|
||||
result.push(obj);
|
||||
}
|
||||
return result;
|
||||
@@ -262,21 +271,29 @@ export async function catapultHurt() {
|
||||
}
|
||||
}
|
||||
|
||||
// 排行榜积分更新
|
||||
export async function addBattleRankScore(gvgTeam: GVGTeamType, incScore: number) {
|
||||
let { configId, groupId, serverType, cityId, roleId, leagueCode, isRobot } = gvgTeam;
|
||||
// 战斗积分更新
|
||||
export async function redisAddBattleScore(gvgTeam: GVGTeamType, incScore: number) {
|
||||
let { configId, groupId, serverType, cityId, roleId, isRobot } = gvgTeam;
|
||||
if(isRobot) return;
|
||||
|
||||
let r1 = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType, cityId });
|
||||
r1.setRankWithRoleInfo(roleId, incScore, Date.now(), null, true);
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType, cityId });
|
||||
r.setRankWithRoleInfo(roleId, incScore, Date.now(), null, true);
|
||||
}
|
||||
|
||||
let r2 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType, cityId });
|
||||
export async function redisAddSettleScore(gvgTeam: GVGTeamType, incScore: number) {
|
||||
let { configId, groupId, serverType, cityId, leagueCode, isRobot } = gvgTeam;
|
||||
if(isRobot) return;
|
||||
|
||||
let r1 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType });
|
||||
r1.setRankWithLeagueInfo(leagueCode, incScore, Date.now(), null, true);
|
||||
|
||||
let r2 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId });
|
||||
r2.setRankWithLeagueInfo(leagueCode, incScore, Date.now(), null, true);
|
||||
}
|
||||
|
||||
// 获取排行榜
|
||||
export async function getBattleRanks(configId: number, groupId: number, serverType: number, cityId: number, myLeague: GVGLeagueType) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType, cityId });
|
||||
export async function getBattleRanksByCity(configId: number, groupId: number, serverType: number, cityId: number, myLeague: GVGLeagueType) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId });
|
||||
r.setGenerFieldsFun((obj => {
|
||||
if(obj instanceof LeagueRankInfo) {
|
||||
return { rank: obj.rank, leagueCode: obj.code, leagueName: obj.name, score: obj.num }
|
||||
@@ -302,8 +319,8 @@ export async function gvgBattleSeconds() {
|
||||
for(let teamMem of teams) {
|
||||
if(teamMem.isBroken || teamMem.durability <= 0) continue;
|
||||
let addScore = gameData.gvgAreaPoint.get(teamMem.pointId)?.score||0;
|
||||
let team = await GVGTeamModel.addScore(teamMem.teamCode, addScore);
|
||||
await addBattleRankScore(team, addScore);
|
||||
let team = await GVGTeamModel.addScore(teamMem.teamCode, 0, addScore);
|
||||
await redisAddSettleScore(team, addScore);
|
||||
}
|
||||
// 向下推送区域数据
|
||||
for(let areaId of teamObj.findAreas()) {
|
||||
@@ -319,7 +336,7 @@ export async function gvgBattleSeconds() {
|
||||
}
|
||||
|
||||
for(let { groupId, serverType, cityId } of keys) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType, cityId });
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId });
|
||||
let rawRanks = await r.getRankByRange();
|
||||
let ranks = rawRanks.map(obj => {
|
||||
if(obj instanceof LeagueRankInfo) {
|
||||
@@ -338,25 +355,41 @@ export async function gvgBattleEnd() {
|
||||
let guardLeagueCnt = new Map<string, number>();
|
||||
|
||||
// 城池占领情况
|
||||
let keys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK}:${configId}:`);
|
||||
let keys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY}:${configId}:`);
|
||||
let rankKeys = keys.map(key => {
|
||||
let [,, _groupId, _serverType, _cityId] = key.split(':');
|
||||
return { groupId: parseInt(_groupId), serverType: parseInt(_serverType), cityId: parseInt(_cityId) };
|
||||
}).sort((a, b) => b.cityId - a.cityId);
|
||||
|
||||
for(let { groupId, serverType, cityId } of rankKeys) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType, cityId });
|
||||
let dicCity = gameData.gvgCity.get(cityId);
|
||||
if(!dicCity) continue;
|
||||
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId });
|
||||
let ranks = await r.getRankByRange();
|
||||
// 排名最高占领城池
|
||||
for(let obj of ranks) {
|
||||
let rank = <LeagueRankInfo>obj;
|
||||
let cnt = guardLeagueCnt.get(rank.code)||0;
|
||||
let rankInfo = <LeagueRankInfo>obj;
|
||||
let cnt = guardLeagueCnt.get(rankInfo.code)||0;
|
||||
if(cnt < GVG.GVG_CITY_OCCUPIED_NUMBER) {
|
||||
await GVGCityModel.guardCity(configId, groupId, serverType, cityId, rank);
|
||||
guardLeagueCnt.set(rank.code, cnt + 1);
|
||||
await GVGCityModel.guardCity(configId, groupId, serverType, cityId, rankInfo);
|
||||
let dicCityAdd = gameData.gvgCityAdd.get(dicCity.cityType);
|
||||
await sendMailToLeagueByContent(MAIL_TYPE.GVG_GUARD_CITY_REWARD, rankInfo.code, { params: [dicCity.cityName], goods: dicCityAdd.occupyReward });
|
||||
guardLeagueCnt.set(rankInfo.code, cnt + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 联军排行榜发放奖励
|
||||
let leagueKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_LEAGUE_RANK}:${configId}:`);
|
||||
for(let key of leagueKeys) {
|
||||
let [,, _groupId, _serverType] = key.split(':');
|
||||
let groupId = parseInt(_groupId);
|
||||
let serverType = parseInt(_serverType);
|
||||
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType });
|
||||
let ranks = await r.getRankByRange();
|
||||
// 联军排行榜发放奖励
|
||||
for(let _obj of ranks) {
|
||||
let obj = <LeagueRankInfo>_obj;
|
||||
@@ -368,11 +401,10 @@ export async function gvgBattleEnd() {
|
||||
// 个人排行榜发放奖励
|
||||
let playerKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_RANK}:${configId}:`);
|
||||
for(let key of playerKeys) {
|
||||
let [,, _groupId, _serverType, _cityId] = key.split(':');
|
||||
let [,, _groupId, _serverType] = key.split(':');
|
||||
let groupId = parseInt(_groupId);
|
||||
let serverType = parseInt(_serverType);
|
||||
let cityId = parseInt(_cityId);
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType, cityId });
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType });
|
||||
let ranks = await r.getRankByRange();
|
||||
|
||||
for(let _obj of ranks) {
|
||||
|
||||
Reference in New Issue
Block a user