feat(gvg): 定时器

This commit is contained in:
luying
2023-02-16 16:54:53 +08:00
parent 7543baa8cb
commit 605ee869a9
12 changed files with 210 additions and 56 deletions

View File

@@ -8,7 +8,7 @@ import { Application, BackendSession, ChannelService, HandlerService } from "pin
import { resResult, genCode } from "../../../pubUtils/util";
import { GVGLeagueModel } from '../../../db/GVGLeague';
import { checkGVGPeriod, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType } from '../../../services/gvg/gvgService';
import { calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBirthAreaOfCity, getGVGWarId, getOppHeroes, initRobots, teamBreak } from '../../../services/gvg/gvgBattleService';
import { addBattleRankScore, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanks, getBirthAreaOfCity, getGVGWarId, getOppHeroes, initRobots, teamBreak } from '../../../services/gvg/gvgBattleService';
import { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory';
import { nowSeconds } from '../../../pubUtils/timeUtil';
import { GVGBattleRecModel } from '../../../db/GVGBattleRec';
@@ -23,7 +23,7 @@ import { sendMessageToUserWithSuc } from '../../../services/pushService';
import { GVGHeroInfo } from '../../../domain/dbGeneral';
import { ArtifactModel } from '../../../db/Artifact';
import { getHeroesAttributes } from '../../../services/playerCeService';
import { gvgBattleStartSchedule } from '../../../services/timeTaskService';
import { gvgBattleEndSchedule, gvgBattleStartSchedule } from '../../../services/timeTaskService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -204,10 +204,11 @@ export class GVGBattleHandler {
const recs = await GVGRecModel.findByCity(cityId, configId);
const teamResult = teams.map(team => new MyTeamInfo(team));
const { ranks, myRank } = await getBattleRanks(configId, groupId, serverType, cityId, myLeague);
return resResult(STATUS.SUCCESS, {
cityId,
ranks: [], // ! redis 中积分排行榜
ranks, myRank,
recs,
teams: teamResult,
});
@@ -450,18 +451,15 @@ export class GVGBattleHandler {
// 计算并更新两支队伍耐久
let { win, fail } = gameData.gvgBattleDurabilityMinus;
attackTeam = await GVGTeamModel.battleEndAttack(attackTeam.teamCode, isSuccess? -win: -fail, calBattleScoreByCe(isSuccess, attackTeam.lineupCe));
defenseTeam = await GVGTeamModel.battleEndDefense(defenseTeam.teamCode, isSuccess? -fail: -win, calBattleScoreByCe(isSuccess, defenseTeam.lineupCe));
if(attackTeam.durability <= 0) {
attackTeam = await teamBreak(city, attackTeam);
}
if(defenseTeam.durability <= 0) {
if(defenseTeam.pointId > 0 && attackTeam.durability > 0) { // 打败的对手原来占领着一个位置,现在这个位置是你的了
attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.pointId);
}
defenseTeam = await teamBreak(city, defenseTeam);
let attackScore = calBattleScoreByCe(isSuccess, attackTeam.lineupCe);
let defenseScore = calBattleScoreByCe(!isSuccess, defenseTeam.lineupCe);
attackTeam = await GVGTeamModel.battleEndAttack(attackTeam.teamCode, isSuccess? -win: -fail, attackScore, getBirthAreaOfCity(city, attackTeam.leagueCode));
defenseTeam = await GVGTeamModel.battleEndDefense(defenseTeam.teamCode, isSuccess? -fail: -win, defenseScore, getBirthAreaOfCity(city, defenseTeam.leagueCode));
if(defenseTeam.curTeamBreak && defenseTeam.originPointId > 0 && !attackTeam.curTeamBreak) { // 打败的对手原来占领着一个位置,现在这个位置是你的了
attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId);
}
await addBattleRankScore(attackTeam, attackScore);
await addBattleRankScore(defenseTeam, defenseScore);
// 更新内存
let teamObj = getGVGBattleData(groupId, serverType);
@@ -513,5 +511,11 @@ export class GVGBattleHandler {
async debugStartSchedule() {
await gvgBattleStartSchedule();
return resResult(STATUS.SUCCESS);
}
async debugEndSchedule() {
await gvgBattleEndSchedule();
return resResult(STATUS.SUCCESS);
}
}

View File

@@ -357,10 +357,6 @@ export class GVGHandler {
if (!!res.err) return resResult(STATUS.REDLOCK_ERR);
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode);
if(!leaguePrepare || leaguePrepare.lv < dicTech.levelLimit) {
res.releaseCallback();
return resResult(STATUS.GVG_TECH_LV_NOT_ENOUGH);
}
if(checkTechIsIng(techId, leaguePrepare?.activeTech||[], leaguePrepare?.techQueue||[])) {
res.releaseCallback();
@@ -409,6 +405,9 @@ export class GVGHandler {
if(!checkTechIsIng(techId, [], leaguePrepare?.techQueue||[])) {
return resResult(STATUS.GVG_TECH_NOT_QUEUE);
}
if(!leaguePrepare || leaguePrepare.lv < dicTech.levelLimit) {
return resResult(STATUS.GVG_TECH_LV_NOT_ENOUGH);
}
// 扣战功
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.BATTLE_FEAT, count: battleFeats }], [], ITEM_CHANGE_REASON.GVG_ACTIVE_TECH);