From 11692c9a56c247d310b834a4bfc4e964264cdead Mon Sep 17 00:00:00 2001 From: luying Date: Sat, 2 Jul 2022 14:38:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A6=E5=B0=86=E6=94=BB=E7=95=A5=EF=BC=9A?= =?UTF-8?q?=E6=AD=A6=E5=B0=86=E5=AF=B9=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/friendHandler.ts | 21 ++++++++++++++++++- .../app/servers/role/handler/heroHandler.ts | 3 +++ .../app/servers/role/handler/roleHandler.ts | 2 +- game-server/app/services/role/calCe.ts | 12 +++++++++++ game-server/app/services/roleService.ts | 16 ++++++++++++++ shared/consts/constModules/selectConst.ts | 6 +++--- shared/db/School.ts | 15 ++++++++++++- shared/domain/roleField/friend.ts | 17 +++++++++++++-- 8 files changed, 84 insertions(+), 8 deletions(-) diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index 7e368cd06..2fb533d60 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -25,6 +25,9 @@ import { JewelModel } from "../../../db/Jewel"; import { getHeroesAttributes } from "../../../services/playerCeService"; import { sendMessageToUsersWithSuc, sendMessageToUserWithSuc } from "../../../services/pushService"; import { PrivateMessageModel } from "../../../db/PrivateMessage"; +import { RoleCeModel } from "../../../db/RoleCe"; +import { CalCe } from "../../../services/role/calCe"; +import { getSchoolPoint } from "../../../services/roleService"; export default function (app: Application) { @@ -730,14 +733,21 @@ export class FriendHandler { let { roleId: hisRoleId, hids } = msg; - let role = await RoleModel.findByRoleId(hisRoleId, ROLE_SELECT.ATTR); + let role = await RoleModel.findByRoleId(hisRoleId, 'title'); if (!role) return resResult(STATUS.ROLE_NOT_FOUND); + + let roleCe = await RoleCeModel.findByRoleId(hisRoleId); + if (!roleCe) return resResult(STATUS.ROLE_NOT_FOUND); let heroList = await HeroModel.findByHidRange(hids, hisRoleId, HERO_SELECT.HERO_DETAIL, true); if (heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND); let jewels = await JewelModel.findMapbyRoleAndHids(hisRoleId, hids); + let school = await getSchoolPoint(hisRoleId); + + let calCe = new CalCe(hisRoleId); + calCe.setRoleCe(roleCe); let attrByHid = await getHeroesAttributes(hisRoleId); let list: HeroDetailParam[] = []; for (let hero of heroList) { @@ -747,9 +757,18 @@ export class FriendHandler { let heroParam = new HeroDetailParam(hero); heroParam.setAttributes(attributes); heroParam.setJewels(jewels); + + heroParam.setRole( + role.title, + calCe.calSingleGlobalPartCe(hero.hid, 'scroll'), + calCe.calSingleGlobalPartCe(hero.hid, 'teraph'), + school + ); + list.push(heroParam); } + return resResult(STATUS.SUCCESS, { list }); } diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 82b6ed3cf..e19a14a6f 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -191,6 +191,7 @@ export class HeroHandler { let { curHero } = await calculateCeWithHero(HERO_SYSTEM_TYPE.STAR, roleId, serverId, sid, hid, update, { hid, hero, isUpStar }); if (isUpStar) { await checkTaskInHeroStarUp(serverId, roleId, sid, curHero, oldStar); // 任务 + await SchoolModel.updateByHid(roleId, hid, { hid, star: update.star }); } return resResult(STATUS.SUCCESS, { isUpStar, curHero: pick(curHero, ['hid', 'star', 'starStage', 'colorStar', 'colorStarStage']) }); } @@ -236,6 +237,7 @@ export class HeroHandler { consumes: addConsumeToHero(hero.consumes, material) } + await SchoolModel.updateByHid(roleId, hid, { hid, star: update.quality }); let { curHero } = await calculateCeWithHero(HERO_SYSTEM_TYPE.QUALITY, roleId, serverId, sid, hid, update, { hero }); await checkTaskInHeroQUalityUp(serverId, roleId, sid, curHero); pushHeroQualityUpMsg(roleId, roleName, serverId, curHero); @@ -312,6 +314,7 @@ export class HeroHandler { let { curHero } = await calculateCeWithHero(HERO_SYSTEM_TYPE.COLORSTAR, roleId, serverId, sid, hid, update, { hero, isUpStar }); if (isUpStar) { + await SchoolModel.updateByHid(roleId, hid, { hid, star: update.colorStar }); await checkTaskInHeroWakeUp(serverId, roleId, sid, curHero, oldColorStar); // 任务 } if (isWakeUp) pushHeroWakeUp(roleId, roleName, serverId, curHero); // 第一次觉醒 diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 6011ce0dc..8c0b27553 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -230,7 +230,7 @@ export class RoleHandler { return resResult(STATUS.ROLE_SCHOOL_POSITION_LOCKED); } - await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { hid, isOpen }) + await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { hid, isOpen, star: curHero?.star??0, quality: curHero?.quality??0, colorStar: curHero?.colorStar??0 }); await calculateCeWithRole(HERO_SYSTEM_TYPE.SCHOOL, roleId, serverId, sid, {}, { schoolId, hero: curHero, schoolHid: hid, preSchoolHid: preHid }); // 任务 diff --git a/game-server/app/services/role/calCe.ts b/game-server/app/services/role/calCe.ts index da22c449a..cff534948 100644 --- a/game-server/app/services/role/calCe.ts +++ b/game-server/app/services/role/calCe.ts @@ -73,6 +73,18 @@ export class CalCe { return result; } + public calSingleGlobalPartCe(hid: number, field: 'teraph'|'scroll') { + let arr: { id: number, val: number }[] = []; + for(let [attrId, globalAttr] of this.data.globalAttrs) { + arr.push({ id: attrId, val: globalAttr[field]||0 }); + } + let lv = this.data.heroLv.get(hid)||1; + let obj = new AttributeCal(); + obj.setLv(lv); + obj.setByWarJson(arr); + return obj.calCe(); + } + public getCeInc() { let ceResult = this.calHeroCe(); // console.log('##### ceResult', ceResult, 'originCes', this.originCes) diff --git a/game-server/app/services/roleService.ts b/game-server/app/services/roleService.ts index 6f4658187..c2ba0f608 100644 --- a/game-server/app/services/roleService.ts +++ b/game-server/app/services/roleService.ts @@ -252,4 +252,20 @@ export function checkSystemIsOpen(role: RoleType, id: SYSTEM_OPEN_ID) { let guideId = dicSystemOpenTime.warId > 0? GuideUnloadNum.GkNewFuncNum + dicSystemOpenTime.warId: GuideUnloadNum.LvUpNum + dicSystemOpenTime.lv; return role.guide.indexOf(guideId) != -1; +} + +function calSchoolPoint(quality: number, star: number, colorStar: number) { + let _star = colorStar > 0? colorStar: star; + let point = (quality - 1) * 6 + _star; + return point > 0? point: 0; +} + +export async function getSchoolPoint(roleId: string) { + let schools = await SchoolModel.findByRoleId(roleId); + return schools.reduce((pre, cur) => { + if(cur.isOpen && cur.hid > 0) { + return pre + calSchoolPoint(cur.quality, cur.star, cur.colorStar); + } + return pre; + }, 0); } \ No newline at end of file diff --git a/shared/consts/constModules/selectConst.ts b/shared/consts/constModules/selectConst.ts index 888764b81..6d19ab45a 100644 --- a/shared/consts/constModules/selectConst.ts +++ b/shared/consts/constModules/selectConst.ts @@ -7,7 +7,7 @@ export enum ROLE_SELECT { // 显示申请需要的信息 SHOW_FRIEND_APPLY_LIST = 'roleId roleName ce head frame spine heads frames spines lv title job quitTime vLv guildName friendCnt recFrdApplyCnt serverId userInfo.serverType', HANDLE_APPLY = 'roleId friendCnt lv', - ATTR = 'attr', + ATTR = 'attr title', GET_LV = 'lv', GET_ROLE_ID = 'roleId roleName lv head frame spine heads frames spines ce title friendCnt serverId userInfo.serverType', GET_MY_SERVER = 'lv serverId userInfo.serverType', @@ -19,7 +19,7 @@ export enum ROLE_SELECT { export enum HERO_SELECT { ENTRY = '-_id -attr -__v', - HERO_DETAIL = 'roleId roleName hid hName ce lv star colorStar quality job skins attr ePlace skinId', + HERO_DETAIL = 'roleId roleName hid hName ce lv star colorStar quality job skins attr ePlace skinId connections favourLv', // 排行榜中lineup字段 RANK_LINEUP = 'seqId roleId hid star colorStar lv quality job ce updatedAt skinId' } @@ -57,7 +57,7 @@ export enum FRIEND_SHIP_SELECT { GET_FRIEND_VALUE = 'friendValue friendLv' } -export const ENTERY_ROLE_PICK = ['roleId', 'roleName', 'serverId', 'ce', 'topLineupCe', 'coin', 'lv', 'exp', 'vLv', 'gold', 'heros', 'jewels', 'consumeGoods', 'title', 'teraphs', 'showLineup', 'heads', 'head', 'frames', 'frame', 'spines', 'spine', 'hasGuild', 'guildCode', 'todayZeroPoint', 'apJson', 'skins', 'totalPay', 'guide', 'hasInit', 'renameCnt', 'totalCost', 'guildName', 'isVip']; +export const ENTERY_ROLE_PICK = ['roleId', 'roleName', 'serverId', 'ce', 'topLineupCe', 'coin', 'lv', 'exp', 'vLv', 'gold', 'heros', 'jewels', 'consumeGoods', 'title', 'teraphs', 'showLineup', 'heads', 'head', 'frames', 'frame', 'spines', 'spine', 'hasGuild', 'guildCode', 'todayZeroPoint', 'apJson', 'skins', 'totalPay', 'guide', 'hasInit', 'renameCnt', 'totalCost', 'guildName', 'isVip', 'createTime']; export enum SURVEY_SELECT { FIND = '-__v -_id -surveyName -roleIndex -reward -mailContent -receivedRole -createdAt -updatedAt' diff --git a/shared/db/School.ts b/shared/db/School.ts index 2203e36ff..d12d7bd58 100644 --- a/shared/db/School.ts +++ b/shared/db/School.ts @@ -19,6 +19,12 @@ export default class School extends BaseModel { positionId: number; // 位置id @prop({ required: true, default: 0 }) hid: number; // 放置的武将 + @prop({ required: true, default: 0 }) + quality: number; // 放置的武将的品质 + @prop({ required: true, default: 0 }) + star: number; // 放置的武将的星级 + @prop({ required: true, default: 0 }) + colorStar: number; // 放置的武将的彩星 @prop({ required: true, default: false }) isOpen: boolean; // 位置是否开启 @@ -37,7 +43,7 @@ export default class School extends BaseModel { return result; } - public static async updateBySclAndPos(roleId: string, schoolId: number, positionId: number, update: {hid?: number, isOpen?: boolean}) { + public static async updateBySclAndPos(roleId: string, schoolId: number, positionId: number, update: SchoolUpdate) { const doc = new SchoolModel(); const setOnInsert = doc.toJSON(); @@ -48,6 +54,12 @@ export default class School extends BaseModel { } + public static async updateByHid(roleId: string, hid: number, update: SchoolUpdate) { + const result: SchoolType = await SchoolModel.findOneAndUpdate({ roleId, hid }, { $set: update }, { new: true }).lean(); + return result; + + } + public static async deleteAccount(roleId: string) { let result = await SchoolModel.deleteMany({ roleId }); return result; @@ -57,3 +69,4 @@ export default class School extends BaseModel { export const SchoolModel = getModelForClass(School); export interface SchoolType extends Pick, keyof School> { }; +export type SchoolUpdate = Partial; // 将所有字段变成可选项 diff --git a/shared/domain/roleField/friend.ts b/shared/domain/roleField/friend.ts index cf54f1c1c..8babebd4c 100644 --- a/shared/domain/roleField/friend.ts +++ b/shared/domain/roleField/friend.ts @@ -2,7 +2,7 @@ import { RoleType } from "../../db/Role"; import { FriendShipType } from "../../db/FriendShip"; import * as friendUtil from '../../pubUtils/friendUtil' import { FRIEND_RELATION_TYPE } from "../../consts"; -import { EPlace, HeroType, Stone, Talent } from "../../db/Hero"; +import { Connect, EPlace, HeroType, Stone, Talent } from "../../db/Hero"; import { JewelType, RandSe } from "../../db/Jewel"; export class FriendParams { @@ -191,6 +191,14 @@ export class HeroDetailParam { mdef: number; } talent: Talent[] = []; + connections: Connect[] = []; + favourLv: number = 0; + role: { + title: number; + scroll: number; + teraph: number; + school: number; + }; constructor(hero: HeroType) { this.roleId = hero.roleId; @@ -210,7 +218,8 @@ export class HeroDetailParam { this.talent = skin.talent||[]; } } - + this.connections = hero.connections; + this.favourLv = hero.favourLv; } setAttributes(attributes: {hp: number, atk: number, def: number, mdef: number}) { @@ -224,4 +233,8 @@ export class HeroDetailParam { } } } + + setRole(title: number, scroll: number, teraph: number, school: number) { + this.role = { title, scroll, teraph, school }; + } } \ No newline at end of file