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
@@ -1,6 +1,13 @@
import {Application, BackendSession} from 'pinus'; import {Application, BackendSession} from 'pinus';
const _ = require('underscore'); const _ = require('underscore');
import { gameData } from '../../../pubUtils/data';
import { checkPvp } from '../../../pubUtils/pvpUtil';
import { RoleModel } from '../../../db/Role';
import { STATUS } from '../../../consts/statusCode';
import { resResult } from '../../../pubUtils/util';
import { SystemConfigModel } from '../../../db/SystemConfig'
import { PvpDefenseModel } from '../../../db/PvpDefense';
export default function(app: Application) { export default function(app: Application) {
return new PvpHandler(app); return new PvpHandler(app);
} }
@@ -9,5 +16,14 @@ export class PvpHandler {
constructor(private app: Application) { constructor(private app: Application) {
} }
async getData (msg: {}, session: BackendSession) {
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let sid = session.get('sid');
let serverId = session.get('serverId');
let result = await PvpDefenseModel.findByRoleIdIncludeAll(roleId);
let system = await SystemConfigModel.findSystemConfig();
return resResult(STATUS.SUCCESS, { data: result });
}
} }
@@ -10,8 +10,8 @@ import { resResult, returnHeroCeRatio, reduceCe } from '../../../pubUtils/util';
import { FUNC_OPT_TYPE } from '../../../consts'; import { FUNC_OPT_TYPE } from '../../../consts';
import { getAp } from '../../../services/actionPointService'; import { getAp } from '../../../services/actionPointService';
import { ItemModel } from '../../../db/Item'; import { ItemModel } from '../../../db/Item';
import { switchOnFunc } from '../../../services/funcSwitchService'; import { chackFunOpenWhenLogin } from '../../../services/funcSwitchService';
import { eventOnPlayerLvUp } from '../../../services/playerEventService';
export default function (app: Application) { export default function (app: Application) {
return new EntryHandler(app); return new EntryHandler(app);
} }
@@ -78,7 +78,7 @@ export class EntryHandler {
let equips = await EquipModel.findbyRole(role.roleId); let equips = await EquipModel.findbyRole(role.roleId);
let items = await ItemModel.findbyRole(role.roleId); let items = await ItemModel.findbyRole(role.roleId);
await chackFunOpenWhenLogin(role, session.get('funcs'));
role['heros'] = heros.map(cur => returnHeroCeRatio(cur)); role['heros'] = heros.map(cur => returnHeroCeRatio(cur));
role['equips'] = equips; role['equips'] = equips;
role['consumeGoods'] = items; role['consumeGoods'] = items;
@@ -86,7 +86,6 @@ export class EntryHandler {
role['apJson'] = apJson; role['apJson'] = apJson;
role['ce'] = reduceCe(role.ce); role['ce'] = reduceCe(role.ce);
await switchOnFunc(role.roleId, FUNC_OPT_TYPE.LEVEL_UP, role.lv, session);
return resResult(STATUS.SUCCESS, { role }); return resResult(STATUS.SUCCESS, { role });
} }
+20 -17
View File
@@ -2,32 +2,35 @@ import { BackendSession, FrontendSession, pinus } from "pinus";
import { getGamedata } from "../pubUtils/gamedata"; import { getGamedata } from "../pubUtils/gamedata";
import { RoleModel } from "../db/Role"; import { RoleModel } from "../db/Role";
import { resResult } from "../pubUtils/util"; import { resResult } from "../pubUtils/util";
import { STATUS } from "../consts"; import { STATUS, FUNC_OPT_TYPE } from "../consts";
import { eventOnPlayerLvUp } from '../services/playerEventService';
// 开启功能 // 开启功能
export async function switchOnFunc(roleId: string, type: number, param: number, session: (BackendSession|FrontendSession)) { export async function switchOnFunc(roleId: string, type: number, param: number, session: (BackendSession|FrontendSession)) {
const dataFuncs = session.get('funcs'); const dataFuncs = session.get('funcs');
const sid = session.get('sid'); const sid = session.get('sid');
const dicFuncSwitch = getGamedata('dic_func_switch');
let funcs = new Array<{id: number, desc: string, script: string}>(), addFuncs = new Array<number>(); let addFuncs = new Array<number>();
for(let obj of dicFuncSwitch) { switch (type) {
if(obj.conditionType == type && !dataFuncs.includes(obj.id) && obj.param <= param) { case FUNC_OPT_TYPE.LEVEL_UP:
funcs.push({id: obj.id, desc: obj.desc, script: obj.script}); await eventOnPlayerLvUp(roleId, param, addFuncs, dataFuncs);
addFuncs.push(obj.id); break;
} case FUNC_OPT_TYPE.BATTLE_END:
//开启奇遇
break;
} }
if (addFuncs.length) {
if(funcs.length > 0) { pinus.app.get('channelService').pushMessageByUids('onFuncSwitchOn', resResult(STATUS.SUCCESS, {addFuncs}), [{
pinus.app.get('channelService').pushMessageByUids('onFuncSwitchOn', resResult(STATUS.SUCCESS, {funcs}), [{
uid: roleId, uid: roleId,
sid: sid sid: sid
}]); }]);
const recs = await RoleModel.pushFuncs(roleId, addFuncs);
session.set('funcs', recs.funcs||[]);
session.push('funcs', () => {});
return recs;
} }
const recs = await RoleModel.pushFuncs(roleId, addFuncs); }
session.set('funcs', recs.funcs||[]);
session.push('funcs', () => {}); export async function chackFunOpenWhenLogin(role: any, dataFuncs:Array<number>) {
return recs await eventOnPlayerLvUp(role.roleId, role.lv, [], dataFuncs);
} }
@@ -0,0 +1,19 @@
/**
* 体力系统
*/
import { fromCallback } from 'bluebird';
import { checkPvp } from '../pubUtils/pvpUtil'
import { getFuncsSwitch } from '../pubUtils/data';
import { FUNCS_ID, FUNC_OPT_TYPE } from '../consts/constModules/sysConst';
import { RoleModel } from '../db/Role'
export async function eventOnPlayerLvUp(roleId: string, lv: number, addFuncs: Array<number>, dataFuncs: Array<number>) {
if (!dataFuncs.includes(FUNCS_ID.PVP)) {//开启pvp
let res = getFuncsSwitch(FUNCS_ID.PVP);
if (!res || lv >= res.param) {
let role = await RoleModel.findByRoleId(roleId);
await checkPvp(role);
addFuncs.push(FUNCS_ID.PVP);
}
}
}
@@ -0,0 +1,13 @@
/**
* 体力系统
*/
import { scheduleJob, cancelJob } from 'pinus-scheduler';
export async function init() {
scheduleJob("0 31 23 * * *", setPvpSeasonResult, {name:'setPvpSeasonResult'})
}
export async function setPvpSeasonResult() {
}
+3
View File
@@ -16,5 +16,8 @@ module.exports = [{
}, { }, {
'type': 'role', 'type': 'role',
'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn' 'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn'
}, {
'type': 'systimer',
'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn'
} }
]; ];
+29 -17
View File
@@ -12,16 +12,16 @@ module.exports = {
} }
], ],
'chat': [ 'chat': [
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050} {'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050, "args": " --inspect=9237"}
], ],
'role': [ 'role': [
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053} {'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053, "args": " --inspect=9229"}
], ],
'battle': [ 'battle': [
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054} {'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054, "args": " --inspect=9238"}
], ],
'gm': [ 'gm': [
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055} {'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055,"args": " --inspect=9234"}
], ],
'gate': [ 'gate': [
{ {
@@ -29,14 +29,16 @@ module.exports = {
'host': '127.0.0.1', 'host': '127.0.0.1',
'clientHost': '127.0.0.1', 'clientHost': '127.0.0.1',
'clientPort': 3014, 'clientPort': 3014,
'frontend': true 'frontend': true,
"args": " --inspect=9235"
}, },
{ {
'id': 'gate-server-2', 'id': 'gate-server-2',
'host': '127.0.0.1', 'host': '127.0.0.1',
'clientHost': '127.0.0.1', 'clientHost': '127.0.0.1',
'clientPort': 3015, 'clientPort': 3015,
'frontend': true 'frontend': true,
"args": " --inspect=9236"
} }
] ]
}, },
@@ -69,6 +71,9 @@ module.exports = {
], ],
'gm': [ 'gm': [
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055} {'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055}
],
'systimer': [
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056}
] ]
}, },
'alpha': { 'alpha': {
@@ -100,37 +105,44 @@ module.exports = {
], ],
'gm': [ 'gm': [
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055} {'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055}
],
'systimer': [
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056}
] ]
}, },
'dev': { 'dev': {
'connector': [ 'connector': [
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true}, {'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true, "args": " --inspect=9237"},
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true}, {'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true, "args": " --inspect=9229"},
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true} {'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true, "args": " --inspect=9238"}
], ],
'chat': [ 'chat': [
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050}, {'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050,"args": " --inspect=9234"},
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051}, {'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051,"args": " --inspect=9235"},
{'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052} {'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052,"args": " --inspect=9236"}
], ],
'role': [ 'role': [
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053} {'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053,"args": " --inspect=9231"}
], ],
'battle': [ 'battle': [
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054} {'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054,"args": " --inspect=9230"}
], ],
'gate': [ 'gate': [
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyzdev.trgame.cn', 'clientPort': 3014, 'frontend': true}, {'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyzdev.trgame.cn', 'clientPort': 3014, 'frontend': true,"args": " --inspect=9227"},
{ {
'id': 'gate-server-2', 'id': 'gate-server-2',
'host': '127.0.0.1', 'host': '127.0.0.1',
'clientHost': 'zyzdev.trgame.cn', 'clientHost': 'zyzdev.trgame.cn',
'clientPort': 3015, 'clientPort': 3015,
'frontend': true 'frontend': true,
"args": " --inspect=9228"
} }
], ],
'gm': [ 'gm': [
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055} {'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055,"args": " --inspect=9232"}
],
'systimer': [
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056, "args": " --inspect=9233"}
] ]
} }
}; };
+3 -3
View File
@@ -31,14 +31,14 @@ export enum ROLE_TERAPH {
END = 4 END = 4
} }
export enum PVP_POS { export enum PVP_PLAYER_POS {
START = 1, START = 1,
END = 3 END = 3
} }
export enum PVP_PLAYER_POS { export enum PVP_HERO_POS {
START = 1, START = 1,
END = 9 END = 5
} }
export enum EQUIP_TYPE { export enum EQUIP_TYPE {
+5 -4
View File
@@ -223,12 +223,13 @@ export const REDIS_KEY = {
} }
export const FUNC_OPT_TYPE = { export const FUNC_OPT_TYPE = {
LEVEL_UP: 1, LEVEL_UP: 1,
BATTLE_END: 2 BATTLE_END: 2
} }
export const FUNCS_ID = { export const FUNCS_ID = {
EVENT: 1 EVENT: 1,
PVP: 2
} }
export const FRIEND_DROP_TYPE = { export const FRIEND_DROP_TYPE = {
@@ -308,4 +309,4 @@ export const EQUIP_STRENGTHEN_TYPE = {
SINGLE: 1, // 单件单级强化 SINGLE: 1, // 单件单级强化
SINGLE_QUICK: 2, // 单件一键强化 SINGLE_QUICK: 2, // 单件一键强化
ALL_QUICK: 3 // 武将全部装备栏一键强化 ALL_QUICK: 3 // 武将全部装备栏一键强化
} }
+1
View File
@@ -328,6 +328,7 @@ export const FUNC_OPT_TYPE = {
BATTLE_END: 2 BATTLE_END: 2
} }
export const FUNCS_ID = { export const FUNCS_ID = {
EVENT: 1 EVENT: 1
} }
+21 -16
View File
@@ -3,10 +3,9 @@ import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typ
import Hero, { } from './Hero'; import Hero, { } from './Hero';
import Role, { } from './Role'; import Role, { } from './Role';
import PvpDef, { } from './PvpDefense'; import PvpDef, { } from './PvpDefense';
import { PVP_PLAYER_POS, PVP_POS } from '../consts'; import { PVP_PLAYER_POS, PVP_HERO_POS } from '../consts';
import SystemConfig, { } from './SystemConfig';
class Heroes { export class Heroes {
@prop({ required: true }) @prop({ required: true })
actorId: number; // 武将id actorId: number; // 武将id
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId }) @prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
@@ -32,13 +31,14 @@ function getInitialOppPlayers() {
// 初始化 // 初始化
function getInitialOppHeros() { function getInitialOppHeros() {
let players = new Array<OppPlayers>(); let heros = new Array<Heroes>();
for(let i = PVP_POS.START; i <= PVP_POS.END; i++) { for(let i = PVP_HERO_POS.START; i <= PVP_HERO_POS.END; i++) {
let p = new OppPlayers(); let p = new Heroes();
p.pos = i; p.pos = i;
players.push(p); p.order = i;
heros.push(p);
} }
return players; return heros;
} }
class Robot { class Robot {
@@ -54,7 +54,7 @@ class Robot {
topFiveCe: number; topFiveCe: number;
} }
class OppPlayers { export class OppPlayers {
@prop({ ref: 'PvpDefense', type: mongoose.Schema.Types.ObjectId }) @prop({ ref: 'PvpDefense', type: mongoose.Schema.Types.ObjectId })
oppDef: Ref<PvpDef>; oppDef: Ref<PvpDef>;
@prop({ required: true }) @prop({ required: true })
@@ -65,7 +65,7 @@ class OppPlayers {
robot: Robot robot: Robot
} }
class HidScores { class HeroScores {
@prop({ required: true }) @prop({ required: true })
hid: number; hid: number;
@prop({ required: true }) @prop({ required: true })
@@ -92,21 +92,21 @@ export default class PvpDefense extends BaseModel {
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>;
@prop({ ref: 'SystemConfig', type: mongoose.Schema.Types.ObjectId }) @prop({ required: true, type: HeroScores, default: [] })
map: Ref<SystemConfig>; heroScores: Array<HeroScores>;
@prop({ required: true, type: HidScores, default: [] }) @prop({ required: true, default: true })
hidScores: Array<HidScores>; isDefaultHero: boolean;
public static async findByRoleId(roleId: string, lean = true) { public static async findByRoleId(roleId: string, lean = true) {
const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }).lean(lean); const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }).lean(lean);
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, lean = true) {
const result: PvpDefenseType[] = await PvpDefenseModel.find({ roleId: { $ne: roleId }, defCe: { $lte: max, $gte: min } }).sort({ updatedAt: -1 }).limit(100).lean(lean); const result: PvpDefenseType[] = await PvpDefenseModel.find({ roleId: { $ne: roleId }, defCe: { $lte: max, $gte: min } }).sort({ updatedAt: -1 }).limit(100).lean(lean);
return result; 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 doc = new PvpDefenseModel();
const update = Object.assign(doc.toJSON(), params); const update = Object.assign(doc.toJSON(), params);
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }).lean(lean); 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 }); let result = await PvpDefenseModel.deleteMany({ roleId });
return result; 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); export const PvpDefenseModel = getModelForClass(PvpDefense);
+6 -2
View File
@@ -1,10 +1,11 @@
import { HANG_UP_CONSTS, ROLE_TERAPH } from './../consts'; import { HANG_UP_CONSTS, ROLE_TERAPH } from './../consts';
import BaseModel from './BaseModel'; import BaseModel from './BaseModel';
import { CeAttrRole } from './generalField'; 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 User from './User';
import { shouldRefresh } from '../pubUtils/util'; import { shouldRefresh } from '../pubUtils/util';
import { initRoleAtrr } from '../pubUtils/playerCe'; import { initRoleAtrr } from '../pubUtils/playerCe';
import Hero,{} from '../db/Hero';
interface roleUpdate { interface roleUpdate {
ce?: number; ce?: number;
_id?:number; _id?:number;
@@ -24,6 +25,8 @@ class TopHero {
hid: number; // 武将id hid: number; // 武将id
@prop({ required: true }) @prop({ required: true })
ce: number; // 战力 ce: number; // 战力
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
hero: Ref<Hero>;
} }
@@ -54,7 +57,7 @@ class Teraph{
@prop({ required: true, default: 1 }) @prop({ required: true, default: 1 })
id: number; // 神像的id id: number; // 神像的id
@prop({ required: true, default: 1 }) @prop({ required: true, default: 1 })
grade: number; // 等级 grade: number; // 等级
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
hp: number; hp: number;
@prop({ required: true, default: 0 }) @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 }); const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId });
initRoleAtrr(update); initRoleAtrr(update);
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean); const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean);
return role; return role;
} }
+4 -2
View File
@@ -6,9 +6,11 @@ export default class SystemConfig extends BaseModel {
@prop({ required: true, default: 1}) @prop({ required: true, default: 1})
id: number; id: number;
@prop({ required: true }) @prop({ required: true })
map: number; // 地图 warId: number; // 地图
@prop({ required: true }) @prop({ required: true, default: 1 })
seasonNum: number; // 赛季 seasonNum: number; // 赛季
@prop({ required: true })
seasonEndTime: number; //赛季结束的时间
public static async findSystemConfig(lean = true) { public static async findSystemConfig(lean = true) {
const result: SystemConfigType = await SystemConfigModel.findOne({ id: 1 }).lean(lean); const result: SystemConfigType = await SystemConfigModel.findOne({ id: 1 }).lean(lean);
return result; return result;
+5
View File
@@ -247,3 +247,8 @@ export function getSuit(id: number) {
const suitInfo = gameData.suit.get(id); const suitInfo = gameData.suit.get(id);
return suitInfo; return suitInfo;
} }
export function getFuncsSwitch(id:number) {
const funcInfo = gameData.funcsSwitch.get(id);
return funcInfo;
}
+2 -2
View File
@@ -19,7 +19,7 @@ export interface DicFuncSwitch {
const str = readJsonFile(FILENAME.DIC_FUNC_SWITCH); const str = readJsonFile(FILENAME.DIC_FUNC_SWITCH);
let arr = JSON.parse(str); let arr = JSON.parse(str);
export const dicFuncSwitch = new Array<DicFuncSwitch>(); export const dicFuncSwitch = new Map<number, DicFuncSwitch>();
arr.forEach(o => { arr.forEach(o => {
dicFuncSwitch.push(o); dicFuncSwitch.set(o.id, o);
}); });
+4 -4
View File
@@ -106,7 +106,7 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>,
let incHeroCe = calPlayerCe(role.globalCeAttr, hero, type, args); let incHeroCe = calPlayerCe(role.globalCeAttr, hero, type, args);
incPlayerCe += incHeroCe; incPlayerCe += incHeroCe;
await calculateTopFive(role, hero.hid, hero.ce); // 计算更新最强五人战力 await calculateTopFive(role, hero.hid, hero.ce, hero._id); // 计算更新最强五人战力
await HeroModel.updateHeroInfo(roleId, hero.hid, hero); await HeroModel.updateHeroInfo(roleId, hero.hid, hero);
await PvpDefenseModel.updateCe(roleId, hero.hid, hero.ce); // 更新pvp防守阵最强五人战力 await PvpDefenseModel.updateCe(roleId, hero.hid, hero.ce); // 更新pvp防守阵最强五人战力
pushHeros.push({ pushHeros.push({
@@ -121,18 +121,18 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>,
return { pushHeros, role, topFiveCe } return { pushHeros, role, topFiveCe }
} }
async function calculateTopFive(role: RoleType, hid: number, ce: number) { async function calculateTopFive(role: RoleType, hid: number, ce: number, heroId: string) {
let topFive = role?.topFive || new Array(); let topFive = role?.topFive || new Array();
topFive.sort((a, b) => { return b.ce - a.ce }); // 0-5,最大-最小 topFive.sort((a, b) => { return b.ce - a.ce }); // 0-5,最大-最小
let index = topFive.findIndex(cur => cur.hid == hid); let index = topFive.findIndex(cur => cur.hid == hid);
if (index == -1) { // 不在最强列表 if (index == -1) { // 不在最强列表
if (topFive.length < 5) { // 不满5人 if (topFive.length < 5) { // 不满5人
topFive.push({ hid, ce }); topFive.push({ hid, ce, hero: heroId });
} else if (topFive.length == 5) { } else if (topFive.length == 5) {
if (ce > topFive[topFive.length - 1].ce) { // 跻身最强5人 if (ce > topFive[topFive.length - 1].ce) { // 跻身最强5人
topFive.pop(); topFive.pop();
topFive.push({ hid, ce }); topFive.push({ hid, ce, hero: heroId });
} }
} else { } else {
topFive.splice(5, topFive.length - 5); topFive.splice(5, topFive.length - 5);
+35
View File
@@ -0,0 +1,35 @@
/**
* 体力系统
*/
import { PvpDefenseModel, Heroes, OppPlayers } from '../db/pvpDefense';
import { RoleType } from '../db/Role';
export async function initPvpInfo(role: RoleType) {
let heroes: Array<Heroes> = [];
//初始化最强5人阵容
for (let i = 1; i <= role.topFive.length; i++) {
let item = role.topFive[i - 1];
if (item.hid) {
heroes.push({
actorId: item.hid,
hero: item.hero,
ce: item.ce,
pos: i,
order: i,
});
}
}
//初始化对手人阵容TODO
let oppPlayers: Array<OppPlayers> = [];
let result = await PvpDefenseModel.createPvpDefense({ roleId: role.roleId, roleName: role.roleName, heroes, oppPlayers, defCe: role.topFiveCe });
//加入排行榜 TODO
return result;
}
export async function checkPvp(role: RoleType) {
let result = await PvpDefenseModel.findByRoleId(role.roleId);
if (!!result)
return result;
result = await initPvpInfo(role);
return result;
}