装备:洗练预览

This commit is contained in:
luying
2021-07-29 15:08:48 +08:00
parent 972abb7d07
commit ec88c94c8d
3 changed files with 67 additions and 34 deletions

View File

@@ -11,7 +11,7 @@ import { calPlayerCeAndSave } from "../../../services/playerCeService";
import { getGoodById, gameData } from "../../../pubUtils/data";
import { EQUIP } from "../../../pubUtils/dicParam";
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 { 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) {
let roleId: string = session.get('roleId');
@@ -392,39 +412,27 @@ export class EquipHandler {
let funcs: number[] = session.get('funcs');
let { eid } = msg;
let equip = await EquipModel.findbySeqId(eid);
let equip = await EquipModel.findbySeqId(eid, '+previewRandSe');
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) {
return resResult(STATUS.ROLE_EQUIP_HAVE_NO_RANDSE);
}
let dicGoods = gameData.goods.get(id);
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let { randomEffect } = dicGoods;
let chosen = randSe.map(cur => cur.seid); // 上一轮随机出来的
let randomResult: number[] = getRandEelm(randomEffect.filter(cur => !chosen.includes(cur)), randSe.length);
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++;
}
if(previewRandSe) { // 预览过
randSe = previewRandSe;
} else { // 没有预览数值,直接洗练
let randResult = getRandSeResult(id, randSe);
if(!randResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
randSe = randResult;
}
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) {
return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN);
}
@@ -444,7 +452,7 @@ export class EquipHandler {
let result = await handleCost(roleId, sid, consumes);
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 = {
seqId: equipResult.seqId,
id: equipResult.id,
@@ -452,15 +460,16 @@ export class EquipHandler {
}
// 更新战力
const hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.RESTRENGTHEN, sid, roleId, hero, {}, [ePlaceId, ...removeSeidList]);
if(hid > 0) {
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, {});
return resResult(STATUS.SUCCESS, { curEquip });
}
// 淬火
public async quench(msg: { eid: number, type: QUENCH_TYPE }, session: BackendSession) {
let roleId: string = session.get('roleId');