修改数据库,姑且跑起来
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -731,22 +731,22 @@ export class FriendHandler {
|
|||||||
if (heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND);
|
if (heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
|
||||||
let list = new Array();
|
let list = new Array();
|
||||||
for (let { roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skinId, attr: heroAttrs, ePlace } of heroList) {
|
// 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 equips = await EquipModel.findListByHidAndRole(hisRoleId, hid, EQUIP_SELECT.HERO_DETAIL);
|
||||||
|
|
||||||
let attributes = getPlayerMainAttribute(heroAttrs, role.attr);
|
// let attributes = getPlayerMainAttribute(heroAttrs, role.attr);
|
||||||
|
|
||||||
list.push({
|
// list.push({
|
||||||
roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skinId,
|
// roleId, roleName, hid, hName, ce, lv, star, colorStar, quality, job, skinId,
|
||||||
equips: equips.map(cur => {
|
// equips: equips.map(cur => {
|
||||||
let curEplace = ePlace.find(ccur => cur.ePlaceId == ccur.id) || new EPlace();
|
// let curEplace = ePlace.find(ccur => cur.ePlaceId == ccur.id) || new EPlace();
|
||||||
let { lv = 0, refineLv = 0 } = curEplace;
|
// let { lv = 0, refineLv = 0 } = curEplace;
|
||||||
return { ...cur, lv, refineLv }
|
// return { ...cur, lv, refineLv }
|
||||||
}), attributes
|
// }), attributes
|
||||||
});
|
// });
|
||||||
|
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { list });
|
return resResult(STATUS.SUCCESS, { list });
|
||||||
|
|||||||
@@ -569,7 +569,6 @@ export class HeroHandler {
|
|||||||
if (!dicSkin) return resResult(STATUS.HERO_SKIN_NOT_FIND);
|
if (!dicSkin) return resResult(STATUS.HERO_SKIN_NOT_FIND);
|
||||||
let hero = await HeroModel.findByHidAndRoleWithEquip(dicSkin.actorId, roleId);
|
let hero = await HeroModel.findByHidAndRoleWithEquip(dicSkin.actorId, roleId);
|
||||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||||
let oldCount = hero.ePlace.filter(cur => cur.equip).length;
|
|
||||||
|
|
||||||
let newHeroSkins: HeroSkin[] = [];
|
let newHeroSkins: HeroSkin[] = [];
|
||||||
let result = false;
|
let result = false;
|
||||||
@@ -591,34 +590,34 @@ export class HeroHandler {
|
|||||||
if (!result) {
|
if (!result) {
|
||||||
return resResult(STATUS.HERO_SKIN_NOT_FIND);
|
return resResult(STATUS.HERO_SKIN_NOT_FIND);
|
||||||
}
|
}
|
||||||
let oldEquipSeids = calEquipSeids(hero);
|
|
||||||
let dicHero = gameData.hero.get(dicSkin.heroId);
|
let dicHero = gameData.hero.get(dicSkin.heroId);
|
||||||
let dicMyJob = gameData.job.get(hero.job);
|
let dicMyJob = gameData.job.get(hero.job);
|
||||||
let dicNewJob = getJobByGradeAndClass(dicHero.jobClass, dicMyJob.grade);
|
let dicNewJob = getJobByGradeAndClass(dicHero.jobClass, dicMyJob.grade);
|
||||||
|
|
||||||
let newEplace: EPlace[] = [], heroPutNum = 0, curEquips: {seqId: number, id: number, hid: number, ePlaceId: number}[] = [];
|
// let newEplace: EPlace[] = [], heroPutNum = 0, curEquips: {seqId: number, id: number, hid: number, ePlaceId: number}[] = [];
|
||||||
for(let { id, equip, lv, refineLv } of hero.ePlace) {
|
// for(let { id, equip, lv, refineLv } of hero.ePlace) {
|
||||||
let e = <EquipType>equip;
|
// let e = <EquipType>equip;
|
||||||
if(equip && !checkEquipCanPut({...hero, skinId: dicSkin.heroId}, e.id)) {
|
// if(equip && !checkEquipCanPut({...hero, skinId: dicSkin.heroId}, e.id)) {
|
||||||
await EquipModel.putOnOrOff(e._id, 0);
|
// await EquipModel.putOnOrOff(e._id, 0);
|
||||||
heroPutNum -= 1;
|
// heroPutNum -= 1;
|
||||||
newEplace.push({ id, equip: null, lv, refineLv});
|
// newEplace.push({ id, equip: null, lv, refineLv});
|
||||||
curEquips.push({ seqId: e.seqId, id: e.id, hid: 0, ePlaceId: id });
|
// curEquips.push({ seqId: e.seqId, id: e.id, hid: 0, ePlaceId: id });
|
||||||
} else {
|
// } else {
|
||||||
newEplace.push({ id, equip: e?e._id: null, lv, refineLv});
|
// newEplace.push({ id, equip: e?e._id: null, lv, refineLv});
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
if(heroPutNum < 0) {
|
// if(heroPutNum < 0) {
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, oldEquipSeids);
|
// hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, oldEquipSeids);
|
||||||
await checkTask(roleId, sid, TASK_TYPE.EQUIP_SUM, heroPutNum, true, {});
|
// await checkTask(roleId, sid, TASK_TYPE.EQUIP_SUM, heroPutNum, true, {});
|
||||||
await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_SUM, heroPutNum);
|
// await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_SUM, heroPutNum);
|
||||||
await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [heroPutNum, oldCount]);
|
// await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [heroPutNum, oldCount]);
|
||||||
}
|
// }
|
||||||
|
|
||||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SKIN, sid, roleId, hero, { skins: newHeroSkins, skinId: dicSkin.heroId, job: dicNewJob.jobid, ePlace: newEplace });
|
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SKIN, sid, roleId, hero, { skins: newHeroSkins, skinId: dicSkin.heroId, job: dicNewJob.jobid });
|
||||||
return resResult(STATUS.SUCCESS, { curHero: pick(hero, ['hid', 'skins', 'skinId', 'job']), curEquips });
|
return resResult(STATUS.SUCCESS, { curHero: pick(hero, ['hid', 'skins', 'skinId', 'job']) });
|
||||||
}
|
}
|
||||||
|
|
||||||
// ! debug接口 一键全武将
|
// ! debug接口 一键全武将
|
||||||
|
|||||||
@@ -125,33 +125,33 @@ export async function handleCost(roleId: string, sid: string, goods: Array<ItemI
|
|||||||
}
|
}
|
||||||
|
|
||||||
//删除装备
|
//删除装备
|
||||||
if (resEquips.length > 0) {
|
// if (resEquips.length > 0) {
|
||||||
let heroMap = new Map<number, { hero: HeroType, equips: EquipType[]}>();
|
// let heroMap = new Map<number, { hero: HeroType, equips: EquipType[]}>();
|
||||||
for(let equip of resEquips) {
|
// for(let equip of resEquips) {
|
||||||
if(equip.hid > 0) {
|
// if(equip.hid > 0) {
|
||||||
if(!heroMap.has(equip.hid)) {
|
// if(!heroMap.has(equip.hid)) {
|
||||||
let hero = await HeroModel.findByHidAndRoleWithEquip(equip.hid, roleId);
|
// let hero = await HeroModel.findByHidAndRoleWithEquip(equip.hid, roleId);
|
||||||
heroMap.set(equip.hid, { hero, equips: [] });
|
// heroMap.set(equip.hid, { hero, equips: [] });
|
||||||
}
|
// }
|
||||||
heroMap.get(equip.hid).equips.push(equip);
|
// heroMap.get(equip.hid).equips.push(equip);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
for(let [_hid, {hero, equips} ] of heroMap) {
|
// for(let [_hid, {hero, equips} ] of heroMap) {
|
||||||
let oldCount = hero.ePlace.filter(cur => cur.equip).length;
|
// let oldCount = hero.ePlace.filter(cur => cur.equip).length;
|
||||||
let args = calEquipSeids(hero);
|
// let args = calEquipSeids(hero);
|
||||||
for(let equip of equips) {
|
// for(let equip of equips) {
|
||||||
hero = await HeroModel.removeEquip(roleId, hero.hid, equip.ePlaceId, equip._id);
|
// hero = await HeroModel.removeEquip(roleId, hero.hid, equip.ePlaceId, equip._id);
|
||||||
}
|
// }
|
||||||
|
|
||||||
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, args);
|
// await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, args);
|
||||||
await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [-1, oldCount]);
|
// await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [-1, oldCount]);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
let equips = await EquipModel.deleteEquips(roleId, equipSeqIds);
|
// let equips = await EquipModel.deleteEquips(roleId, equipSeqIds);
|
||||||
saveItemChangeLog(roleId, equips.map(equip => ({ id: equip.id, count: equip.count, inc: -1 })), reason);
|
// saveItemChangeLog(roleId, equips.map(equip => ({ id: equip.id, count: equip.count, inc: -1 })), reason);
|
||||||
pinus.app.get('channelService').pushMessageByUids('onEquipDel', resResult(STATUS.SUCCESS, { equipInfos: equips.map(equip => ({ seqId: equip.seqId, id: equip.id, inc: -1, reason })) }), uids);
|
// pinus.app.get('channelService').pushMessageByUids('onEquipDel', resResult(STATUS.SUCCESS, { equipInfos: equips.map(equip => ({ seqId: equip.seqId, id: equip.id, inc: -1, reason })) }), uids);
|
||||||
}
|
// }
|
||||||
|
|
||||||
//消耗玩家货币
|
//消耗玩家货币
|
||||||
if (gold.length > 0 || coin.length > 0) {
|
if (gold.length > 0 || coin.length > 0) {
|
||||||
|
|||||||
@@ -91,13 +91,13 @@ export async function pushGuildBossSucMsg(roleId: string, roleName: string, guil
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function pushEquipRefineSucMsg(roleId: string, roleName: string, serverId: number, eplace: Partial<EPlace>, quality: number) {
|
export async function pushEquipRefineSucMsg(roleId: string, roleName: string, serverId: number, eplace: Partial<EPlace>, quality: number) {
|
||||||
const { id, lv, refineLv, equip } = eplace;
|
// const { id, lv, refineLv, equip } = eplace;
|
||||||
const { id: equipId } = equip as EquipType;
|
// const { id: equipId } = equip as EquipType;
|
||||||
const data = { id, lv, refineLv, equipId, quality };
|
// const data = { id, lv, refineLv, equipId, quality };
|
||||||
const content = JSON.stringify({ roleId, roleName, eplace: data, equip: pick(equip, ['id', 'name', 'eplaceId', 'quality', 'holes', 'randMain', 'randSe', 'grade', 'hid']) });
|
// const content = JSON.stringify({ roleId, roleName, eplace: data, equip: pick(equip, ['id', 'name', 'eplaceId', 'quality', 'holes', 'randMain', 'randSe', 'grade', 'hid']) });
|
||||||
const msgData = await createGroupMsg(roleId, roleName, CHANNEL_PREFIX.SYS, `${serverId}`, MSG_TYPE.RICH_TEXT, MSG_SOURCE.EQUIP_REFINE_SUC, content, null, null);
|
// const msgData = await createGroupMsg(roleId, roleName, CHANNEL_PREFIX.SYS, `${serverId}`, MSG_TYPE.RICH_TEXT, MSG_SOURCE.EQUIP_REFINE_SUC, content, null, null);
|
||||||
await pushGroupMsgToRoom(msgData);
|
// await pushGroupMsgToRoom(msgData);
|
||||||
return msgData;
|
// return msgData;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function pushNormalEquipMsg(roleId: string, roleName: string, serverId: number, source: number, id: number, name: string, quality: number) {
|
export async function pushNormalEquipMsg(roleId: string, roleName: string, serverId: number, source: number, id: number, name: string, quality: number) {
|
||||||
|
|||||||
@@ -329,37 +329,4 @@ export async function refDailyTaskBox(roleId: string, sid: string, debug = false
|
|||||||
point, weeklyPoint, box
|
point, weeklyPoint, box
|
||||||
}), uids);
|
}), uids);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//任务条件
|
|
||||||
//英雄满装备且都镶嵌相同阶数的宝石
|
|
||||||
export async function checkTaskConditionEquipSuitJewelStage(hero: HeroType) {
|
|
||||||
let isTask = true;//是否满足任务条件
|
|
||||||
let jewelLevel = -1;//宝石阶数
|
|
||||||
for (let i = 0; i < hero.ePlace.length; i++) {
|
|
||||||
let equipObj = <EquipType>hero.ePlace[i].equip;
|
|
||||||
if (equipObj) {
|
|
||||||
let equipObjInfo = getGoodById(equipObj.id);
|
|
||||||
if (equipObj.holes.length == equipObjInfo.hole && equipObjInfo.hole > 0) {
|
|
||||||
for (let j = 0; j < equipObj.holes.length; j++) {
|
|
||||||
let jewel = equipObj.holes[j].jewel;
|
|
||||||
let jewelInfo = getGoodById(jewel);
|
|
||||||
if (jewelInfo) {
|
|
||||||
if (jewelLevel == -1) {
|
|
||||||
jewelLevel = jewelInfo.lvLimited;
|
|
||||||
} else if (jewelInfo.lvLimited != jewelLevel) {
|
|
||||||
//宝石阶数不同
|
|
||||||
isTask = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//宝石没有镶满
|
|
||||||
isTask = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return { isTask, jewelLevel };
|
|
||||||
}
|
}
|
||||||
+21
-21
@@ -1,8 +1,8 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop, Ref, mongoose, DocumentType } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, Ref, mongoose, DocumentType } from '@typegoose/typegoose';
|
||||||
import Equip, { } from './Equip';
|
// import Equip, { } from './Equip';
|
||||||
import { CounterModel } from './Counter';
|
import { CounterModel } from './Counter';
|
||||||
import { COUNTER, EQUIP_TYPE, HERO_CE_RATIO } from '../consts';
|
import { COUNTER, HERO_CE_RATIO } from '../consts';
|
||||||
import { reduceCe } from '../pubUtils/util';
|
import { reduceCe } from '../pubUtils/util';
|
||||||
import Skin from './Skin';
|
import Skin from './Skin';
|
||||||
import { SearchHeroParam } from '../domain/backEndField/search';
|
import { SearchHeroParam } from '../domain/backEndField/search';
|
||||||
@@ -71,30 +71,30 @@ export class HeroSkin {
|
|||||||
enable: boolean;
|
enable: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class Stone {
|
||||||
|
@prop({ required: true })
|
||||||
|
id: number;
|
||||||
|
@prop({ required: true })
|
||||||
|
stone: number;
|
||||||
|
}
|
||||||
|
|
||||||
export class EPlace {
|
export class EPlace {
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
id: number;
|
id: number;
|
||||||
@prop({ ref: Equip, type: mongoose.Schema.Types.ObjectId })
|
|
||||||
equip: Ref<Equip>;
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
lv: number;
|
lv: number;
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
refineLv: number;
|
quality: number;
|
||||||
}
|
@prop({ required: true })
|
||||||
|
qualityStage: number;
|
||||||
// 初始化
|
@prop({ required: true })
|
||||||
function getInitialEplace() {
|
star: number;
|
||||||
let ePlace = new Array<EPlace>();
|
@prop({ required: true })
|
||||||
for (let i = EQUIP_TYPE.START; i <= EQUIP_TYPE.END; i++) {
|
starStage: number;
|
||||||
let p = new EPlace();
|
@prop({ required: true, type: Stone, _id: false })
|
||||||
p.id = i;
|
stones: Stone[];
|
||||||
p.equip = null;
|
@prop({ required: true })
|
||||||
p.lv = 0;
|
jewel: number;
|
||||||
p.refineLv = 1;
|
|
||||||
|
|
||||||
ePlace.push(p);
|
|
||||||
}
|
|
||||||
return ePlace;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@index({ roleId: 1, hid: 1 })
|
@index({ roleId: 1, hid: 1 })
|
||||||
@@ -167,7 +167,7 @@ export default class Hero extends BaseModel {
|
|||||||
@prop({ required: true, type: HeroSkin, default: [], _id: false })
|
@prop({ required: true, type: HeroSkin, default: [], _id: false })
|
||||||
skins: HeroSkin[]; // 皮肤
|
skins: HeroSkin[]; // 皮肤
|
||||||
|
|
||||||
@prop({ required: true, type: EPlace, default: getInitialEplace(), _id: false })
|
@prop({ required: true, type: EPlace, default: [], _id: false })
|
||||||
ePlace: EPlace[]; // 武将装备引用数组
|
ePlace: EPlace[]; // 武将装备引用数组
|
||||||
|
|
||||||
public static async findByRole(roleId: string, sort: { field: string, sortBy: number }[] = [], select?: string, getters = false) {
|
public static async findByRole(roleId: string, sort: { field: string, sortBy: number }[] = [], select?: string, getters = false) {
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
import BaseModel from './BaseModel';
|
||||||
|
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
|
||||||
|
// import { COUNTER } from '../consts';
|
||||||
|
// import { CounterModel } from './Counter';
|
||||||
|
import { SearchJewelParam } from '../domain/backEndField/search';
|
||||||
|
|
||||||
|
export class RandSe {
|
||||||
|
@prop({ required: true })
|
||||||
|
id: number; // 随机属性位置id
|
||||||
|
@prop({ required: true })
|
||||||
|
seid: number; // 随机属性池id
|
||||||
|
@prop({ required: true })
|
||||||
|
rand: number; // 随机属性内需要随机的值
|
||||||
|
@prop({ required: true })
|
||||||
|
locked: boolean; // 洗炼是否锁定
|
||||||
|
}
|
||||||
|
|
||||||
|
@index({ roleId: 1, hid: 1, id: 1 })
|
||||||
|
@index({ seqId: 1 })
|
||||||
|
@modelOptions({ schemaOptions: { id: false } })
|
||||||
|
export default class Equip extends BaseModel {
|
||||||
|
|
||||||
|
@prop({ required: true })
|
||||||
|
roleId: string; // 角色 id
|
||||||
|
@prop({ required: true })
|
||||||
|
roleName: string; // 角色名称
|
||||||
|
|
||||||
|
@prop({ required: true })
|
||||||
|
seqId: number; // 装备表自增 id
|
||||||
|
@prop({ required: true })
|
||||||
|
id: number; // 装备 id
|
||||||
|
@prop({ required: true })
|
||||||
|
name: string; // 装备名称
|
||||||
|
@prop({ required: false, default: 0 })
|
||||||
|
hid: number; // 装备此装备的武将 id
|
||||||
|
@prop({ required: false, default: 0 })
|
||||||
|
ePlaceId: number; // 武将装备的部位
|
||||||
|
|
||||||
|
|
||||||
|
@prop({ required: false, default: 0 })
|
||||||
|
quenchId: number; // 选择淬炼的那一条,未选择时为0
|
||||||
|
@prop({ required: false, default: 0 })
|
||||||
|
quenchCnt: number; // 淬火成功次数,到了保底就绝对成功
|
||||||
|
|
||||||
|
@prop({ required: false, type: RandSe, default: [], _id: false })
|
||||||
|
randSe: RandSe[]; // 强化随机属性
|
||||||
|
@prop({ required: false, type: RandSe, default: [], _id: false })
|
||||||
|
previewRandSe: RandSe[]; // 强化随机属性预览
|
||||||
|
|
||||||
|
|
||||||
|
public static async findbyRole(roleId: string, lean = true) {
|
||||||
|
const jewels: JewelType[] = await JewelModel.find({ roleId }).lean(lean);
|
||||||
|
return jewels;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async findbySeqId(seqId: number, select?: string ) {
|
||||||
|
const jewel: JewelType = await JewelModel.findOne({ seqId }).select(select).lean();
|
||||||
|
return jewel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static async deleteAccount(roleId: string) {
|
||||||
|
let result = await JewelModel.deleteMany({ roleId });
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static getSearchObj(form: SearchJewelParam) {
|
||||||
|
let searchObj = {};
|
||||||
|
if(form.roleId) searchObj['roleId'] = form.roleId;
|
||||||
|
if(form.roleName) searchObj['roleName'] = { $regex: new RegExp(form.roleName.toString(), 'i') };
|
||||||
|
if(form.id) searchObj['id'] = form.id;
|
||||||
|
return searchObj
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: SearchJewelParam = {}) {
|
||||||
|
|
||||||
|
let searchObj = this.getSearchObj(form);
|
||||||
|
let sort = {};
|
||||||
|
if(sortField && sortOrder) {
|
||||||
|
if(sortOrder == 'ascend') {
|
||||||
|
sort[sortField] = 1;
|
||||||
|
} else if (sortOrder == 'descend') {
|
||||||
|
sort[sortField] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const result: JewelType[] = await JewelModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async countByCondition(form: SearchJewelParam = {}) {
|
||||||
|
|
||||||
|
let searchObj = this.getSearchObj(form);
|
||||||
|
const result = await JewelModel.count(searchObj);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const JewelModel = getModelForClass(Equip);
|
||||||
|
|
||||||
|
export interface JewelType extends Pick<DocumentType<Equip>, keyof Equip> {
|
||||||
|
id: number;
|
||||||
|
};
|
||||||
|
export type jewelUpdate = Partial<JewelType>; // 将所有字段变成可选项
|
||||||
@@ -24,6 +24,12 @@ export interface SearchEquipParam {
|
|||||||
id?: number;
|
id?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface SearchJewelParam {
|
||||||
|
roleId?: string;
|
||||||
|
roleName?: string;
|
||||||
|
id?: number;
|
||||||
|
}
|
||||||
|
|
||||||
export interface SearchItemParam {
|
export interface SearchItemParam {
|
||||||
roleId?: string;
|
roleId?: string;
|
||||||
roleName?: string;
|
roleName?: string;
|
||||||
|
|||||||
+113
-113
@@ -631,54 +631,54 @@ export function calEquipPutOnOffIncAttr(hero: HeroType, seids: Array<number>, ad
|
|||||||
* 计算一个武将身上的所有被动seid
|
* 计算一个武将身上的所有被动seid
|
||||||
* @param {HeroType} hero 武将,equip需要populate
|
* @param {HeroType} hero 武将,equip需要populate
|
||||||
*/
|
*/
|
||||||
export function calEquipSeids(hero: HeroType) {
|
export function calEquipSeids(_hero: HeroType) {
|
||||||
let seids: number[] = [];
|
let seids: number[] = [];
|
||||||
// 计算被动技能
|
// // 计算被动技能
|
||||||
let { ePlace } = hero;
|
// let { ePlace } = hero;
|
||||||
let suits = new Map<number, Map<number, { dic: DicSuit, count: number }>>(); // suitType => starLevel => DicSuit
|
// let suits = new Map<number, Map<number, { dic: DicSuit, count: number }>>(); // suitType => starLevel => DicSuit
|
||||||
|
|
||||||
for (let { equip } of ePlace) {
|
// for (let { equip } of ePlace) {
|
||||||
if (equip) {
|
// if (equip) {
|
||||||
let e = <EquipType>equip;
|
// let e = <EquipType>equip;
|
||||||
if (!!e.randSe) {
|
// if (!!e.randSe) {
|
||||||
for (let { seid, rand } of e.randSe) {
|
// for (let { seid, rand } of e.randSe) {
|
||||||
seids.push(seid, rand);
|
// seids.push(seid, rand);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (e.suitId > 0) {
|
// if (e.suitId > 0) {
|
||||||
let { suitType, starLevel } = gameData.suit.get(e.suitId);
|
// let { suitType, starLevel } = gameData.suit.get(e.suitId);
|
||||||
if (!suits.has(suitType)) {
|
// if (!suits.has(suitType)) {
|
||||||
suits.set(suitType, new Map<number, { dic: DicSuit, count: number }>());
|
// suits.set(suitType, new Map<number, { dic: DicSuit, count: number }>());
|
||||||
}
|
// }
|
||||||
for(let lv = 1; lv <= starLevel; lv++) {
|
// for(let lv = 1; lv <= starLevel; lv++) {
|
||||||
let dicSuit = getDicSuitByTypeAndLv(suitType, lv); // 计算同type的低阶套装
|
// let dicSuit = getDicSuitByTypeAndLv(suitType, lv); // 计算同type的低阶套装
|
||||||
if(dicSuit) {
|
// if(dicSuit) {
|
||||||
if(!suits.get(suitType).has(lv)) {
|
// if(!suits.get(suitType).has(lv)) {
|
||||||
suits.get(suitType).set(lv, { dic: dicSuit, count: 0 });
|
// suits.get(suitType).set(lv, { dic: dicSuit, count: 0 });
|
||||||
}
|
// }
|
||||||
suits.get(suitType).get(lv).count ++;
|
// suits.get(suitType).get(lv).count ++;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
for(let [ _suitType, map ] of suits) {
|
// for(let [ _suitType, map ] of suits) {
|
||||||
let effectSeid = new Map<number, { starLevel: number, seid: number }>(); // count => { starLevel, seid }
|
// let effectSeid = new Map<number, { starLevel: number, seid: number }>(); // count => { starLevel, seid }
|
||||||
for(let [ starLevel, { dic: { effect }, count } ] of map) {
|
// for(let [ starLevel, { dic: { effect }, count } ] of map) {
|
||||||
for(let { count: effectCount, seid} of effect) {
|
// for(let { count: effectCount, seid} of effect) {
|
||||||
if(count >= effectCount ) { // 生效
|
// if(count >= effectCount ) { // 生效
|
||||||
if(!effectSeid.has(effectCount) || effectSeid.get(effectCount).starLevel < starLevel) { // 没有同数量效果
|
// if(!effectSeid.has(effectCount) || effectSeid.get(effectCount).starLevel < starLevel) { // 没有同数量效果
|
||||||
effectSeid.set(effectCount, { starLevel, seid });
|
// effectSeid.set(effectCount, { starLevel, seid });
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
for(let [_count, { seid }] of effectSeid) {
|
// for(let [_count, { seid }] of effectSeid) {
|
||||||
seids.push(seid, 0);
|
// seids.push(seid, 0);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return seids;
|
return seids;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -687,70 +687,70 @@ export function calEquipSeids(hero: HeroType) {
|
|||||||
* @param {HeroType} hero 装备更新过的武将
|
* @param {HeroType} hero 装备更新过的武将
|
||||||
*/
|
*/
|
||||||
export function calHeroEquipIncAttr(hero: HeroType) {
|
export function calHeroEquipIncAttr(hero: HeroType) {
|
||||||
let { ePlace, attr: heroAttrs } = hero;
|
let { ePlace:_, attr: heroAttrs } = hero;
|
||||||
|
|
||||||
let setMap = new Map<number, number>();
|
// let setMap = new Map<number, number>();
|
||||||
for (let { equip, lv, refineLv } of ePlace) {
|
// for (let { equip, lv, refineLv } of ePlace) {
|
||||||
if (equip) {
|
// if (equip) {
|
||||||
let e = <EquipType>equip;
|
// let e = <EquipType>equip;
|
||||||
let dicGoods = gameData.goods.get(e.id);
|
// let dicGoods = gameData.goods.get(e.id);
|
||||||
let { goodsAbility, goodsAbilityUp } = dicGoods;
|
// let { goodsAbility, goodsAbilityUp } = dicGoods;
|
||||||
let dicRefine = gameData.refine.get(refineLv);
|
// let dicRefine = gameData.refine.get(refineLv);
|
||||||
|
|
||||||
let jewel = new Map<number, number>();
|
// let jewel = new Map<number, number>();
|
||||||
for (let { jewel: jewelId } of e.holes) {
|
// for (let { jewel: jewelId } of e.holes) {
|
||||||
if (jewelId > 0) {
|
// if (jewelId > 0) {
|
||||||
let g = gameData.goods.get(jewelId);
|
// let g = gameData.goods.get(jewelId);
|
||||||
if (g) {
|
// if (g) {
|
||||||
let jGoods = g.goodsAbility;
|
// let jGoods = g.goodsAbility;
|
||||||
jGoods.forEach((value, key) => {
|
// jGoods.forEach((value, key) => {
|
||||||
if (!jewel.has(key)) {
|
// if (!jewel.has(key)) {
|
||||||
jewel.set(key, value);
|
// jewel.set(key, value);
|
||||||
} else {
|
// } else {
|
||||||
jewel.set(key, jewel.get(key) + value);
|
// jewel.set(key, jewel.get(key) + value);
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
let randMainMap = new Map<number, number>();
|
// let randMainMap = new Map<number, number>();
|
||||||
for(let {id, rand} of (e.randMain||[])) {
|
// for(let {id, rand} of (e.randMain||[])) {
|
||||||
randMainMap.set(id, rand);
|
// randMainMap.set(id, rand);
|
||||||
}
|
// }
|
||||||
for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
|
// for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
|
||||||
// console.log('***', i);
|
// // console.log('***', i);
|
||||||
let value1 = goodsAbility.get(i) || 0 * (HERO_CE_RATIO + e.randRange);
|
// let value1 = goodsAbility.get(i) || 0 * (HERO_CE_RATIO + e.randRange);
|
||||||
// console.log('基础值', value1);
|
// // console.log('基础值', value1);
|
||||||
let valueup = goodsAbilityUp.get(i) || 0;
|
// let valueup = goodsAbilityUp.get(i) || 0;
|
||||||
// console.log('成长', lv, valueup);
|
// // console.log('成长', lv, valueup);
|
||||||
let valueRefine = dicRefine ? dicRefine.upPercent : 0;
|
// let valueRefine = dicRefine ? dicRefine.upPercent : 0;
|
||||||
// console.log('精炼', dicRefine?dicRefine.upPercent:0 );
|
// // console.log('精炼', dicRefine?dicRefine.upPercent:0 );
|
||||||
let valueJewel = jewel.get(i) || 0;
|
// let valueJewel = jewel.get(i) || 0;
|
||||||
// console.log('宝石', valueJewel);
|
// // console.log('宝石', valueJewel);
|
||||||
let valueGrade = randMainMap.get(i)||0;
|
// let valueGrade = randMainMap.get(i)||0;
|
||||||
// console.log('品相', valueGrade)
|
// // console.log('品相', valueGrade)
|
||||||
let attr = (value1 + lv * valueup) * valueGrade * (HERO_CE_RATIO + valueRefine) + valueJewel * HERO_CE_RATIO * HERO_CE_RATIO;
|
// let attr = (value1 + lv * valueup) * valueGrade * (HERO_CE_RATIO + valueRefine) + valueJewel * HERO_CE_RATIO * HERO_CE_RATIO;
|
||||||
|
|
||||||
if(attr >= 0) {
|
// if(attr >= 0) {
|
||||||
// console.log('装备战力:', i, attr);
|
// // console.log('装备战力:', i, attr);
|
||||||
if(setMap.has(i)) {
|
// if(setMap.has(i)) {
|
||||||
setMap.set(i, setMap.get(i) + Math.floor(attr / HERO_CE_RATIO));
|
// setMap.set(i, setMap.get(i) + Math.floor(attr / HERO_CE_RATIO));
|
||||||
} else {
|
// } else {
|
||||||
setMap.set(i, Math.floor(attr / HERO_CE_RATIO));
|
// setMap.set(i, Math.floor(attr / HERO_CE_RATIO));
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
// }
|
||||||
|
|
||||||
for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
|
// for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
|
||||||
let attr = setMap.get(i)||0;
|
// let attr = setMap.get(i)||0;
|
||||||
updateHeroAttr(heroAttrs, i, { set: { equipUp: attr } })
|
// updateHeroAttr(heroAttrs, i, { set: { equipUp: attr } })
|
||||||
}
|
// }
|
||||||
|
|
||||||
hero.attr = heroAttrs;
|
// hero.attr = heroAttrs;
|
||||||
return heroAttrs;
|
return heroAttrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -762,22 +762,22 @@ export function calHeroEquipIncAttr(hero: HeroType) {
|
|||||||
* @param {number[]} addSeidList 用于更新被动
|
* @param {number[]} addSeidList 用于更新被动
|
||||||
* @param {number[]} removeSeidList 用于更新被动
|
* @param {number[]} removeSeidList 用于更新被动
|
||||||
*/
|
*/
|
||||||
export function calRestrengthenIncAttr(hero: HeroType, ePaceId: number, seids: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
|
export function calRestrengthenIncAttr(hero: HeroType, _ePaceId: number, _seids: Array<number>, _addSeidList: Array<number>, _removeSeidList: Array<number>) {
|
||||||
|
|
||||||
let { attr: heroAttrs } = hero;
|
let { attr: heroAttrs } = hero;
|
||||||
let { ePlace } = hero;
|
// let { ePlace } = hero;
|
||||||
|
|
||||||
let curPlace = ePlace.find(cur => cur.id == ePaceId);
|
// let curPlace = ePlace.find(cur => cur.id == ePaceId);
|
||||||
if (curPlace && curPlace.equip) {
|
// if (curPlace && curPlace.equip) {
|
||||||
let e = <EquipType>curPlace.equip;
|
// let e = <EquipType>curPlace.equip;
|
||||||
for (let { seid, rand } of e.randSe) {
|
// for (let { seid, rand } of e.randSe) {
|
||||||
addSeidList.push(seid, rand);
|
// addSeidList.push(seid, rand);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
for (let seid of seids) {
|
// for (let seid of seids) {
|
||||||
removeSeidList.push(seid)
|
// removeSeidList.push(seid)
|
||||||
}
|
// }
|
||||||
|
|
||||||
return heroAttrs
|
return heroAttrs
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,10 +130,10 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero:
|
|||||||
pushMessage = await checkTask(roleId, taskType, 1, true, { favourLv: hero.favourLv, oldLv: args[0] })
|
pushMessage = await checkTask(roleId, taskType, 1, true, { favourLv: hero.favourLv, oldLv: args[0] })
|
||||||
}
|
}
|
||||||
else if (taskType == TASK_TYPE.EQUIP_BY_HERO) {
|
else if (taskType == TASK_TYPE.EQUIP_BY_HERO) {
|
||||||
// arg[0] 1:穿上 -1:脱下
|
// // arg[0] 1:穿上 -1:脱下
|
||||||
let { ePlace } = hero;
|
// let { ePlace } = hero;
|
||||||
let count = ePlace.filter(cur => cur.equip).length;
|
// let count = ePlace.filter(cur => cur.equip).length;
|
||||||
pushMessage = await checkTask(roleId, taskType, args[0], true, { count, isPutOn: args[0], oldCount: args[1] });
|
// pushMessage = await checkTask(roleId, taskType, args[0], true, { count, isPutOn: args[0], oldCount: args[1] });
|
||||||
}
|
}
|
||||||
else if (taskType == TASK_TYPE.EQUIP_STRENGTHEN) {
|
else if (taskType == TASK_TYPE.EQUIP_STRENGTHEN) {
|
||||||
// args: 依次为原先的装备的强化等级
|
// args: 依次为原先的装备的强化等级
|
||||||
|
|||||||
Reference in New Issue
Block a user