PvpDefense数据结构
This commit is contained in:
@@ -42,7 +42,7 @@ export class EntryHandler {
|
|||||||
return resResult(STATUS.ROLE_NOT_FOUND);
|
return resResult(STATUS.ROLE_NOT_FOUND);
|
||||||
}
|
}
|
||||||
self.remoteLogin(role.roleId);
|
self.remoteLogin(role.roleId);
|
||||||
await sessionService.akick(role.roleId);//踢掉之前登录的账号code:1005
|
await sessionService.akick(role.roleId);//
|
||||||
await session.abind(role.roleId);
|
await session.abind(role.roleId);
|
||||||
session.set('uid', role.roleId);
|
session.set('uid', role.roleId);
|
||||||
session.set('roleId', role.roleId);
|
session.set('roleId', role.roleId);
|
||||||
|
|||||||
@@ -11,4 +11,165 @@ module.exports = {
|
|||||||
"required string from": 3,
|
"required string from": 3,
|
||||||
"required string target": 4
|
"required string target": 4
|
||||||
},
|
},
|
||||||
};
|
"role.equipHandler.composeEquip": {
|
||||||
|
"required uInt32 gid": 1,
|
||||||
|
"repeated uInt32 originalEquip": 2
|
||||||
|
},
|
||||||
|
"role.equipHandler.decomposeEquip": {
|
||||||
|
"repeated uInt32 originalEquip": 1
|
||||||
|
},
|
||||||
|
"role.equipHandler.putOnOrOff": {
|
||||||
|
"required uInt32 eid": 1,
|
||||||
|
"required uInt32 hid": 2,
|
||||||
|
"required uInt32 type": 3
|
||||||
|
},
|
||||||
|
"role.equipHandler.strengthen": {
|
||||||
|
"required uInt32 hid": 1,
|
||||||
|
"required uInt32 ePlaceId": 2,
|
||||||
|
"required uInt32 type": 3
|
||||||
|
},
|
||||||
|
"role.equipHandler.strengthenAll": {
|
||||||
|
"required uInt32 hid": 1,
|
||||||
|
"required uInt32 lv": 2
|
||||||
|
},
|
||||||
|
"role.equipHandler.refine": {
|
||||||
|
"message Material":{
|
||||||
|
"required uInt32 id": 1,
|
||||||
|
"required uInt32 count": 2
|
||||||
|
},
|
||||||
|
"required uInt32 hid": 1,
|
||||||
|
"required uInt32 ePlaceId": 2,
|
||||||
|
"repeated Material material": 3
|
||||||
|
},
|
||||||
|
"role.equipHandler.lockRandSe": {
|
||||||
|
"required uInt32 eid": 1,
|
||||||
|
"required uInt32 id": 2,
|
||||||
|
"required boolean lock": 3
|
||||||
|
},
|
||||||
|
"role.equipHandler.reStrengthen": {
|
||||||
|
"required uInt32 eid": 1
|
||||||
|
},
|
||||||
|
"role.equipHandler.digHole": {
|
||||||
|
"required uInt32 eid": 1,
|
||||||
|
"required uInt32 id": 2
|
||||||
|
},
|
||||||
|
"role.equipHandler.fillHole": {
|
||||||
|
"required uInt32 eid": 1,
|
||||||
|
"required uInt32 id": 2,
|
||||||
|
"required uInt32 jewel": 3
|
||||||
|
},
|
||||||
|
"role.equipHandler.composeJewel": {
|
||||||
|
"message Consumes":{
|
||||||
|
"required uInt32 id": 1,
|
||||||
|
"required uInt32 count": 2
|
||||||
|
},
|
||||||
|
"required uInt32 jewel": 1,
|
||||||
|
"required uInt32 count": 2,
|
||||||
|
"required uInt32 type": 3,
|
||||||
|
"repeated Consumes consumes": 4
|
||||||
|
},
|
||||||
|
"role.equipHandler.putOffHole": {
|
||||||
|
"required uInt32 eid": 1,
|
||||||
|
"required uInt32 id": 2
|
||||||
|
},
|
||||||
|
"role.equipHandler.composeAndPurchaseJewel": {
|
||||||
|
"message Consumes":{
|
||||||
|
"required uInt32 id": 1,
|
||||||
|
"required uInt32 count": 2
|
||||||
|
},
|
||||||
|
"required uInt32 jewel": 1,
|
||||||
|
"required uInt32 count": 2,
|
||||||
|
"repeated Consumes consumes": 3,
|
||||||
|
"repeated Consumes purchaseGoods": 4
|
||||||
|
},
|
||||||
|
"role.equipHandler.purchaseGoods": {
|
||||||
|
"message PurchaseGoods": {
|
||||||
|
"required uInt32 id": 1,
|
||||||
|
"required uInt32 count": 2
|
||||||
|
},
|
||||||
|
"repeated PurchaseGoods purchaseGoods": 1
|
||||||
|
},
|
||||||
|
"role.equipHandler.composeNextLevelJewel": {
|
||||||
|
"required uInt32 jewel": 1,
|
||||||
|
"required uInt32 count": 2,
|
||||||
|
"required uInt32 eid": 3,
|
||||||
|
"required uInt32 id": 4
|
||||||
|
},
|
||||||
|
|
||||||
|
"role.heroHandler.compose": {
|
||||||
|
"required uInt32 hid": 1
|
||||||
|
},
|
||||||
|
"role.heroHandler.lvUp": {
|
||||||
|
"message Material": {
|
||||||
|
"required uInt32 id": 1,
|
||||||
|
"required uInt32 count": 2
|
||||||
|
},
|
||||||
|
"required uInt32 hid": 1,
|
||||||
|
"required uInt32 type": 2,
|
||||||
|
"repeated Material material": 3
|
||||||
|
},
|
||||||
|
"role.heroHandler.starUp": {
|
||||||
|
"required uInt32 hid": 1,
|
||||||
|
"required uInt32 star": 2,
|
||||||
|
"required uInt32 starStage": 3
|
||||||
|
},
|
||||||
|
"role.heroHandler.wakeUp": {
|
||||||
|
"required uInt32 hid": 1,
|
||||||
|
"required uInt32 colorStar": 2,
|
||||||
|
"required uInt32 colorStarStage": 3
|
||||||
|
},
|
||||||
|
"role.heroHandler.qualityUp": {
|
||||||
|
"required uInt32 hid": 1,
|
||||||
|
"required uInt32 quality": 2
|
||||||
|
},
|
||||||
|
"role.heroHandler.heroJobTrain": {
|
||||||
|
"required uInt32 hid": 1
|
||||||
|
},
|
||||||
|
"role.heroHandler.heroJobStageUp": {
|
||||||
|
"required uInt32 hid": 1
|
||||||
|
},
|
||||||
|
"role.heroHandler.heroConectionActivate": {
|
||||||
|
"required uInt32 shipId": 1
|
||||||
|
},
|
||||||
|
"role.heroHandler.heroGiveFavor": {
|
||||||
|
"message Item": {
|
||||||
|
"required uInt32 id": 1,
|
||||||
|
"required uInt32 count": 2
|
||||||
|
},
|
||||||
|
"required uInt32 hid": 1,
|
||||||
|
"repeated Item items": 2
|
||||||
|
},
|
||||||
|
"role.heroHandler.heroWearSkin": {
|
||||||
|
"required uInt32 id": 1
|
||||||
|
},
|
||||||
|
"role.heroHandler.changeSchoolHero": {
|
||||||
|
"required uInt32 schoolId": 1,
|
||||||
|
"required uInt32 positionId": 2,
|
||||||
|
"required uInt32 hid": 3
|
||||||
|
},
|
||||||
|
"role.heroHandler.unlockSchoolPosition": {
|
||||||
|
"required uInt32 schoolId": 1,
|
||||||
|
"required uInt32 positionId": 2
|
||||||
|
},
|
||||||
|
"role.heroHandler.activeHeroScroll": {
|
||||||
|
"required uInt32 hid": 1
|
||||||
|
},
|
||||||
|
"role.heroHandler.roleTeraphStrengthen": {
|
||||||
|
"required uInt32 id": 1,
|
||||||
|
"required uInt32 count": 2
|
||||||
|
},
|
||||||
|
"role.heroHandler.roleTeraphQualityUp": {
|
||||||
|
"required uInt32 id": 1
|
||||||
|
},
|
||||||
|
|
||||||
|
"battle.normalBattleHandler.getBattleList": {
|
||||||
|
"required uInt32 type": 1
|
||||||
|
},
|
||||||
|
"battle.normalBattleHandler.checkBattle": {
|
||||||
|
"message Hero": {
|
||||||
|
"required uInt32 hid": 1
|
||||||
|
},
|
||||||
|
"required uInt32 battleId": 1,
|
||||||
|
"repeated Hero heroes": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,6 +31,16 @@ export enum ROLE_TERAPH {
|
|||||||
END = 4
|
END = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum PVP_POS {
|
||||||
|
START = 1,
|
||||||
|
END = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum PVP_PLAYER_POS {
|
||||||
|
START = 1,
|
||||||
|
END = 9
|
||||||
|
}
|
||||||
|
|
||||||
export enum EQUIP_TYPE {
|
export enum EQUIP_TYPE {
|
||||||
START = 1,
|
START = 1,
|
||||||
WEAPON = 1, // 神兵(武器)
|
WEAPON = 1, // 神兵(武器)
|
||||||
|
|||||||
@@ -142,6 +142,8 @@ export default class Hero extends BaseModel {
|
|||||||
|
|
||||||
@prop({ required: true, type: EPlace, default: getInitialEplace(), _id: false })
|
@prop({ required: true, type: EPlace, default: getInitialEplace(), _id: false })
|
||||||
ePlace: EPlace[]; // 武将装备引用数组
|
ePlace: EPlace[]; // 武将装备引用数组
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
score: number;
|
||||||
|
|
||||||
public static async findByRole(roleId: string, lean = true) {
|
public static async findByRole(roleId: string, lean = true) {
|
||||||
const heros: HeroType[] = await HeroModel.find({ roleId }).lean(lean);
|
const heros: HeroType[] = await HeroModel.find({ roleId }).lean(lean);
|
||||||
|
|||||||
+112
-60
@@ -1,85 +1,137 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
|
||||||
|
import Hero, { } from './Hero';
|
||||||
|
import Role, { } from './Role';
|
||||||
|
import PvpDef, { } from './PvpDefense';
|
||||||
|
import { PVP_PLAYER_POS, PVP_POS } from '../consts';
|
||||||
|
|
||||||
class Heroes {
|
class Heroes {
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
actorId: number; // 武将id
|
actorId: number; // 武将id
|
||||||
@prop({ required: true })
|
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
|
||||||
actorName: string; // 武将名
|
hero: Ref<Hero>;
|
||||||
@prop({ required: true })
|
|
||||||
attribute: { hp: number, atk: number, matk: number, def: number, mdef: number, agi: number, luk: number, speed: number, hit: number, cri: number, flee: number, antCri: number, damageIncrease: number, damageDecrease: number, defIgnore: number, bloodSuck: number, ap: number }; // 属性
|
|
||||||
@prop({ required: true })
|
|
||||||
lv: number; // 角色等级
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
ce: number; // 战斗力
|
ce: number; // 战斗力
|
||||||
@prop({ required: false })
|
@prop({ required: true })
|
||||||
skill: string; // 技能
|
pos: number;
|
||||||
@prop({ required: false })
|
@prop({ required: true })
|
||||||
seid: string; // 技能
|
order: number;
|
||||||
@prop({ required: false })
|
|
||||||
star: number; // 角色星级
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 初始化
|
||||||
|
function getInitialOppPlayers() {
|
||||||
|
let players = new Array<OppPlayers>();
|
||||||
|
for(let i = PVP_PLAYER_POS.START; i <= PVP_PLAYER_POS.END; i++) {
|
||||||
|
let p = new OppPlayers();
|
||||||
|
p.pos = i;
|
||||||
|
players.push(p);
|
||||||
|
}
|
||||||
|
return players;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化
|
||||||
|
function getInitialOppHeros() {
|
||||||
|
let players = new Array<OppPlayers>();
|
||||||
|
for(let i = PVP_POS.START; i <= PVP_POS.END; i++) {
|
||||||
|
let p = new OppPlayers();
|
||||||
|
p.pos = i;
|
||||||
|
players.push(p);
|
||||||
|
}
|
||||||
|
return players;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Robot {
|
||||||
|
@prop({ required: true })
|
||||||
|
roleId: string; // 角色 id
|
||||||
|
@prop({ required: true })
|
||||||
|
roleName: string; // 角色名称
|
||||||
|
@prop({ required: true })
|
||||||
|
headHid: number;
|
||||||
|
@prop({ required: true })
|
||||||
|
sHid: number;
|
||||||
|
@prop({ required: true })
|
||||||
|
topFiveCe: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
class OppPlayers {
|
||||||
|
@prop({ ref: PvpDef, type: mongoose.Schema.Types.ObjectId })
|
||||||
|
oppDef: Ref<PvpDef>;
|
||||||
|
@prop({ required: true })
|
||||||
|
pos: number;
|
||||||
|
@prop({ required: true })
|
||||||
|
isRobot: boolean;
|
||||||
|
@prop({ required: true, type: Robot, default: [], _id: false })
|
||||||
|
robot: Robot
|
||||||
|
}
|
||||||
|
|
||||||
@index({ roleId: 1 })
|
@index({ roleId: 1 })
|
||||||
@index({ ce: 1 })
|
|
||||||
export default class PvpDefense extends BaseModel {
|
export default class PvpDefense extends BaseModel {
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
roleId: string; // 角色 id
|
roleId: string; // 角色 id
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
roleName: string; // 角色名称
|
roleName: string; // 角色名称
|
||||||
|
@prop({ ref: Role, type: mongoose.Schema.Types.ObjectId })
|
||||||
|
role: Ref<Role>;
|
||||||
|
|
||||||
@prop({ required: true, type: Heroes, default: [], _id: false})
|
@prop({ required: true, type: Heroes, default: getInitialOppHeros(), _id: false })
|
||||||
heroes: Array<Heroes>;
|
heroes: Array<Heroes>;
|
||||||
@prop({ required: true, default: 0})
|
@prop({ required: true, default: 0 })
|
||||||
ce: number;
|
score: number;
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
hisScore: number; //历史最高积分
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
winStreakNum: number; //连胜次数
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
defCe: number; //防守ce
|
||||||
|
@prop({ required: true, type: OppPlayers, default: getInitialOppPlayers(), _id: false })
|
||||||
|
oppPlayers: Array<OppPlayers>;
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
map: number;
|
||||||
|
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 }, ce: { $lte: max, $gte: min } }).sort({ updatedAt: -1 }).limit(100).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static async findByRoleId(roleId: string, lean = true) {
|
public static async createPvpDefense(params: { roleId: string, roleName: string, heroes: Array<any>, ce: number }, lean = true) {
|
||||||
const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }).lean(lean);
|
const doc = new PvpDefenseModel();
|
||||||
return result;
|
const update = Object.assign(doc.toJSON(), params);
|
||||||
}
|
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }).lean(lean);
|
||||||
|
return defense;
|
||||||
|
|
||||||
public static async findByScale(roleId: string, min: number, max: number, lean = true) {
|
}
|
||||||
const result: PvpDefenseType[] = await PvpDefenseModel.find({ roleId: {$ne: roleId}, ce: { $lte: max, $gte: min } }).sort({updatedAt: -1}).limit(100).lean(lean);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async createPvpDefense(params: {roleId: string, roleName: string, heroes: Array<any>, ce: number}, lean=true) {
|
public static async addHeroToDefense(roleId: string, heroInfo: any, ce: number, lean = true) {
|
||||||
const doc = new PvpDefenseModel();
|
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: roleId }, {
|
||||||
const update = Object.assign(doc.toJSON(), params);
|
$inc: { ce },
|
||||||
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, {upsert: true, new: true}).lean(lean);
|
$push: { heroes: heroInfo }
|
||||||
return defense;
|
}, { upsert: true, new: true }).lean(lean);
|
||||||
|
return defense;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async addHeroToDefense(roleId: string, heroInfo: any, ce: number, lean=true) {
|
public static async removeHeroFromDefense(roleId: string, hid: number, ce: number, lean = true) {
|
||||||
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: roleId }, {
|
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: roleId }, {
|
||||||
$inc: {ce},
|
$inc: { ce: -1 * ce },
|
||||||
$push: { heroes: heroInfo }
|
$pull: { heroes: { actorId: hid } }
|
||||||
}, {upsert: true, new: true}).lean(lean);
|
}, { upsert: true, new: true }).lean(lean);
|
||||||
return defense;
|
return defense;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async removeHeroFromDefense(roleId: string, hid: number, ce: number, lean=true) {
|
public static async updateCe(roleId: string, hid: number, ce: number, lean = true) {
|
||||||
const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: roleId }, {
|
const rec: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId, 'heroes.actorId': hid }, { $set: { ce } }).lean(lean);
|
||||||
$inc: {ce: -1 * ce},
|
return rec
|
||||||
$pull: { heroes: { actorId: hid }}
|
}
|
||||||
}, {upsert: true, new: true}).lean(lean);
|
|
||||||
return defense;
|
|
||||||
|
|
||||||
}
|
public static async deleteAccount(roleId: string) {
|
||||||
|
let result = await PvpDefenseModel.deleteMany({ roleId });
|
||||||
public static async updateCe(roleId: string, hid: number, ce: number, lean = true) {
|
return result;
|
||||||
const rec: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId, 'heroes.actorId': hid}, {$set: { ce }}).lean(lean);
|
}
|
||||||
return rec
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async deleteAccount(roleId: string) {
|
|
||||||
let result = await PvpDefenseModel.deleteMany({roleId});
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const PvpDefenseModel = getModelForClass(PvpDefense);
|
export const PvpDefenseModel = getModelForClass(PvpDefense);
|
||||||
|
|||||||
Reference in New Issue
Block a user