feat(gvg): 优化血量继承、实时刷新、遗迹天数、系统播报 6267076fc
This commit is contained in:
@@ -7,7 +7,7 @@ import { Application, BackendSession, ChannelService, HandlerService, pinus } fr
|
||||
import { resResult, genCode, getRandSingleEelm } from "../../../pubUtils/util";
|
||||
import { GVGLeagueModel } from '../../../db/GVGLeague';
|
||||
import { getGroupKey, getGVGConfig, getGVGPeriodData, getGVGServerType } from '../../../services/gvg/gvgService';
|
||||
import { redisAddBattleScore, battleEndSendMessage, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanksByCity, getBirthAreaOfCity, getGVGWarId, getOppHeroes, getTechKnifeHurt, getTechReviveMinus, initRobots, pushTeamMoveMessage, getAllGVGCitiesInfo, leaveCity, refreshTeams, checkEnterCityTime, generNewLineup, getBattleRank, checkSettleStatus, getSpineCnt, getPlayerRanksByCity, getPlayerSettleRanksByCity, checkGVGLineupWhenSave } from '../../../services/gvg/gvgBattleService';
|
||||
import { redisAddBattleScore, battleEndSendMessage, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanksByCity, getBirthAreaOfCity, getGVGWarId, getOppHeroes, getTechKnifeHurt, getTechReviveMinus, initRobots, pushTeamMoveMessage, getAllGVGCitiesInfo, leaveCity, refreshTeams, checkEnterCityTime, generNewLineup, getBattleRank, checkSettleStatus, getSpineCnt, getPlayerRanksByCity, getPlayerSettleRanksByCity, checkGVGLineupWhenSave, sendWinStreakMessage, getNewLineup, sendAreaPointChange } from '../../../services/gvg/gvgBattleService';
|
||||
import { getGVGBattleData } from '../../../services/memoryCache/gvgBattleData';
|
||||
import { GVGBattleRecModel } from '../../../db/GVGBattleRec';
|
||||
import { getFightTimeByPeriod } from '../../../services/gvg/gvgFightService';
|
||||
@@ -30,6 +30,7 @@ import { EXTERIOR, GVG } from '../../../pubUtils/dicParam';
|
||||
import { sendMessageToGuildWithSuc, sendMessageToGVGAreaByTeamWithSuc, sendMessageToUserWithSuc } from '../../../services/pushService';
|
||||
import { checkLeagueAuth } from '../../../services/gvg/gvgTeamService';
|
||||
import { GVGLeaguePrepareModel } from '../../../db/GVGLeaguePrepare';
|
||||
import { gvgEndParamInter } from '../../../pubUtils/interface';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -69,7 +70,7 @@ export class GVGBattleHandler {
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD);
|
||||
|
||||
let checkLineupResult = await checkGVGLineupWhenSave(roleId, index, lineup);
|
||||
let checkLineupResult = await checkGVGLineupWhenSave(roleId, index, lineup||[]);
|
||||
if(checkLineupResult.code != 0) return resResult(checkLineupResult);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
@@ -307,11 +308,22 @@ export class GVGBattleHandler {
|
||||
result.push(new GVGTeamSpineInMap(team, serverNames))
|
||||
}
|
||||
}
|
||||
// 加入频道
|
||||
|
||||
return resResult(STATUS.SUCCESS, { cityId, spines: result });
|
||||
}
|
||||
|
||||
// 加入频道
|
||||
async addAreaChannel(msg: { cityId: number, areaIds: number[] }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const sid = session.get('sid');
|
||||
const serverId = session.get('serverId');
|
||||
const { areaIds } = msg;
|
||||
let groupKey = await getGroupKey(serverId);
|
||||
|
||||
await leaveGVGAreaChannel(roleId, sid);
|
||||
await addRoleToAreaChannel(roleId, groupKey, areaIds, sid);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { cityId, spines: result });
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
// 点击自己的编队获取区域列表
|
||||
@@ -431,10 +443,7 @@ export class GVGBattleHandler {
|
||||
teamObj.teamSettle(roleId, teamCode, pointId);
|
||||
|
||||
// addTeamSettleRec(curTeam);
|
||||
|
||||
await sendMessageToGVGAreaByTeamWithSuc(groupKey, curTeam.areaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, {
|
||||
cityId: curTeam.cityId, areaId: curTeam.areaId, targetPointId: pointId, originPointId: myTeam.pointId, point: new GVGTeamInListOnPoint(curTeam.pointId, true, curTeam)
|
||||
});
|
||||
await sendAreaPointChange(groupKey, curTeam.areaId, curTeam.cityId, pointId, myTeam.pointId, curTeam);
|
||||
return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(curTeam) });
|
||||
}
|
||||
|
||||
@@ -463,9 +472,7 @@ export class GVGBattleHandler {
|
||||
let teamObj = getGVGBattleData(groupKey);
|
||||
teamObj.teamSettle(roleId, teamCode, 0);
|
||||
|
||||
await sendMessageToGVGAreaByTeamWithSuc(groupKey, curTeam.areaId, PUSH_ROUTE.GVG_AREA_POINT_CHANGE, {
|
||||
cityId: curTeam.cityId, areaId: curTeam.areaId, targetPointId: pointId, originPointId: myTeam.pointId, point: new GVGTeamInListOnPoint(curTeam.pointId, true, curTeam)
|
||||
});
|
||||
await sendAreaPointChange(groupKey, curTeam.areaId, curTeam.cityId, pointId, myTeam.pointId, curTeam);
|
||||
return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(curTeam) });
|
||||
}
|
||||
|
||||
@@ -504,9 +511,9 @@ export class GVGBattleHandler {
|
||||
}
|
||||
|
||||
// 队伍停止攻击
|
||||
async battleEnd(msg: { cityId: number, battleCode: string, isSuccess: boolean }, session: BackendSession) {
|
||||
async battleEnd(msg: { cityId: number, battleCode: string, isSuccess: boolean, myHeroes: gvgEndParamInter[], oppHeroes: gvgEndParamInter[] }, session: BackendSession) {
|
||||
const serverId = session.get('serverId');
|
||||
const { cityId, battleCode, isSuccess } = msg;
|
||||
const { cityId, battleCode, isSuccess, myHeroes = [], oppHeroes = [] } = msg;
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
let { startFightTime, endFightTime } = getFightTimeByPeriod(period);
|
||||
@@ -526,8 +533,8 @@ export class GVGBattleHandler {
|
||||
|
||||
// 计算并更新两支队伍耐久
|
||||
let { win, fail } = gameData.gvgBattleDurabilityMinus;
|
||||
attackTeam = await GVGTeamModel.battleEndAttack(attackTeam.teamCode, isSuccess? -win: -fail, getBirthAreaOfCity(city, attackTeam.leagueCode), await getTechReviveMinus(groupKey, configId, attackTeam.leagueCode));
|
||||
defenseTeam = await GVGTeamModel.battleEndDefense(defenseTeam.teamCode, isSuccess? -fail: -win, getBirthAreaOfCity(city, defenseTeam.leagueCode), GVG.GVG_DEFAULT_DEFENSE_CD, await getTechReviveMinus(groupKey, configId, defenseTeam.leagueCode));
|
||||
attackTeam = await GVGTeamModel.battleEndAttack(attackTeam.teamCode, isSuccess? -win: -fail, getBirthAreaOfCity(city, attackTeam.leagueCode), await getTechReviveMinus(groupKey, configId, attackTeam.leagueCode), getNewLineup(attackTeam, myHeroes));
|
||||
defenseTeam = await GVGTeamModel.battleEndDefense(defenseTeam.teamCode, isSuccess? -fail: -win, getBirthAreaOfCity(city, defenseTeam.leagueCode), GVG.GVG_DEFAULT_DEFENSE_CD, await getTechReviveMinus(groupKey, configId, defenseTeam.leagueCode), getNewLineup(defenseTeam, oppHeroes));
|
||||
if(defenseTeam.curTeamBreak && defenseTeam.originPointId > 0 && !defenseTeam.isCatapult) { // 打败的对手原来占领着一个位置,现在这个位置是你的了
|
||||
if(!attackTeam.curTeamBreak) {
|
||||
let settleResult = await GVGCityAreaPointModel.settlePoint(cityId, attackTeam.areaId, defenseTeam.originPointId, attackTeam, defenseTeam.isRobot? '': defenseTeam.teamCode);
|
||||
@@ -554,6 +561,8 @@ export class GVGBattleHandler {
|
||||
let rec = await GVGBattleRecModel.battleEnd(battleCode, isSuccess, attackTeam, defenseTeam);
|
||||
await battleEndSendMessage(groupKey, cityId, defenseTeam, {...attackTeam, originPointId: attackOriginId}, GVG_ATTACK_TYPE.PLAYER);
|
||||
addBattleEndRec(rec);
|
||||
// 连胜邮件
|
||||
sendWinStreakMessage(groupKey, cityId, attackTeam, defenseTeam, isSuccess);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { curTeam: new MyTeamInfo(attackTeam), oppTeam: new MyTeamInfo(defenseTeam) });
|
||||
}
|
||||
@@ -821,6 +830,16 @@ export class GVGBattleHandler {
|
||||
})
|
||||
}
|
||||
|
||||
// 获取我的编队信息
|
||||
async getOppTeam(msg: { cityId: number, teamCode: string }, session: BackendSession) {
|
||||
let { teamCode } = msg;
|
||||
const team = await GVGTeamModel.findByCode(teamCode)
|
||||
if (!team) return resResult(STATUS.GVG_TEAM_NOT_FOUND);
|
||||
const warId = getGVGWarId(team);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { warId, oppTeam: new MyTeamInfo(team) });
|
||||
}
|
||||
|
||||
async debugStartSchedule() {
|
||||
let { countdownTime } = getGVGPeriodData();
|
||||
pinus.app.rpc.guild.guildRemote.setPeriodTime.broadcast(nowSeconds(), countdownTime);
|
||||
@@ -845,7 +864,7 @@ export class GVGBattleHandler {
|
||||
const areaIds = gameData.gvgCity.get(cityId)?.areaIds||[];
|
||||
for(let i = 0; i < teamCnt; i++) {
|
||||
let areaId = getRandSingleEelm(areaIds);
|
||||
teams.push({ configId, groupKey, roleId: 'test', roleName: 'test' + i, serverId, lv: 100, teamCode: genCode(8), index: 3, leagueCode: 'test', leagueName: 'test' + i, guildCode: 'test', areaId, cityId, pointId: 0, head: EXTERIOR.EXTERIOR_FACE, frame: EXTERIOR.EXTERIOR_FACECASE, spine: EXTERIOR.EXTERIOR_APPEARANCE, durability: 100, maxDurability: 100, restartTime: nowSeconds(), attackTime: nowSeconds(), lockTime: nowSeconds(), startMoveTime: nowSeconds(), stopMoveTime: nowSeconds(), moveCdTime: nowSeconds(), defenseTime: nowSeconds(), lineupCe: 100000 })
|
||||
teams.push({ configId, confirmConfigId: configId, title: 1, groupKey, roleId: 'test', roleName: 'test' + i, serverId, lv: 100, teamCode: genCode(8), index: 3, leagueCode: 'test', leagueName: 'test' + i, guildCode: 'test', areaId, cityId, pointId: 0, head: EXTERIOR.EXTERIOR_FACE, frame: EXTERIOR.EXTERIOR_FACECASE, spine: EXTERIOR.EXTERIOR_APPEARANCE, durability: 100, maxDurability: 100, restartTime: nowSeconds(), attackTime: nowSeconds(), lockTime: nowSeconds(), startMoveTime: nowSeconds(), stopMoveTime: nowSeconds(), moveCdTime: nowSeconds(), defenseTime: nowSeconds(), lineupCe: 100000 })
|
||||
}
|
||||
await GVGTeamModel.insertMany(teams);
|
||||
teamObj.enterCity(...teams);
|
||||
|
||||
Reference in New Issue
Block a user