🐞 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

@@ -669,7 +669,7 @@ export class GVGBattleHandler {
async debugStartSchedule() { async debugStartSchedule() {
let { countdownTime } = getGVGPeriodData(); let { countdownTime } = getGVGPeriodData();
pinus.app.rpc.guild.guildRemote.setPeriodTime.broadcast(nowSeconds() + GVG.GVG_GUARD_START_TIME, countdownTime); pinus.app.rpc.guild.guildRemote.setPeriodTime.broadcast(nowSeconds(), countdownTime);
await pinus.app.rpc.systimer.systimerRemote.gvgBattleStartSchedule.broadcast(); await pinus.app.rpc.systimer.systimerRemote.gvgBattleStartSchedule.broadcast();
return resResult(STATUS.SUCCESS); return resResult(STATUS.SUCCESS);
} }

View File

@@ -17,7 +17,7 @@ import { dispatch } from "../../pubUtils/dispatcher";
import { Rank } from "../rankService"; import { Rank } from "../rankService";
import { LeagueRankInfo, RoleRankInfo } from "../../domain/rank"; import { LeagueRankInfo, RoleRankInfo } from "../../domain/rank";
import { findKeys, getAllServerName } from "../redisService"; import { findKeys, getAllServerName } from "../redisService";
import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc } from "../pushService"; import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc, sendMessageToUserWithSuc } from "../pushService";
import { sendMailByContent, sendMailToLeagueByContent } from "../mailService"; import { sendMailByContent, sendMailToLeagueByContent } from "../mailService";
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint"; import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
import { addCityGuardMessage } from "./gvgRecService"; 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.pointId > 0) return STATUS.GVG_BATTLE_TEAM_IS_SELLTED;
if(team.stopMoveTime > nowSeconds()) return STATUS.GVG_BATTLE_IS_MOVING; if(team.stopMoveTime > nowSeconds()) return STATUS.GVG_BATTLE_IS_MOVING;
if(team.moveCdTime > nowSeconds()) return STATUS.GVG_BATTLE_IS_MOVING_CD; 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; if(team.restartTime > nowSeconds()) return STATUS.GVG_BATTLE_TEAM_REVIVE;
let dicArea = gameData.gvgArea.get(areaId); let dicArea = gameData.gvgArea.get(areaId);
if(!dicArea) return STATUS.DIC_DATA_NOT_FOUND; 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(attackTeam.attackTime > nowSeconds()) return STATUS.GVG_TEAM_ATTACKING;
if(defenseTeam.defenseTime > nowSeconds() || defenseTeam.lockTime > nowSeconds()) return STATUS.GVG_TEAM_DEFENSEING; 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(attackTeam.durability <= 0) return STATUS.GVG_ATTACK_TEAM_BROKEN;
if(defenseTeam.durability <= 0) return STATUS.GVG_DEFENSE_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() { 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()) { for(let [_key, teamObj] of getGVGBattleMap()) {
let teams = teamObj.findCatapult(); let teams = teamObj.findCatapult();
for(let catapult of teams) { for(let catapult of teams) {
@@ -381,18 +385,28 @@ export async function catapultHurt() {
} }
teamObj.battleEnd(teams); teamObj.battleEnd(teams);
if(teams.length > 0) { if(teams.length > 0) {
await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupKey, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, { let roleToTeams = new Map<string, GVGTeamInList[]>();
cityId: catapult.cityId, areaId, attackType: GVG_ATTACK_TYPE.CATAPULT, teams: teams.map(team => new GVGTeamInList(team)) let areaTeams: GVGTeamInList[] = [];
});
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))
});
for(let team of teams) { for(let team of teams) {
await pushTeamBeHurtMessage(team); await pushTeamBeHurtMessage(team);
if(team.curTeamBreak && team.originPointId > 0) { if(team.curTeamBreak && team.originPointId > 0) {
await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupKey, team.originPointId); 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,10 +493,12 @@ export async function gvgBattleSeconds() {
} }
if(startFightTime <= nowSeconds() && endFightTime >= nowSeconds()) {
for(let { groupKey, cityId } of keys) { for(let { groupKey, cityId } of keys) {
let { ranks } = await getBattleRanksByCity(configId, groupKey, cityId); let { ranks } = await getBattleRanksByCity(configId, groupKey, cityId);
await sendMessageToGVGCityWithSuc(groupKey, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks }); 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, { await sendMessageToGVGAreaByTeamWithSuc(groupKey, areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
cityId, areaId, attackType, teams: [new GVGTeamInList(defenseTeam), new GVGTeamInList(attackTeam)] 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(defenseTeam, attackTeam);
await pushTeamBeHurtMessage(attackTeam); await pushTeamBeHurtMessage(attackTeam);
} }

View File

@@ -252,6 +252,7 @@ function checkNotEncryptRoute(event: string) {
PUSH_ROUTE.AUCTION_OVER, // onAuctionOver 拍卖价格超过 PUSH_ROUTE.AUCTION_OVER, // onAuctionOver 拍卖价格超过
PUSH_ROUTE.GUILD_BOSS_ENCOURAGE, // onGuildBossEncourage 鼓舞 PUSH_ROUTE.GUILD_BOSS_ENCOURAGE, // onGuildBossEncourage 鼓舞
PUSH_ROUTE.GVG_TEAM_ATTACKED, // onTeamAttacked 当队伍受到攻击 PUSH_ROUTE.GVG_TEAM_ATTACKED, // onTeamAttacked 当队伍受到攻击
PUSH_ROUTE.GVG_MY_TEAM_ATTACKED, // onMyTeamAttacked 当队伍受到攻击
PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, // onAreaSpinesChange 可见区域内spine的变动每隔5秒会下发 PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, // onAreaSpinesChange 可见区域内spine的变动每隔5秒会下发
PUSH_ROUTE.GVG_AREA_POINT_CHANGE, // onMyAreaPointChange 积分点上的驻守人变更 PUSH_ROUTE.GVG_AREA_POINT_CHANGE, // onMyAreaPointChange 积分点上的驻守人变更
PUSH_ROUTE.GVG_PLAYER_AREA_ADD, // onPlayerAddToArea 积分点上的驻守人变更 PUSH_ROUTE.GVG_PLAYER_AREA_ADD, // onPlayerAddToArea 积分点上的驻守人变更

View File

@@ -197,6 +197,7 @@ export const PUSH_ROUTE = {
LEAGUE_TECH_ACITVE: 'onGVGTechActive', // 千机阁科技激活 LEAGUE_TECH_ACITVE: 'onGVGTechActive', // 千机阁科技激活
GVG_TASK_UPDATE: 'onGVGTaskUpdate', // GVG任务更新 GVG_TASK_UPDATE: 'onGVGTaskUpdate', // GVG任务更新
GVG_TEAM_ATTACKED: 'onTeamAttacked', // 当队伍受到攻击 GVG_TEAM_ATTACKED: 'onTeamAttacked', // 当队伍受到攻击
GVG_MY_TEAM_ATTACKED: 'onMyTeamAttacked', // 当队伍受到攻击
GVG_AREA_SPINE_CHANGE: 'onAreaSpinesChange', // 可见区域内spine的变动每隔5秒会下发 GVG_AREA_SPINE_CHANGE: 'onAreaSpinesChange', // 可见区域内spine的变动每隔5秒会下发
GVG_AREA_POINT_CHANGE: 'onMyAreaPointChange', // 积分点上的驻守人变更 GVG_AREA_POINT_CHANGE: 'onMyAreaPointChange', // 积分点上的驻守人变更
GVG_PLAYER_AREA_ADD: 'onPlayerAddToArea', // 积分点上的驻守人变更 GVG_PLAYER_AREA_ADD: 'onPlayerAddToArea', // 积分点上的驻守人变更

View File

@@ -385,6 +385,7 @@ export const STATUS = {
GVG_TEAM_NOT_NEED_REVIVE: { code: 21418, simStr: '此队伍不需要复活' }, GVG_TEAM_NOT_NEED_REVIVE: { code: 21418, simStr: '此队伍不需要复活' },
GVG_BATTLE_IS_MOVING_CD: { code: 21403, simStr: '移动冷却中' }, GVG_BATTLE_IS_MOVING_CD: { code: 21403, simStr: '移动冷却中' },
GVG_BATTLE_TEAM_REVIVE: { code: 21404, simStr: '队伍复活中' }, GVG_BATTLE_TEAM_REVIVE: { code: 21404, simStr: '队伍复活中' },
GVG_BATTLE_TEAM_LOCK: { code: 21405, simStr: '您的队伍正在被攻击中' },
// 通用 30000 - 30099 // 通用 30000 - 30099
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' }, DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },

View File

@@ -251,7 +251,7 @@ export default class GVGTeam extends BaseModel {
// 防守方锁定cd // 防守方锁定cd
public static async battleStartLockDefense(teamCode: string, lockTeamCode: string) { public static async battleStartLockDefense(teamCode: string, lockTeamCode: string) {
const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { lockTime: nowSeconds() + GVG.GVG_DEFAULT_ATTACK_CD, lockTeamCode } }, { new: true }).lean(); const team: GVGTeamType = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $set: { lockTime: nowSeconds() + GVG.GVG_DEFAULT_BATTLE_CD, lockTeamCode } }, { new: true }).lean();
return team; return team;
} }

View File

@@ -419,6 +419,7 @@ export const GVG = {
GVG_REDPOINT_BATTLEFEAT: 0, // 千机阁战功红点大于多少可能出现红点 GVG_REDPOINT_BATTLEFEAT: 0, // 千机阁战功红点大于多少可能出现红点
GVG_REVIVE_GOLD: '1&100|2&150|3&200|4&250|5&300|6&500', // GVG激战期元宝购买复活的消耗次数&元宝数 GVG_REVIVE_GOLD: '1&100|2&150|3&200|4&250|5&300|6&500', // GVG激战期元宝购买复活的消耗次数&元宝数
GVG_VESTIGE_CHALLENGE_TIME: '5:00:00&22:00:00', // 征战中原遗迹可挑战时间 GVG_VESTIGE_CHALLENGE_TIME: '5:00:00&22:00:00', // 征战中原遗迹可挑战时间
GVG_DEFAULT_BATTLE_CD: 10, // 激战期战斗锁定时长,用于玩家退出时获取不到数据的情况
}; };
export const PLATFORM_CONFIG = { export const PLATFORM_CONFIG = {
OPEN_ANIMATION: 1, // 0关1开开场动画视频 OPEN_ANIMATION: 1, // 0关1开开场动画视频