好友:武将详情

This commit is contained in:
luying
2022-02-18 11:30:42 +08:00
parent 13ad1c1f19
commit 2773d1d9db
5 changed files with 129 additions and 20 deletions

View File

@@ -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 });
}

View File

@@ -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;
}

View File

@@ -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<number, JewelType>();
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;

View File

@@ -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<number, JewelType>) {
for(let eplaceParam of this.ePlace) {
if(jewels.has(eplaceParam.jewelId)) {
eplaceParam.setJewel(jewels.get(eplaceParam.jewelId));
}
}
}
}

View File

@@ -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);