形象:头像相框形象字段

This commit is contained in:
luying
2021-02-23 19:19:18 +08:00
parent b2566f3fb6
commit 09a7a8b89b
30 changed files with 290 additions and 166 deletions

View File

@@ -1,17 +1,17 @@
export enum ROLE_SELECT {
// 初始登录数据
ENTRY = 'serverId userInfo.uid userInfo.tel userInfo.serverType ce topLineupCe teraphs roleId roleName tili lv exp gold coin vLv title hasGuild funcs eventStatus guildCode',
ENTRY = 'serverId userInfo.uid userInfo.tel userInfo.serverType ce topLineupCe teraphs roleId roleName tili lv exp gold coin vLv title hasGuild funcs eventStatus heads head frames frame spine guildCode',
// 玩家列表显示基础数据
SHOW_SIMPLE = 'roleId roleName ce headHid sHid lv title job quitTime vLv guildName serverId userInfo.serverType',
SHOW_SIMPLE = 'roleId roleName ce head frame spine lv title job quitTime vLv guildName serverId userInfo.serverType',
// 显示申请需要的信息
SHOW_FRIEND_APPLY_LIST = 'roleId roleName ce headHid sHid lv title job quitTime vLv guildName friendCnt recFrdApplyCnt serverId userInfo.serverType',
SHOW_FRIEND_APPLY_LIST = 'roleId roleName ce head frame spine lv title job quitTime vLv guildName friendCnt recFrdApplyCnt serverId userInfo.serverType',
HANDLE_APPLY = 'roleId friendCnt lv',
ATTR = 'attr',
GET_LV = 'lv',
GET_ROLE_ID = 'roleId',
GET_MY_SERVER = 'lv serverId userInfo.serverType',
COM_BATTLE = 'lv headHid sHid topLineupCe'
COM_BATTLE = 'lv head frame spine topLineupCe'
};
export enum HERO_SELECT {

View File

@@ -1,5 +1,6 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { FIGURE } from '../pubUtils/dicParam';
export class RoleStatus {
@prop({ required: true })
@@ -26,11 +27,14 @@ export class RoleStatus {
@prop({ required: false, default: false })
isFrd: boolean;
// 头像
@prop({ required: true, default: 19 })
headHid: number;
@prop({ required: true, default: FIGURE.DEFAULT_HEAD })
head: number;
// 相框
@prop({ required: true, default: FIGURE.DEFAULT_FRAME })
frame: number;
// 形象
@prop({ required: true, default: 19 })
sHid: number;
@prop({ required: true, default: FIGURE.DEFAULT_SPINE })
spine: number;
// 前五战力
@prop({ required: true, default: 0 })
topLineupCe: number;
@@ -50,14 +54,15 @@ export class RoleStatus {
@prop({ required: true, default: 0 })
frdRatio: number = 0;
constructor(roleId: string, roleName: string, isCap: boolean, isFrd: boolean, headHid: number, sHid: number, topLineupCe: number, lv: number, heroes = [], isRobot = false) {
constructor(roleId: string, roleName: string, isCap: boolean, isFrd: boolean, head: number, frame: number, spine: number, topLineupCe: number, lv: number, heroes = [], isRobot = false) {
this.roleId = roleId;
this.roleName = roleName;
this.isCap = isCap;
this.totalDmg = 0;
this.isFrd = isFrd;
this.headHid = headHid;
this.sHid = sHid;
this.head = head;
this.frame = frame;
this.spine = spine;
this.topLineupCe = topLineupCe;
this.lv = lv;
this.heroes = heroes;

View File

@@ -38,7 +38,7 @@ export default class FriendApply extends BaseModel {
const list: FriendApplyType[] = await FriendApplyModel.find({ roleId }, { _id: 0 })
// .select(select)
.populate('friend', ROLE_SELECT.SHOW_FRIEND_APPLY_LIST, 'Role')
.lean({ getters: true });
.lean({ getters: true, virtuals: true });
return list;
}
@@ -54,7 +54,7 @@ export default class FriendApply extends BaseModel {
const list: FriendApplyType[] = await FriendApplyModel.find({ applyCode: { $in: applyCodeList } }, { _id: 0 })
// .select(select)
.populate('friend', ROLE_SELECT.SHOW_FRIEND_APPLY_LIST, 'Role')
.lean({ getters: true });
.lean({ getters: true, virtuals: true });
return list;
}

View File

@@ -103,8 +103,8 @@ export default class Guild extends BaseModel {
const code = genCode(6);
const result: GuildType = await GuildModel.findOneAndUpdate({ code }, update, { upsert: true, new: true })
.select({ _id: 0, __v: 0, createdAt: 0, updatedAt: 0 })
.populate('leader', { roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0 }, 'Role')
.lean({ getters: true });
.populate('leader', { roleId: 1, roleName: 1, head: 1, frame: 1, spine: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0 }, 'Role')
.lean({ getters: true, virtuals: true });
return result;
}
@@ -127,7 +127,7 @@ export default class Guild extends BaseModel {
.limit(GUILD_PER_PAGE).skip((page - 1) * GUILD_PER_PAGE)
.select('code icon name lv memberCnt leader ceLimit isAuto')
.populate('leader', { roleName: 1, _id: 0 }, 'Role')
.lean({ getters: true });
.lean({ getters: true, virtuals: true });
return guildList;
}
@@ -138,8 +138,8 @@ export default class Guild extends BaseModel {
.sort({ activeWeekly: -1, activeUpdateTime: -1 })
.limit(100).skip((page - 1) * 100)
.select('code icon name lv leader activeWeekly activeUpdateTime')
.populate('leader', {roleName: 1, title: 1, sHid: 1, headHid: 1, lv: 1, _id: 0}, 'Role')
.lean();
.populate('leader', {roleName: 1, title: 1, frame: 1, head: 1, spine: 1, lv: 1, _id: 0}, 'Role')
.lean({ virtuals: true });
return guildList;
}
@@ -151,8 +151,8 @@ export default class Guild extends BaseModel {
public static async findByCode(code: string, serverId: number, select?: string) {
const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId })
.select(select)
.populate('leader', {roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
.lean({ getters: true });
.populate('leader', {roleId: 1, roleName: 1, frame: 1, head: 1, spine: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
.lean({ getters: true, virtuals: true });
return result;
}
@@ -182,8 +182,8 @@ export default class Guild extends BaseModel {
public static async updateInfoWithLeader(code: string, update: GuildUpdateParam, incParam?: { managerCnt?: number, fund?: number, activeDaily?: number, activeWeekly?: number }, select?: string) {
const result: GuildType = await GuildModel.findOneAndUpdate({ code }, { $set: update, $inc: incParam }, { new: true })
.populate('leader', {roleId: 1, roleName: 1, sHid: 1, headHid: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
.select(select).lean();
.populate('leader', {roleId: 1, roleName: 1, frame: 1, head: 1, lv: 1, spine: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
.select(select).lean({ virtuals: true });
return result;
}

View File

@@ -107,9 +107,9 @@ export default class PvpDefense extends BaseModel {
public static async findByScale(roleId: string, min: number, max: number) {
const result: PvpDefenseType[] = await PvpDefenseModel.find({ roleId: { $ne: roleId }, defCe: { $lte: max, $gte: min } })
.populate('role', 'headHid sHid topLineupCe roleId roleName lv globalCeAttr')
.populate('role', 'head frame spine topLineupCe roleId roleName lv globalCeAttr')
.populate('heroes.hero')
.sort({ updatedAt: -1 }).limit(100).lean({ getters: true });
.sort({ updatedAt: -1 }).limit(100).lean({ getters: true, virtuals: true });
return result;
}
@@ -151,26 +151,26 @@ export default class PvpDefense extends BaseModel {
public static async findByRoleIdIncludeAll(roleId: string) {
const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId })
.populate('role', 'headHid sHid topLineupCe roleId roleName lv globalCeAttr')
.populate('role', 'head frame spine topLineupCe roleId roleName lv globalCeAttr')
.populate('heroes.hero')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv title lv pLv defCe heroes').lean({ getters: true });
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine rankLv title lv pLv defCe heroes').lean({ getters: true, virtuals: true });
return result;
}
public static async findByTeamLv(min: number, max: number) {
const result: PvpDefenseType[] = await PvpDefenseModel.find({ pLv: { $gte: min, $lte: max } })
.populate('role', 'headHid sHid topLineupCe roleId roleName lv globalCeAttr')
.populate('role', 'head frame spine topLineupCe roleId roleName lv globalCeAttr')
.populate('heroes.hero')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv pLv title lv defCe heroes')
.lean({ getters: true });
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine rankLv pLv title lv defCe heroes')
.lean({ getters: true, virtuals: true });
return result;
}
public static async updateInfoAndInclude(roleId: string, update: pvpUpdateInter) {
delete update._id;
let result: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$set:update}, {new: true})
.populate('role', 'headHid sHid topLineupCe roleId roleName lv')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName headHid sHid rankLv pLv title lv defCe heroes').lean({ getters: true });
.populate('role', 'head frame spine topLineupCe roleId roleName lv')
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine rankLv pLv title lv defCe heroes').lean({ getters: true, virtuals: true });
return result;
}
public static async updateInfo(roleId: string, update: pvpUpdateInter, lean = true) {
@@ -186,8 +186,8 @@ export default class PvpDefense extends BaseModel {
public static async getRank(seasonNum: number, page = 1, limit = 1000) {
let sortBy = { score: -1, updatedAt: 1 };
const ranks: PvpDefenseType[] = await PvpDefenseModel.find({seasonNum}).select('roleId role score updatedAt')
.populate('role', 'roleId roleName headHid sHid title lv vLv')
.sort(sortBy).limit(limit).skip((page - 1) * limit).lean({ getters: true });
.populate('role', 'roleId roleName head frame spine title lv vLv')
.sort(sortBy).limit(limit).skip((page - 1) * limit).lean({ getters: true, virtuals: true });
return ranks;
}

View File

@@ -2,6 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { PvpEnemies, PvpOtherHeroes } from '../domain/dbGeneral';
import { FIGURE } from '../pubUtils/dicParam';
export class HeroScores {
@prop({ required: true })
@@ -20,10 +21,12 @@ export default class PvpHistoryOpp extends BaseModel {
oppRoleId: string; // 对手角色 id
@prop({ required: true })
roleName: string; // 角色名称
@prop({ required: true, default: 19 })
headHid: number; // 对手头像
@prop({ required: true, default: 19 })
sHid: number; // 对手形象
@prop({ required: true, default: FIGURE.DEFAULT_HEAD })
head: number; // 对手头像
@prop({ required: true, default: FIGURE.DEFAULT_FRAME })
frame: number; // 对手相框
@prop({ required: true, default: FIGURE.DEFAULT_SPINE })
spine: number; // 对手形象
@prop({ required: true, default: 0 })
score: number; // 对手军功
@prop({ required: true, default: 1 })

View File

@@ -3,6 +3,7 @@ import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoos
import { getBeforeDayDate } from '../pubUtils/timeUtil';
import { genCode } from '../pubUtils/util';
import { PvpHeroInfo } from '../domain/dbGeneral';
import { FIGURE } from '../pubUtils/dicParam';
export class HeroesRecord {
@prop({ required: true, default: 0 })
@@ -41,10 +42,12 @@ export class PlayerInfo {
roleName: string; // 角色 名
@prop({ required: true, default: 0 })
lv: number; // 等级
@prop({ required: true, default: 0 })
sHid: number; // 形象
@prop({ required: true, default: 0 })
headHid: number; // 头像
@prop({ required: true, default: FIGURE.DEFAULT_HEAD })
head: number; // 头像
@prop({ required: true, default: FIGURE.DEFAULT_FRAME })
frame: number; // 相框
@prop({ required: true, default: FIGURE.DEFAULT_SPINE })
spine: number; // 形象
@prop({ required: true, default: 0 })
title: number; // 爵位
@prop({ required: true, default: 0 })

View File

@@ -4,8 +4,10 @@ import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typ
import User from './User';
import { shouldRefresh, reduceCe } from '../pubUtils/util';
import { initRoleAtrr } from '../pubUtils/playerCe';
import Hero,{} from '../db/Hero';
import { nowSeconds } from '../pubUtils/timeUtil';
import { Head, Frame } from '../domain/dbGeneral';
import { FIGURE } from '../pubUtils/dicParam';
import Hero from './Hero';
// role表属性格式
export class CeAttrDataRole {
@@ -22,20 +24,20 @@ export class CeAttrDataRole {
}
class TopHero {
@prop({ required: true })
hid: number; // 武将id
@prop({ required: true })
ce: number; // 战力
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
hero: Ref<Hero>;
@prop({ required: true })
hid: number; // 武将id
@prop({ required: true })
ce: number; // 战力
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
hero: Ref<Hero>;
}
class DungeonHero {
@prop({ required: true })
battleId: number; // 关卡id
@prop({ required: true, type: Number, default:[] })
heroes: Array<number>; // 武将id
@prop({ required: true })
battleId: number; // 关卡id
@prop({ required: true, type: Number, default:[] })
heroes: Array<number>; // 武将id
}
class PayRecord {
@@ -90,15 +92,7 @@ export class Teraph{
});
}
}
// 初始化
function getInitialTeraph() {
let teraphs = new Array<Teraph>();
for(let i = ROLE_TERAPH.START; i <= ROLE_TERAPH.END; i++) {
let p = new Teraph(i);
teraphs.push(p);
}
return teraphs;
}
/**
* 角色字段接口
*/
@@ -126,10 +120,26 @@ export default class Role extends BaseModel {
blocked: boolean; // 是否屏蔽
@prop({ required: true })
code: string; // 邀请码
@prop({ required: true, default: 19 })
headHid: number; // 头像所用武将 Id默认赵云
@prop({ required: true, default: 19 })
sHid: number; // 形象所用武将 Id默认赵云
@prop({ required: true, type: Number, default: [] })
showLineup: number[]; // 展示阵容
@prop({ required: true, type: Head, default: [] })
heads: Head[]; // 拥有头像列表
@prop({ required: true, type: Head, default: [] })
frames: Frame[]; // 拥有相框列表
@prop({ required: true, default: FIGURE.DEFAULT_SPINE })
spine: number; // 显示形象
public get head () { // 虚拟字段head 当前头像
let curHead = this.heads?.find(cur => cur.enable && cur.time > nowSeconds());
return curHead?curHead.id: FIGURE.DEFAULT_HEAD;
}
public get frame () { // 虚拟字段frame 当前相框
let curFrame = this.frames?.find(cur => cur.enable && cur.time > nowSeconds());
return curFrame?curFrame.id: FIGURE.DEFAULT_FRAME;
}
@prop({ required: true, default: 0 })
exp: number; // 经验值
@@ -221,14 +231,14 @@ export default class Role extends BaseModel {
@prop({ required: true, default: new Date() })
dungeonRefTime: Date; // 秘境刷新时间
@prop({ required: true, type: DungeonHero, default: [], _id: false })
dungeonHeroes: Array<DungeonHero>; // 秘境首通使用的武将
dungeonHeroes: DungeonHero[]; // 秘境首通使用的武将
// 全局养成
@prop({ required: true, default: 1 })
title: number; //爵位
//神像
@prop({ required: true, type: Teraph, default: getInitialTeraph(), _id: false })
teraphs:Array<Teraph>;
teraphs: Teraph[];
// 公会
@prop({ required: true, default: false })
@@ -255,7 +265,7 @@ export default class Role extends BaseModel {
}
public static async findByUid(uid: number, serverId: number, select?: string, getters = false) {
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, { loginTime: nowSeconds(), quitTime: nowSeconds() }, { new: true }).select(select).lean({ getters });
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, { loginTime: nowSeconds(), quitTime: nowSeconds() }, { new: true }).select(select).lean({ getters, virtuals: true });
return role;
}
@@ -288,7 +298,7 @@ export default class Role extends BaseModel {
};
}
const user: RoleType[] = await RoleModel.find(searchObj).select(select).lean({ getters });
const user: RoleType[] = await RoleModel.find(searchObj).select(select).lean({ getters, virtuals: true });
return user;
}
@@ -298,8 +308,8 @@ export default class Role extends BaseModel {
return role;
}
public static async towerLvUp(roleId: string, lean = true) {
let role: RoleType = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerLv: 1}, towerUpTime: new Date()}, {new: true}).lean(lean);
public static async towerLvUp(roleId: string) {
let role: RoleType = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerLv: 1}, towerUpTime: new Date()}, {new: true}).lean({ virtuals: true });
return role;
}
@@ -420,18 +430,18 @@ export default class Role extends BaseModel {
}
// 获取排行榜
public static async getRank(type: string, serverId: number, fields: Array<string>, page = 1, limit = 100, lean = true) {
public static async getRank(type: string, serverId: number, fields: string[], page = 1, limit = 100) {
let sortBy = {};
if(type == 'tower') {
sortBy['towerLv'] = -1;
sortBy['towerUpTime'] = 1;
}
const ranks: RoleType[] = await RoleModel.find({serverId}).select(fields.join(' ')).sort(sortBy).limit(limit).skip((page - 1) * limit).lean(lean);
const ranks: RoleType[] = await RoleModel.find({serverId}).select(fields.join(' ')).sort(sortBy).limit(limit).skip((page - 1) * limit).lean({ virtuals: true });
return ranks;
}
// 保存秘境首通队伍
public static async saveDungeonHero(roleId: string, battleId: number, heroes: Array<number>, isSuccess: boolean) {
public static async saveDungeonHero(roleId: string, battleId: number, heroes: number[], isSuccess: boolean) {
if(isSuccess) {
let role = await Role.findByRoleId(roleId);
let dungeonHeroes = role && role.dungeonHeroes;
@@ -444,7 +454,7 @@ export default class Role extends BaseModel {
}
// 保存开启功能
public static async pushFuncs(roleId: string, funcs: Array<number>, lean = true) {
public static async pushFuncs(roleId: string, funcs: number[], lean = true) {
const recs: RoleType = await RoleModel.findOneAndUpdate({roleId}, {$push: {funcs: {$each: funcs}}}, {new: true}).lean(lean);
return recs
}
@@ -469,9 +479,9 @@ export default class Role extends BaseModel {
*/
public static async getInviteList(time: number, serverId: number) {
const result = await RoleModel.find({ loginTime: { $gt: time }, hasGuild: false, serverId })
.select({roleId: 1, roleName: 1,ce: 1,headHid: 1,sHid: 1,lv: 1,title: 1,job: 1,quitTime: 1, _id: 0})
.select({roleId: 1, roleName: 1,ce: 1, head: 1, frame: 1, lv: 1,title: 1,job: 1,quitTime: 1, _id: 0})
.sort({quitTime: -1, lv: -1, ce: -1})
.limit(100).lean({getters: true});
.limit(100).lean({getters: true, virtuals: true});
return result;
}
@@ -480,7 +490,7 @@ export default class Role extends BaseModel {
const result = await RoleModel.find({ loginTime: { $gt: time }, lv: { $gte: minLv, $lte: maxLv } }, { _id: 0 })
.select(ROLE_SELECT.SHOW_FRIEND_APPLY_LIST)
.sort({quitTime: -1, lv: -1, ce: -1})
.limit(200).lean({ getters: true });
.limit(200).lean({ getters: true, virtuals: true });
return result;
}
@@ -494,7 +504,7 @@ export default class Role extends BaseModel {
}, { _id: 0 })
.select(ROLE_SELECT.SHOW_FRIEND_APPLY_LIST)
.sort({quitTime: -1, lv: -1, ce: -1})
.limit(200).lean({ getters: true });
.limit(200).lean({ getters: true, virtuals: true });
return result;
}
@@ -542,3 +552,13 @@ export const RoleModel = getModelForClass(Role);
export interface RoleType extends Pick<DocumentType<Role>, keyof Role>{};
export type RoleUpdate = Partial<RoleType>; // 将所有字段变成可选项
// 初始化
function getInitialTeraph() {
let teraphs = new Array<Teraph>();
for(let i = ROLE_TERAPH.START; i <= ROLE_TERAPH.END; i++) {
let p = new Teraph(i);
teraphs.push(p);
}
return teraphs;
}

View File

@@ -119,8 +119,8 @@ export default class UserGuild extends BaseModel {
const userGuilds: UserGuildType[] = await UserGuildModel.find({ guildCode, status: USER_GUILD_STATUS.ON })
.select(select)
.sort(sort)
.populate('role', 'roleId roleName ce headHid sHid lv title quitTime', 'Role')
.lean({ getters: true });
.populate('role', 'roleId roleName ce head frame spine lv title quitTime', 'Role')
.lean({ getters: true, virtuals: true });
return userGuilds;
}
@@ -128,8 +128,8 @@ export default class UserGuild extends BaseModel {
const userGuilds: UserGuildType = await UserGuildModel.findOne({ guildCode, status: USER_GUILD_STATUS.ON, auth: { $ne: GUILD_AUTH.LEADER } })
.sort({ activeWeekly: -1, activeUpdateTime: 1 })
.select(select)
.populate('role', 'roleId roleName ce headHid sHid lv title quitTime', 'Role')
.lean({getters: true});
.populate('role', 'roleId roleName ce head frame spine lv title quitTime', 'Role')
.lean({getters: true, virtuals: true });
return userGuilds;
}

View File

@@ -79,8 +79,8 @@ export default class UserGuildApply extends BaseModel {
const list: UserGuildApplyType[] = await UserGuildApplyModel.find(condition)
.sort({ createdAt: -1 })
.select('applyCode role')
.populate('role', 'roleId roleName ce headHid sHid lv title job quitTime', 'Role')
.limit(GUILD_PER_PAGE).lean({ getters: true });
.populate('role', 'roleId roleName ce head frame spine lv title job quitTime', 'Role')
.limit(GUILD_PER_PAGE).lean({ getters: true, virtuals: true });
return list
}

View File

@@ -1,8 +1,9 @@
import { PvpEnemies, PvpOtherHeroes } from "../../domain/dbGeneral";
import { PvpEnemies, PvpOtherHeroes, WarStar } from "../../domain/dbGeneral";
import { GuildType } from "../../db/Guild";
import { RoleType, WarStar } from "../../db/Role";
import { RoleType } from "../../db/Role";
import { WAR_TYPE } from "../../consts/consts";
import { gameData } from "../../pubUtils/data";
import { FIGURE } from "../../pubUtils/dicParam";
export class PlayerDetailHero {
actorId: number;
@@ -49,8 +50,9 @@ export class PlayerDetail {
roleName: string;
lv: number;
title?: number = 1;
sHid?: number = 19;
headHid?: number = 19;
head?: number = FIGURE.DEFAULT_HEAD;
frame?: number = FIGURE.DEFAULT_FRAME;
spine?: number = FIGURE.DEFAULT_SPINE;
score?: number = 0;
pLv?: number = 1;
@@ -66,8 +68,9 @@ export class PlayerDetail {
if(detail.roleName) this.roleName = detail.roleName;
if(detail.lv) this.lv = detail.lv;
if(detail.title) this.title = detail.title;
if(detail.sHid) this.sHid = detail.sHid;
if(detail.headHid) this.headHid = detail.headHid;
if(detail.head) this.head = detail.head;
if(detail.frame) this.frame = detail.frame;
if(detail.spine) this.spine = detail.spine;
if(detail.score) this.score = detail.score;
if(detail.pLv) this.pLv = detail.pLv;
if(detail.defCe) this.defCe = detail.defCe;

View File

@@ -1,7 +1,8 @@
import { prop } from '@typegoose/typegoose';
import { prop, mongoose, Ref } from '@typegoose/typegoose';
import { DicWarJson } from '../pubUtils/dictionary/DicWarJson';
import { HeroType } from '../db/Hero';
import { Attribute } from './roleField/attribute';
import Hero, { HeroType } from '../db/Hero';
import { FIGURE } from '../pubUtils/dicParam';
// 从玩家数据中覆盖warjson的部分字段
export class PvpHeroInfo {
@@ -146,4 +147,75 @@ export class ItemReward {
id: number;
@prop({ required: true })
count: number;
}
export class TopHero {
@prop({ required: true })
hid: number; // 武将id
@prop({ required: true })
ce: number; // 战力
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
hero: Ref<Hero>;
}
export class DungeonHero {
@prop({ required: true })
battleId: number; // 关卡id
@prop({ required: true, type: Number, default: [] })
heroes: Array<number>; // 武将id
}
export class PayRecord {
@prop({ required: true })
id: string; // 购买项 product id
@prop({ required: true })
cnt: number; // 购买次数
}
export class WarStar {
@prop({ required: true })
id: number; // 关卡 id
@prop({ required: true })
warType: number; // 关卡类型
@prop({ required: true })
star: number; // 星级
}
export class Teraph {
@prop({ required: true, default: 1 })
id: number; // 神像的id
@prop({ required: true, default: 1 })
grade: number; // 等级
@prop({ required: true, default: 0 })
hp: number;
@prop({ required: true, default: 0 })
atk: number;
@prop({ required: true, default: 0 })
def: number;
@prop({ required: true, default: 0 })
mdef: number;
@prop({ required: true, default: 0 })
agi: number;
@prop({ required: true, default: 0 })
luk: number;
}
export class Head {
@prop({ required: true, default: FIGURE.DEFAULT_HEAD })
id: number; // 头像id
@prop({ required: true, default: false })
enable: boolean; // 是否启用
@prop({ required: true })
time: number; // 到期时间
}
export class Frame {
@prop({ required: true, default: FIGURE.DEFAULT_FRAME })
id: number; // 相框id
@prop({ required: true, default: false })
enable: boolean; // 是否启用
@prop({ required: true })
time: number; // 到期时间
}

View File

@@ -1,20 +1,23 @@
import { FIGURE } from "../pubUtils/dicParam";
// 排行榜返回玩家值
export class RankParam {
roleName: string;
lv: number;
vLv: number;
guildName: string = "";
head: string = 'zhaoyun';
headHid: number = 19;
sHid: number = 19;
head: number = FIGURE.DEFAULT_HEAD;
frame: number = FIGURE.DEFAULT_FRAME;
spine: number = FIGURE.DEFAULT_SPINE;
title: number;
constructor(roleName: string, lv: number, vLv: number, headHid: number, sHid: number, title: number) {
constructor(roleName: string, lv: number, vLv: number, head: number, frame: number, spine: number, title: number) {
this.roleName = roleName;
this.lv = lv;
this.vLv = vLv;
this.headHid = headHid;
this.sHid = sHid;
this.head = head;
this.frame = frame;
this.spine = spine;
this.title = title;
}
}
@@ -28,11 +31,12 @@ export class GuildRankParam {
roleName: string;
title: number;
lv: number;
headHid: number;
sHid: number;
head: number;
frame: number;
spine: number;
}
constructor(icon: number, name: string, lv: number, leader: {roleName: string, title: number, lv: number, headHid: number, sHid: number}) {
constructor(icon: number, name: string, lv: number, leader: {roleName: string, title: number, lv: number, head: number, frame: number, spine: number}) {
this.icon = icon;
this.name = name;
this.lv = lv;
@@ -45,14 +49,16 @@ export class GuildLeader {
roleName: string;
title: number;
lv: number;
headHid: number;
sHid: number;
head: number;
frame: number;
spine: number;
constructor(leader: {roleName: string, title: number, lv: number, headHid: number, sHid: number}) {
constructor(leader: {roleName: string, title: number, lv: number, head: number, frame: number, spine: number}) {
this.roleName = leader.roleName;
this.title = leader.title;
this.lv = leader.lv;
this.headHid = leader.headHid;
this.sHid = leader.sHid;
this.head = leader.head;
this.frame = leader.frame;
this.spine = leader.spine;
}
}

View File

@@ -6,8 +6,9 @@ export class FriendParams {
roleId: string;
roleName: string;
lv: number;
headHid: number;
sHid: number;
head: number;
frame: number;
spine: number;
ce: number;
title: number;
serverId: number;
@@ -18,8 +19,9 @@ export class FriendParams {
this.roleId = role.roleId;
this.roleName = role.roleName;
this.lv = role.lv;
this.headHid = role.headHid;
this.sHid = role.sHid;
this.head = role.head;
this.frame = role.frame;
this.spine = role.spine;
this.ce = role.ce;
this.title = role.title;
}

View File

@@ -67,3 +67,8 @@ export const FRIEND = {
FRIEND_RECONMMEND_NUM: 8, // 同一批推荐好友数量
FRIEND_RECONMMEND_SERVICE: 4, // 同一批推荐本服的好友数量
};
export const FIGURE = {
DEFAULT_HEAD: 11201, // 默认头像
DEFAULT_FRAME: 11301, // 默认相框
DEFAULT_SPINE: 11401, // 默认形象
};

View File

@@ -41,8 +41,9 @@ export interface oppPlayersInter {
pos: number; // 对手位置
roleId: string; // 对手玩家id
roleName: string; // 对手玩家名
headHid: number; // 头像
sHid: number; // 形象
head: number; // 头像
frame: number; // 相框
spine: number; // 形象
pLv: number; // 对手队伍等级
defCe: number; // 防守阵容战力
addScore: number; // 战胜后可获军功