🐞 fix(gvg): 激战期推送相关修改

This commit is contained in:
luying
2023-02-23 22:04:54 +08:00
parent 5a85d6e86c
commit 724b0ee485
11 changed files with 75 additions and 55 deletions
@@ -15,7 +15,7 @@ import { gameData, getReviveGold } from '../../../pubUtils/data';
import { getAllServerName } from '../../../services/redisService';
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
import { SaveTeamParam, SaveTeamUpdateParam } from '../../../domain/gvgField/gvgDb';
import { GVG_AREA_TYPE, GVG_ITEM, GVG_PERIOD, GVG_REC_TYPE, ITEM_CHANGE_REASON, REDIS_KEY, STATUS } from '../../../consts';
import { GVG_AREA_TYPE, GVG_ITEM, GVG_PERIOD, GVG_REC_TYPE, ITEM_CHANGE_REASON, PUSH_ROUTE, REDIS_KEY, STATUS } from '../../../consts';
import { GVGHeroInfo } from '../../../domain/dbGeneral';
import { ArtifactModel } from '../../../db/Artifact';
import { getHeroesAttributes } from '../../../services/playerCeService';
@@ -29,6 +29,8 @@ import { Rank } from '../../../services/rankService';
import { LeagueRankInfo, RoleRankInfo } from '../../../domain/rank';
import { addBattleEndRec, addTeamSettleRec } from '../../../services/gvg/gvgRecService';
import { RoleModel } from '../../../db/Role';
import { GVG } from '../../../pubUtils/dicParam';
import { sendMessageToGVGAreaByTeamWithSuc } from '../../../services/pushService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -142,7 +144,7 @@ export class GVGBattleHandler {
return resResult(STATUS.SUCCESS, {
cityId,
guardLeague: { leagueCode, name, icon },
guardStartTime: startFightTime - 3 * 60,// TODO 进系统参数表
guardStartTime: startFightTime - GVG.GVG_GUARD_START_TIME,
startTime: startFightTime,
endTime: endFightTime,
ourTeamCnt,
@@ -532,7 +534,7 @@ export class GVGBattleHandler {
let city = await GVGCityModel.findByCityId(configId, groupKey, cityId);
if (!city) return resResult(STATUS.GVG_CITY_NOT_FOUND);
defenseTeam = await GVGTeamModel.battleEndDefense(teamCode, await getTechKnifeHurt(configId, attackTeam.leagueCode), getBirthAreaOfCity(city, defenseTeam.leagueCode), await getTechReviveMinus(configId, defenseTeam.leagueCode));
defenseTeam = await GVGTeamModel.battleEndDefense(oppoTeamCode, await getTechKnifeHurt(configId, attackTeam.leagueCode), getBirthAreaOfCity(city, defenseTeam.leagueCode), await getTechReviveMinus(configId, defenseTeam.leagueCode));
if(defenseTeam.curTeamBreak && defenseTeam.originPointId > 0) { // 打败的对手原来占领着一个位置,现在这个位置是你的了
if(!attackTeam.curTeamBreak) {
attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId);
@@ -552,7 +554,9 @@ export class GVGBattleHandler {
teamObj.battleEnd([attackTeam, defenseTeam]);
await battleEndSendMessage(groupKey, cityId, defenseTeam, attackTeam);
await sendMessageToGVGAreaByTeamWithSuc(groupKey, defenseTeam.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
cityId, areaId: defenseTeam.areaId, attackType: 2, teams: [new GVGTeamInList(defenseTeam), new GVGTeamInList(attackTeam)]
});
return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam) });
}
@@ -129,9 +129,10 @@ class GVGBattleData {
if(!teamMem) { // 基本不会有没有这个内存的情况,有的话就让他重新计算一次吧
this.enterCity(team); continue;
}
let { areaId: fromAreaId, pointId: fromPointId } = teamMem;
let { curTeamBreak, pointId } = team;
let { areaId: fromAreaId, pointId: originPointId } = teamMem;
teamMem.updateTeam(team);
this.setRolePoints(team.roleId, fromPointId, team.pointId, team.teamCode);
this.setRolePoints(team.roleId, originPointId, curTeamBreak? 0: pointId, team.teamCode);
this.setAreaMap(team.teamCode, fromAreaId, team.areaId);
}
}
@@ -191,6 +192,7 @@ export async function initTeamToMem() {
if(period != GVG_PERIOD.BATTLE) return;
let teams = await GVGTeamModel.findByConfigId(configId);
for(let team of teams) {
if(team.isBroken) continue;
if(dispatch(team.cityId.toString(), servers)?.id == sid) {
let teamObj = getGVGBattleData(team.groupKey);
teamObj.enterCity(team);
@@ -22,17 +22,7 @@ import { sendMailByContent, sendMailToLeagueByContent } from "../mailService";
import { GVGCityAreaPointModel } from "../../db/GVGCityAreaPoint";
import { addCityGuardMessage } from "./gvgRecService";
import { GVGUserDataModel } from "../../db/GVGUserData";
/**
* 检查上周是否有占领城池
* @param league
* @returns boolean 是否占领
*/
export async function checkHasCities(league: GVGLeagueType) {
let { configId } = getGVGConfig();
return await GVGCityModel.checkLeagueHasGuard(configId, league.leagueCode);
}
import { RoleModel } from "../../db/Role";
/**
* 获取本联军上周占领的城池
@@ -138,7 +128,8 @@ export async function refreshTeams(configId: number, groupKey: string, roleId: s
for(let team of oldTeams) {
if(team.configId != configId) {
let { teamCode, maxDurability } = team;
let newTeam = await GVGTeamModel.refreshByConfig(team.teamCode, { teamCode, durability: maxDurability, cityId: 0, areaId: 0, pointId: 0, roleName, guildCode, leagueCode: myLeague.leagueCode, leagueName: myLeague.name, groupKey });
let { lv } = await RoleModel.findByRoleId(roleId, 'lv');
let newTeam = await GVGTeamModel.refreshByConfig(teamCode, { configId, lv, durability: maxDurability, cityId: 0, areaId: 0, pointId: 0, roleName, guildCode, leagueCode: myLeague.leagueCode, leagueName: myLeague.name, groupKey });
teams.push(newTeam);
} else {
teams.push(team);
@@ -297,16 +288,18 @@ 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 sendMessageToGVGAreaWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_TEAM_ATTACKED, {
cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGTeamInList(team))
});
await sendMessageToGVGAreaByTeamWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_SPINE_ATTACKED, {
cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGAttackSpine(team, catapult.captapultAtk))
});
for(let team of teams) {
await pushTeamBeHurtMessage(team);
if(team.curTeamBreak && team.originPointId > 0) {
await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupKey, team.originPointId);
if(teams.length > 0) {
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))
});
await sendMessageToGVGAreaWithSuc(teamObj.groupKey, catapult.areaId, PUSH_ROUTE.GVG_SPINE_ATTACKED, {
cityId: catapult.cityId, areaId: catapult.areaId, attackType: 1, teams: teams.map(team => new GVGAttackSpine(team, catapult.captapultAtk))
});
for(let team of teams) {
await pushTeamBeHurtMessage(team);
if(team.curTeamBreak && team.originPointId > 0) {
await GVGCityAreaPointModel.leavePoint(configId, teamObj.groupKey, team.originPointId);
}
}
}
}
+11 -3
View File
@@ -2,7 +2,7 @@ import { pinus } from "pinus";
import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig";
import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil";
import { getAllServerCreateTime, getServerCreateTime } from "../redisService";
import { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, SHOP_REFRESH_TYPE } from "../../consts";
import { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, PUSH_ROUTE, SHOP_REFRESH_TYPE } from "../../consts";
import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
import { GVGServerGroupModel } from "../../db/GVGServerGroup";
@@ -11,7 +11,6 @@ import { getRandSingleEelm } from "../../pubUtils/util";
import { GVG } from "../../pubUtils/dicParam";
import { ServerlistModel } from "../../db/Serverlist";
import { GuildModel, GuildType } from "../../db/Guild";
import { checkHasCities } from "./gvgBattleService";
import { GVGLeagueApplyModel } from "../../db/GVGLeagueApply";
import { GVGMainData, LeagueContributeInfo } from "../../domain/gvgField/returnData";
import { Contribute, GVGUserDataModel, GVGUserDataType } from "../../db/GVGUserData";
@@ -24,6 +23,8 @@ import { calVestigeLeagueBoxRewards, getFightTimeByPeriod } from "./gvgFightServ
import { GVGVestigeLeagueRankModel } from "../../db/GVGVestigeLeagueRank";
import { GVGVestigeSumRankModel } from "../../db/GVGVestigeSumRank";
import { GVGTeamModel } from "../../db/GVGTeam";
import { sendMessageToGuildWithSuc } from "../pushService";
import { GVGCityModel } from "../../db/GVGCity";
// 定时器相关
export async function createNewGVGConfig() {
@@ -42,13 +43,20 @@ export async function createNewGVGConfig() {
let autoLeagues = await GVGLeagueModel.findAutoCreateLeague();
let needDissmissLeagueId: string[] = [], needDissmissLeagueCodes: string[] = [];
for(let league of autoLeagues) {
if(!await checkHasCities(league)) {
if(!await GVGCityModel.checkLeagueHasGuard(config.configId, league.leagueCode)) {
needDissmissLeagueId.push(league._id);
needDissmissLeagueCodes.push(league.leagueCode);
}
}
await GVGLeagueModel.dismissByIds(needDissmissLeagueId);
await GuildModel.leagueAutoDismiss(needDissmissLeagueCodes);
for(let league of autoLeagues) {
if(needDissmissLeagueCodes.indexOf(league.leagueCode) == -1) continue;
for(let guildCode of league.guildCodes) {
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_DISSMISS, { leagueCode: league.leagueCode })
}
}
await pinus.app.rpc.systimer.systimerRemote.initGVGConfigSchedule.broadcast();
return config;
}
@@ -27,7 +27,7 @@ export async function autoCreateLeague(guildCode: string) {
if(!guild || guild.lv < GVG.GVG_ARMY_LEAGUE_TIME) return;
let { configId, period } = getGVGPeriodData();
if(period == GVG_PERIOD.PREPARE || period == GVG_PERIOD.BATTLE) {
if(period == GVG_PERIOD.PREPARE) {
let league = await createLeague(guild, {});
await GVGLeaguePrepareModel.initData(configId, league.leagueCode, guild.memberCnt);
return league;
+18 -14
View File
@@ -921,9 +921,12 @@ export async function initGVGConfigSchedule() {
let { startFightTime, endFightTime } = getFightTimeByPeriod(GVG_PERIOD.BATTLE, config.battleTime);
if(nowSeconds() > startFightTime && nowSeconds() < endFightTime) {
startGvgBattleSeconds();
if(gvgBattleSecondJob) gvgBattleSecondJob.cancel();
gvgBattleSecondJob = scheduleJob('gvgBattleSecondJob', '*/5 * * * * *', gvgBattleSecondSchedule);
if(gvgBattleCatapultJob) gvgBattleCatapultJob.cancel();
gvgBattleCatapultJob = scheduleJob('gvgBattleCatapultJob', `*/${GVG.GVG_CATAPULT_TIME} * * * * *`, gvgBattleCatapult);
} else {
scheduleJob(`gvgBattleStartSchedule`, startFightTime * 1000, gvgBattleStartSchedule);
scheduleJob(`gvgBattleStartSchedule`, (startFightTime - GVG.GVG_GUARD_START_TIME) * 1000, gvgBattleStartSchedule);
}
scheduleJob(`gvgBattleEndSchedule`, endFightTime * 1000, gvgBattleEndSchedule);
}
@@ -933,20 +936,21 @@ let gvgBattleCatapultJob: Job; // gvg投石车定时器
// gvg激战期开始定时器
export async function gvgBattleStartSchedule() {
// 初始化投石车
let guildServers = pinus.app.getServersByType('guild');
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);
if(gvgBattleCatapultJob) gvgBattleCatapultJob.cancel();
gvgBattleCatapultJob = scheduleJob('gvgBattleCatapultJob', `*/${GVG.GVG_CATAPULT_TIME} * * * * *`, gvgBattleCatapult);
setTimeout(async () => {
console.log('############')
if(gvgBattleCatapultJob) gvgBattleCatapultJob.cancel();
gvgBattleCatapultJob = scheduleJob('gvgBattleCatapultJob', `*/${GVG.GVG_CATAPULT_TIME} * * * * *`, gvgBattleCatapult);
// 初始化投石车
let guildServers = pinus.app.getServersByType('guild');
if(guildServers.length > 0) {
pinus.app.rpc.guild.guildRemote.gvgBattleStart.toServer(getRandSingleEelm(guildServers).id);
}
}, 60);
}
// 每隔5秒的积分计算定时器