pvp创建获取

This commit is contained in:
mamengke01
2021-01-06 16:06:31 +08:00
parent d2f76c9198
commit a785a4733a
17 changed files with 189 additions and 71 deletions
+21 -16
View File
@@ -3,10 +3,9 @@ import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typ
import Hero, { } from './Hero';
import Role, { } from './Role';
import PvpDef, { } from './PvpDefense';
import { PVP_PLAYER_POS, PVP_POS } from '../consts';
import SystemConfig, { } from './SystemConfig';
import { PVP_PLAYER_POS, PVP_HERO_POS } from '../consts';
class Heroes {
export class Heroes {
@prop({ required: true })
actorId: number; // 武将id
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
@@ -32,13 +31,14 @@ function getInitialOppPlayers() {
// 初始化
function getInitialOppHeros() {
let players = new Array<OppPlayers>();
for(let i = PVP_POS.START; i <= PVP_POS.END; i++) {
let p = new OppPlayers();
let heros = new Array<Heroes>();
for(let i = PVP_HERO_POS.START; i <= PVP_HERO_POS.END; i++) {
let p = new Heroes();
p.pos = i;
players.push(p);
p.order = i;
heros.push(p);
}
return players;
return heros;
}
class Robot {
@@ -54,7 +54,7 @@ class Robot {
topFiveCe: number;
}
class OppPlayers {
export class OppPlayers {
@prop({ ref: 'PvpDefense', type: mongoose.Schema.Types.ObjectId })
oppDef: Ref<PvpDef>;
@prop({ required: true })
@@ -65,7 +65,7 @@ class OppPlayers {
robot: Robot
}
class HidScores {
class HeroScores {
@prop({ required: true })
hid: number;
@prop({ required: true })
@@ -92,21 +92,21 @@ export default class PvpDefense extends BaseModel {
defCe: number; //防守ce
@prop({ required: true, type: OppPlayers, default: getInitialOppPlayers(), _id: false })
oppPlayers: Array<OppPlayers>;
@prop({ ref: 'SystemConfig', type: mongoose.Schema.Types.ObjectId })
map: Ref<SystemConfig>;
@prop({ required: true, type: HidScores, default: [] })
hidScores: Array<HidScores>;
@prop({ required: true, type: HeroScores, default: [] })
heroScores: Array<HeroScores>;
@prop({ required: true, default: true })
isDefaultHero: boolean;
public static async findByRoleId(roleId: string, lean = true) {
const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }).lean(lean);
return result;
}
public static async findByScale(roleId: string, min: number, max: number, lean = true) {
const result: PvpDefenseType[] = await PvpDefenseModel.find({ roleId: { $ne: roleId }, defCe: { $lte: max, $gte: min } }).sort({ updatedAt: -1 }).limit(100).lean(lean);
return result;
}
public static async createPvpDefense(params: { roleId: string, roleName: string, heroes: Array<any>, defCe: number }, lean = true) {
public static async createPvpDefense(params: { roleId: string, roleName: string, heroes: Array<Heroes>, oppPlayers: Array<OppPlayers>, defCe: number }, lean = true) {
const doc = new PvpDefenseModel();
const update = Object.assign(doc.toJSON(), params);
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }).lean(lean);
@@ -141,6 +141,11 @@ export default class PvpDefense extends BaseModel {
let result = await PvpDefenseModel.deleteMany({ roleId });
return result;
}
public static async findByRoleIdIncludeAll(roleId: string, lean = true) {
const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }).populate('role', 'Heroes.hero', 'OppPlayers.oppDef').lean(lean);
return result;
}
}
export const PvpDefenseModel = getModelForClass(PvpDefense);
+6 -2
View File
@@ -1,10 +1,11 @@
import { HANG_UP_CONSTS, ROLE_TERAPH } from './../consts';
import BaseModel from './BaseModel';
import { CeAttrRole } from './generalField';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
import User from './User';
import { shouldRefresh } from '../pubUtils/util';
import { initRoleAtrr } from '../pubUtils/playerCe';
import Hero,{} from '../db/Hero';
interface roleUpdate {
ce?: number;
_id?:number;
@@ -24,6 +25,8 @@ class TopHero {
hid: number; // 武将id
@prop({ required: true })
ce: number; // 战力
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
hero: Ref<Hero>;
}
@@ -54,7 +57,7 @@ class Teraph{
@prop({ required: true, default: 1 })
id: number; // 神像的id
@prop({ required: true, default: 1 })
grade: number; // 等级
grade: number; // 等级
@prop({ required: true, default: 0 })
hp: number;
@prop({ required: true, default: 0 })
@@ -231,6 +234,7 @@ export default class Role extends BaseModel {
const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId });
initRoleAtrr(update);
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean);
return role;
}
+4 -2
View File
@@ -6,9 +6,11 @@ export default class SystemConfig extends BaseModel {
@prop({ required: true, default: 1})
id: number;
@prop({ required: true })
map: number; // 地图
@prop({ required: true })
warId: number; // 地图
@prop({ required: true, default: 1 })
seasonNum: number; // 赛季
@prop({ required: true })
seasonEndTime: number; //赛季结束的时间
public static async findSystemConfig(lean = true) {
const result: SystemConfigType = await SystemConfigModel.findOne({ id: 1 }).lean(lean);
return result;