装备:洗练预览
This commit is contained in:
@@ -11,7 +11,7 @@ import { calPlayerCeAndSave } from "../../../services/playerCeService";
|
|||||||
import { getGoodById, gameData } from "../../../pubUtils/data";
|
import { getGoodById, gameData } from "../../../pubUtils/data";
|
||||||
import { EQUIP } from "../../../pubUtils/dicParam";
|
import { EQUIP } from "../../../pubUtils/dicParam";
|
||||||
import { ITID, SPEICAL_ITEM, QUALITY_TYPE, equipTypeToSortAttr, IT_TYPE, QUENCH_TYPE } from "../../../consts";
|
import { ITID, SPEICAL_ITEM, QUALITY_TYPE, equipTypeToSortAttr, IT_TYPE, QUENCH_TYPE } from "../../../consts";
|
||||||
import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerCe, checkEquipCanPut, quenchOnce, checkQuenchMaxByQualityAndGrade } from "../../../services/equipService";
|
import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerCe, checkEquipCanPut, quenchOnce, checkQuenchMaxByQualityAndGrade, getRandSeResult } from "../../../services/equipService";
|
||||||
|
|
||||||
import { findIndex } from 'underscore';
|
import { findIndex } from 'underscore';
|
||||||
import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService";
|
import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService";
|
||||||
@@ -384,6 +384,26 @@ export class EquipHandler {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 装备洗炼预览
|
||||||
|
public async previewStrengthen(msg: { eid: number }, session: BackendSession) {
|
||||||
|
|
||||||
|
let { eid } = msg;
|
||||||
|
let equip = await EquipModel.findbySeqId(eid);
|
||||||
|
if (!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||||
|
|
||||||
|
let { id, randSe } = equip;
|
||||||
|
if (!randSe || randSe.length <= 0) {
|
||||||
|
return resResult(STATUS.ROLE_EQUIP_HAVE_NO_RANDSE);
|
||||||
|
}
|
||||||
|
let previewRandSe = getRandSeResult(id, randSe);
|
||||||
|
if(!previewRandSe) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
|
|
||||||
|
await EquipModel.updateEquipInfo(eid, { previewRandSe });
|
||||||
|
|
||||||
|
return resResult(STATUS.SUCCESS, { randSe: previewRandSe });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// 装备洗炼
|
// 装备洗炼
|
||||||
public async reStrengthen(msg: { eid: number }, session: BackendSession) {
|
public async reStrengthen(msg: { eid: number }, session: BackendSession) {
|
||||||
let roleId: string = session.get('roleId');
|
let roleId: string = session.get('roleId');
|
||||||
@@ -392,39 +412,27 @@ export class EquipHandler {
|
|||||||
let funcs: number[] = session.get('funcs');
|
let funcs: number[] = session.get('funcs');
|
||||||
|
|
||||||
let { eid } = msg;
|
let { eid } = msg;
|
||||||
let equip = await EquipModel.findbySeqId(eid);
|
let equip = await EquipModel.findbySeqId(eid, '+previewRandSe');
|
||||||
if (!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
if (!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||||
|
|
||||||
let { id, randSe, hid, ePlaceId } = equip;
|
let { id, randSe, hid, ePlaceId, previewRandSe } = equip;
|
||||||
if (!randSe || randSe.length <= 0) {
|
if (!randSe || randSe.length <= 0) {
|
||||||
return resResult(STATUS.ROLE_EQUIP_HAVE_NO_RANDSE);
|
return resResult(STATUS.ROLE_EQUIP_HAVE_NO_RANDSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
let dicGoods = gameData.goods.get(id);
|
if(previewRandSe) { // 预览过
|
||||||
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
randSe = previewRandSe;
|
||||||
|
} else { // 没有预览数值,直接洗练
|
||||||
let { randomEffect } = dicGoods;
|
let randResult = getRandSeResult(id, randSe);
|
||||||
let chosen = randSe.map(cur => cur.seid); // 上一轮随机出来的
|
if(!randResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
let randomResult: number[] = getRandEelm(randomEffect.filter(cur => !chosen.includes(cur)), randSe.length);
|
randSe = randResult;
|
||||||
|
|
||||||
let lockNum = 0;
|
|
||||||
let removeSeidList = new Array<number>(); // 原装备上的seid [seid, rand, ...]
|
|
||||||
|
|
||||||
for (let i = 0; i < randSe.length; i++) {
|
|
||||||
removeSeidList.push(randSe[i].seid, randSe[i].rand);
|
|
||||||
|
|
||||||
if (!randSe[i].locked) {
|
|
||||||
let random = gameData.randomEffectPool.get(randomResult[i]);
|
|
||||||
if (!random) break;
|
|
||||||
let rand = 0;
|
|
||||||
if (random.id > 0) rand = getRandValueByMinMax(random.Min, random.Max, 0);
|
|
||||||
randSe[i].seid = random.id;
|
|
||||||
randSe[i].rand = rand;
|
|
||||||
} else {
|
|
||||||
lockNum++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let { lockNum, removeSeidList } = randSe.reduce((pre, cur) => {
|
||||||
|
return { lockNum: cur.locked?pre.lockNum+1: pre.lockNum, removeSeidList: [...pre.removeSeidList, cur.seid] }
|
||||||
|
}, { lockNum: 0, removeSeidList: new Array<number>() });
|
||||||
|
console.log('##########', lockNum, removeSeidList);
|
||||||
|
|
||||||
if (lockNum >= randSe.length) {
|
if (lockNum >= randSe.length) {
|
||||||
return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN);
|
return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN);
|
||||||
}
|
}
|
||||||
@@ -444,7 +452,7 @@ export class EquipHandler {
|
|||||||
let result = await handleCost(roleId, sid, consumes);
|
let result = await handleCost(roleId, sid, consumes);
|
||||||
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
let equipResult = await EquipModel.updateEquipInfo(eid, { randSe })
|
let equipResult = await EquipModel.updateEquipInfo(eid, { randSe, previewRandSe: [] })
|
||||||
let curEquip = {
|
let curEquip = {
|
||||||
seqId: equipResult.seqId,
|
seqId: equipResult.seqId,
|
||||||
id: equipResult.id,
|
id: equipResult.id,
|
||||||
@@ -452,15 +460,16 @@ export class EquipHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 更新战力
|
// 更新战力
|
||||||
const hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
|
if(hid > 0) {
|
||||||
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.RESTRENGTHEN, sid, roleId, hero, {}, [ePlaceId, ...removeSeidList]);
|
const hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
|
||||||
|
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.RESTRENGTHEN, sid, roleId, hero, {}, [ePlaceId, ...removeSeidList]);
|
||||||
|
}
|
||||||
|
|
||||||
await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_RESTRENGTHEN, 1, true, {});
|
await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_RESTRENGTHEN, 1, true, {});
|
||||||
return resResult(STATUS.SUCCESS, { curEquip });
|
return resResult(STATUS.SUCCESS, { curEquip });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 淬火
|
// 淬火
|
||||||
public async quench(msg: { eid: number, type: QUENCH_TYPE }, session: BackendSession) {
|
public async quench(msg: { eid: number, type: QUENCH_TYPE }, session: BackendSession) {
|
||||||
let roleId: string = session.get('roleId');
|
let roleId: string = session.get('roleId');
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { mergeSameGoods, getRandEelm } from '../pubUtils/util';
|
import { mergeSameGoods, getRandEelm, getRandValueByMinMax } from '../pubUtils/util';
|
||||||
import { EquipModel, RandMain } from "../db/Equip";
|
import { EquipModel, RandMain, RandSe } from "../db/Equip";
|
||||||
import { HeroModel, HeroType } from "../db/Hero";
|
import { HeroModel, HeroType } from "../db/Hero";
|
||||||
import { getGoodById, gameData, getJewelById, getQuenchGradeByValue, getQuenchConsume, getQuenchByQualityAndGrade } from "../pubUtils/data";
|
import { getGoodById, gameData, getJewelById, getQuenchGradeByValue, getQuenchConsume, getQuenchByQualityAndGrade } from "../pubUtils/data";
|
||||||
import { calPlayerCeAndSave } from "./playerCeService";
|
import { calPlayerCeAndSave } from "./playerCeService";
|
||||||
@@ -220,3 +220,24 @@ export function checkQuenchMaxByQualityAndGrade(quality: number, grade: number,
|
|||||||
}
|
}
|
||||||
return isMax;
|
return isMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getRandSeResult(id: number, randSe: RandSe[]) {
|
||||||
|
let dicGoods = gameData.goods.get(id);
|
||||||
|
if (!dicGoods) return false;
|
||||||
|
|
||||||
|
let { randomEffect } = dicGoods; // 配置的可随机seid
|
||||||
|
let chosen = randSe.map(cur => cur.seid); // 上一轮随机出来的
|
||||||
|
let randomResult: number[] = getRandEelm(randomEffect.filter(cur => !chosen.includes(cur)), randSe.length); // 随机出的结果
|
||||||
|
|
||||||
|
for (let i = 0; i < randSe.length; i++) {
|
||||||
|
if (!randSe[i].locked) {
|
||||||
|
let random = gameData.randomEffectPool.get(randomResult[i]);
|
||||||
|
if (!random) break;
|
||||||
|
let rand = 0;
|
||||||
|
if (random.id > 0) rand = getRandValueByMinMax(random.Min, random.Max, 0);
|
||||||
|
randSe[i].seid = random.id;
|
||||||
|
randSe[i].rand = rand;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return randSe
|
||||||
|
}
|
||||||
+5
-2
@@ -69,14 +69,17 @@ export default class Equip extends BaseModel {
|
|||||||
randSe: RandSe[]; // 强化随机属性
|
randSe: RandSe[]; // 强化随机属性
|
||||||
@prop({ required: true, type: Holes, default: [], _id: false })
|
@prop({ required: true, type: Holes, default: [], _id: false })
|
||||||
holes: Holes[];
|
holes: Holes[];
|
||||||
|
@prop({ required: false, type: RandSe, default: [], _id: false, select: false })
|
||||||
|
previewRandSe: RandSe[]; // 强化随机属性预览
|
||||||
|
|
||||||
|
|
||||||
public static async findbyRole(roleId: string, lean = true) {
|
public static async findbyRole(roleId: string, lean = true) {
|
||||||
const equips: EquipType[] = await EquipModel.find({ roleId }).lean(lean);
|
const equips: EquipType[] = await EquipModel.find({ roleId }).lean(lean);
|
||||||
return equips;
|
return equips;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async findbySeqId(seqId: number, lean = true) {
|
public static async findbySeqId(seqId: number, select?: string ) {
|
||||||
const equip: EquipType = await EquipModel.findOne({ seqId }).lean(lean);
|
const equip: EquipType = await EquipModel.findOne({ seqId }).select(select).lean();
|
||||||
return equip;
|
return equip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user