diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 0d655ddfd..a21c58b1e 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -42,7 +42,7 @@ export class EntryHandler { return resResult(STATUS.ROLE_NOT_FOUND); } self.remoteLogin(role.roleId); - await sessionService.akick(role.roleId);//踢掉之前登录的账号code:1005 + await sessionService.akick(role.roleId);// await session.abind(role.roleId); session.set('uid', role.roleId); session.set('roleId', role.roleId); diff --git a/game-server/config/clientProtos.ts b/game-server/config/clientProtos.ts index 262a6d916..36393e2b1 100644 --- a/game-server/config/clientProtos.ts +++ b/game-server/config/clientProtos.ts @@ -11,4 +11,165 @@ module.exports = { "required string from": 3, "required string target": 4 }, -}; \ No newline at end of file + "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 + } +} \ No newline at end of file diff --git a/shared/consts/constModules/itemConst.ts b/shared/consts/constModules/itemConst.ts index 40cac2461..5ab992feb 100644 --- a/shared/consts/constModules/itemConst.ts +++ b/shared/consts/constModules/itemConst.ts @@ -31,6 +31,16 @@ export enum ROLE_TERAPH { END = 4 } +export enum PVP_POS { + START = 1, + END = 3 +} + +export enum PVP_PLAYER_POS { + START = 1, + END = 9 +} + export enum EQUIP_TYPE { START = 1, WEAPON = 1, // 神兵(武器) diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index d9915e8d7..2ec9af58c 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -142,7 +142,9 @@ export default class Hero extends BaseModel { @prop({ required: true, type: EPlace, default: getInitialEplace(), _id: false }) ePlace: EPlace[]; // 武将装备引用数组 - + @prop({ required: true, default: 0 }) + score: number; + public static async findByRole(roleId: string, lean = true) { const heros: HeroType[] = await HeroModel.find({ roleId }).lean(lean); return heros; diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index 1f867149f..746d888e1 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -1,85 +1,137 @@ 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 { @prop({ required: true }) actorId: number; // 武将id - @prop({ required: true }) - actorName: string; // 武将名 - @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({ ref: Hero, type: mongoose.Schema.Types.ObjectId }) + hero: Ref; @prop({ required: true }) ce: number; // 战斗力 - @prop({ required: false }) - skill: string; // 技能 - @prop({ required: false }) - seid: string; // 技能 - @prop({ required: false }) - star: number; // 角色星级 + @prop({ required: true }) + pos: number; + @prop({ required: true }) + order: number; } +// 初始化 +function getInitialOppPlayers() { + let players = new Array(); + 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(); + 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; + @prop({ required: true }) + pos: number; + @prop({ required: true }) + isRobot: boolean; + @prop({ required: true, type: Robot, default: [], _id: false }) + robot: Robot +} @index({ roleId: 1 }) -@index({ ce: 1 }) export default class PvpDefense extends BaseModel { - @prop({ required: true }) - roleId: string; // 角色 id - @prop({ required: true }) - roleName: string; // 角色名称 + @prop({ required: true }) + roleId: string; // 角色 id + @prop({ required: true }) + roleName: string; // 角色名称 + @prop({ ref: Role, type: mongoose.Schema.Types.ObjectId }) + role: Ref; - @prop({ required: true, type: Heroes, default: [], _id: false}) - heroes: Array; - @prop({ required: true, default: 0}) - ce: number; + @prop({ required: true, type: Heroes, default: getInitialOppHeros(), _id: false }) + heroes: Array; + @prop({ required: true, default: 0 }) + 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; + @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) { - const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }).lean(lean); - return result; - } + public static async createPvpDefense(params: { roleId: string, roleName: string, heroes: Array, ce: 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); + 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, ce: 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); - return defense; + public static async addHeroToDefense(roleId: string, heroInfo: any, ce: number, lean = true) { + const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: roleId }, { + $inc: { ce }, + $push: { heroes: heroInfo } + }, { upsert: true, new: true }).lean(lean); + return defense; - } + } - public static async addHeroToDefense(roleId: string, heroInfo: any, ce: number, lean=true) { - const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: roleId }, { - $inc: {ce}, - $push: { heroes: heroInfo } - }, {upsert: true, new: true}).lean(lean); - return defense; + public static async removeHeroFromDefense(roleId: string, hid: number, ce: number, lean = true) { + const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: roleId }, { + $inc: { ce: -1 * ce }, + $pull: { heroes: { actorId: hid } } + }, { upsert: true, new: true }).lean(lean); + return defense; - } + } - public static async removeHeroFromDefense(roleId: string, hid: number, ce: number, lean=true) { - const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: roleId }, { - $inc: {ce: -1 * ce}, - $pull: { heroes: { actorId: hid }} - }, {upsert: true, new: true}).lean(lean); - return defense; + public static async updateCe(roleId: string, hid: number, ce: number, lean = true) { + const rec: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId, 'heroes.actorId': hid }, { $set: { ce } }).lean(lean); + return rec + } - } - - public static async updateCe(roleId: string, hid: number, ce: number, lean = true) { - 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; - } + public static async deleteAccount(roleId: string) { + let result = await PvpDefenseModel.deleteMany({ roleId }); + return result; + } } export const PvpDefenseModel = getModelForClass(PvpDefense);