🐞 fix(gvg): 修复gvg激战期bug
This commit is contained in:
@@ -346,7 +346,7 @@ export class GVGBattleHandler {
|
||||
|
||||
await addRoleToAreaTeamChannel(roleId, groupKey, areaId, sid);
|
||||
await pushTeamMoveMessage(team);
|
||||
return resResult(STATUS.SUCCESS, { areaId, cityId, stopMoveTime: team.stopMoveTime });
|
||||
return resResult(STATUS.SUCCESS, { areaId, cityId, stopMoveTime: team.stopMoveTime, moveCdTime: team.moveCdTime });
|
||||
}
|
||||
|
||||
// 停止移动
|
||||
@@ -495,7 +495,7 @@ export class GVGBattleHandler {
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
teamObj.battleEnd([attackTeam, defenseTeam]);
|
||||
// 更新rec
|
||||
let rec = await GVGBattleRecModel.battleEnd(battleCode, isSuccess);
|
||||
let rec = await GVGBattleRecModel.battleEnd(battleCode, isSuccess, attackTeam, defenseTeam);
|
||||
await battleEndSendMessage(groupKey, cityId, defenseTeam, attackTeam);
|
||||
addBattleEndRec(rec);
|
||||
|
||||
|
||||
@@ -87,6 +87,7 @@ export function checkMoveStatus(team: GVGTeamType, cityId: number, areaId: numbe
|
||||
if(team.cityId != cityId) return STATUS.GVG_BATTLE_IS_NOT_IN_CITY;
|
||||
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;
|
||||
let dicArea = gameData.gvgArea.get(areaId);
|
||||
if(!dicArea) return STATUS.DIC_DATA_NOT_FOUND;
|
||||
if(dicArea.relateArea.indexOf(team.areaId) == -1) return STATUS.GVG_BATTLE_AREA_NOT_RELATE;
|
||||
|
||||
@@ -397,7 +397,7 @@ export async function saveVestigeRankSchedule() {
|
||||
let r = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupKey, day});
|
||||
let ranks = await r.getRankByRangeRaw();
|
||||
await GVGVestigeLeagueRankModel.saveRank(groupKey, ranks);
|
||||
await addVestigeLeagueRankRec(config.configId, ranks);
|
||||
await addVestigeLeagueRankRec(config.configId, groupKey, ranks);
|
||||
}
|
||||
|
||||
let memberKeys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_MEMBER_ALL}:${day}:`);
|
||||
|
||||
@@ -42,13 +42,13 @@ function getResourceNameByType(resourceType: GVG_RESOURCE_TYPE) {
|
||||
|
||||
export async function addVestigeBattleEndRec(rec: GVGVestigeRecType) {
|
||||
if(!rec) return;
|
||||
let { configId, vestigeId } = rec;
|
||||
let { configId, vestigeId, groupKey } = rec;
|
||||
let vestigeName = gameData.gvgVestigeName.get(vestigeId);
|
||||
if(rec.defenseInfo && rec.defenseInfo.isRobot) { // 对手是机器人,驻扎动态
|
||||
let { roleId, roleName, leagueCode, newRank, isSuccess } = rec.attackInfo;
|
||||
if(isSuccess) {
|
||||
let params = [ roleName, vestigeName, `第${newRank}名`];
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.SETTLE_POINT, createTime: nowSeconds(), params });
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, groupKey, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.SETTLE_POINT, createTime: nowSeconds(), params });
|
||||
}
|
||||
}
|
||||
if(rec.defenseInfo && !rec.defenseInfo.isRobot && rec.attackInfo.leagueCode != rec.defenseInfo.leagueCode) {
|
||||
@@ -56,36 +56,39 @@ export async function addVestigeBattleEndRec(rec: GVGVestigeRecType) {
|
||||
let { roleId, leagueCode, roleName } = rec.defenseInfo;
|
||||
if(isSuccess) {
|
||||
let params = [ roleName, vestigeName, `第${newRank}名`, leagueName];
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.POINT_BE_GRAB, createTime: nowSeconds(), params });
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, groupKey, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.POINT_BE_GRAB, createTime: nowSeconds(), params });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function addVestigeLeagueRankRec(configId: number, ranks: { rank: number, field: string }[]) {
|
||||
export async function addVestigeLeagueRankRec(configId: number, groupKey: string, ranks: { rank: number, field: string }[]) {
|
||||
await GVGRecModel.addRecs(ranks.map(({ rank, field: leagueCode }) => {
|
||||
let params = [ `第${rank}名`];
|
||||
return { leagueCode, configId, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.VESTIGE_RANK, createTime: nowSeconds(), params };
|
||||
return { leagueCode, configId, groupKey, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.VESTIGE_RANK, createTime: nowSeconds(), params };
|
||||
}));
|
||||
}
|
||||
|
||||
export async function addBattleEndRec(rec: GVGBattleRecType) {
|
||||
let { isSuccess, attackTeam, defenseTeam, configId } = rec;
|
||||
let { isSuccess, attackTeamAfter: attackTeam, defenseTeamAfter: defenseTeam, configId, groupKey } = rec;
|
||||
let { roleId, leagueCode, cityId, index, curTeamBreak, originPointId } = defenseTeam;
|
||||
if(!defenseTeam.isRobot) { // 防守的不是机器
|
||||
if(isSuccess) {
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_ROLE, recId: GVG_REC_ID.TEAM_BE_HIT, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `队伍${index}`] });
|
||||
if(curTeamBreak && originPointId > 0 ) {
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_ROLE, recId: GVG_REC_ID.TEAM_LOST_POINT, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `队伍${index}`, getPointName(originPointId)] });
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_CITY, recId: GVG_REC_ID.CITY_OCCUPY_CHANGE, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `${defenseTeam.roleName}`, getPointName(originPointId)] });
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_LEAGUE, recId: GVG_REC_ID.LEAGUE_OCCUPY_CHANGE, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `${defenseTeam.roleName}`, getPointName(originPointId)] });
|
||||
if(isSuccess) {
|
||||
if(!defenseTeam.isRobot) {
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_ROLE, recId: GVG_REC_ID.TEAM_BE_HIT, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `队伍${index}`] });
|
||||
}
|
||||
if(curTeamBreak && originPointId > 0 ) {
|
||||
if(!defenseTeam.isRobot) {
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_ROLE, recId: GVG_REC_ID.TEAM_LOST_POINT, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `队伍${index}`, getPointName(originPointId)] });
|
||||
}
|
||||
} else {
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_ROLE, recId: GVG_REC_ID.TEAM_GUARD_SUCCESS, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `队伍${index}`] });
|
||||
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_CITY, recId: GVG_REC_ID.CITY_OCCUPY_CHANGE, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `${defenseTeam.roleName}`, getPointName(originPointId)] });
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_LEAGUE, recId: GVG_REC_ID.LEAGUE_OCCUPY_CHANGE, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `${defenseTeam.roleName}`, getPointName(originPointId)] });
|
||||
}
|
||||
} else {
|
||||
if(!defenseTeam.isRobot) {
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_ROLE, recId: GVG_REC_ID.TEAM_GUARD_SUCCESS, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, `队伍${index}`] });
|
||||
}
|
||||
}
|
||||
if(defenseTeam.isRobot && defenseTeam.isCatapult) {
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_CITY, recId: GVG_REC_ID.CITY_CATAPULT, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, getCityName(cityId)] });
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_CITY, recId: GVG_REC_ID.CITY_CATAPULT, createTime: nowSeconds(), params: [`${attackTeam.roleName}`, getCityName(cityId)] });
|
||||
}
|
||||
|
||||
}
|
||||
@@ -103,12 +106,12 @@ function getCityName(cityId: number) {
|
||||
}
|
||||
|
||||
export async function addTeamSettleRec(team: GVGTeamType) {
|
||||
let { roleId, roleName, leagueCode, configId, cityId, pointId } = team;
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_CITY, recId: GVG_REC_ID.CITY_TEAM_SETTLE, createTime: nowSeconds(), params: [`${roleName}`, getPointName(pointId)] });
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_LEAGUE, recId: GVG_REC_ID.LEAGUE_TEAM_SETTLE, createTime: nowSeconds(), params: [`${roleName}`, getPointName(pointId)] });
|
||||
let { roleId, roleName, leagueCode, configId, cityId, pointId, groupKey } = team;
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_CITY, recId: GVG_REC_ID.CITY_TEAM_SETTLE, createTime: nowSeconds(), params: [`${roleName}`, getPointName(pointId)] });
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_LEAGUE, recId: GVG_REC_ID.LEAGUE_TEAM_SETTLE, createTime: nowSeconds(), params: [`${roleName}`, getPointName(pointId)] });
|
||||
}
|
||||
|
||||
export async function addTeamLeaveRec(team: GVGTeamType, pointId: number) {
|
||||
let { roleId, roleName, leagueCode, configId, cityId } = team;
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, type: GVG_REC_TYPE.BATTLE_BY_LEAGUE, recId: GVG_REC_ID.LEAGUE_TEAM_LEAVE, createTime: nowSeconds(), params: [`${roleName}`, getPointName(pointId)] });
|
||||
let { roleId, roleName, leagueCode, configId, cityId, groupKey } = team;
|
||||
await GVGRecModel.addRec({ roleId, leagueCode, configId, cityId, groupKey, type: GVG_REC_TYPE.BATTLE_BY_LEAGUE, recId: GVG_REC_ID.LEAGUE_TEAM_LEAVE, createTime: nowSeconds(), params: [`${roleName}`, getPointName(pointId)] });
|
||||
}
|
||||
@@ -80,11 +80,14 @@ export async function setGVGConfig(config?: GVGConfigType) {
|
||||
if(!config) {
|
||||
config = await GVGConfigModel.findConfig();
|
||||
}
|
||||
pinus.app.set('gvgConfigId', config.configId);
|
||||
pinus.app.set('gvgTeamTime', config.teamTime);
|
||||
pinus.app.set('gvgPrepareTime', config.prepareTime);
|
||||
pinus.app.set('gvgBattleTime', config.battleTime);
|
||||
pinus.app.set('gvgScheduleTime', config.scheduleTime);
|
||||
if(config.teamTime > nowSeconds()) {
|
||||
config = null;
|
||||
}
|
||||
pinus.app.set('gvgConfigId', config?.configId||0);
|
||||
pinus.app.set('gvgTeamTime', config?.teamTime||0);
|
||||
pinus.app.set('gvgPrepareTime', config?.prepareTime||0);
|
||||
pinus.app.set('gvgBattleTime', config?.battleTime||0);
|
||||
pinus.app.set('gvgScheduleTime', config?.scheduleTime||0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -138,18 +141,22 @@ export function getGVGPeriodData() {
|
||||
countdownTime = scheduleTime; break;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('######## getGVGPeriodData', configId, teamTime, prepareTime, battleTime, scheduleTime)
|
||||
return { configId, period, countdownTime };
|
||||
}
|
||||
|
||||
export function getCurPeriod() {
|
||||
let { teamTime, prepareTime, battleTime } = getGVGConfig();
|
||||
let { teamTime, prepareTime, battleTime, scheduleTime } = getGVGConfig();
|
||||
let now = nowSeconds();
|
||||
if(now >= teamTime && now < prepareTime) {
|
||||
return GVG_PERIOD.TEAM;
|
||||
} else if (now >= prepareTime && now < battleTime) {
|
||||
return GVG_PERIOD.PREPARE;
|
||||
} else {
|
||||
} else if (now >= battleTime && now < scheduleTime){
|
||||
return GVG_PERIOD.BATTLE;
|
||||
} else {
|
||||
return GVG_PERIOD.NO;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,7 +211,7 @@ export async function getGVGInfoInGuild(roleId: string, guild: GuildType) {
|
||||
let { configId, period, countdownTime } = getGVGPeriodData();
|
||||
let type = await getGVGServerType(serverId);
|
||||
|
||||
if(hasLeague) {
|
||||
if(hasLeague && configId > 0) {
|
||||
return {
|
||||
hasLeague,
|
||||
configId, period, countdownTime,
|
||||
@@ -257,7 +264,7 @@ export async function getMainData(roleId: string, leagueCode: string, configId:
|
||||
|
||||
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, league.leagueCode);
|
||||
data.setLeagueParpare(leaguePrepare);
|
||||
data.setTechQueue(leaguePrepare.techQueue);
|
||||
data.setTechQueue(leaguePrepare?.techQueue||[]);
|
||||
|
||||
let userData = await GVGUserDataModel.findByRole(configId, league.leagueCode, roleId);
|
||||
let items = await GVGUserItemModel.findByRole(configId, league.leagueCode, roleId);
|
||||
|
||||
@@ -905,6 +905,9 @@ export async function initGVGConfigSchedule() {
|
||||
config = await createNewGVGConfig();
|
||||
}
|
||||
|
||||
scheduleJob(`gvgTeam`, config.teamTime * 1000, async () => {
|
||||
await pinus.app.rpc.guild.guildRemote.setGVGConfig.broadcast(config);
|
||||
})
|
||||
scheduleJob(`gvgConfig`, config.scheduleTime * 1000, createNewGVGConfig);
|
||||
|
||||
if(nowSeconds() > config.prepareTime) {
|
||||
@@ -917,7 +920,11 @@ export async function initGVGConfigSchedule() {
|
||||
|
||||
let { startFightTime, endFightTime } = getFightTimeByPeriod(GVG_PERIOD.BATTLE, config.battleTime);
|
||||
|
||||
scheduleJob(`gvgBattleStartSchedule`, startFightTime * 1000, gvgBattleStartSchedule);
|
||||
if(nowSeconds() > startFightTime && nowSeconds() < endFightTime) {
|
||||
startGvgBattleSeconds();
|
||||
} else {
|
||||
scheduleJob(`gvgBattleStartSchedule`, startFightTime * 1000, gvgBattleStartSchedule);
|
||||
}
|
||||
scheduleJob(`gvgBattleEndSchedule`, endFightTime * 1000, gvgBattleEndSchedule);
|
||||
}
|
||||
|
||||
@@ -931,6 +938,10 @@ export async function gvgBattleStartSchedule() {
|
||||
if(guildServers.length > 0) {
|
||||
pinus.app.rpc.guild.guildRemote.gvgBattleStart.toServer(getRandSingleEelm(guildServers).id);
|
||||
}
|
||||
startGvgBattleSeconds();
|
||||
}
|
||||
|
||||
function startGvgBattleSeconds() {
|
||||
// 发放道具
|
||||
if(gvgBattleSecondJob) gvgBattleSecondJob.cancel();
|
||||
gvgBattleSecondJob = scheduleJob('gvgBattleSecondJob', '*/5 * * * * *', gvgBattleSecondSchedule);
|
||||
|
||||
Reference in New Issue
Block a user