diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index f6dd28e3e..c53d3932c 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -1,6 +1,13 @@ import {Application, BackendSession} from 'pinus'; 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) { return new PvpHandler(app); } @@ -9,5 +16,14 @@ export class PvpHandler { 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 }); + } } diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index a21c58b1e..13991b8dc 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -10,8 +10,8 @@ import { resResult, returnHeroCeRatio, reduceCe } from '../../../pubUtils/util'; import { FUNC_OPT_TYPE } from '../../../consts'; import { getAp } from '../../../services/actionPointService'; 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) { return new EntryHandler(app); } @@ -78,7 +78,7 @@ export class EntryHandler { let equips = await EquipModel.findbyRole(role.roleId); let items = await ItemModel.findbyRole(role.roleId); - + await chackFunOpenWhenLogin(role, session.get('funcs')); role['heros'] = heros.map(cur => returnHeroCeRatio(cur)); role['equips'] = equips; role['consumeGoods'] = items; @@ -86,7 +86,6 @@ export class EntryHandler { role['apJson'] = apJson; role['ce'] = reduceCe(role.ce); - await switchOnFunc(role.roleId, FUNC_OPT_TYPE.LEVEL_UP, role.lv, session); return resResult(STATUS.SUCCESS, { role }); } diff --git a/game-server/app/services/funcSwitchService.ts b/game-server/app/services/funcSwitchService.ts index 145874c71..c36db3a48 100644 --- a/game-server/app/services/funcSwitchService.ts +++ b/game-server/app/services/funcSwitchService.ts @@ -2,32 +2,35 @@ import { BackendSession, FrontendSession, pinus } from "pinus"; import { getGamedata } from "../pubUtils/gamedata"; import { RoleModel } from "../db/Role"; 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)) { const dataFuncs = session.get('funcs'); const sid = session.get('sid'); - const dicFuncSwitch = getGamedata('dic_func_switch'); - let funcs = new Array<{id: number, desc: string, script: string}>(), addFuncs = new Array(); - for(let obj of dicFuncSwitch) { - if(obj.conditionType == type && !dataFuncs.includes(obj.id) && obj.param <= param) { - funcs.push({id: obj.id, desc: obj.desc, script: obj.script}); - addFuncs.push(obj.id); - } + let addFuncs = new Array(); + switch (type) { + case FUNC_OPT_TYPE.LEVEL_UP: + await eventOnPlayerLvUp(roleId, param, addFuncs, dataFuncs); + break; + case FUNC_OPT_TYPE.BATTLE_END: + //开启奇遇 + break; } - - if(funcs.length > 0) { - - pinus.app.get('channelService').pushMessageByUids('onFuncSwitchOn', resResult(STATUS.SUCCESS, {funcs}), [{ + if (addFuncs.length) { + pinus.app.get('channelService').pushMessageByUids('onFuncSwitchOn', resResult(STATUS.SUCCESS, {addFuncs}), [{ uid: roleId, 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', () => {}); - return recs +} + +export async function chackFunOpenWhenLogin(role: any, dataFuncs:Array) { + await eventOnPlayerLvUp(role.roleId, role.lv, [], dataFuncs); } \ No newline at end of file diff --git a/game-server/app/services/playerEventService.ts b/game-server/app/services/playerEventService.ts new file mode 100644 index 000000000..4c4c4df8d --- /dev/null +++ b/game-server/app/services/playerEventService.ts @@ -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, dataFuncs: Array) { + + 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); + } + } +} diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts new file mode 100644 index 000000000..046170310 --- /dev/null +++ b/game-server/app/services/timeTaskService.ts @@ -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() { + +} diff --git a/game-server/config/adminServer.ts b/game-server/config/adminServer.ts index 8f7174957..00ea21c30 100644 --- a/game-server/config/adminServer.ts +++ b/game-server/config/adminServer.ts @@ -16,5 +16,8 @@ module.exports = [{ }, { 'type': 'role', 'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn' +}, { + 'type': 'systimer', + 'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn' } ]; \ No newline at end of file diff --git a/game-server/config/servers.ts b/game-server/config/servers.ts index 77f8959ea..b12d6222c 100644 --- a/game-server/config/servers.ts +++ b/game-server/config/servers.ts @@ -12,16 +12,16 @@ module.exports = { } ], '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': [ - {'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': [ - {'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': [ - {'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': [ { @@ -29,14 +29,16 @@ module.exports = { 'host': '127.0.0.1', 'clientHost': '127.0.0.1', 'clientPort': 3014, - 'frontend': true + 'frontend': true, + "args": " --inspect=9235" }, { 'id': 'gate-server-2', 'host': '127.0.0.1', 'clientHost': '127.0.0.1', 'clientPort': 3015, - 'frontend': true + 'frontend': true, + "args": " --inspect=9236" } ] }, @@ -69,6 +71,9 @@ module.exports = { ], 'gm': [ {'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055} + ], + 'systimer': [ + {'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056} ] }, 'alpha': { @@ -100,37 +105,44 @@ module.exports = { ], 'gm': [ {'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055} + ], + 'systimer': [ + {'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056} ] }, 'dev': { 'connector': [ - {'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true}, - {'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true}, - {'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, '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, "args": " --inspect=9229"}, + {'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true, "args": " --inspect=9238"} ], 'chat': [ - {'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050}, - {'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051}, - {'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052} + {'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,"args": " --inspect=9235"}, + {'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052,"args": " --inspect=9236"} ], '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': [ - {'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': [ - {'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', 'host': '127.0.0.1', 'clientHost': 'zyzdev.trgame.cn', 'clientPort': 3015, - 'frontend': true + 'frontend': true, + "args": " --inspect=9228" } ], '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"} ] } }; diff --git a/shared/consts/constModules/itemConst.ts b/shared/consts/constModules/itemConst.ts index 5ab992feb..eb0c7d1cc 100644 --- a/shared/consts/constModules/itemConst.ts +++ b/shared/consts/constModules/itemConst.ts @@ -31,14 +31,14 @@ export enum ROLE_TERAPH { END = 4 } -export enum PVP_POS { +export enum PVP_PLAYER_POS { START = 1, END = 3 } -export enum PVP_PLAYER_POS { +export enum PVP_HERO_POS { START = 1, - END = 9 + END = 5 } export enum EQUIP_TYPE { diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 1b35a30a0..bc792256e 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -223,12 +223,13 @@ export const REDIS_KEY = { } export const FUNC_OPT_TYPE = { - LEVEL_UP: 1, - BATTLE_END: 2 + LEVEL_UP: 1, + BATTLE_END: 2 } export const FUNCS_ID = { - EVENT: 1 + EVENT: 1, + PVP: 2 } export const FRIEND_DROP_TYPE = { @@ -308,4 +309,4 @@ export const EQUIP_STRENGTHEN_TYPE = { SINGLE: 1, // 单件单级强化 SINGLE_QUICK: 2, // 单件一键强化 ALL_QUICK: 3 // 武将全部装备栏一键强化 -} \ No newline at end of file +} diff --git a/shared/consts/consts.ts b/shared/consts/consts.ts index d7d5c5983..cd708c66d 100644 --- a/shared/consts/consts.ts +++ b/shared/consts/consts.ts @@ -328,6 +328,7 @@ export const FUNC_OPT_TYPE = { BATTLE_END: 2 } + export const FUNCS_ID = { EVENT: 1 } diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index 5ca5fcea6..9a6fb8cd2 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -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(); - for(let i = PVP_POS.START; i <= PVP_POS.END; i++) { - let p = new OppPlayers(); + let heros = new Array(); + 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; @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; - @prop({ ref: 'SystemConfig', type: mongoose.Schema.Types.ObjectId }) - map: Ref; - @prop({ required: true, type: HidScores, default: [] }) - hidScores: Array; + @prop({ required: true, type: HeroScores, default: [] }) + heroScores: Array; + @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, defCe: number }, lean = true) { + public static async createPvpDefense(params: { roleId: string, roleName: string, heroes: Array, oppPlayers: Array, 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); diff --git a/shared/db/Role.ts b/shared/db/Role.ts index b0558a4e9..14e9e2150 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -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; } @@ -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; } diff --git a/shared/db/SystemConfig.ts b/shared/db/SystemConfig.ts index 02b188387..66c0eb881 100644 --- a/shared/db/SystemConfig.ts +++ b/shared/db/SystemConfig.ts @@ -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; diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 85b34a9f2..047af3a7d 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -247,3 +247,8 @@ export function getSuit(id: number) { const suitInfo = gameData.suit.get(id); return suitInfo; } + +export function getFuncsSwitch(id:number) { + const funcInfo = gameData.funcsSwitch.get(id); + return funcInfo; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicFuncSwitch.ts b/shared/pubUtils/dictionary/DicFuncSwitch.ts index 6b2f11e49..f64e1576b 100644 --- a/shared/pubUtils/dictionary/DicFuncSwitch.ts +++ b/shared/pubUtils/dictionary/DicFuncSwitch.ts @@ -19,7 +19,7 @@ export interface DicFuncSwitch { const str = readJsonFile(FILENAME.DIC_FUNC_SWITCH); let arr = JSON.parse(str); -export const dicFuncSwitch = new Array(); +export const dicFuncSwitch = new Map(); arr.forEach(o => { - dicFuncSwitch.push(o); + dicFuncSwitch.set(o.id, o); }); diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 9d75767d7..c168e7229 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -106,7 +106,7 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array, let incHeroCe = calPlayerCe(role.globalCeAttr, hero, type, args); 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 PvpDefenseModel.updateCe(roleId, hero.hid, hero.ce); // 更新pvp防守阵最强五人战力 pushHeros.push({ @@ -121,18 +121,18 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array, 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(); topFive.sort((a, b) => { return b.ce - a.ce }); // 0-5,最大-最小 let index = topFive.findIndex(cur => cur.hid == hid); if (index == -1) { // 不在最强列表 if (topFive.length < 5) { // 不满5人 - topFive.push({ hid, ce }); + topFive.push({ hid, ce, hero: heroId }); } else if (topFive.length == 5) { if (ce > topFive[topFive.length - 1].ce) { // 跻身最强5人 topFive.pop(); - topFive.push({ hid, ce }); + topFive.push({ hid, ce, hero: heroId }); } } else { topFive.splice(5, topFive.length - 5); diff --git a/shared/pubUtils/pvpUtil.ts b/shared/pubUtils/pvpUtil.ts new file mode 100644 index 000000000..9c7c31c2f --- /dev/null +++ b/shared/pubUtils/pvpUtil.ts @@ -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 = []; + //初始化最强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 = []; + + 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; +}