🐞 fix(正在战斗中的队伍不可移动):

This commit is contained in:
luying
2023-03-01 15:07:56 +08:00
parent 92fb7e6235
commit 2768c0254a
7 changed files with 38 additions and 13 deletions

View File

@@ -17,7 +17,7 @@ import { dispatch } from "../../pubUtils/dispatcher";
import { Rank } from "../rankService";
import { LeagueRankInfo, RoleRankInfo } from "../../domain/rank";
import { findKeys, getAllServerName } from "../redisService";
import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc } from "../pushService";
import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc, sendMessageToUserWithSuc } from "../pushService";
import { sendMailByContent, sendMailToLeagueByContent } from "../mailService";
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
import { addCityGuardMessage } from "./gvgRecService";
@@ -106,6 +106,7 @@ export function checkMoveStatus(team: GVGTeamType, cityId: number, areaId: numbe
if(team.pointId > 0) return STATUS.GVG_BATTLE_TEAM_IS_SELLTED;
if(team.stopMoveTime > nowSeconds()) return STATUS.GVG_BATTLE_IS_MOVING;
if(team.moveCdTime > nowSeconds()) return STATUS.GVG_BATTLE_IS_MOVING_CD;
if(team.lockTime > nowSeconds()) return STATUS.GVG_TEAM_DEFENSEING;
if(team.restartTime > nowSeconds()) return STATUS.GVG_BATTLE_TEAM_REVIVE;
let dicArea = gameData.gvgArea.get(areaId);
if(!dicArea) return STATUS.DIC_DATA_NOT_FOUND;
@@ -310,6 +311,7 @@ export function checkGVGBattleStart(roleId: string, attackTeam: GVGTeamType, def
if(attackTeam.attackTime > nowSeconds()) return STATUS.GVG_TEAM_ATTACKING;
if(defenseTeam.defenseTime > nowSeconds() || defenseTeam.lockTime > nowSeconds()) return STATUS.GVG_TEAM_DEFENSEING;
if(attackTeam.lockTime > nowSeconds()) return STATUS.GVG_BATTLE_TEAM_LOCK;
if(attackTeam.durability <= 0) return STATUS.GVG_ATTACK_TEAM_BROKEN;
if(defenseTeam.durability <= 0) return STATUS.GVG_DEFENSE_TEAM_BROKEN;
@@ -364,7 +366,9 @@ export async function initCatapult(cityId: number, groupKey: string, leagueCode:
// 投石车投伤害
export async function catapultHurt() {
let { configId } = getGVGConfig();
let { configId, period } = getGVGPeriodData();
let { startFightTime, endFightTime } = getFightTimeByPeriod(period);
if(nowSeconds() < startFightTime || nowSeconds() > endFightTime) return;
for(let [_key, teamObj] of getGVGBattleMap()) {
let teams = teamObj.findCatapult();
for(let catapult of teams) {
@@ -381,18 +385,28 @@ export async function catapultHurt() {
}
teamObj.battleEnd(teams);
if(teams.length > 0) {
await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupKey, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
cityId: catapult.cityId, areaId, attackType: GVG_ATTACK_TYPE.CATAPULT, teams: teams.map(team => new GVGTeamInList(team))
});
await sendMessageToGVGCityWithSuc(teamObj.groupKey, catapult.cityId, PUSH_ROUTE.GVG_SPINE_ATTACKED, {
cityId: catapult.cityId, areaId, teamCode: catapult.teamCode, attackType: GVG_ATTACK_TYPE.CATAPULT, spines: teams.map(team => new GVGAttackSpine(team, catapult.captapultAtk))
});
let roleToTeams = new Map<string, GVGTeamInList[]>();
let areaTeams: GVGTeamInList[] = [];
for(let team of teams) {
await pushTeamBeHurtMessage(team);
if(team.curTeamBreak && team.originPointId > 0) {
await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupKey, team.originPointId);
}
if(!roleToTeams.has(team.roleId)) roleToTeams.set(team.roleId, []);
roleToTeams.get(team.roleId).push(new GVGTeamInList(team));
areaTeams.push(new GVGTeamInList(team));
}
await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupKey, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
cityId: catapult.cityId, areaId, attackType: GVG_ATTACK_TYPE.CATAPULT, teams: areaTeams
});
for(let [roleId, myTeams] of roleToTeams) {
await sendMessageToUserWithSuc(roleId, PUSH_ROUTE.GVG_MY_TEAM_ATTACKED, {
cityId: catapult.cityId, areaId, attackType: GVG_ATTACK_TYPE.CATAPULT, teams: myTeams
});
}
await sendMessageToGVGCityWithSuc(teamObj.groupKey, catapult.cityId, PUSH_ROUTE.GVG_SPINE_ATTACKED, {
cityId: catapult.cityId, areaId, teamCode: catapult.teamCode, attackType: GVG_ATTACK_TYPE.CATAPULT, spines: teams.map(team => new GVGAttackSpine(team, catapult.captapultAtk))
});
}
}
}
@@ -479,9 +493,11 @@ export async function gvgBattleSeconds() {
}
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 });
if(startFightTime <= nowSeconds() && endFightTime >= nowSeconds()) {
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 });
}
}
}
@@ -588,6 +604,11 @@ export async function battleEndSendMessage(groupKey: string, cityId: number, def
await sendMessageToGVGAreaByTeamWithSuc(groupKey, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
cityId, areaId, attackType, teams: [new GVGTeamInList(defenseTeam), new GVGTeamInList(attackTeam)]
});
if(!defenseTeam.isRobot) {
await sendMessageToUserWithSuc(defenseTeam.roleId, PUSH_ROUTE.GVG_MY_TEAM_ATTACKED, {
cityId, areaId, attackType, teams: [new GVGTeamInList(defenseTeam)]
});
}
await pushTeamBeHurtMessage(defenseTeam, attackTeam);
await pushTeamBeHurtMessage(attackTeam);
}