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
@@ -244,7 +244,7 @@ export class PvpHandler {
let curOpp = oppPlayers.find(cur => cur.roleId == oppRoleId && cur.pos == pos); let curOpp = oppPlayers.find(cur => cur.roleId == oppRoleId && cur.pos == pos);
if(!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND); if(!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND);
const role = await RoleModel.findByRoleId(roleId); const role = await RoleModel.findByRoleId(roleId, null, true);
if(isSuccess) { if(isSuccess) {
winStreakNum ++; winStreakNum ++;
} else { } else {
@@ -6,7 +6,7 @@ import { GMUserModel } from '../../../db/GMUser';
import { Application } from 'pinus'; import { Application } from 'pinus';
import {FrontendSession} from 'pinus'; import {FrontendSession} from 'pinus';
import { HeroModel } from './../../../db/Hero'; import { HeroModel } from './../../../db/Hero';
import { resResult, returnHeroCeRatio, reduceCe } from '../../../pubUtils/util'; import { resResult } from '../../../pubUtils/util';
import { COM_BTL_QUALITY, ROLE_SELECT, HERO_SELECT, GUILD_SELECT, USER_GUILD_SELECT } from '../../../consts'; import { COM_BTL_QUALITY, ROLE_SELECT, HERO_SELECT, GUILD_SELECT, USER_GUILD_SELECT } from '../../../consts';
import { getAp } from '../../../services/actionPointService'; import { getAp } from '../../../services/actionPointService';
import { ItemModel } from '../../../db/Item'; import { ItemModel } from '../../../db/Item';
@@ -100,8 +100,6 @@ export class EntryHandler {
role['consumeGoods'] = items; role['consumeGoods'] = items;
let apJson = await getAp(Date.now(), role.roleId); let apJson = await getAp(Date.now(), role.roleId);
role['apJson'] = apJson; role['apJson'] = apJson;
role['ce'] = reduceCe(role.ce);
role['topFiveCe'] = reduceCe(role.topFiveCe);
role['mails'] = mails; role['mails'] = mails;
if(role.hasGuild) { if(role.hasGuild) {
@@ -9,7 +9,7 @@ export async function eventOnPlayerLvUp(roleId: string, lv: number, addFuncs: Ar
if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp
let res = getFuncsSwitch(FUNCS_ID.PVP); let res = getFuncsSwitch(FUNCS_ID.PVP);
if (!res || lv >= res.param) { if (!res || lv >= res.param) {
let role = await RoleModel.findByRoleId(roleId); let role = await RoleModel.findByRoleId(roleId, null, true);
await checkPvp(role); await checkPvp(role);
addFuncs.push(FUNCS_ID.PVP); addFuncs.push(FUNCS_ID.PVP);
} }
+2 -2
View File
@@ -1,5 +1,5 @@
import { PvpDefenseModel, Heroes, OppPlayers, Robot, PvpDefenseType, HeroScores, pvpUpdateInter } from '../db/PvpDefense'; import { PvpDefenseModel, Heroes, OppPlayers, PvpDefenseType, HeroScores, pvpUpdateInter } from '../db/PvpDefense';
import { RoleType, RoleModel } from '../db/Role'; import { RoleType, RoleModel } from '../db/Role';
import { PVP_HERO_POS, ROBOT_NAME, REDIS_KEY, PVP_CONST, HERO_CE_RATIO } from '../consts'; import { PVP_HERO_POS, ROBOT_NAME, REDIS_KEY, PVP_CONST, HERO_CE_RATIO } from '../consts';
import { setPvpDefResult } from '../services/timeTaskService'; import { setPvpDefResult } from '../services/timeTaskService';
@@ -73,7 +73,7 @@ export async function getEnemies(oppPlayers: OppPlayers[], winStreakNum: number)
result.push({ result.push({
...oppDef, ...oppDef,
roleId: oppDef.oppRoleId, roleId: oppDef.oppRoleId,
defCe: reduceCe(oppDef.defCe), defCe: oppDef.defCe,
addScore: dicOpponent.score, addScore: dicOpponent.score,
rankLv: oppDef.rankLv, rankLv: oppDef.rankLv,
plusScore: getPlusScore(winStreakNum) plusScore: getPlusScore(winStreakNum)
+1
View File
@@ -7,3 +7,4 @@ export * from './constModules/sysConst';
export * from './constModules/guildConst'; export * from './constModules/guildConst';
export * from './constModules/selectConst'; export * from './constModules/selectConst';
export * from './statusCode'; export * from './statusCode';
export * from './dataName';
+2 -2
View File
@@ -1,7 +1,7 @@
import BaseModel from './BaseModel'; 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 { nowSeconds } from '../pubUtils/timeUtil';
import { now } from 'moment';
class RewardInter { class RewardInter {
id: number; id: number;
count: number; count: number;
+1 -2
View File
@@ -1,9 +1,8 @@
import BaseModel from './BaseModel'; import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { nowSeconds } from '../pubUtils/timeUtil'; import { nowSeconds } from '../pubUtils/timeUtil';
import { SrvRecord } from 'dns';
import { MAIL_STATUS } from '../consts/constModules/mailConst'; import { MAIL_STATUS } from '../consts/constModules/mailConst';
import { select } from 'underscore';
class RewardInter { class RewardInter {
id: number; id: number;
count: number; count: number;
+2 -2
View File
@@ -122,7 +122,7 @@ export default class Guild extends BaseModel {
.limit(GUILD_PER_PAGE).skip((page - 1) * GUILD_PER_PAGE) .limit(GUILD_PER_PAGE).skip((page - 1) * GUILD_PER_PAGE)
.select('code icon name lv memberCnt leader ceLimit isAuto') .select('code icon name lv memberCnt leader ceLimit isAuto')
.populate('leader', { roleName: 1, _id: 0 }, 'Role') .populate('leader', { roleName: 1, _id: 0 }, 'Role')
.lean(); .lean({ getters: true });
return guildList; return guildList;
} }
@@ -147,7 +147,7 @@ export default class Guild extends BaseModel {
const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId }) const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId })
.select(select) .select(select)
.populate('leader', {roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role') .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; return result;
} }
+10 -53
View File
@@ -4,26 +4,7 @@ import Hero, { } from './Hero';
import Role, { } from './Role'; import Role, { } from './Role';
import { PVP_PLAYER_POS, PVP_HERO_POS } from '../consts'; import { PVP_PLAYER_POS, PVP_HERO_POS } from '../consts';
import PvpHistoryOpp from './PvpHistoryOpp'; import PvpHistoryOpp from './PvpHistoryOpp';
import { reduceCe } from '../pubUtils/util';
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;
}
export class Heroes { export class Heroes {
@prop({ required: true }) @prop({ required: true })
@@ -61,31 +42,6 @@ function getInitialOppHeros() {
return heros; 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 { export class OppPlayers {
@prop({ required: true }) @prop({ required: true })
roleId: string; roleId: string;
@@ -122,7 +78,7 @@ export default class PvpDefense extends BaseModel {
hisScore: number; //历史最高积分 hisScore: number; //历史最高积分
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
winStreakNum: number; //连胜次数 winStreakNum: number; //连胜次数
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0, get: (val: number) => reduceCe(val), set: (val: number) => val })
defCe: number; //防守ce defCe: number; //防守ce
@prop({ required: true, type: OppPlayers, default: getInitialOppPlayers(), _id: false }) @prop({ required: true, type: OppPlayers, default: getInitialOppPlayers(), _id: false })
oppPlayers: Array<OppPlayers>; oppPlayers: Array<OppPlayers>;
@@ -149,11 +105,11 @@ export default class PvpDefense extends BaseModel {
return result; 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 } }) const result: PvpDefenseType[] = await PvpDefenseModel.find({ roleId: { $ne: roleId }, defCe: { $lte: max, $gte: min } })
.populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr') .populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr')
.populate('heroes.hero') .populate('heroes.hero')
.sort({ updatedAt: -1 }).limit(100).lean(lean); .sort({ updatedAt: -1 }).limit(100).lean({ getters: true });
return result; return result;
} }
@@ -197,7 +153,7 @@ export default class PvpDefense extends BaseModel {
const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }) const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId })
.populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr') .populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr')
.populate('heroes.hero') .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; return result;
} }
@@ -206,7 +162,7 @@ export default class PvpDefense extends BaseModel {
.populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr') .populate('role', 'headHid sHid topFiveCe roleId roleName lv globalCeAttr')
.populate('heroes.hero') .populate('heroes.hero')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv pLv title lv defCe heroes') .populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv pLv title lv defCe heroes')
.lean(); .lean({ getters: true });
return result; return result;
} }
@@ -214,7 +170,7 @@ export default class PvpDefense extends BaseModel {
delete update._id; delete update._id;
let result: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$set:update}, {new: true}) let result: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$set:update}, {new: true})
.populate('role', 'headHid sHid topFiveCe roleId roleName lv') .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; return result;
} }
public static async updateInfo(roleId: string, update: pvpUpdateInter, lean = true) { public static async updateInfo(roleId: string, update: pvpUpdateInter, lean = true) {
@@ -227,11 +183,11 @@ export default class PvpDefense extends BaseModel {
return result; 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 }; let sortBy = { score: -1, updatedAt: 1 };
const ranks: PvpDefenseType[] = await PvpDefenseModel.find({seasonNum}).select('roleId role score updatedAt') const ranks: PvpDefenseType[] = await PvpDefenseModel.find({seasonNum}).select('roleId role score updatedAt')
.populate('role', 'roleId roleName headHid sHid title lv vLv') .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; return ranks;
} }
@@ -244,3 +200,4 @@ export default class PvpDefense extends BaseModel {
export const PvpDefenseModel = getModelForClass(PvpDefense); 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>;
+3 -3
View File
@@ -33,7 +33,7 @@ export default class PvpHistoryOpp extends BaseModel {
@prop({ required: true, default: 1 }) @prop({ required: true, default: 1 })
title: number; // 对手等级 title: number; // 对手等级
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
defCe: number; // 防守战力 defCe: number; // 防守战力,缩小过的
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
rankLv: number; // 对手排名 rankLv: number; // 对手排名
@prop({ required: true, type: PvpEnemies, default: [] }) @prop({ required: true, type: PvpEnemies, default: [] })
@@ -43,11 +43,11 @@ export default class PvpHistoryOpp extends BaseModel {
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
status: number; // 状态 0-仅刷出 1-挑战过 status: number; // 状态 0-仅刷出 1-挑战过
public static async createPvpOpp(params: PvpOppCreateParam, lean = true) { public static async createPvpOpp(params: PvpOppCreateParam) {
const doc = new PvpHistoryOppModel(); const doc = new PvpHistoryOppModel();
const update = Object.assign(doc.toJSON(), params); const update = Object.assign(doc.toJSON(), params);
delete update._id; 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; return defense;
} }
+1 -2
View File
@@ -1,5 +1,4 @@
import { PvpEnemies, PvpOtherHeroes } from "../../domain/dbGeneral"; import { PvpEnemies, PvpOtherHeroes } from "../../domain/dbGeneral";
import { reduceCe } from "../../pubUtils/util";
import { GuildType } from "../../db/Guild"; import { GuildType } from "../../db/Guild";
import { RoleType, WarStar } from "../../db/Role"; import { RoleType, WarStar } from "../../db/Role";
import { WAR_TYPE } from "../../consts/consts"; import { WAR_TYPE } from "../../consts/consts";
@@ -66,7 +65,7 @@ export class PlayerDetail {
if(detail.headHid) this.headHid = detail.headHid; if(detail.headHid) this.headHid = detail.headHid;
if(detail.score) this.score = detail.score; if(detail.score) this.score = detail.score;
if(detail.pLv) this.pLv = detail.pLv; 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.heroes) this.heroes = detail.heroes;
if(detail.rank) this.rank = detail.rank; if(detail.rank) this.rank = detail.rank;
} }