fix: 战力缩放
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -6,4 +6,5 @@ export * from './constModules/itemConst';
|
|||||||
export * from './constModules/sysConst';
|
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
@@ -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,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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-54
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,4 +199,5 @@ 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>;
|
||||||
@@ -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,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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user