From 31671d7b91d178aea90beea8ab8a858163fd4e22 Mon Sep 17 00:00:00 2001 From: luying Date: Mon, 22 Aug 2022 20:44:24 +0800 Subject: [PATCH] =?UTF-8?q?pvp=EF=BC=9A=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/pvpService.ts | 17 +++++++++++++++++ shared/db/LadderMatch.ts | 6 +++--- shared/db/PvpHistoryOpp.ts | 2 ++ shared/domain/battleField/ladder.ts | 4 ++++ shared/domain/dbGeneral.ts | 21 ++++++++++++++++++--- 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 89c8d44d0..8121193b2 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -130,6 +130,23 @@ export async function matchPlayerByRank(seasonNum: number, chosenOpps: string[], oppRank++; } } + } else if (myRank == 2) { // 第二名 + if (pos == 1) { + oppRank = 1; + while (ridRanks.includes(oppRank)) { + oppRank--; + } + } else if (pos == 2) { + oppRank = 3; + while (ridRanks.includes(oppRank)) { + oppRank++; + } + } else { + oppRank = 4; + while (ridRanks.includes(oppRank)) { + oppRank++; + } + } } else { if (pos == 1 || pos == 2) { // 刷新我前一名 oppRank = myRank - 1; diff --git a/shared/db/LadderMatch.ts b/shared/db/LadderMatch.ts index 2bfcd57d4..1e2532402 100644 --- a/shared/db/LadderMatch.ts +++ b/shared/db/LadderMatch.ts @@ -56,7 +56,7 @@ export default class LadderMatch extends BaseModel { public static async findByRoleIdAndInclude(roleId: string) { const result: LadderMatchType = await LadderMatchModel.findOne({ roleId }) .populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt') - .populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins') + .populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job') .lean(); return result; } @@ -78,7 +78,7 @@ export default class LadderMatch extends BaseModel { public static async updateByRoleIdAndInclude(roleId: string, params: LadderUpdateInter) { const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ roleId }, { $set: params}, { new: true }) .populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt') - .populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins') + .populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job') .lean(); return defense; } @@ -98,7 +98,7 @@ export default class LadderMatch extends BaseModel { public static async lock(serverId: number, roleId: string, rank: number) { const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ serverId, roleId, rank, locked: 0 }, { $set: { locked: 1 }}, { new: true }) .populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt') - .populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins') + .populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job') .lean(); return defense; } diff --git a/shared/db/PvpHistoryOpp.ts b/shared/db/PvpHistoryOpp.ts index 1e31eb1fe..1e9c2a893 100644 --- a/shared/db/PvpHistoryOpp.ts +++ b/shared/db/PvpHistoryOpp.ts @@ -35,6 +35,8 @@ export default class PvpHistoryOpp extends BaseModel { pLv: number; // 对手等级 @prop({ required: true, default: 1 }) lv: number; // 对手角色等级 + @prop({ required: true, default: 0 }) + job: number; // 对手职业 @prop({ required: true, default: 1 }) title: number; // 对手等级 @prop({ required: true, default: 0 }) diff --git a/shared/domain/battleField/ladder.ts b/shared/domain/battleField/ladder.ts index 74e18aeaf..49e6de25a 100644 --- a/shared/domain/battleField/ladder.ts +++ b/shared/domain/battleField/ladder.ts @@ -337,6 +337,7 @@ export class LadderOppDetailHeroReturn { star: number = 0; // 星级 colorStar: number = 0; // 彩星 quality: number = 0; // 品质 + job: number = 0; // 职业 skill: string = ''; // 技能 seid: string = ''; // 技能 spine: string = ''; // 动画 @@ -353,6 +354,8 @@ export class LadderOppDetailHeroReturn { this.skill = warJson.skill; this.seid = warJson.seid; this.spine = warJson.spine; + let dicHero = gameData.hero.get(warJson.actorId); + if(dicHero) this.job = dicHero.jobid; if(defensHero) { this.outIndex = defensHero.order; @@ -367,6 +370,7 @@ export class LadderOppDetailHeroReturn { this.colorStar = hero.colorStar; let skin = hero.skins.find(cur => cur.enable); if(skin) this.talent = skin.talent; + this.job = hero.job; } } } diff --git a/shared/domain/dbGeneral.ts b/shared/domain/dbGeneral.ts index 335b041d9..3e67cc4db 100644 --- a/shared/domain/dbGeneral.ts +++ b/shared/domain/dbGeneral.ts @@ -1,9 +1,16 @@ import { prop, mongoose, Ref } from '@typegoose/typegoose'; import { DicWarJson } from '../pubUtils/dictionary/DicWarJson'; -import Hero, { HeroType, Talent } from '../db/Hero'; +import Hero, { HeroType } from '../db/Hero'; import { nowSeconds } from '../pubUtils/timeUtil'; import { DicHero } from '../pubUtils/dictionary/DicHero'; + +class Talent { + @prop({ required: true }) + id: number; // 天赋表id + @prop({ required: true }) + level: number; // 激活等级 +} // 从玩家数据中覆盖warjson的部分字段 export class PvpHeroInfo { @prop({ required: true }) @@ -17,6 +24,8 @@ export class PvpHeroInfo { @prop({ required: false }) star?: number = 0; // 角色星级 @prop({ required: false }) + job?: number = 0; // 角色职业 + @prop({ required: false }) lv?: number = 0; // 角色等级 @prop({ required: false }) skill?: string = "0"; // 技能 @@ -28,7 +37,7 @@ export class PvpHeroInfo { colorStar?: number = 0; // 觉醒 @prop({ required: false }) quality?: number = 0; // 品质 - @prop({ required: false }) + @prop({ required: false, type: Talent, _id: false }) talent?: Talent[] = []; // 品质 @prop({ required: true, _id: false }) @@ -40,6 +49,7 @@ export class PvpHeroInfo { this.actorName = hero.hName; this.star = hero.star; this.lv = hero.lv; + this.job = hero.job; this.colorStar = hero.colorStar; this.quality = hero.quality; let skin = hero.skins?.find(cur => cur.enable); @@ -51,12 +61,14 @@ export class PvpHeroInfo { this.skinId = dicHero.heroId; this.actorName = dicHero.name; this.quality = dicHero.quality; + this.job = dicHero.jobid; if(dicHero.quality == 4) { this.star = 6; this.colorStar = dicHero.initialStars; } else { this.star = dicHero.initialStars; } + this.lv = lv; } @@ -133,8 +145,10 @@ export class PvpEnemies extends Enemies { @prop({ required: true }) lv: number; @prop({ required: true }) - score: number; + job: number; @prop({ required: true }) + score: number; + @prop({ required: true, type: () => Talent, _id: false }) talent: Talent[]; // score: 这个武将的军功 @@ -146,6 +160,7 @@ export class PvpEnemies extends Enemies { this.lv = heroInfo.lv; this.score = score; this.talent = heroInfo.talent; + this.job = heroInfo.job; } }