feat(战场): 保存战阵连携顺序

This commit is contained in:
luying
2023-08-01 17:20:21 +08:00
parent 07bce370aa
commit f0ab9b0aeb
14 changed files with 102 additions and 33 deletions

View File

@@ -22,6 +22,7 @@ import { BattleRecordModel } from '../../../db/BattleRecord';
import { isHeroHidden } from '../../../services/dataService';
import { getRemoteRplFilePath, getRemoteRplPrefix } from '../../../pubUtils/battleUtils';
import { pvpEndParamInter } from '../../../pubUtils/interface';
import { Combo } from '../../../domain/battleField/pvp';
export default function (app: Application) {
new HandlerService(app, {});
@@ -275,8 +276,8 @@ export class LadderHandler {
}
// 9. 设置防守阵容
async saveDefense(msg: { warId: number, heroes: { actorId: number, ai: number, dataId: number, order: number, subHid?: number }[] }, session: BackendSession) {
let { warId, heroes } = msg;
async saveDefense(msg: { warId: number, heroes: { actorId: number, ai: number, dataId: number, order: number, subHid?: number }[], combo: Combo[] }, session: BackendSession) {
let { warId, heroes, combo } = msg;
let roleId = session.get('roleId');
let ladderData = await LadderMatchModel.findByRoleId(roleId);
@@ -296,7 +297,7 @@ export class LadderHandler {
let dbHero = dbHeroes.find(ccur => ccur.hid == cur.actorId);
return dbHero && new LadderDefenseHero(cur, dbHero._id, dbHero.ce);
}).filter(cur => cur);
let defense = new LadderDefense(defenseHeroes, warId);
let defense = new LadderDefense(defenseHeroes, warId, combo);
ladderData = await LadderMatchModel.updateByRoleId(roleId, { defense, hasDefense: true });
// 返回
let result = new LadderDataReturn();

View File

@@ -11,7 +11,7 @@ import { PvpDefenseModel, pvpUpdateInter } from '../../../db/PvpDefense';
import { PvpSeasonResultModel } from '../../../db/PvpSeasonResult';
import { Rank } from '../../../services/rankService';
import { checkTask, checkTaskInPvpEnd } from '../../../services/task/taskService';
import { Attack, Defense, DefenseHero, PvpDataReturn, pvpSaveDataReturn } from '../../../domain/battleField/pvp';
import { Attack, Combo, Defense, DefenseHero, PvpDataReturn, pvpSaveDataReturn } from '../../../domain/battleField/pvp';
import { DEBUG_MAGIC_WORD, FIGURE_UNLOCK_CONDITION, ITEM_CHANGE_REASON, LINEUP_NUM, REDIS_KEY, TASK_TYPE } from '../../../consts';
import { PVP } from '../../../pubUtils/dicParam';
import { addItems, getGoldObject, handleCost, unlockFigure } from '../../../services/role/rewardService';
@@ -158,7 +158,7 @@ export class PvpHandler {
let pvpHistoryOpp = <PvpHistoryOpp>curOpp.oppDef;
return resResult(STATUS.SUCCESS, { roleId: pvpHistoryOpp.oppRoleId, ...pick(pvpHistoryOpp, ['pos', 'title', 'warId', 'buff', 'heroes']) });
return resResult(STATUS.SUCCESS, { roleId: pvpHistoryOpp.oppRoleId, ...pick(pvpHistoryOpp, ['pos', 'title', 'warId', 'buff', 'heroes', 'combo']) });
}
@@ -490,8 +490,8 @@ export class PvpHandler {
}
//3. 保存防守阵容
async saveDefense(msg: { heroes: { actorId: number, dataId: number, order: number, ai: number, subHid?: number }[], warId: number, buff: number }, session: BackendSession) {
let { heroes, warId, buff } = msg;
async saveDefense(msg: { heroes: { actorId: number, dataId: number, order: number, ai: number, subHid?: number }[], warId: number, buff: number, combo: Combo[] }, session: BackendSession) {
let { heroes, warId, buff, combo } = msg;
let roleId = session.get('roleId');
if (heroes.length > LINEUP_NUM || heroes.length <= 0) {
return resResult(STATUS.WRONG_PARMS);
@@ -539,7 +539,7 @@ export class PvpHandler {
let defenseHeroes = heroes.map(cur => {
return new DefenseHero(cur, heroIdMap.get(cur.actorId));
});
let defense = new Defense(defenseHeroes, scores, warId, buff);
let defense = new Defense(defenseHeroes, scores, warId, buff, combo);
let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, pvpDefense.attack?.heroes??[], defense.heroes, dbHeroes);
await PvpSaveDataModel.createSaveData(roleId, warId, buff, defenseHeroes);
pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { ...refChallengeObj, defense, lineupCe, hasDefense: true, seasonNum });

View File

@@ -47,7 +47,7 @@ export class GVGBattleHandler {
async getTeams(msg: {}, session: BackendSession) {
const roleId = session.get('roleId');
let { configId } = getGVGConfig();
const teams = await GVGTeamModel.findByRole(roleId, '-_id teamCode index head frame spine lineup confirmConfigId')
const teams = await GVGTeamModel.findByRole(roleId, '-_id teamCode index head frame spine lineup combo confirmConfigId')
return resResult(STATUS.SUCCESS, { teams: teams.map(team => new MyTeamSimpleInfo(team, configId)) });
}
@@ -64,7 +64,7 @@ export class GVGBattleHandler {
const serverId = session.get('serverId');
const roleName = session.get('roleName');
const guildCode = session.get('guildCode');
const { cityId, index, head, spine, frame, lineup } = msg;
const { cityId, index, head, spine, frame, lineup, combo } = msg;
let { configId, period } = getGVGPeriodData();
if (period != GVG_PERIOD.BATTLE) return resResult(STATUS.GVG_NOT_BATTLE_PERIOD);
@@ -79,7 +79,7 @@ export class GVGBattleHandler {
let groupKey = await getGroupKey(serverId);
let role = await RoleModel.findByRoleId(roleId, 'lv title');
let updateParam: SaveTeamUpdateParam = { index, head, spine, frame, roleName, serverId, leagueCode, leagueName, lv: role.lv, title: role.title }
let updateParam: SaveTeamUpdateParam = { index, head, spine, frame, roleName, serverId, leagueCode, leagueName, lv: role.lv, title: role.title, combo }
if(lineup) {
let hids: number[] = [];
for(let { actorId, subHid } of lineup) {
@@ -499,7 +499,7 @@ export class GVGBattleHandler {
teamObj.setTime(defenseTeam.teamCode, defenseTeam);
let heroes = getOppHeroes(warId, defenseTeam.isRobot, defenseTeam.lineup)
return resResult(STATUS.SUCCESS, { battleCode: battleRecord.battleCode, warId, isRobot: defenseTeam.isRobot, heroes, curTeam: new MyTeamInfo(attackTeam), oppTeam: new MyTeamInfo(defenseTeam) });
return resResult(STATUS.SUCCESS, { battleCode: battleRecord.battleCode, warId, isRobot: defenseTeam.isRobot, heroes, combo: defenseTeam.combo, curTeam: new MyTeamInfo(attackTeam), oppTeam: new MyTeamInfo(defenseTeam) });
}
// 队伍停止攻击

View File

@@ -29,6 +29,7 @@ import { Rank } from "../../../services/rankService";
import { getAllServerName } from "../../../services/redisService";
import { CheckMeterial } from "../../../services/role/checkMaterial";
import { checkGVGTask } from "../../../services/task/taskService";
import { Combo } from "../../../domain/battleField/pvp";
export default function (app: Application) {
new HandlerService(app, {});
@@ -68,7 +69,7 @@ export class GVGProduceHandler {
let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId, myLeague);
if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let { rank, lineup, oppRanks, refreshCnt } = myVestigeRank;
let { rank, lineup, oppRanks, refreshCnt, combo } = myVestigeRank;
let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 0);
let oppPlayers = await getOppPlayerByRanks(serverId, groupKey, vestigeId, oppRanks);
@@ -78,7 +79,7 @@ export class GVGProduceHandler {
vestigeId,
myRank: rank,
score: dicRankMap?.get(rank)?.score||0,
lineup, lineupCe,
lineup, lineupCe, combo,
oppPlayers,
refreshCnt,
usedHeroes,
@@ -87,11 +88,11 @@ export class GVGProduceHandler {
}
// 编辑阵容
async saveLineup(msg: { vestigeId: number, lineup: [{ actorId: number, dataId: number, order: number, correspondingVar: number, subHid: number }] }, session: BackendSession) {
async saveLineup(msg: { vestigeId: number, lineup: [{ actorId: number, dataId: number, order: number, correspondingVar: number, subHid: number }], combo: Combo[] }, session: BackendSession) {
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const { vestigeId, lineup: heroes } = msg;
const { vestigeId, lineup: heroes, combo } = msg;
if(!await checkVestige(serverId, vestigeId)) {
return resResult(STATUS.GVG_VESTIGE_ERR);
@@ -115,11 +116,12 @@ export class GVGProduceHandler {
let curHero = dbHeroes.find(cur => cur.hid == hero.actorId);
return { actorId: curHero.hid, dataId: hero.dataId, order: hero.order, subHid: hero.subHid, correspondingVar: hero.correspondingVar, ce: curHero.ce }
});
let vestigeRank = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { lineup, hasDefense: true });
let vestigeRank = await GVGVestigeRankModel.updateByRoleId(vestigeId, roleId, { lineup, combo, hasDefense: true });
return resResult(STATUS.SUCCESS, {
vestigeId,
lineup: vestigeRank.lineup,
combo: vestigeRank.combo,
lineupCe: vestigeRank.lineup.reduce((pre, cur) => pre + cur.ce, 0),
});
}
@@ -296,12 +298,12 @@ export class GVGProduceHandler {
}
// 布完阵开始挑战
async checkBattle(msg: { battleCode: string, heroes: { actorId: number, dataId: number, order: number, subHid: number }[] }, session: BackendSession) {
async checkBattle(msg: { battleCode: string, heroes: { actorId: number, dataId: number, order: number, subHid: number }[], combo: Combo[] }, session: BackendSession) {
const roleId = session.get('roleId');
const roleName = session.get('roleName');
const serverId = session.get('serverId');
const { battleCode, heroes } = msg;
const { battleCode, heroes, combo } = msg;
let rec = await GVGVestigeRecModel.findByBattleCode(battleCode);
if(!rec || rec.attackRoleId != roleId) return resResult(STATUS.GVG_VESTIGE_REC_NOT_FOUND);
@@ -322,7 +324,7 @@ export class GVGProduceHandler {
if(!lock) return resResult(STATUS.GVG_VESTIGE_CHECK_BATTLE_STATUS_ERR);
// 向vestigerec保存阵容
const info = await generateAttackHeroInfo(heroes, dbHeroes);
const info = await generateAttackHeroInfo(heroes, dbHeroes, combo);
rec = await GVGVestigeRecModel.startBattle(battleCode, info.heroes, info.ce);
// 更新battleRecord

View File

@@ -748,13 +748,14 @@ export function checkRouteParam(route: string, msg: any) {
}
case "battle.pvpHandler.saveDefense":
{
let { heroes, warId, buff } = msg;
let { heroes, warId, buff, combo } = msg;
if (!checkNaturalArray(heroes)) return false;
if (!checkNaturalNumbers(warId, buff)) return false;
if (heroes.length > LINEUP_NUM) return false;
for (let { actorId, dataId, order, ai } of heroes) {
if (!checkNaturalNumbers(actorId, dataId, order, ai)) return false;
}
if(!checkCombo(combo)) return false
break;
}
case "battle.pvpHandler.receiveBox":
@@ -815,6 +816,7 @@ export function checkRouteParam(route: string, msg: any) {
for (let { actorId, dataId, order } of msg.heroes) {
if (!checkNaturalNumbers(actorId, dataId, order)) return false;
}
if(!checkCombo(msg.combo)) return false
break;
}
case "battle.ladderHandler.buyCnt":
@@ -2302,4 +2304,18 @@ function checkSeqId(...seqIds: (number | string)[]) {
if (!checkNaturalNumbers(<number>seqId) && !checkNaturalStrings(<string>seqId)) return false
}
return true;
}
function checkCombo(combo: {groupId: number, levelList: number[]}[]) {
if(combo) {
if(!isArray(combo)) return false;
for(let {groupId, levelList} of combo) {
if(!isNumber(groupId)) return false;
if(!isArray(levelList)) return false;
for(let lv of levelList) {
if(!isNumber(lv)) return false;
}
}
}
return true;
}

View File

@@ -33,6 +33,7 @@ import { addGVGReward, combinePushItem } from "./gvgItemService";
import { calFighterContribute } from "./gvgPrepareService";
import { addVestigeLeagueRankRec, addVestigeRankMessage } from "./gvgRecService";
import { getGroupKey, getGVGServerType, getPeriodByTime } from "./gvgService";
import { Combo } from "../../domain/battleField/pvp";
let gvgFightTime = undefined;
@@ -249,7 +250,7 @@ export async function generateDefenseInfo(roleId: string, vestigeId: number, ran
let info = new OppPlayerInfo();
info.initByPlayer(playerVestigeData.rank, role, league, true);
info.setPlayerHeroes(heroes, lineup);
info.setPlayerHeroes(heroes, lineup, playerVestigeData.combo||[]);
return info;
}
}
@@ -261,9 +262,9 @@ export async function generateAttackInfo(roleId: string, league: GVGLeagueType,
return info;
}
export async function generateAttackHeroInfo(lineup: { actorId: number, dataId: number, order: number, subHid: number }[], dbHeroes: HeroType[]) {
export async function generateAttackHeroInfo(lineup: { actorId: number, dataId: number, order: number, subHid: number }[], dbHeroes: HeroType[], combo: Combo[]) {
let info = new OppPlayerInfo();
info.setPlayerHeroes(dbHeroes, lineup);
info.setPlayerHeroes(dbHeroes, lineup, combo);
return info;
}
@@ -283,7 +284,7 @@ export async function getOppDetailData(rec: GVGVestigeRecType) {
const heroes = await HeroModel.findByHidRange(hids, rec.defenseRoleId, 'hid lv quality star colorStar skins ce skinId');
const artifactSeids = heroes.map(hero => hero.artifact);
const artifacts = await ArtifactModel.findbySeqIds(rec.defenseRoleId, artifactSeids);
result.setByPlayer(dicWarJson, defenseInfo, heroes, artifacts);
result.setByPlayer(dicWarJson, defenseInfo, heroes, artifacts, rec.defenseInfo.combo);
let attrByHid = await getHeroesAttributes(rec.defenseRoleId);
for(let [hid, attribute] of attrByHid) {
result.setAttribute(hid, attribute.getAttributesToString());

View File

@@ -8,6 +8,7 @@ import { DicGVGAreaPoint } from "../pubUtils/dictionary/DicGVGAreaPoint";
import { InitTeamParam, SaveTeamUpdateParam } from "../domain/gvgField/gvgDb";
import { GVGHeroInfo } from "../domain/dbGeneral";
import { GVG_BATTLE_PRE_TIME, GVG_CATAPULT, GVG_ROBOT } from "../consts";
import { Combo } from "../domain/battleField/pvp";
@index({ roleId: 1, index: 1 })
@index({ teamCode: 1 })
@@ -110,6 +111,9 @@ export default class GVGTeam extends BaseModel {
@prop({ required: true, type: () => GVGHeroInfo, _id: false })
lineup: GVGHeroInfo[];
@prop({ required: true, type: () => Combo, _id: false })
combo: Combo[];
@prop({ required: true })
lineupCe: number;
@@ -137,6 +141,7 @@ export default class GVGTeam extends BaseModel {
const teamCode = genCode(8);
const insert = Object.assign(doc.toJSON(), { ...initParam, teamCode });
delete insert.lineup;
delete insert.combo;
const team: GVGTeamType | null = await GVGTeamModel.findOneAndUpdate({ roleId, index }, { $setOnInsert: insert, $set: updateParam }, { upsert: true, new: true }).lean();
return team;
}

View File

@@ -2,6 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, mongoose } from '@typegoose/typegoose';
import { RoleType } from './Role';
import { getZeroPoint } from '../pubUtils/timeUtil';
import { Combo } from '../domain/battleField/pvp';
export class Lineup {
@prop({ required: true })
@@ -58,6 +59,9 @@ export default class GVGVestigeRank extends BaseModel {
@prop({ required: true, type: Lineup, default: [], _id: false })
lineup: Lineup[]; // 阵容
@prop({ required: true, type: () => Combo, default: [], _id: false })
combo: Combo[]; // 阵容
@prop({ required: true, type: Number, default: [], _id: false })
oppRanks: number[]; // 对手的排名

View File

@@ -115,8 +115,8 @@ export default class PvpDefense extends BaseModel {
const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId })
.populate('role', 'serverId head frame spine heads frames spines topLineupCe roleId roleName lv globalCeAttr title')
.populate('heroes.hero')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv title lv pLv defCe heroes warId buff')
.populate('oppBeforePlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv title lv pLv defCe heroes warId buff').lean({ getters: true, virtuals: true });
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv title lv pLv defCe heroes warId buff combo')
.populate('oppBeforePlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv title lv pLv defCe heroes warId buff combo').lean({ getters: true, virtuals: true });
return result;
}

View File

@@ -11,6 +11,13 @@ export class HeroScores {
score: number;
}
export class Combo {
@prop({ required: true })
groupId: number;
@prop({ required: true, type: Number })
levelList: number[];
}
@index({ roleId: 1, oppRoleId: 1 })
export default class PvpHistoryOpp extends BaseModel {
@prop({ required: true })
@@ -47,9 +54,11 @@ export default class PvpHistoryOpp extends BaseModel {
warId: number; // 对手选择的地图id
@prop({ required: true })
buff: number; // 对手选择的buff
@prop({ required: true, type: PvpEnemies, default: [], _id: false })
@prop({ required: true, type: () => PvpEnemies, default: [], _id: false })
heroes: PvpEnemies[]; // 对手阵容
@prop({ required: true, type: PvpOtherHeroes, default: [] })
@prop({ required: true, type: () => Combo })
combo: Combo[]; // 状态 0-仅刷出 1-挑战过
@prop({ required: true, type: () => PvpOtherHeroes, default: [] })
otherHeroes: PvpOtherHeroes[]; // 阵容以外所有武将信息
@prop({ required: true, default: 0 })
status: number; // 状态 0-仅刷出 1-挑战过

View File

@@ -10,6 +10,7 @@ import { EXTERIOR, LADDER } from "../../pubUtils/dicParam";
import { DicLadderDifficultRatio } from "../../pubUtils/dictionary/DicLadderDifficultRatio";
import { DicWarJson } from "../../pubUtils/dictionary/DicWarJson";
import { RoleRankInfo } from "../rank";
import { Combo } from "./pvp";
// ladderMatch表
export class LadderDefenseHero {
@@ -46,10 +47,13 @@ export class LadderDefense {
warId: number;
@prop({ required: true, type: LadderDefenseHero, _id: false })
heroes: LadderDefenseHero[];
@prop({ required: true, type: () => Combo, _id: false })
combo: Combo[];
constructor(heroes: LadderDefenseHero[], warId: number) {
constructor(heroes: LadderDefenseHero[], warId: number, combo: Combo[]) {
this.heroes = heroes;
this.warId = warId;
this.combo = combo;
}
}
@@ -208,6 +212,7 @@ export class LadderDefenseReturn {
warId: number;
defCe: number = 0;
heroes: LadderDefenseHeroReturn[] = [];
combo: Combo[] = [];
constructor(defense: LadderDefense) {
if(!defense) return;
@@ -216,6 +221,7 @@ export class LadderDefenseReturn {
this.defCe += defenseHero.ce;
this.heroes.push(new LadderDefenseHeroReturn(defenseHero));
}
this.combo = defense.combo;
}
}
@@ -429,6 +435,7 @@ export class LadderOppDetailReturn {
title: number = 1;
warId: number = 0;
heroes: LadderOppDetailHeroReturn[] = [];
combo: Combo[] = [];
defCe: number = 0;
constructor(ladderRec: LadderMatchRecType) {
@@ -448,6 +455,7 @@ export class LadderOppDetailReturn {
this.title = role.title;
if(ladderMatch.defense) {
this.warId = ladderMatch.defense.warId;
this.combo = ladderMatch.defense.combo||[];
let heroes = ladderMatch.defense.heroes||[];
for(let hero of heroes) {
let warJson = warJsons.find(cur => cur.dataId == hero.dataId);

View File

@@ -43,6 +43,13 @@ export class DefenseHero extends DefenseHeroInSaveData {
}
export class Combo {
@prop({ required: true })
groupId: number;
@prop({ required: true, type: Number })
levelList: number[];
}
// 防守阵容
export class Defense {
@prop({ required: true })
@@ -55,8 +62,10 @@ export class Defense {
score: number; // 防守阵容的总军功
@prop({ required: true })
pLv: number; // 防守阵容的等级
@prop({ required: true, type: () => Combo, _id: false })
combo: Combo[]; // 防守阵容的等级
constructor(heroes: DefenseHero[], scores: number[], warId: number, buff: number) {
constructor(heroes: DefenseHero[], scores: number[], warId: number, buff: number, combo: Combo[]) {
this.heroes = heroes;
this.score = scores.reduce((pre, cur) => pre + cur, 0);
let {pLv, score} = getPlvAndScore(scores);
@@ -64,6 +73,7 @@ export class Defense {
this.score = score;
this.warId = warId;
this.buff = buff;
this.combo = combo;
}
}
@@ -176,6 +186,7 @@ export class DefenseLineupReturn {
score: number;
pLv: number;
ce: number;
combo: Combo[];
constructor(defense: Defense, defenseCe: number) {
this.warId = defense.warId;
@@ -184,6 +195,7 @@ export class DefenseLineupReturn {
this.score = defense.score;
this.pLv = defense.pLv;
this.ce = defenseCe;
this.combo = defense.combo;
}
}

View File

@@ -10,6 +10,7 @@ import { DicGVGVestige } from "../../pubUtils/dictionary/DicGVGVestige";
import { DicWarJson } from "../../pubUtils/dictionary/DicWarJson";
import { GVGHeroInfo } from "../dbGeneral";
import { LineupHero } from "../roleField/hero";
import { Combo } from "../battleField/pvp";
export class OppPlayerHeroInfo {
@prop({ required: true })
@@ -100,6 +101,8 @@ export class OppPlayerInfo {
isSuccess: boolean = false; // 是否胜利
@prop({ required: true, default: [], type: OppPlayerHeroInfo, _id: false })
heroes: OppPlayerHeroInfo[] = []; // 武将
@prop({ required: true, default: [], type: () => Combo, _id: false })
combo: Combo[] = []; // 武将
@prop({ required: true })
isRobot: boolean = false; // 原排名
@@ -119,13 +122,14 @@ export class OppPlayerInfo {
this.leagueName = league.name;
}
setPlayerHeroes(heroes: HeroType[], lineup: {actorId: number, dataId: number, order: number, subHid: number}[]) {
setPlayerHeroes(heroes: HeroType[], lineup: {actorId: number, dataId: number, order: number, subHid: number}[], combo: Combo[]) {
for(let hero of heroes) {
let obj = new OppPlayerHeroInfo();
obj.setByDefenseHero(hero, lineup);
this.ce += hero.ce;
this.heroes.push(obj);
}
this.combo = combo;
}
initByRobot(dic: DicGVGVestige, heroes: OppPlayerHeroInfo[], isSuccess: boolean) {
@@ -228,6 +232,7 @@ export class OppDetailData{
status: number;
time: number;
heroes: OppDetailHeroData[] = [];
combo: Combo[] = [];
lineupCe: number = 0;
constructor(rec: GVGVestigeRecType, obj: {status: number, time: number}) {
@@ -240,7 +245,7 @@ export class OppDetailData{
this.time = obj.time;
}
setByPlayer(dicWarJson: DicWarJson[], defenseHeroes: OppPlayerHeroInfo[], heroes: HeroType[], artifacts: ArtifactModelType[]) {
setByPlayer(dicWarJson: DicWarJson[], defenseHeroes: OppPlayerHeroInfo[], heroes: HeroType[], artifacts: ArtifactModelType[], combo: Combo[]) {
for(let warJson of dicWarJson) {
let defenseHero = defenseHeroes.find(cur => cur.dataId == warJson.dataId);
if(!defenseHero) continue;
@@ -250,6 +255,7 @@ export class OppDetailData{
this.heroes.push(hero);
this.lineupCe += curHero.ce;
}
this.combo = combo;
}
setAttribute(hid: number, attribute: string) {
@@ -265,6 +271,7 @@ export interface SaveTeamParam {
frame: number;
spine: number;
lineup?: LineupHero[];
combo: Combo[];
}
export interface SaveTeamUpdateParam {
@@ -273,6 +280,7 @@ export interface SaveTeamUpdateParam {
frame: number;
spine: number;
lineup?: GVGHeroInfo[];
combo: Combo[];
lineupCe?: number;
cityId?: number;
areaId?: number;

View File

@@ -15,6 +15,7 @@ import { GVGCityType } from "../../db/GVGCity";
import { GVGTeamMem } from "../battleField/gvgBattle";
import { GVGTeamType } from "../../db/GVGTeam";
import { GVGRoleDataType } from "../../db/GVGRoleData";
import { Combo } from "../battleField/pvp";
class LeagueLeaderInfo {
name: string; // 盟主名
@@ -777,6 +778,7 @@ export class MyTeamSimpleInfo {
order: number; // 行动
subHid: number;
}[];
combo: Combo[];
hasConfirm: boolean;
constructor(team: GVGTeamType, configId: number) {
@@ -787,6 +789,7 @@ export class MyTeamSimpleInfo {
this.spine = team.spine;
this.lineup = team.lineup.map(({ actorId, dataId, outIndex, subActorId }) => ({ actorId, dataId, order: outIndex, subHid: subActorId }));
this.hasConfirm = team.confirmConfigId == configId;
this.combo = team.combo;
}
}