形象:修改字典表
This commit is contained in:
@@ -131,9 +131,9 @@ const itid_array = [
|
||||
{ id: 47, name: '典籍宝石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 48, name: '灵玄石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 49, name: '玩家好感道具', table: 'item', type: CONSUME_TYPE.FRIEND_FAVOUR },
|
||||
{ id: 50, name: '形象', table: 'hero', type: CONSUME_TYPE.FRIEND_FAVOUR },
|
||||
{ id: 51, name: '相框', table: 'hero', type: CONSUME_TYPE.FRIEND_FAVOUR },
|
||||
{ id: 52, name: '玩家形象', table: 'hero', type: CONSUME_TYPE.FRIEND_FAVOUR }
|
||||
{ id: 50, name: '形象', table: 'role', type: CONSUME_TYPE.HEAD },
|
||||
{ id: 51, name: '相框', table: 'role', type: CONSUME_TYPE.FRAME },
|
||||
{ id: 52, name: '玩家形象', table: 'role', type: CONSUME_TYPE.SPINE }
|
||||
];
|
||||
|
||||
export const ITID = new Map<number, {id: number, name: string, table: string, type?: number, isCurrency?: boolean, equipJewel?: number}>();
|
||||
@@ -248,4 +248,5 @@ export function getDropItems() {
|
||||
export enum FIGURE_UNLOCK_CONDITION {
|
||||
GET_HERO = 1, // 获取武将
|
||||
HERO_FAVOR = 2, // 武将好感度达到
|
||||
GET_SKIN = 3, // 获得时装
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { FIGURE } from '../pubUtils/dicParam';
|
||||
import { EXTERIOR } from '../pubUtils/dicParam';
|
||||
|
||||
export class RoleStatus {
|
||||
@prop({ required: true })
|
||||
@@ -27,13 +27,13 @@ export class RoleStatus {
|
||||
@prop({ required: false, default: false })
|
||||
isFrd: boolean;
|
||||
// 头像
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_HEAD })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACE })
|
||||
head: number;
|
||||
// 相框
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_FRAME })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACECASE })
|
||||
frame: number;
|
||||
// 形象
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_SPINE })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_APPEARANCE })
|
||||
spine: number;
|
||||
// 前五战力
|
||||
@prop({ required: true, default: 0 })
|
||||
|
||||
@@ -2,7 +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';
|
||||
import { EXTERIOR } from '../pubUtils/dicParam';
|
||||
|
||||
export class HeroScores {
|
||||
@prop({ required: true })
|
||||
@@ -21,11 +21,11 @@ export default class PvpHistoryOpp extends BaseModel {
|
||||
oppRoleId: string; // 对手角色 id
|
||||
@prop({ required: true })
|
||||
roleName: string; // 角色名称
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_HEAD })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACE })
|
||||
head: number; // 对手头像
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_FRAME })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACECASE })
|
||||
frame: number; // 对手相框
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_SPINE })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_APPEARANCE })
|
||||
spine: number; // 对手形象
|
||||
@prop({ required: true, default: 0 })
|
||||
score: number; // 对手军功
|
||||
|
||||
@@ -3,7 +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';
|
||||
import { EXTERIOR } from '../pubUtils/dicParam';
|
||||
|
||||
export class HeroesRecord {
|
||||
@prop({ required: true, default: 0 })
|
||||
@@ -42,11 +42,11 @@ export class PlayerInfo {
|
||||
roleName: string; // 角色 名
|
||||
@prop({ required: true, default: 0 })
|
||||
lv: number; // 等级
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_HEAD })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACE })
|
||||
head: number; // 头像
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_FRAME })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_FACECASE })
|
||||
frame: number; // 相框
|
||||
@prop({ required: true, default: FIGURE.DEFAULT_SPINE })
|
||||
@prop({ required: true, default: EXTERIOR.EXTERIOR_APPEARANCE })
|
||||
spine: number; // 形象
|
||||
@prop({ required: true, default: 0 })
|
||||
title: number; // 爵位
|
||||
|
||||
+26
-7
@@ -6,7 +6,7 @@ import { shouldRefresh, reduceCe } from '../pubUtils/util';
|
||||
import { initRoleAtrr } from '../pubUtils/playerCe';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { Figure } from '../domain/dbGeneral';
|
||||
import { FIGURE } from '../pubUtils/dicParam';
|
||||
import { EXTERIOR } from '../pubUtils/dicParam';
|
||||
import Hero from './Hero';
|
||||
|
||||
// role表属性格式
|
||||
@@ -124,26 +124,26 @@ export default class Role extends BaseModel {
|
||||
@prop({ required: true, type: Number })
|
||||
showLineup: number[]; // 展示阵容
|
||||
|
||||
@prop({ required: true, type: Figure, default: [], _id: false })
|
||||
@prop({ required: true, type: Figure, default: getDefualtFigure('head'), _id: false })
|
||||
heads: Figure[]; // 拥有头像列表
|
||||
@prop({ required: true, type: Figure, default: [], _id: false })
|
||||
@prop({ required: true, type: Figure, default: getDefualtFigure('frame'), _id: false })
|
||||
frames: Figure[]; // 拥有相框列表
|
||||
@prop({ required: true, type: Figure, default: [], _id: false })
|
||||
@prop({ required: true, type: Figure, default: getDefualtFigure('spine'), _id: false })
|
||||
spines: Figure[]; // 拥有的形象
|
||||
|
||||
public get head () { // 虚拟字段head 当前头像
|
||||
let curHead = this.heads?.find(cur => cur.enable && cur.time > nowSeconds());
|
||||
return curHead?curHead.id: FIGURE.DEFAULT_HEAD;
|
||||
return curHead?curHead.id: EXTERIOR.EXTERIOR_FACE;
|
||||
}
|
||||
|
||||
public get frame () { // 虚拟字段frame 当前相框
|
||||
let curFrame = this.frames?.find(cur => cur.enable && cur.time > nowSeconds());
|
||||
return curFrame?curFrame.id: FIGURE.DEFAULT_FRAME;
|
||||
return curFrame?curFrame.id: EXTERIOR.EXTERIOR_FACECASE;
|
||||
}
|
||||
|
||||
public get spine () { // 虚拟字段spine 当前形象
|
||||
let curSpine = this.spines?.find(cur => cur.enable && cur.time > nowSeconds());
|
||||
return curSpine?curSpine.id: FIGURE.DEFAULT_SPINE;
|
||||
return curSpine?curSpine.id: EXTERIOR.EXTERIOR_APPEARANCE;
|
||||
}
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
@@ -551,6 +551,10 @@ export default class Role extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async addFigure(roleId: string, id: number, figure: Figure) {
|
||||
const result = await RoleModel.findOneAndUpdate({roleId}, { $pull: { heads: { id: id }, $push: { heads: figure } }}, {new: true}).lean();
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
export const RoleModel = getModelForClass(Role);
|
||||
@@ -567,3 +571,18 @@ function getInitialTeraph() {
|
||||
}
|
||||
return teraphs;
|
||||
}
|
||||
|
||||
function getDefualtFigure(type: string) {
|
||||
let figures = new Array<Figure>();
|
||||
if(type == 'head') {
|
||||
let figure = new Figure(EXTERIOR.EXTERIOR_FACE, true, null, true);
|
||||
figures.push(figure);
|
||||
} else if (type == 'frame') {
|
||||
let figure = new Figure(EXTERIOR.EXTERIOR_FACECASE, true, null, true);
|
||||
figures.push(figure);
|
||||
} else if (type == 'spine') {
|
||||
let figure = new Figure(EXTERIOR.EXTERIOR_APPEARANCE, true, null, true);
|
||||
figures.push(figure);
|
||||
}
|
||||
return figures;
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import { GuildType } from "../../db/Guild";
|
||||
import { RoleType } from "../../db/Role";
|
||||
import { WAR_TYPE } from "../../consts/consts";
|
||||
import { gameData } from "../../pubUtils/data";
|
||||
import { FIGURE } from "../../pubUtils/dicParam";
|
||||
import { EXTERIOR } from "../../pubUtils/dicParam";
|
||||
|
||||
export class PlayerDetailHero {
|
||||
actorId: number;
|
||||
@@ -50,9 +50,9 @@ export class PlayerDetail {
|
||||
roleName: string;
|
||||
lv: number;
|
||||
title?: number = 1;
|
||||
head?: number = FIGURE.DEFAULT_HEAD;
|
||||
frame?: number = FIGURE.DEFAULT_FRAME;
|
||||
spine?: number = FIGURE.DEFAULT_SPINE;
|
||||
head?: number = EXTERIOR.EXTERIOR_FACE;
|
||||
frame?: number = EXTERIOR.EXTERIOR_FACECASE;
|
||||
spine?: number = EXTERIOR.EXTERIOR_APPEARANCE;
|
||||
|
||||
score?: number = 0;
|
||||
pLv?: number = 1;
|
||||
|
||||
@@ -2,8 +2,7 @@ import { prop, mongoose, Ref } from '@typegoose/typegoose';
|
||||
import { DicWarJson } from '../pubUtils/dictionary/DicWarJson';
|
||||
import { Attribute } from './roleField/attribute';
|
||||
import Hero, { HeroType } from '../db/Hero';
|
||||
import { gameData } from '../pubUtils/data';
|
||||
import { nowSeconds, getBeforeDaySeconds } from '../pubUtils/timeUtil';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
// 从玩家数据中覆盖warjson的部分字段
|
||||
export class PvpHeroInfo {
|
||||
@@ -210,7 +209,7 @@ export class Figure {
|
||||
enable: boolean = false; // 是否启用
|
||||
@prop({ required: false })
|
||||
time?: number; // 到期时间
|
||||
@prop({ required: true, default: [] })
|
||||
@prop({ required: true, default: [], type: Number })
|
||||
unlockedType: number[] = []; // 当前已经解锁了的type
|
||||
@prop({ required: true, default: false })
|
||||
unlocked: boolean = false; // 是否已解锁
|
||||
|
||||
@@ -55,6 +55,9 @@ export class ServerParamWithRole extends ServerParam {
|
||||
lv: number; // 等级
|
||||
updatedAt: Date;
|
||||
|
||||
headHid: number = 19; // TODO,等客户端完成后删除这个字段
|
||||
sHid: number = 19;
|
||||
|
||||
constructor(role: RoleType, server: ServerInfo) {
|
||||
super(server);
|
||||
this.groupId = server.groupId;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { FIGURE } from "../pubUtils/dicParam";
|
||||
import { EXTERIOR } from "../pubUtils/dicParam";
|
||||
|
||||
// 排行榜返回玩家值
|
||||
export class RankParam {
|
||||
@@ -6,9 +6,9 @@ export class RankParam {
|
||||
lv: number;
|
||||
vLv: number;
|
||||
guildName: string = "";
|
||||
head: number = FIGURE.DEFAULT_HEAD;
|
||||
frame: number = FIGURE.DEFAULT_FRAME;
|
||||
spine: number = FIGURE.DEFAULT_SPINE;
|
||||
head: number = EXTERIOR.EXTERIOR_FACE;
|
||||
frame: number = EXTERIOR.EXTERIOR_FACECASE;
|
||||
spine: number = EXTERIOR.EXTERIOR_APPEARANCE;
|
||||
title: number;
|
||||
|
||||
headHid: number = 19; // TODO 等客户端接完将这些删除
|
||||
|
||||
@@ -60,15 +60,18 @@ export const FRIEND = {
|
||||
FRIEND_CLOSEPOINT_ADD: 5, // 每赠送/领取一次增加的亲密度
|
||||
FRIEND_FRIENDPOINT_ADD: 1, // 每领取一次爱心会增加的情谊值
|
||||
FRIEND_RECONMMEND_LEVEL: 5, // 系统推荐玩家等级要求浮动
|
||||
FRIEND_RECONMMEND_ACTIVETIME: 1000, // 系统推荐玩家活跃时间要求(小时)
|
||||
FRIEND_RECONMMEND_ACTIVETIME: 24, // 系统推荐玩家活跃时间要求(小时)
|
||||
FRIEND_BLACKLIST_MAX: 100, // 黑名单人数上限
|
||||
FRIEND_MANAGE_APPLICATION: 50, // 好友显示收到的申请条数上限
|
||||
FRIEND_RECEIVE_SINGLE: 1, // 向单个好友每日最多赠送多少爱心
|
||||
FRIEND_RECONMMEND_NUM: 8, // 同一批推荐好友数量
|
||||
FRIEND_RECONMMEND_SERVICE: 4, // 同一批推荐本服的好友数量
|
||||
};
|
||||
export const FIGURE = {
|
||||
DEFAULT_HEAD: 11201, // 默认头像
|
||||
DEFAULT_FRAME: 11301, // 默认相框
|
||||
DEFAULT_SPINE: 11401, // 默认形象
|
||||
};
|
||||
export const LOGIN = {
|
||||
LOGIN_PUBLIC_LABLE: '1&zi_remen|2&zi_zuixin|3&zi_zhiding', // 公告中对应的标签图片
|
||||
};
|
||||
export const EXTERIOR = {
|
||||
EXTERIOR_FACE: 11219, // 默认头像id
|
||||
EXTERIOR_FACECASE: 11301, // 默认头像框id
|
||||
EXTERIOR_APPEARANCE: 11419, // 默认形象id
|
||||
};
|
||||
|
||||
@@ -5,10 +5,13 @@ import { ItemModel } from '../db/Item';
|
||||
import { EquipModel, RandSe, Holes } from './../db/Equip';
|
||||
import { BagInter, EquipInter } from './interface';
|
||||
import { gameData } from './data';
|
||||
import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../consts';
|
||||
import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE } from '../consts';
|
||||
import { getRandValueByMinMax, getRandEelm } from './util';
|
||||
|
||||
import { findWhere } from 'underscore';
|
||||
import { RoleModel, RoleType } from '../db/Role';
|
||||
import { Figure } from '../domain/dbGeneral';
|
||||
import { getBeforeDaySeconds } from './timeUtil';
|
||||
|
||||
export async function addSkins(roleId: string, id: number) {
|
||||
let skinInfo = gameData.fashion.get(id);
|
||||
@@ -74,4 +77,83 @@ export function getGoldObject(count: number) {
|
||||
*/
|
||||
export function getFriendPointObject(count: number) {
|
||||
return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT), count};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解锁头像/相框
|
||||
* @param type 解锁类型(获得武将/好感达到)
|
||||
* @param num 参数(武将id/好感等级)
|
||||
*/
|
||||
export async function unlockFigure(roleId: string, conditions: {type: number, num: number}[], role?: RoleType) {
|
||||
if(!role || !role.heads || !role.frames) {
|
||||
role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS);
|
||||
}
|
||||
let { heads, frames, spines } = role;
|
||||
for(let {type, num} of conditions) {
|
||||
let canUnLockList = gameData.figureCondition.get(type);
|
||||
if(canUnLockList) {
|
||||
for(let {id, param} of canUnLockList) {
|
||||
let flag = false; // 是否达成条件
|
||||
if(type == FIGURE_UNLOCK_CONDITION.GET_HERO) {
|
||||
if(num == param) flag = true;
|
||||
} else if (type == FIGURE_UNLOCK_CONDITION.HERO_FAVOR) {
|
||||
if(num >= param) flag = true;
|
||||
}
|
||||
if(!flag) continue;
|
||||
let dicGood = gameData.goods.get(id);
|
||||
if(!dicGood) continue;
|
||||
let dicItid = ITID.get(dicGood.itid);
|
||||
if(!dicItid) continue;
|
||||
|
||||
if(dicItid.type == CONSUME_TYPE.HEAD) {
|
||||
unlockSingleFigure(heads, id, type);
|
||||
} else if (dicItid.type == CONSUME_TYPE.FRAME) {
|
||||
unlockSingleFigure(frames, id, type);
|
||||
} else if (dicItid.type == CONSUME_TYPE.SPINE) {
|
||||
unlockSingleFigure(spines, id, type);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
role = await RoleModel.updateRoleInfo(roleId, { heads, frames, spines });
|
||||
}
|
||||
|
||||
function unlockSingleFigure(dbFigures: Figure[], id: number, type: number) {
|
||||
let figure = dbFigures.find(cur => cur.id == id);
|
||||
if(!figure) {
|
||||
figure = new Figure(id, false);
|
||||
dbFigures.push(figure);
|
||||
}
|
||||
if(figure.unlocked) return; // 已解锁过
|
||||
if(figure.unlockedType.includes(type)) return;
|
||||
|
||||
figure.unlockedType.push(type);
|
||||
let dicGoods = gameData.goods.get(id);
|
||||
|
||||
let hasUnlockedAll = true;
|
||||
for(let {type} of dicGoods.condition) {
|
||||
if(!figure.unlockedType.includes(type)) {
|
||||
hasUnlockedAll = false; break;
|
||||
}
|
||||
}
|
||||
if(hasUnlockedAll) {
|
||||
figure.unlocked = true;
|
||||
|
||||
if(dicGoods.timeLimit) {
|
||||
figure.time = getBeforeDaySeconds(-1 * dicGoods.timeLimit); // timeLimit天以后
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 直接获得形象/相框
|
||||
export async function addFigure(roleId: string, id: number) {
|
||||
let figure = new Figure(id, true, null, false);
|
||||
let role = await RoleModel.addFigure(roleId, id, figure);
|
||||
return role;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user