✨ feat(gvg): 复活队伍
This commit is contained in:
@@ -7,19 +7,23 @@ import { Application, BackendSession, ChannelService, HandlerService, pinus } fr
|
||||
import { resResult, genCode } from "../../../pubUtils/util";
|
||||
import { GVGLeagueModel } from '../../../db/GVGLeague';
|
||||
import { checkGVGPeriod, getGroupIdOfServer, getGVGConfig, getGVGPeriodData, getGVGServerType } from '../../../services/gvg/gvgService';
|
||||
import { addBattleRankScore, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanks, getBirthAreaOfCity, getGVGWarId, getOppHeroes, initRobots, pushTeamMoveMessage, teamBreak } from '../../../services/gvg/gvgBattleService';
|
||||
import { addBattleRankScore, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanks, getBirthAreaOfCity, getGVGWarId, getOppHeroes, getTechReviveMinus, initRobots, pushTeamMoveMessage } from '../../../services/gvg/gvgBattleService';
|
||||
import { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory';
|
||||
import { GVGBattleRecModel } from '../../../db/GVGBattleRec';
|
||||
import { getFightTimeByPeriod } from '../../../services/gvg/gvgFightService';
|
||||
import { gameData } from '../../../pubUtils/data';
|
||||
import { gameData, getReviveGold } from '../../../pubUtils/data';
|
||||
import { getAllServerName } from '../../../services/redisService';
|
||||
import { checkBattleHeroesByHid } from '../../../services/normalBattleService';
|
||||
import { SaveTeamParam, SaveTeamUpdateParam } from '../../../domain/gvgField/gvgDb';
|
||||
import { STATUS } from '../../../consts';
|
||||
import { GVG_ITEM, ITEM_CHANGE_REASON, STATUS } from '../../../consts';
|
||||
import { GVGHeroInfo } from '../../../domain/dbGeneral';
|
||||
import { ArtifactModel } from '../../../db/Artifact';
|
||||
import { getHeroesAttributes } from '../../../services/playerCeService';
|
||||
import { addRoleToAreaChannel, addRoleToAreaTeamChannel, addRoleToGVGCityChannel, leaveGVGAreaChannel, leaveGVGAreaTeamChannel, leaveGVGCityTeamChannel } from '../../../services/chatChannelService';
|
||||
import { nowSeconds } from '../../../pubUtils/timeUtil';
|
||||
import { GVGUserItemModel } from '../../../db/GVGUserItem';
|
||||
import { handleGVGCost } from '../../../services/gvg/gvgItemService';
|
||||
import { getGoldObject, handleCost } from '../../../services/role/rewardService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -294,7 +298,7 @@ export class GVGBattleHandler {
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let myTeam = await GVGTeamModel.findByTeamCode(roleId, teamCode);
|
||||
let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
|
||||
if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND);
|
||||
if(myTeam.cityId != cityId) return resResult(STATUS.GVG_BATTLE_IS_NOT_IN_CITY);
|
||||
|
||||
@@ -331,7 +335,7 @@ export class GVGBattleHandler {
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let team = await GVGTeamModel.findByTeamCode(roleId, teamCode);
|
||||
let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
|
||||
let checkResult = checkMoveStatus(team, cityId, areaId);
|
||||
if(checkResult.code != 0) return resResult(checkResult);
|
||||
|
||||
@@ -355,7 +359,7 @@ export class GVGBattleHandler {
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let team = await GVGTeamModel.findByTeamCode(roleId, teamCode);
|
||||
let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
|
||||
if(!team) return resResult(STATUS.GVG_BATTLE_TEAM_NOT_FOUND);
|
||||
if(team.cityId != cityId && team.areaId != areaId) return resResult(STATUS.GVG_BATTLE_IS_NOT_IN_CITY);
|
||||
|
||||
@@ -379,7 +383,7 @@ export class GVGBattleHandler {
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let myTeam = await GVGTeamModel.findByTeamCode(roleId, teamCode);
|
||||
let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
|
||||
if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND);
|
||||
|
||||
let dicAreaPoint = gameData.gvgAreaPoint.get(pointId);
|
||||
@@ -403,7 +407,7 @@ export class GVGBattleHandler {
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let myTeam = await GVGTeamModel.findByTeamCode(roleId, teamCode);
|
||||
let myTeam = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
|
||||
if(!myTeam) return resResult(STATUS.GVG_TEAM_NOT_FOUND);
|
||||
let dicAreaPoint = gameData.gvgAreaPoint.get(pointId);
|
||||
if(dicAreaPoint.areaId != myTeam.areaId) return resResult(STATUS.GVG_POINT_NOT_AREA);
|
||||
@@ -468,8 +472,8 @@ export class GVGBattleHandler {
|
||||
let { win, fail } = gameData.gvgBattleDurabilityMinus;
|
||||
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));
|
||||
attackTeam = await GVGTeamModel.battleEndAttack(attackTeam.teamCode, isSuccess? -win: -fail, attackScore, getBirthAreaOfCity(city, attackTeam.leagueCode), await getTechReviveMinus(configId, attackTeam.leagueCode));
|
||||
defenseTeam = await GVGTeamModel.battleEndDefense(defenseTeam.teamCode, isSuccess? -fail: -win, defenseScore, getBirthAreaOfCity(city, defenseTeam.leagueCode), await getTechReviveMinus(configId, defenseTeam.leagueCode));
|
||||
if(defenseTeam.curTeamBreak && defenseTeam.originPointId > 0 && !attackTeam.curTeamBreak) { // 打败的对手原来占领着一个位置,现在这个位置是你的了
|
||||
attackTeam = await GVGTeamModel.settlePoint(attackTeam.teamCode, defenseTeam.originPointId);
|
||||
}
|
||||
@@ -490,6 +494,7 @@ export class GVGBattleHandler {
|
||||
// teamCode: 要使用道具的队伍
|
||||
async useItem(msg: { cityId: number, itemId: number, teamCode: string }, session: BackendSession) {
|
||||
const { itemId, teamCode } = msg;
|
||||
// const targetTeam = await GVGTeamModel.findByCode(teamCode);
|
||||
// ! 检查道具是否存在
|
||||
// ! 检查道具是否可以使用在该队伍
|
||||
const team = await GVGTeamModel.findOneAndUpdate({ teamCode }, {}).lean();
|
||||
@@ -499,11 +504,38 @@ export class GVGBattleHandler {
|
||||
|
||||
// 复活队伍
|
||||
async reviveTeam(msg: { cityId: number, teamCode: string }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const sid = session.get('sid');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const { teamCode } = msg;
|
||||
// ! 检查该队伍是否可以复活,可以的话更新队伍状态
|
||||
const team = await GVGTeamModel.findOneAndUpdate({ teamCode }, {}).lean();
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
let team = await GVGTeamModel.findMyTeamByCode(roleId, teamCode);
|
||||
if(!team) return resResult(STATUS.GVG_TEAM_NOT_FOUND);
|
||||
if(team.restartTime < nowSeconds()) return resResult(STATUS.GVG_TEAM_NOT_NEED_REVIVE);
|
||||
|
||||
let userData = await GVGUserDataModel.findByRole(configId, myLeague.leagueCode, roleId);
|
||||
let reviveCnt = userData?.reviveCnt||0;
|
||||
|
||||
const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, GVG_ITEM.REVIVE_COIN, 1);
|
||||
if(hasItem) {
|
||||
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.REVIVE_COIN, count: 1 }], [], ITEM_CHANGE_REASON.GVG_REVIVE);
|
||||
if(!costResult) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
||||
} else {
|
||||
let gold = getReviveGold(reviveCnt + 1);
|
||||
const costResult = await handleCost(roleId, sid, [getGoldObject(gold)], ITEM_CHANGE_REASON.GVG_REVIVE);
|
||||
if(!costResult) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
||||
userData = await GVGUserDataModel.addReviveCnt(configId, myLeague.leagueCode, roleId, 1);
|
||||
reviveCnt = userData?.reviveCnt||0;
|
||||
}
|
||||
team = await GVGTeamModel.reviveTeam(teamCode);
|
||||
|
||||
// 更新成功返回队伍信息
|
||||
return resResult(STATUS.SUCCESS, { team });
|
||||
return resResult(STATUS.SUCCESS, { reviveCnt, curTeam: new MyTeamInfo(team) });
|
||||
}
|
||||
|
||||
// 获取战报
|
||||
|
||||
Reference in New Issue
Block a user