🐞 fix(gvg): 修复战区问题,不跨服服务器应单列
This commit is contained in:
@@ -47,15 +47,15 @@ export async function getGVGCities(league: GVGLeagueType) {
|
||||
* 获取当前城池状态
|
||||
* @returns [{cityId: number, guardLeagueCode: string, guardLeagueName: string, teamCnt: number }]
|
||||
*/
|
||||
export async function getGVGCitiesInfo(configId: number, groupId: number, serverType: number, league?: GVGLeagueType) {
|
||||
let cities = await GVGCityModel.findGuardCity(configId, groupId, serverType);
|
||||
export async function getGVGCitiesInfo(configId: number, groupKey: string, league?: GVGLeagueType) {
|
||||
let cities = await GVGCityModel.findGuardCity(configId, groupKey);
|
||||
let result: GVGCityMapInfo[] = [];
|
||||
for(let city of cities) {
|
||||
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 r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey });
|
||||
let score = await r.getMyScore({ leagueCode: league.leagueCode });
|
||||
obj.setScore(score||0);
|
||||
}
|
||||
@@ -93,8 +93,8 @@ export function checkMoveStatus(team: GVGTeamType, cityId: number, areaId: numbe
|
||||
return STATUS.SUCCESS;
|
||||
}
|
||||
|
||||
export async function initRobots(configId: number, groupId: number, serverType: number, cityId: number) {
|
||||
let robotTeams = await GVGTeamModel.findRobotTeams(groupId, serverType, cityId);
|
||||
export async function initRobots(configId: number, groupKey: string, cityId: number) {
|
||||
let robotTeams = await GVGTeamModel.findRobotTeams(groupKey, cityId);
|
||||
let updateDicPoints: DicGVGAreaPoint[] = [];
|
||||
let { areaIds = []} = gameData.gvgCity.get(cityId);
|
||||
for(let [_, point] of gameData.gvgAreaPoint) {
|
||||
@@ -105,9 +105,9 @@ export async function initRobots(configId: number, groupId: number, serverType:
|
||||
}
|
||||
}
|
||||
if(updateDicPoints.length > 0) {
|
||||
robotTeams = await GVGTeamModel.initRobots(configId, groupId, serverType, cityId, updateDicPoints);
|
||||
robotTeams = await GVGTeamModel.initRobots(configId, groupKey, cityId, updateDicPoints);
|
||||
// 存入内存
|
||||
let teamObj = getGVGBattleData(groupId, serverType);
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
teamObj.enterCity(...robotTeams);
|
||||
}
|
||||
return robotTeams;
|
||||
@@ -213,14 +213,14 @@ export async function gvgBattleStart() {
|
||||
|
||||
let { configId } = getGVGConfig();
|
||||
let guardCities = await GVGCityModel.findAllGuardCities(configId);
|
||||
for(let { cityId, groupId, serverType, guardLeague, guardLeagueName } of guardCities) {
|
||||
for(let { cityId, groupKey, guardLeague, guardLeagueName } of guardCities) {
|
||||
let sid = dispatch(cityId.toString(), servers)?.id;
|
||||
await pinus.app.rpc.guild.guildRemote.initCatapult.toServer(sid, cityId, groupId, serverType, guardLeague, guardLeagueName);
|
||||
await pinus.app.rpc.guild.guildRemote.initCatapult.toServer(sid, cityId, groupKey, guardLeague, guardLeagueName);
|
||||
}
|
||||
}
|
||||
|
||||
// 每次活动开始初始化投石车
|
||||
export async function initCatapult(cityId: number, groupId: number, serverType: number, leagueCode: string, leagueName: string) {
|
||||
export async function initCatapult(cityId: number, groupKey: string, leagueCode: string, leagueName: string) {
|
||||
let { configId } = getGVGConfig();
|
||||
|
||||
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, leagueCode);
|
||||
@@ -238,9 +238,9 @@ export async function initCatapult(cityId: number, groupId: number, serverType:
|
||||
let dicArea = gameData.gvgArea.get(areaId);
|
||||
return dicArea && dicArea.areaType == GVG_AREA_TYPE.CATAPULT;
|
||||
});
|
||||
let teams = await GVGTeamModel.initCatapult(configId, groupId, serverType, cityId, leagueCode, leagueName, areaIds, atk, durability);
|
||||
let teams = await GVGTeamModel.initCatapult(configId, groupKey, cityId, leagueCode, leagueName, areaIds, atk, durability);
|
||||
// 处理内存
|
||||
let teamObj = getGVGBattleData(groupId, serverType);
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
teamObj.enterCity(...teams);
|
||||
}
|
||||
}
|
||||
@@ -258,13 +258,13 @@ export async function catapultHurt() {
|
||||
let dicGVGCity = gameData.gvgCity.get(catapult.cityId);
|
||||
let teams = await GVGTeamModel.attackByCatapult(teamCodes, catapult.captapultAtk, dicGVGCity.attackBirth);
|
||||
teamObj.battleEnd(teams);
|
||||
await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupId, teamObj.serverType, catapult.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
|
||||
cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGTeamInList(team))
|
||||
});
|
||||
for(let team of teams) {
|
||||
await pushTeamBeHurtMessage(team);
|
||||
if(team.curTeamBreak && team.originPointId > 0) {
|
||||
await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupId, teamObj.serverType, team.originPointId);
|
||||
await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupKey, team.originPointId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -273,27 +273,27 @@ export async function catapultHurt() {
|
||||
|
||||
// 战斗积分更新
|
||||
export async function redisAddBattleScore(gvgTeam: GVGTeamType, incScore: number) {
|
||||
let { configId, groupId, serverType, cityId, roleId, isRobot } = gvgTeam;
|
||||
let { configId, groupKey, cityId, roleId, isRobot } = gvgTeam;
|
||||
if(isRobot) return;
|
||||
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType, cityId });
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupKey, cityId });
|
||||
r.setRankWithRoleInfo(roleId, incScore, Date.now(), null, true);
|
||||
}
|
||||
|
||||
export async function redisAddSettleScore(gvgTeam: GVGTeamType, incScore: number) {
|
||||
let { configId, groupId, serverType, cityId, leagueCode, isRobot } = gvgTeam;
|
||||
let { configId, groupKey, cityId, leagueCode, isRobot } = gvgTeam;
|
||||
if(isRobot) return;
|
||||
|
||||
let r1 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType });
|
||||
let r1 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupKey });
|
||||
r1.setRankWithLeagueInfo(leagueCode, incScore, Date.now(), null, true);
|
||||
|
||||
let r2 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId });
|
||||
let r2 = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId });
|
||||
r2.setRankWithLeagueInfo(leagueCode, incScore, Date.now(), null, true);
|
||||
}
|
||||
|
||||
// 获取排行榜
|
||||
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 });
|
||||
export async function getBattleRanksByCity(configId: number, groupKey: string, cityId: number, myLeague: GVGLeagueType) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId });
|
||||
r.setGenerFieldsFun((obj => {
|
||||
if(obj instanceof LeagueRankInfo) {
|
||||
return { rank: obj.rank, leagueCode: obj.code, leagueName: obj.name, score: obj.num }
|
||||
@@ -312,7 +312,7 @@ export async function getBattleRanksByCity(configId: number, groupId: number, se
|
||||
export async function gvgBattleSeconds() {
|
||||
const { configId } = getGVGConfig();
|
||||
const serverNames = await getAllServerName();
|
||||
let keys: { groupId: number, serverType: number, cityId: number }[] = []
|
||||
let keys: { groupKey: string, cityId: number }[] = []
|
||||
for(let [_key, teamObj] of getGVGBattleMap()) {
|
||||
// 每5秒给据点上的人加积分
|
||||
let teams = teamObj.findSettledPoint();
|
||||
@@ -327,16 +327,16 @@ export async function gvgBattleSeconds() {
|
||||
let dicArea = gameData.gvgArea.get(areaId);
|
||||
let teams = teamObj.findTeamsByArea(areaId);
|
||||
let result = teams.map(team => new GVGTeamSpineInMap(team, serverNames));
|
||||
await sendMessageToGVGAreaWithSuc(teamObj.groupId, teamObj.serverType, areaId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId: dicArea.cityId, areaId, spines: result });
|
||||
await sendMessageToGVGAreaWithSuc(teamObj.groupKey, areaId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId: dicArea.cityId, areaId, spines: result });
|
||||
|
||||
let index = keys.findIndex(cur => cur.cityId == dicArea.cityId && cur.groupId == teamObj.groupId && cur.serverType == teamObj.serverType);
|
||||
if(index == -1) keys.push({ groupId: teamObj.groupId, serverType: teamObj.serverType, cityId: dicArea.cityId });
|
||||
let index = keys.findIndex(cur => cur.cityId == dicArea.cityId && cur.groupKey == teamObj.groupKey);
|
||||
if(index == -1) keys.push({ groupKey: teamObj.groupKey, cityId: dicArea.cityId });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for(let { groupId, serverType, cityId } of keys) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupId, serverType, cityId });
|
||||
for(let { groupKey, cityId } of keys) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId });
|
||||
let rawRanks = await r.getRankByRange();
|
||||
let ranks = rawRanks.map(obj => {
|
||||
if(obj instanceof LeagueRankInfo) {
|
||||
@@ -344,7 +344,7 @@ export async function gvgBattleSeconds() {
|
||||
}
|
||||
return obj
|
||||
})
|
||||
await sendMessageToGVGCityWithSuc(groupId, serverType, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks });
|
||||
await sendMessageToGVGCityWithSuc(groupKey, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks });
|
||||
|
||||
}
|
||||
|
||||
@@ -357,22 +357,22 @@ export async function gvgBattleEnd() {
|
||||
// 城池占领情况
|
||||
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) };
|
||||
let [,, groupKey, _cityId] = key.split(':');
|
||||
return { groupKey, cityId: parseInt(_cityId) };
|
||||
}).sort((a, b) => b.cityId - a.cityId);
|
||||
|
||||
for(let { groupId, serverType, cityId } of rankKeys) {
|
||||
for(let { groupKey, cityId } of rankKeys) {
|
||||
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 r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK_BY_CITY, { configId, groupKey, cityId });
|
||||
let ranks = await r.getRankByRange();
|
||||
// 排名最高占领城池
|
||||
for(let obj of ranks) {
|
||||
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, rankInfo);
|
||||
await GVGCityModel.guardCity(configId, groupKey, 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);
|
||||
@@ -384,11 +384,8 @@ export async function gvgBattleEnd() {
|
||||
// 联军排行榜发放奖励
|
||||
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 [,, groupKey] = key.split(':');
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupKey });
|
||||
let ranks = await r.getRankByRange();
|
||||
// 联军排行榜发放奖励
|
||||
for(let _obj of ranks) {
|
||||
@@ -401,10 +398,8 @@ export async function gvgBattleEnd() {
|
||||
// 个人排行榜发放奖励
|
||||
let playerKeys = await findKeys(`${REDIS_KEY.GVG_BATTLE_RANK}:${configId}:`);
|
||||
for(let key of playerKeys) {
|
||||
let [,, _groupId, _serverType] = key.split(':');
|
||||
let groupId = parseInt(_groupId);
|
||||
let serverType = parseInt(_serverType);
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupId, serverType });
|
||||
let [,, groupKey] = key.split(':');
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupKey });
|
||||
let ranks = await r.getRankByRange();
|
||||
|
||||
for(let _obj of ranks) {
|
||||
@@ -420,10 +415,10 @@ export async function gvgBattleEnd() {
|
||||
|
||||
// —————————— 推送相关 —————————— //
|
||||
// 推送
|
||||
export async function battleEndSendMessage(groupId: number, serverType: number, cityId: number, defenseTeam: GVGTeamType, attackTeam: GVGTeamType) {
|
||||
export async function battleEndSendMessage(groupKey: string, cityId: number, defenseTeam: GVGTeamType, attackTeam: GVGTeamType) {
|
||||
let areaId = defenseTeam.curTeamBreak? defenseTeam.fromAreaId: defenseTeam.areaId;
|
||||
// 推送伤害
|
||||
await sendMessageToGVGAreaByTeamWithSuc(groupId, serverType, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(groupKey, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
|
||||
cityId, areaId, attackType: 3, teams: [new GVGTeamInList(defenseTeam), new GVGTeamInList(attackTeam)]
|
||||
});
|
||||
await pushTeamBeHurtMessage(defenseTeam, attackTeam);
|
||||
@@ -434,14 +429,14 @@ export async function battleEndSendMessage(groupId: number, serverType: number,
|
||||
export async function pushTeamBeHurtMessage(team: GVGTeamType, replaceTeam?: GVGTeamType) {
|
||||
|
||||
if(team.curTeamBreak && team.originPointId > 0) {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(team.groupId, team.serverType, team.fromAreaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.fromAreaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, {
|
||||
cityId: team.cityId, areaId: team.fromAreaId, point: new GVGTeamInListOnPoint(team.originPointId, replaceTeam && !replaceTeam.curTeamBreak, replaceTeam)
|
||||
});
|
||||
}
|
||||
|
||||
await pushTeamMoveMessage(team);
|
||||
if(team.isRobot && team.isBroken) {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(team.groupId, team.serverType, team.fromAreaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.fromAreaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, {
|
||||
cityId: team.cityId, areaId: team.fromAreaId, teamCode: team.teamCode
|
||||
});
|
||||
}
|
||||
@@ -450,12 +445,12 @@ export async function pushTeamBeHurtMessage(team: GVGTeamType, replaceTeam?: GVG
|
||||
export async function pushTeamMoveMessage(team: GVGTeamType) {
|
||||
if(team.fromAreaId != team.areaId) {
|
||||
if(team.fromAreaId > 0) {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(team.groupId, team.serverType, team.fromAreaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.fromAreaId, PUSH_ROUTE.GVG_PLAYER_LEAVE_AREA, {
|
||||
cityId: team.cityId, areaId: team.fromAreaId, teamCode: team.teamCode
|
||||
});
|
||||
}
|
||||
if(team.areaId > 0) {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(team.groupId, team.serverType, team.areaId, PUSH_ROUTE.GVG_PLAYER_AREA_ADD, {
|
||||
await sendMessageToGVGAreaByTeamWithSuc(team.groupKey, team.areaId, PUSH_ROUTE.GVG_PLAYER_AREA_ADD, {
|
||||
cityId: team.cityId, areaId: team.fromAreaId, player: new GVGTeamInList(team)
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user