diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index b62fa6c2e..6464a1874 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -4,7 +4,7 @@ import { STATUS, ROLE_SELECT, FRIEND_DROP_TYPE, FRIEND_RELATION_TYPE, POPULATE_T import { RoleModel, RoleType } from "../../../db/Role"; import { getTimeFun, getZeroPointD } from "../../../pubUtils/timeUtil"; import { FriendApplyModel } from "../../../db/FriendApply"; -import { FriendListParam, FriendRecommendParams, BlackListParam, FriendValueListParam } from "../../../domain/roleField/friend"; +import { FriendListParam, FriendRecommendParams, BlackListParam, FriendValueListParam, HeroDetailParam } from "../../../domain/roleField/friend"; import { FriendShipModel, FriendShipType } from "../../../db/FriendShip"; import { FriendRelationModel, Relation } from "../../../db/FriendRelation"; import { isRoleOnline, getServerName, getRoleOnlineInfo } from "../../../services/redisService"; @@ -24,6 +24,7 @@ import { createPrivateMsg, pushMsgToRole, pushPresent } from "../../../services/ import { Rank } from "../../../services/rankService"; import { checkTaskWithRoles, checkTask, checkActivityTask } from "../../../services/taskService"; import { ComBattleTeamModel } from "../../../db/ComBattleTeam"; +import { JewelModel } from "../../../db/Jewel"; export default function (app: Application) { @@ -730,24 +731,17 @@ export class FriendHandler { let heroList = await HeroModel.findByHidRange(hids, hisRoleId, HERO_SELECT.HERO_DETAIL, true); if (heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND); - let list = new Array(); - // for (let { roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skinId, attr: heroAttrs, ePlace } of heroList) { - - // let equips = await EquipModel.findListByHidAndRole(hisRoleId, hid, EQUIP_SELECT.HERO_DETAIL); - - // let attributes = getPlayerMainAttribute(heroAttrs, role.attr); - - // list.push({ - // roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skinId, - // equips: equips.map(cur => { - // let curEplace = ePlace.find(ccur => cur.ePlaceId == ccur.id) || new EPlace(); - // let { lv = 0, refineLv = 0 } = curEplace; - // return { ...cur, lv, refineLv } - // }), attributes - // }); - - // } + let jewels = await JewelModel.findMapbyRoleAndHids(hisRoleId, hids); + console.log(jewels); + let list: HeroDetailParam[] = []; + for (let hero of heroList) { + let attributes = getPlayerMainAttribute(hero.attr, role.attr); + let heroParam = new HeroDetailParam(hero); + heroParam.setAttributes(attributes); + heroParam.setJewels(jewels); + list.push(heroParam); + } return resResult(STATUS.SUCCESS, { list }); } diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 31805a464..0c1e120f4 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -395,7 +395,7 @@ export function getPlayerAttribute(lv: number, heroAttrs: CeAttrData[] = [], rol export function getPlayerMainAttribute(heroAttrs: CeAttrData[], roleAttrs: CeAttrDataRole[]) { let newAttribute = new AttributeCal(); newAttribute.setByDbData(roleAttrs, heroAttrs); - let mainAttributes = newAttribute.getReduceAttributes(); + let mainAttributes = newAttribute.getReduceMainAttributes(); return mainAttributes; } diff --git a/shared/db/Jewel.ts b/shared/db/Jewel.ts index 36ef15d5f..2a4841cc1 100644 --- a/shared/db/Jewel.ts +++ b/shared/db/Jewel.ts @@ -62,6 +62,20 @@ export default class Jewel extends BaseModel { return jewels; } + public static async findbyRoleAndHids(roleId: string, hids: number[]) { + const jewels: JewelType[] = await JewelModel.find({ roleId, hid: { $in: hids } }).lean(); + return jewels; + } + + public static async findMapbyRoleAndHids(roleId: string, hids: number[]) { + const jewels = await JewelModel.findbyRoleAndHids(roleId, hids); + let map = new Map(); + for(let jewel of jewels) { + map.set(jewel.seqId, jewel); + } + return map; + } + public static async findbySeqId(seqId: number, select?: string ) { const jewel: JewelType = await JewelModel.findOne({ seqId }).select(select).lean(); return jewel; diff --git a/shared/domain/roleField/friend.ts b/shared/domain/roleField/friend.ts index a02d7288c..663caa604 100644 --- a/shared/domain/roleField/friend.ts +++ b/shared/domain/roleField/friend.ts @@ -2,6 +2,9 @@ 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 } from "../../db/Hero"; +import { JewelType, RandSe } from "../../db/Jewel"; +import { reduceCe } from "../../pubUtils/util"; export class FriendParams { roleId: string; @@ -118,4 +121,102 @@ export class BlackListParam extends FriendParams { setOnline(isOnline: boolean) { this.isOnline = isOnline; } +} + +export class HeroDetailJewelRandSeParam { + id: number; + seid: number; + rand: number; + + constructor(randSe: RandSe) { + this.id = randSe.id; + this.seid = randSe.seid; + this.rand = randSe.rand; + } +} + +export class HeroDetailJewelParam { + seqId: number; + id: number; + randSe: HeroDetailJewelRandSeParam[] = []; + + constructor(jewel: JewelType) { + this.seqId = jewel.seqId; + this.id = jewel.id; + for(let randSe of jewel.randSe) { + this.randSe.push(new HeroDetailJewelRandSeParam(randSe)); + } + } +} + +export class HeroDetailEplaceParam { + id: number; + equipId: number; + lv: number; + quality: number; + star: number; + stone: Stone[]; + jewelId: number; + jewel: HeroDetailJewelParam = null; + + constructor(equip: EPlace) { + this.id = equip.id; + this.equipId = equip.equipId; + this.lv = equip.lv; + this.quality = equip.quality; + this.star = equip.star; + this.stone = equip.stones; + this.jewelId = equip.jewel; + } + + setJewel(jewel: JewelType) { + this.jewel = new HeroDetailJewelParam(jewel); + } +} + +export class HeroDetailParam { + roleId: string; + hid: number; + ce: number; + lv: number; + star: number; + colorStar: number; + quality: number; + job: number; + skinId: number; + ePlace: HeroDetailEplaceParam[] = []; + attributes: { + hp: number; + atk: number; + def: number; + mdef: number; + } + + constructor(hero: HeroType) { + this.roleId = hero.roleId; + this.hid = hero.hid; + this.ce = reduceCe(hero.ce); + this.lv = hero.lv; + this.star = hero.star; + this.colorStar = hero.colorStar; + this.quality = hero.quality; + this.job = hero.job; + this.skinId = hero.skinId; + for(let equip of hero.ePlace) { + this.ePlace.push(new HeroDetailEplaceParam(equip)); + } + + } + + setAttributes(attributes: {hp: number, atk: number, def: number, mdef: number}) { + this.attributes = attributes; + } + + setJewels(jewels: Map) { + for(let eplaceParam of this.ePlace) { + if(jewels.has(eplaceParam.jewelId)) { + eplaceParam.setJewel(jewels.get(eplaceParam.jewelId)); + } + } + } } \ No newline at end of file diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 6335979de..4cc794330 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -736,7 +736,7 @@ export function calEquipPutOnOrOffJewelIncAttr(hero: HeroType, update: HeroUpdat } function setRandSeToSeidList(jewel: JewelType, equip: EPlace, list: number[]) { - if(equip && equip.jewel) { + if(equip && jewel) { for(let { id, seid, rand } of jewel.randSe) { if(isRandSeUnLock(jewel.id, id, equip.stones)) { list.push(seid, rand);