🐞 fix(正在战斗中的队伍不可移动):
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,9 +493,11 @@ export async function gvgBattleSeconds() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let { groupKey, cityId } of keys) {
|
if(startFightTime <= nowSeconds() && endFightTime >= nowSeconds()) {
|
||||||
let { ranks } = await getBattleRanksByCity(configId, groupKey, cityId);
|
for(let { groupKey, cityId } of keys) {
|
||||||
await sendMessageToGVGCityWithSuc(groupKey, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks });
|
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, {
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 积分点上的驻守人变更
|
||||||
|
|||||||
@@ -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', // 积分点上的驻守人变更
|
||||||
|
|||||||
@@ -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: '数据表未找到' },
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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开(开场动画视频)
|
||||||
|
|||||||
Reference in New Issue
Block a user