fix: 战力缩放

This commit is contained in:
luying
2021-02-05 14:30:56 +08:00
parent 474eee3501
commit 3b094f563b
11 changed files with 27 additions and 73 deletions

View File

@@ -6,4 +6,5 @@ export * from './constModules/itemConst';
export * from './constModules/sysConst';
export * from './constModules/guildConst';
export * from './constModules/selectConst';
export * from './statusCode';
export * from './statusCode';
export * from './dataName';

View File

@@ -1,7 +1,7 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { nowSeconds } from '../pubUtils/timeUtil';
import { now } from 'moment';
class RewardInter {
id: number;
count: number;

View File

@@ -1,9 +1,8 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { nowSeconds } from '../pubUtils/timeUtil';
import { SrvRecord } from 'dns';
import { MAIL_STATUS } from '../consts/constModules/mailConst';
import { select } from 'underscore';
class RewardInter {
id: number;
count: number;

View File

@@ -122,7 +122,7 @@ export default class Guild extends BaseModel {
.limit(GUILD_PER_PAGE).skip((page - 1) * GUILD_PER_PAGE)
.select('code icon name lv memberCnt leader ceLimit isAuto')
.populate('leader', { roleName: 1, _id: 0 }, 'Role')
.lean();
.lean({ getters: true });
return guildList;
}
@@ -147,7 +147,7 @@ export default class Guild extends BaseModel {
const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId })
.select(select)
.populate('leader', {roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
.lean({ getter: false });
.lean({ getters: true });
return result;
}

View File

@@ -4,26 +4,7 @@ import Hero, { } from './Hero';
import Role, { } from './Role';
import { PVP_PLAYER_POS, PVP_HERO_POS } from '../consts';
import PvpHistoryOpp from './PvpHistoryOpp';
export interface pvpUpdateInter {
_id?: string;
oppPlayers?: OppPlayers[];
hisScore?: number;
score?: number;
pLv?:number;
heroScores?: HeroScores[];
winStreakNum?: number;
defCe?:number;
heroes?: Array<Heroes>;
seasonNum?: number;
refOppCnt?:number;
refOppTime?: Date;
challengeCnt?:number;
challengeRefTime?:number;
isFirstEntry?:boolean;
receivedBox?: Array<number>;
isDefaultHero?:boolean;
}
import { reduceCe } from '../pubUtils/util';
export class Heroes {
@prop({ required: true })
@@ -61,31 +42,6 @@ function getInitialOppHeros() {
return heros;
}
export class Robot {
@prop({ required: true })
roleId: string; // 角色 id
@prop({ required: true })
roleName: string; // 角色名称
@prop({ required: true, default: 19 })
headHid: number;
@prop({ required: true, default: 19 })
sHid: number;
@prop({ required: true })
defCe: number;
@prop({ required: true })
pLv: number;
@prop({ required: true })
warId: number; // 模板的warId
constructor(roleId: string, roleName: string, defCe: number, pLv: number, warId: number) {
this.roleId = roleId;
this.roleName = roleName;
this.defCe = defCe;
this.pLv = pLv;
this.warId = warId;
}
}
export class OppPlayers {
@prop({ required: true })
roleId: string;
@@ -122,7 +78,7 @@ export default class PvpDefense extends BaseModel {
hisScore: number; //历史最高积分
@prop({ required: true, default: 0 })
winStreakNum: number; //连胜次数
@prop({ required: true, default: 0 })
@prop({ required: true, default: 0, get: (val: number) => reduceCe(val), set: (val: number) => val })
defCe: number; //防守ce
@prop({ required: true, type: OppPlayers, default: getInitialOppPlayers(), _id: false })
oppPlayers: Array<OppPlayers>;
@@ -149,11 +105,11 @@ export default class PvpDefense extends BaseModel {
return result;
}
public static async findByScale(roleId: string, min: number, max: number, lean = true) {
public static async findByScale(roleId: string, min: number, max: number) {
const result: PvpDefenseType[] = await PvpDefenseModel.find({ roleId: { $ne: roleId }, defCe: { $lte: max, $gte: min } })
.populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr')
.populate('heroes.hero')
.sort({ updatedAt: -1 }).limit(100).lean(lean);
.sort({ updatedAt: -1 }).limit(100).lean({ getters: true });
return result;
}
@@ -197,7 +153,7 @@ export default class PvpDefense extends BaseModel {
const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId })
.populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr')
.populate('heroes.hero')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv title lv pLv defCe heroes').lean();
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv title lv pLv defCe heroes').lean({ getters: true });
return result;
}
@@ -206,7 +162,7 @@ export default class PvpDefense extends BaseModel {
.populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr')
.populate('heroes.hero')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv pLv title lv defCe heroes')
.lean();
.lean({ getters: true });
return result;
}
@@ -214,7 +170,7 @@ export default class PvpDefense extends BaseModel {
delete update._id;
let result: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$set:update}, {new: true})
.populate('role', 'headHid sHid topFiveCe roleId roleName lv')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv pLv title lv defCe heroes').lean();
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv pLv title lv defCe heroes').lean({ getters: true });
return result;
}
public static async updateInfo(roleId: string, update: pvpUpdateInter, lean = true) {
@@ -227,11 +183,11 @@ export default class PvpDefense extends BaseModel {
return result;
}
public static async getRank(seasonNum: number, page = 1, limit = 1000, lean = true) {
public static async getRank(seasonNum: number, page = 1, limit = 1000) {
let sortBy = { score: -1, updatedAt: 1 };
const ranks: PvpDefenseType[] = await PvpDefenseModel.find({seasonNum}).select('roleId role score updatedAt')
.populate('role', 'roleId roleName headHid sHid title lv vLv')
.sort(sortBy).limit(limit).skip((page - 1) * limit).lean(lean);
.sort(sortBy).limit(limit).skip((page - 1) * limit).lean({ getters: true });
return ranks;
}
@@ -243,4 +199,5 @@ export default class PvpDefense extends BaseModel {
export const PvpDefenseModel = getModelForClass(PvpDefense);
export interface PvpDefenseType extends Pick<DocumentType<PvpDefense>, keyof PvpDefense> { };
export interface PvpDefenseType extends Pick<DocumentType<PvpDefense>, keyof PvpDefense> { };
export type pvpUpdateInter = Partial<PvpDefenseType>;

View File

@@ -33,7 +33,7 @@ export default class PvpHistoryOpp extends BaseModel {
@prop({ required: true, default: 1 })
title: number; // 对手等级
@prop({ required: true, default: 0 })
defCe: number; // 防守战力
defCe: number; // 防守战力,缩小过的
@prop({ required: true, default: 0 })
rankLv: number; // 对手排名
@prop({ required: true, type: PvpEnemies, default: [] })
@@ -43,11 +43,11 @@ export default class PvpHistoryOpp extends BaseModel {
@prop({ required: true, default: 0 })
status: number; // 状态 0-仅刷出 1-挑战过
public static async createPvpOpp(params: PvpOppCreateParam, lean = true) {
public static async createPvpOpp(params: PvpOppCreateParam) {
const doc = new PvpHistoryOppModel();
const update = Object.assign(doc.toJSON(), params);
delete update._id;
const defense: PvpHistoryOppType = await PvpHistoryOppModel.findOneAndUpdate({ roleId: params.roleId, pos: params.pos, status: 0 }, update, { upsert: true, new: true }).lean(lean);
const defense: PvpHistoryOppType = await PvpHistoryOppModel.findOneAndUpdate({ roleId: params.roleId, pos: params.pos, status: 0 }, update, { upsert: true, new: true }).lean();
return defense;
}

View File

@@ -1,5 +1,4 @@
import { PvpEnemies, PvpOtherHeroes } from "../../domain/dbGeneral";
import { reduceCe } from "../../pubUtils/util";
import { GuildType } from "../../db/Guild";
import { RoleType, WarStar } from "../../db/Role";
import { WAR_TYPE } from "../../consts/consts";
@@ -66,7 +65,7 @@ export class PlayerDetail {
if(detail.headHid) this.headHid = detail.headHid;
if(detail.score) this.score = detail.score;
if(detail.pLv) this.pLv = detail.pLv;
if(detail.defCe) this.defCe = reduceCe(detail.defCe);
if(detail.defCe) this.defCe = detail.defCe;
if(detail.heroes) this.heroes = detail.heroes;
if(detail.rank) this.rank = detail.rank;
}