diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index bf5deffe4..d9a8a3ee5 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -13,7 +13,7 @@ import { EQUIP } from "../../../pubUtils/dicParam"; import { ITID, QUALITY_TYPE, equipTypeToSortAttr, IT_TYPE, QUENCH_TYPE, REFINE_TYPE } from "../../../consts"; import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerCe, checkEquipCanPut, quenchOnce, checkQuenchMaxByQualityAndGrade, getRandSeResult, refineOnce, checkRefineReachNextLv } from "../../../services/equipService"; -import { findIndex } from 'underscore'; +import { findIndex, pick } from 'underscore'; import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService"; import { checkTaskWithHero, checkTaskWithEquip, checkTask, checkTaskWithArgs, checkTaskConditionEquipSuitJewelStage, checkActivityTask } from "../../../services/taskService"; import { Attribute } from "../../../domain/roleField/attribute"; @@ -365,20 +365,50 @@ export class EquipHandler { // 装备洗炼预览 public async previewStrengthen(msg: { eid: number }, session: BackendSession) { + let roleId: string = session.get('roleId'); + // let roleName: string = session.get('roleName'); + let sid: string = session.get('sid'); + 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 { id, randSe, previewRandSe } = equip; + if(previewRandSe.length <= 0) { + + 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); + + let lockNum = randSe.reduce((pre, cur) => { + return cur.locked? pre + 1: pre; + }, 0); + + if (lockNum >= randSe.length) { + return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN); + } + // 消耗 + let consumes: Array<{ id: number, count: number }> = []; + if (lockNum == 0) { + consumes = parseGoodStr(EQUIP.EQUIP_ONE_REFORGED); + } else if (lockNum == 1) { + consumes = parseGoodStr(EQUIP.EQUIP_TWO_REFORGED); + } else if (lockNum == 2) { + consumes = parseGoodStr(EQUIP.EQUIP_THREE_REFORGED); + } else { + consumes = parseGoodStr(EQUIP.EQUIP_FOUR_REFORGED); + } + + let result = await handleCost(roleId, sid, consumes); + if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); + + equip = await EquipModel.updateEquipInfo(eid, { previewRandSe }); } - 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 }); + return resResult(STATUS.SUCCESS, { curEquip: pick(equip, ['seqId', 'id', 'randSe', 'previewRandSe']) }); } @@ -390,51 +420,23 @@ export class EquipHandler { let funcs: number[] = session.get('funcs'); let { eid } = msg; - let equip = await EquipModel.findbySeqId(eid, '+previewRandSe'); + let equip = await EquipModel.findbySeqId(eid); if (!equip) return resResult(STATUS.EQUIP_NOT_FIND); - let { id, randSe, hid, ePlaceId, previewRandSe } = equip; + let { randSe, hid, ePlaceId, previewRandSe } = equip; if (!randSe || randSe.length <= 0) { return resResult(STATUS.ROLE_EQUIP_HAVE_NO_RANDSE); } - if(previewRandSe) { // 预览过 - randSe = previewRandSe; - } else { // 没有预览数值,直接洗练 - let randResult = getRandSeResult(id, randSe); - if(!randResult) return resResult(STATUS.DIC_DATA_NOT_FOUND); - randSe = randResult; + if(!previewRandSe) { // 没预览过 + return resResult(STATUS.EQUIP_RESTRENGTHEN_NOT_PREVIEW); } - 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() }); + let removeSeidList = randSe.reduce((pre, cur) => { + return [...pre, cur.seid]; + }, []); - if (lockNum >= randSe.length) { - return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN); - } - - // 消耗 - let consumes: Array<{ id: number, count: number }> = []; - if (lockNum == 0) { - consumes = parseGoodStr(EQUIP.EQUIP_ONE_REFORGED); - } else if (lockNum == 1) { - consumes = parseGoodStr(EQUIP.EQUIP_TWO_REFORGED); - } else if (lockNum == 2) { - consumes = parseGoodStr(EQUIP.EQUIP_THREE_REFORGED); - } else { - consumes = parseGoodStr(EQUIP.EQUIP_FOUR_REFORGED); - } - - let result = await handleCost(roleId, sid, consumes); - if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); - - let equipResult = await EquipModel.updateEquipInfo(eid, { randSe, previewRandSe: [] }) - let curEquip = { - seqId: equipResult.seqId, - id: equipResult.id, - randSe: equipResult.randSe - } + let equipResult = await EquipModel.updateEquipInfo(eid, { randSe: previewRandSe, previewRandSe: [] }) // 更新战力 if(hid > 0) { @@ -443,7 +445,30 @@ export class EquipHandler { } await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_RESTRENGTHEN, 1, true, {}); - return resResult(STATUS.SUCCESS, { curEquip }); + + return resResult(STATUS.SUCCESS, { curEquip: pick(equipResult, ['seqId', 'id', 'randSe', 'previewRandSe']) }); + + } + + // 放弃这条洗练 + public async giveupStrengthen(msg: { eid: number }, session: BackendSession) { + + let { eid } = msg; + let equip = await EquipModel.findbySeqId(eid); + if (!equip) return resResult(STATUS.EQUIP_NOT_FIND); + + let { randSe, previewRandSe } = equip; + if (!randSe || randSe.length <= 0) { + return resResult(STATUS.ROLE_EQUIP_HAVE_NO_RANDSE); + } + + if(!previewRandSe) { // 没预览过 + return resResult(STATUS.EQUIP_RESTRENGTHEN_NOT_PREVIEW); + } + + let equipResult = await EquipModel.updateEquipInfo(eid, { previewRandSe: [] }) + + return resResult(STATUS.SUCCESS, { curEquip: pick(equipResult, ['seqId', 'id', 'randSe', 'previewRandSe']) }); } diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 1df83c274..9bc322ef6 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -278,7 +278,8 @@ export const STATUS = { EQUIP_LEVEL_LIMIT: { code: 30510, simStr: '装备穿戴等级限制' }, EQUIP_NOT_MATCH_JEWEL: { code: 30511, simStr: '装备不能镶嵌该宝石' }, EQUIP_QUENCH_ERR: { code: 30512, simStr: '该装备不能再淬火或材料不足' }, - EQUIP_REFINE_ERR: { code: 30512, simStr: '该装备等级不足或材料不足' }, + EQUIP_REFINE_ERR: { code: 30513, simStr: '该装备等级不足或材料不足' }, + EQUIP_RESTRENGTHEN_NOT_PREVIEW: { code: 30514, simStr: '该装备未预览洗练值' }, //全局养成30600-30699 ROLE_REACH_MAX_TITLE_LEVEL: { code: 30600, simStr: '玩家已达到最高的爵位' }, ROLE_TERAPH_NOT_STRENGTHEN: { code: 30601, simStr: '玩家神像不能强化' }, diff --git a/shared/db/Equip.ts b/shared/db/Equip.ts index 2e7e7b395..1c2fb026c 100644 --- a/shared/db/Equip.ts +++ b/shared/db/Equip.ts @@ -69,7 +69,7 @@ export default class Equip extends BaseModel { randSe: RandSe[]; // 强化随机属性 @prop({ required: true, type: Holes, default: [], _id: false }) holes: Holes[]; - @prop({ required: false, type: RandSe, default: [], _id: false, select: false }) + @prop({ required: false, type: RandSe, default: [], _id: false }) previewRandSe: RandSe[]; // 强化随机属性预览