添加测试角色接口; 优化初始化数据的返回

This commit is contained in:
liangtongchuan
2020-09-02 15:38:27 +08:00
parent dbdb11692c
commit 2298f36f02
7 changed files with 127 additions and 26 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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');
}
}

View File

@@ -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');
}
}

View File

@@ -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}
] ]

View File

@@ -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);