pvp创建获取
This commit is contained in:
@@ -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 });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -16,5 +16,8 @@ module.exports = [{
|
|||||||
}, {
|
}, {
|
||||||
'type': 'role',
|
'type': 'role',
|
||||||
'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn'
|
'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn'
|
||||||
|
}, {
|
||||||
|
'type': 'systimer',
|
||||||
|
'token': 'agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@@ -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"}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-15
@@ -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,10 +92,10 @@ 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;
|
||||||
@@ -106,7 +106,7 @@ export default class PvpDefense extends BaseModel {
|
|||||||
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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user