名将擂台:获取对手

This commit is contained in:
luying
2022-07-15 15:31:08 +08:00
parent 7394f14e9d
commit f56dbc29de
15 changed files with 1881 additions and 70 deletions

View File

@@ -1,11 +1,13 @@
import { mongoose, prop, Ref } from "@typegoose/typegoose";
import { LADDER_BATTLE_STOP_TIME, LADDER_CHECK_STOP_TIME, LADDER_STATUS } from "../../consts";
import Hero from '../../db/Hero';
import Hero, { HeroType } from '../../db/Hero';
import { LadderMatchType } from "../../db/LadderMatch";
import { LadderMatchRecType } from "../../db/LadderMatchRec";
import { RoleType } from "../../db/Role";
import { gameData } from "../../pubUtils/data";
import { EXTERIOR, LADDER } from "../../pubUtils/dicParam";
import { DicLadderDifficultRatio } from "../../pubUtils/dictionary/DicLadderDifficultRatio";
import { DicWarJson } from "../../pubUtils/dictionary/DicWarJson";
import { RoleRankInfo } from "../rank";
// ladderMatch表
@@ -33,6 +35,7 @@ export class LadderDefenseHero {
}
}
// ladderMatch表
export class LadderDefense {
@prop({ required: true })
@@ -47,6 +50,16 @@ export class LadderDefense {
}
// LadderMatch表
export class LadderOppPlayerInDB {
@prop({ required: true })
rank: number;
@prop({ required: true })
roleId: string;
@prop({ required: true })
isRobot: boolean;
}
// ladderMatchRec
export class LadderOppPlayerHeroInfo {
@prop({ required: true })
@@ -54,44 +67,66 @@ export class LadderOppPlayerHeroInfo {
@prop({ required: true })
skinId: number; // 皮肤id
@prop({ required: true })
quality: number; // 皮肤id
quality: number; // 品质
@prop({ required: true })
star: number; // 皮肤id
star: number; // 星级
@prop({ required: true })
colorStar: number; // 皮肤id
colorStar: number; // 彩星
@prop({ required: true })
lv: number; // 皮肤id
lv: number; // 等级
setByWarJson(warJson: DicWarJson) {
this.hid = warJson.actorId;
this.skinId = warJson.actorId;
this.star = warJson.star;
this.colorStar = 0;
this.lv = warJson.lv;
let dicHero = gameData.hero.get(warJson.actorId);
if(dicHero) this.quality = dicHero.quality;
}
setByDefenseHero(hero: HeroType) {
this.hid = hero.hid;
this.skinId = hero.skinId;
this.quality = hero.quality;
this.star = hero.star;
this.colorStar = hero.colorStar;
this.lv = hero.lv;
}
}
// ladderMatchRec
export class LadderOppPlayerInfo {
@prop({ required: true })
oldRank: number; // 原排名
oldRank: number = 0; // 原排名
@prop({ required: true })
newRank: number; // 交换后的排名
newRank: number = 0; // 交换后的排名
@prop({ required: true })
roleId: string; // 角色 id
roleId: string = ''; // 角色 id
@prop({ required: true })
roleName: string; // 角色 名
roleName: string = LADDER.LADDER_ROBOT_NAME; // 角色 名
@prop({ required: true, default: 0 })
lv: number; // 等级
lv: number = 1; // 等级
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACE })
head: number; // 头像
head: number = EXTERIOR.EXTERIOR_FACE; // 头像
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACECASE })
frame: number; // 相框
frame: number = EXTERIOR.EXTERIOR_FACECASE; // 相框
@prop({ required: true, default: EXTERIOR.EXTERIOR_APPEARANCE })
spine: number; // 形象
spine: number = EXTERIOR.EXTERIOR_APPEARANCE; // 形象
@prop({ required: true, default: 0 })
title: number; // 爵位
title: number = 1; // 爵位
@prop({ required: true, default: 0 })
ce: number; // 最高五人战力
ce: number = 0; // 防守战力
@prop({ required: true, default: false })
isSuccess: boolean; // 是否胜利
@prop({ required: true, default: 0 })
score: number; // 获得的总积分
isSuccess: boolean = false; // 是否胜利
@prop({ required: true, default: [], type: LadderOppPlayerHeroInfo, _id: false })
heroes: LadderOppPlayerHeroInfo[]; // 获得的总积分
heroes: LadderOppPlayerHeroInfo[] = []; // 武将
@prop({ required: true })
isRobot: boolean = false; // 原排名
constructor(role: RoleType, heroes: LadderOppPlayerHeroInfo[], defCe: number, isSuccess: boolean ) {
initByPlayer(rank: number, role: RoleType, heroes: LadderOppPlayerHeroInfo[], defCe: number, isSuccess: boolean ) {
this.oldRank = rank;
this.newRank = rank;
this.roleId = role.roleId;
this.roleName = role.roleName;
this.head = role.head;
@@ -103,9 +138,21 @@ export class LadderOppPlayerInfo {
this.isSuccess = isSuccess;
this.heroes = heroes;
}
initByRobot(dicLadderDifficultRatio: DicLadderDifficultRatio, heroes: LadderOppPlayerHeroInfo[], isSuccess: boolean) {
this.oldRank = dicLadderDifficultRatio.rank;
this.newRank = dicLadderDifficultRatio.rank;
this.roleId = `robot${this.oldRank}`;
this.head = dicLadderDifficultRatio.head;
this.spine = dicLadderDifficultRatio.spine;
this.ce = dicLadderDifficultRatio.ce;
this.lv = dicLadderDifficultRatio.level;
this.isSuccess = isSuccess;
this.heroes = heroes;
}
}
// 接口返回
// defense字段 接口返回
export class LadderDefenseHeroReturn {
actorId: number; // 武将id
ai: number; // ai逻辑1-进攻型 2-防守型
@@ -120,6 +167,7 @@ export class LadderDefenseHeroReturn {
}
}
// defense字段 接口返回
export class LadderDefenseReturn {
warId: number;
defCe: number = 0;
@@ -135,21 +183,23 @@ export class LadderDefenseReturn {
}
}
// oppPlayers字段接口返回
export class LadderOppPlayerReturn {
rank: number; // 对手排名
roleId: string; // 对手玩家id
roleName: string; // 对手玩家名
head: number; // 头像
frame: number; // 相框
spine: number; // 形象
lv: number; // 对手玩家等级
title: number; // 对手爵位
defCe: number; // 对手防守阵容战力
isRobot: boolean; // 是否是机器人
rank: number = 0; // 对手排名
roleId: string = ''; // 对手玩家id
roleName: string = LADDER.LADDER_ROBOT_NAME; // 对手玩家名
head: number = EXTERIOR.EXTERIOR_FACE; // 头像
frame: number = EXTERIOR.EXTERIOR_FACECASE; // 相框
spine: number = EXTERIOR.EXTERIOR_APPEARANCE; // 形象
lv: number = 1; // 对手玩家等级
title: number = 1; // 对手爵位
defCe: number = 0; // 对手防守阵容战力
isRobot: boolean = true; // 是否是机器人
constructor(rank: number, isRobot: boolean) {
this.rank = rank;
this.isRobot = isRobot;
if(isRobot) this.roleId = `robot${this.rank}`;
}
setByRedis(param: RoleRankInfo, defCe: number) {
@@ -164,17 +214,14 @@ export class LadderOppPlayerReturn {
}
setByRobot(ladderDifficultRatio: DicLadderDifficultRatio) {
this.roleId = `robot${this.rank}`;
this.roleName = LADDER.LADDER_ROBOT_NAME;
this.frame = EXTERIOR.EXTERIOR_FACECASE;
this.head = ladderDifficultRatio.head;
this.spine = ladderDifficultRatio.spine;
this.lv = ladderDifficultRatio.level;
this.title = 1;
this.defCe = ladderDifficultRatio.ce;
}
}
// getData总体返回
export class LadderDataReturn {
rank: number = 0;
historyRank: number = 0;
@@ -182,7 +229,7 @@ export class LadderDataReturn {
buyCnt: number = 0;
refOppCnt: number = 0;
defense: LadderDefenseReturn = null;
status: LADDER_STATUS;
status: LADDER_STATUS = LADDER_STATUS.NO;
time: number = 0;
oppPlayers: LadderOppPlayerReturn[] = []
@@ -211,11 +258,53 @@ export class LadderDataReturn {
}
export class LadderOppPlayerInDB {
@prop({ required: true })
rank: number;
@prop({ required: true })
roleId: string;
@prop({ required: true })
isRobot: boolean;
// getOppLineup返回
export class LadderOppLineupReturn {
myRank: number = 0;
isRobot: boolean = true;
rank: number = 0;
roleId: string = '';
roleName: string = LADDER.LADDER_ROBOT_NAME;
title: number = 1;
guildName: string = '';
defCe: number = 0;
heroes: LadderOppPlayerHeroInfo[] = []
setMyRank(myRank: number) {
this.myRank = myRank;
}
setRobot(ladderDifficultRatio: DicLadderDifficultRatio, warJsons: DicWarJson[]) {
this.isRobot = true;
this.rank = ladderDifficultRatio.rank;
this.roleId = `robot${this.rank}`;
this.defCe = ladderDifficultRatio.ce;
for(let warJson of warJsons) {
if(warJson.relation == 2) {
let hero = new LadderOppPlayerHeroInfo();
hero.setByWarJson(warJson);
this.heroes.push(hero);
}
}
}
/**
*
* @param ladderMatch 需要是populate过role和defense.hero
*/
setPlayer(ladderMatch: LadderMatchType) {
this.isRobot = false;
this.rank = ladderMatch.rank;
this.roleId = ladderMatch.roleId;
let role = <RoleType>ladderMatch.role;
this.roleName = role.roleName;
this.title = role.title;
this.guildName = role.guildName;
for(let defenseHero of (ladderMatch.defense?.heroes||[])) {
this.defCe += defenseHero.ce;
let hero = new LadderOppPlayerHeroInfo();
hero.setByDefenseHero(<HeroType>defenseHero.hero);
this.heroes.push(hero);
}
}
}