添加测试角色接口; 优化初始化数据的返回
This commit is contained in:
@@ -20,21 +20,22 @@ export default class Equip extends BaseModel {
|
|||||||
eName: string; // 装备名称
|
eName: string; // 装备名称
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
seqId: number; // 装备表自增 id
|
seqId: number; // 装备表自增 id
|
||||||
@prop({ required: true })
|
@prop({ required: false })
|
||||||
hid: number; // 装备此装备的武将 id
|
hid: number; // 装备此装备的武将 id
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 1 })
|
||||||
lv: number; // 强化等级
|
lv: number; // 强化等级
|
||||||
|
@prop({ required: false, default: [] })
|
||||||
randSe: [{ // 强化随机属性
|
randSe: [{ // 强化随机属性
|
||||||
seType: number; // 属性类型
|
seType: number; // 属性类型
|
||||||
value: number; // 属性数值
|
value: number; // 属性数值
|
||||||
}];
|
}];
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 0 })
|
||||||
randRange: number; // 物攻策攻数值浮动上下限变化率,浮点数
|
randRange: number; // 物攻策攻数值浮动上下限变化率,浮点数
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 0 })
|
||||||
initHoleCnt: number; // 初始珠宝孔位个数
|
initHoleCnt: number; // 初始珠宝孔位个数
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: [] })
|
||||||
holes: [{
|
holes: [{
|
||||||
id: number; // 宝石 id,待定,也可能是 type + lv
|
id: number; // 宝石 id,待定,也可能是 type + lv
|
||||||
lv: number; // 宝石等级
|
lv: number; // 宝石等级
|
||||||
@@ -44,6 +45,16 @@ export default class Equip extends BaseModel {
|
|||||||
const equips = await EquipModel.find({ roleId }).lean(lean);
|
const equips = await EquipModel.find({ roleId }).lean(lean);
|
||||||
return equips;
|
return equips;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async createEquip(equipInfo: {roleId: string, roleName: string, eid: number, seqId: number, type: number, eName: string}, lean = true) {
|
||||||
|
const equip = await EquipModel.findOneAndUpdate({ seqId: equipInfo.seqId }, equipInfo, {upsert: true, new: true}).lean();
|
||||||
|
return equip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async putOn(hid: number, equipId: string, lean = true) {
|
||||||
|
const equip = await EquipModel.findOneAndUpdate({ _id: equipId }, {hid}, {new: true});
|
||||||
|
return equip;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const EquipModel = getModelForClass(Equip);
|
export const EquipModel = getModelForClass(Equip);
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { COUNTER } from './../consts/consts';
|
|
||||||
import { CounterModel } from './Counter';
|
|
||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, arrayProp, Ref, mongoose } from '@typegoose/typegoose';
|
||||||
|
import Equip from './Equip';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 英雄表
|
* 英雄表
|
||||||
@@ -21,42 +20,52 @@ export default class Hero extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
seqId: number; // 武将表自增 id
|
seqId: number; // 武将表自增 id
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 0 })
|
||||||
exp: number; // 经验值
|
exp: number; // 经验值
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 1 })
|
||||||
lv: number; // 武将等级
|
lv: number; // 武将等级
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 100 })
|
||||||
ce: number; // 武将战力
|
ce: number; // 武将战力
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
star: number; // 星级
|
star: number; // 星级
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 1 })
|
||||||
rank: number; // 阶数
|
rank: number; // 阶数
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 0 })
|
||||||
favour: number; // 好感度
|
favour: number; // 好感度
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: 1 })
|
||||||
favourLv: number; // 好感等级
|
favourLv: number; // 好感等级
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: [] })
|
||||||
conections: [{ // 羁绊
|
conections: [{ // 羁绊
|
||||||
id: number; // 羁绊编号
|
id: number; // 羁绊编号
|
||||||
name: string; // 羁绊名称
|
name: string; // 羁绊名称
|
||||||
valid: boolean; // 是否开启
|
valid: boolean; // 是否开启
|
||||||
}];
|
}];
|
||||||
@prop({ required: true })
|
@prop({ required: true, default: [] })
|
||||||
skins: [{ // 皮肤
|
skins: [{ // 皮肤
|
||||||
id: number; // id
|
id: number; // id
|
||||||
enable: boolean; // 是否装备
|
enable: boolean; // 是否装备
|
||||||
}]
|
}]
|
||||||
|
|
||||||
equips: [ // 武将装备
|
@prop({ ref: Equip, type: mongoose.Schema.Types.ObjectId })
|
||||||
// ref: ObjectID; // 装备引用
|
equips: Ref<Equip>[]; // 武将装备引用数组
|
||||||
];
|
|
||||||
|
|
||||||
public static async findByRole(roleId: string, lean = true) {
|
public static async findByRole(roleId: string, lean = true) {
|
||||||
const heros = await HeroModel.find({ roleId }).lean(lean);
|
const heros = await HeroModel.find({ roleId }).populate('equips').lean(lean);
|
||||||
return heros || [];
|
return heros || [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async addEquip(roleId: string, hid: number, equipId: string, lean = true) {
|
||||||
|
const hero = await HeroModel.findOneAndUpdate({ roleId, hid }, {$push: {equips: equipId}}, {new: true}).lean(lean);
|
||||||
|
await Equip.putOn(hero.hid, equipId);
|
||||||
|
return hero;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async createHero(heroInfo: {roleId: string, roleName: string, hid: number, hName: string, seqId: number}, lean = true) {
|
||||||
|
const hero = await HeroModel.findOneAndUpdate({roleId: heroInfo.roleId, hid: heroInfo.hid}, heroInfo, {upsert: true, new: true}).lean(lean);
|
||||||
|
return hero;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const HeroModel = getModelForClass(Hero);
|
export const HeroModel = getModelForClass(Hero);
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ export class EntryHandler {
|
|||||||
session.set('rid', rid);
|
session.set('rid', rid);
|
||||||
session.set('uid', user.uid);
|
session.set('uid', user.uid);
|
||||||
session.set('roleId', role.roleId);
|
session.set('roleId', role.roleId);
|
||||||
|
session.set('roleName', role.roleName);
|
||||||
|
session.push('roleId', () => {});
|
||||||
|
session.push('roleName', () => {});
|
||||||
session.push('rid', function (err) {
|
session.push('rid', function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('set rid for session service failed! error is : %j', err.stack);
|
console.error('set rid for session service failed! error is : %j', err.stack);
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
import { CounterModel } from './../../../db/Counter';
|
||||||
|
import { HeroModel } from './../../../db/Hero';
|
||||||
|
import { EquipModel } from './../../../db/Equip';
|
||||||
|
// import { roleRemote } from '../remote/roleRemote';
|
||||||
|
import {Application, BackendSession, createTcpMailBox} from 'pinus';
|
||||||
|
import { FrontendSession } from 'pinus';
|
||||||
|
import Counter from '../../../db/Counter';
|
||||||
|
|
||||||
|
export default function(app: Application) {
|
||||||
|
return new RoleHandler(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class RoleHandler {
|
||||||
|
constructor(private app: Application) {
|
||||||
|
}
|
||||||
|
|
||||||
|
async initEquips(roleId: string, roleName: string) {
|
||||||
|
const seqId = await CounterModel.getNewCounter('eid');
|
||||||
|
const equipInfo = {
|
||||||
|
roleId,
|
||||||
|
roleName,
|
||||||
|
eid: 1,
|
||||||
|
eName: '倚天剑',
|
||||||
|
seqId,
|
||||||
|
type: 1
|
||||||
|
}
|
||||||
|
const equip = await EquipModel.createEquip(equipInfo);
|
||||||
|
await HeroModel.addEquip(roleId, 1, equip._id);
|
||||||
|
}
|
||||||
|
|
||||||
|
async initHeros(roleId: string, roleName: string) {
|
||||||
|
const seqId = await CounterModel.getNewCounter('hid');
|
||||||
|
const heroInfo = {
|
||||||
|
roleId,
|
||||||
|
roleName,
|
||||||
|
hid: 1,
|
||||||
|
hName: '曹操',
|
||||||
|
seqId
|
||||||
|
}
|
||||||
|
await HeroModel.createHero(heroInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
async initRole(msg: {content: string , target: string}, session: BackendSession) {
|
||||||
|
let roleId = session.get('roleId');
|
||||||
|
let roleName = session.get('roleName');
|
||||||
|
console.log('role in initRole: ', roleId, roleName);
|
||||||
|
|
||||||
|
let heros = await HeroModel.findByRole(roleId);
|
||||||
|
if (!heros || heros.length === 0) {
|
||||||
|
await this.initHeros(roleId, roleName);
|
||||||
|
}
|
||||||
|
|
||||||
|
let equips = await EquipModel.findbyRole(roleId);
|
||||||
|
if (!equips || equips.length === 0) {
|
||||||
|
await this.initEquips(roleId, roleName);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('initRole finish');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinus';
|
||||||
|
|
||||||
|
export default function (app: Application) {
|
||||||
|
return new RoleRemote(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class RoleRemote {
|
||||||
|
|
||||||
|
constructor(private app: Application) {
|
||||||
|
this.app = app;
|
||||||
|
this.channelService = app.get('channelService');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ module.exports = {
|
|||||||
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051, 'args': '--inspect=10004'},
|
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051, 'args': '--inspect=10004'},
|
||||||
{'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052, 'args': '--inspect=10005'}
|
{'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052, 'args': '--inspect=10005'}
|
||||||
],
|
],
|
||||||
|
'role': [
|
||||||
|
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053, 'args': '--inspect=10006'}
|
||||||
|
],
|
||||||
'gate': [
|
'gate': [
|
||||||
{
|
{
|
||||||
'id': 'gate-server-1',
|
'id': 'gate-server-1',
|
||||||
@@ -38,6 +41,9 @@ module.exports = {
|
|||||||
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051},
|
{'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-3', 'host': '127.0.0.1', 'port': 6052}
|
||||||
],
|
],
|
||||||
|
'role': [
|
||||||
|
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053, 'args': '--inspect=10006'}
|
||||||
|
],
|
||||||
'gate': [
|
'gate': [
|
||||||
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'pinus_test.trgame.cn', 'clientPort': 3014, 'frontend': true}
|
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'pinus_test.trgame.cn', 'clientPort': 3014, 'frontend': true}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, arrayProp, Ref } from '@typegoose/typegoose';
|
||||||
|
import Equip from './Equip';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 英雄表
|
* 英雄表
|
||||||
@@ -44,12 +45,10 @@ export default class Hero extends BaseModel {
|
|||||||
skins: [{ // 皮肤
|
skins: [{ // 皮肤
|
||||||
id: number; // id
|
id: number; // id
|
||||||
enable: boolean; // 是否装备
|
enable: boolean; // 是否装备
|
||||||
}]
|
}];
|
||||||
|
|
||||||
equips: [ // 武将装备
|
|
||||||
// ref: ObjectID; // 装备引用
|
|
||||||
];
|
|
||||||
|
|
||||||
|
@prop({ ref: Equip })
|
||||||
|
equips: Ref<Equip>[]; // 武将装备引用数组
|
||||||
}
|
}
|
||||||
|
|
||||||
export const HeroModel = getModelForClass(Hero);
|
export const HeroModel = getModelForClass(Hero);
|
||||||
|
|||||||
Reference in New Issue
Block a user