装备:强化
This commit is contained in:
@@ -11,7 +11,7 @@ import { calPlayerCeAndSave } from "../../../services/playerCeService";
|
||||
import { getGoodById, gameData, getEquipByJobClassAndEPlace } from "../../../pubUtils/data";
|
||||
import { BAG, EQUIP } from "../../../pubUtils/dicParam";
|
||||
import { ITID, QUALITY_TYPE, equipTypeToSortAttr, IT_TYPE, QUENCH_TYPE, REFINE_TYPE } from "../../../consts";
|
||||
import { checkMaterialEnough, checkEquipCanPut, quenchOnce, checkQuenchMaxByQualityAndGrade, getRandSeResult, refineOnce, checkRefineReachNextLv, calEquipCe } from "../../../services/equipService";
|
||||
import { checkMaterialEnough, checkEquipCanPut, quenchOnce, checkQuenchMaxByQualityAndGrade, getRandSeResult, refineOnce, checkRefineReachNextLv, calEquipCe, updateEplace, updateEplaces } from "../../../services/equipService";
|
||||
|
||||
import { findIndex, isNumber, pick } from 'underscore';
|
||||
import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService";
|
||||
@@ -61,178 +61,101 @@ export class EquipHandler {
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// // 装备栏强化
|
||||
// public async strengthen(msg: { hid: number, ePlaceId: number, type: number }, session: BackendSession) {
|
||||
// let roleId: string = session.get('roleId');
|
||||
// // let roleName: string = session.get('roleName');
|
||||
// const serverId = session.get('serverId');
|
||||
// let sid: string = session.get('sid');
|
||||
// 装备栏强化
|
||||
public async strengthen(msg: { hid: number, eplaceId: number, isOneClick: boolean }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
// let roleName: string = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
let sid: string = session.get('sid');
|
||||
|
||||
|
||||
// let { hid, ePlaceId, type } = msg;
|
||||
// let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
|
||||
// if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
let { hid, eplaceId, isOneClick } = msg;
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
let curEquip = hero.ePlace?.find(cur => cur.id == eplaceId);
|
||||
if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||
if(curEquip.lv >= hero.lv) return resResult(STATUS.ROLE_EQUIP_REACH_MAX);
|
||||
let fromLv = curEquip.lv;
|
||||
let toLv = isOneClick? hero.lv: fromLv + 1;
|
||||
let newLv = fromLv;
|
||||
|
||||
let check = new CheckMeterial(roleId);
|
||||
for (let lv = fromLv + 1; lv <= toLv; lv++) {
|
||||
let dicCost = gameData.equipStrengthenCost.get(lv);
|
||||
let isEnough = await check.decrease(dicCost.consume);
|
||||
if(!isEnough) break; // 消耗不足
|
||||
newLv = lv;
|
||||
}
|
||||
if(newLv == fromLv) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
let consumes = check.getConsume();
|
||||
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_STRENTHEN);
|
||||
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
|
||||
let { newEplace, updatedEplace } = updateEplace(hero.ePlace, eplaceId, { lv: newLv });
|
||||
|
||||
hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, { ePlace: newEplace }, [eplaceId]);
|
||||
|
||||
// TODO 任务
|
||||
|
||||
const curHero = {
|
||||
hid,
|
||||
ePlace: updatedEplace
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { curHero });
|
||||
|
||||
}
|
||||
|
||||
|
||||
// let changeData = [];//变化的等级数据
|
||||
// let { ePlace, lv: playerLv } = hero; // 装备栏
|
||||
// let oldLvs = ePlace.map(cur => cur.lv);
|
||||
// let strengthenArr = new Array<EPlace>();
|
||||
// if (type == EQUIP_STRENGTHEN_TYPE.SINGLE || type == EQUIP_STRENGTHEN_TYPE.SINGLE_QUICK) { // 单装备强化
|
||||
// strengthenArr = ePlace.filter(cur => cur.id == ePlaceId && cur.equip);
|
||||
// } else if (type == EQUIP_STRENGTHEN_TYPE.ALL_QUICK) { // 全六件(装备中)的强化
|
||||
// strengthenArr = ePlace.filter(cur => cur.equip);
|
||||
// }
|
||||
// if (strengthenArr.length <= 0) {
|
||||
// return resResult(STATUS.ROLE_EQUIP_PLACE_NOT_ENOUGH);
|
||||
// }
|
||||
// let minLv = strengthenArr[0].lv; // 从最低装备的等级开始
|
||||
// for (let { lv, id } of strengthenArr) {
|
||||
// changeData.push({
|
||||
// hid: hid,
|
||||
// id: id,
|
||||
// oldLv: lv,
|
||||
// lv: lv,
|
||||
// })
|
||||
// if (lv < minLv) minLv = lv;
|
||||
// }
|
||||
// 装备栏一键强化至相应等级
|
||||
public async strengthenAll(msg: { hid: number, lv: number }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
// let roleName: string = session.get('roleName');
|
||||
let sid: string = session.get('sid');
|
||||
|
||||
// let { coin } = await Role.findByRoleId(roleId);
|
||||
// let maxLv = type == EQUIP_STRENGTHEN_TYPE.SINGLE ? minLv + 1 : playerLv;
|
||||
// if (maxLv > playerLv) maxLv = playerLv;
|
||||
// if (minLv >= maxLv) {
|
||||
// return resResult(STATUS.ROLE_EQUIP_REACH_MAX);
|
||||
// }
|
||||
// let costCoin = 0; // 消耗铜币
|
||||
// let flag = false; // 铜币不足
|
||||
// for (let i = minLv; i < maxLv; i++) {
|
||||
// for (let s of strengthenArr) {
|
||||
// if (s.lv == i) {
|
||||
// let cost = gameData.strengthenCost.get(i + 1);
|
||||
// if (!cost) { flag = true; break; }
|
||||
// if (coin < costCoin + cost) { flag = true; break; }
|
||||
// costCoin += cost;
|
||||
// s.lv++;
|
||||
// {//记录等级变化
|
||||
// let index = changeData.findIndex(obj => { return obj && obj.id == s.id })
|
||||
// if (index != -1) {
|
||||
// changeData[index].lv = s.lv;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if (flag) break;
|
||||
// }
|
||||
let { hid, lv } = msg; // lv: 升到哪一级
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
// if (costCoin <= 0) { // 连一级都不够升
|
||||
// return resResult(STATUS.ROLE_COIN_NOT_ENOUGH);
|
||||
// }
|
||||
let { ePlace, lv: playerLv } = hero; // 装备栏
|
||||
let fromLv = Math.min(...ePlace.map(cur => cur.lv)); // 最小的等级
|
||||
let toLv = lv < playerLv? lv: playerLv;
|
||||
|
||||
// let result = await handleCost(roleId, sid, [{
|
||||
// id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN),
|
||||
// count: costCoin
|
||||
// }], ITEM_CHANGE_REASON.EQUIP_STRENTHEN);
|
||||
// if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
let eplaceIds = new Map<number, { lv: number }>(); // 更新了的装备栏id
|
||||
let check = new CheckMeterial(roleId);
|
||||
for(let lv = fromLv + 1; lv <= toLv; lv++) {
|
||||
let isBreak = false;
|
||||
for(let equip of ePlace) {
|
||||
if(equip.lv >= lv) continue;
|
||||
let dicCost = gameData.equipStrengthenCost.get(lv);
|
||||
let isEnough = await check.decrease(dicCost.consume);
|
||||
if(!isEnough) { isBreak = true; break; } // 消耗不足
|
||||
|
||||
// hero.ePlace = ePlace;
|
||||
eplaceIds.set(equip.id, { lv });
|
||||
}
|
||||
if(isBreak) break;
|
||||
}
|
||||
|
||||
// await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_BASE, sid, roleId, hero, { ePlace });
|
||||
if(eplaceIds.size <= 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
let consumes = check.getConsume();
|
||||
let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_STRENTHEN);
|
||||
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
|
||||
// // 任务
|
||||
// await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs);
|
||||
// //成长任务
|
||||
// await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_STRENGTHEN, 1, changeData)
|
||||
let { newEplace, updatedEplace } = updateEplaces(hero.ePlace, eplaceIds);
|
||||
|
||||
// const curHero = {
|
||||
// hid,
|
||||
// ePlace: strengthenArr
|
||||
// }
|
||||
// return resResult(STATUS.SUCCESS, { curHero });
|
||||
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, { ePlace: newEplace }, [...eplaceIds.keys()]);
|
||||
|
||||
// }
|
||||
// TODO 任务
|
||||
|
||||
// // 装备栏一键强化至相应等级
|
||||
// public async strengthenAll(msg: { hid: number, lv: number }, session: BackendSession) {
|
||||
// let roleId: string = session.get('roleId');
|
||||
// // let roleName: string = session.get('roleName');
|
||||
// let sid: string = session.get('sid');
|
||||
|
||||
// const serverId = session.get('serverId');
|
||||
const curHero = {
|
||||
hid,
|
||||
ePlace: updatedEplace
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { curHero });
|
||||
|
||||
// let changeData = [];//变化的等级数据
|
||||
// let { hid, lv: maxLv } = msg; // lv: 升到哪一级
|
||||
// let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
|
||||
// if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
}
|
||||
|
||||
// let { ePlace, lv: playerLv } = hero; // 装备栏
|
||||
// let oldLvs = ePlace.map(cur => cur.lv);
|
||||
// let strengthenArr = ePlace.filter(cur => cur.equip);
|
||||
|
||||
// if (strengthenArr.length <= 0) {
|
||||
// return resResult(STATUS.ROLE_EQUIP_PLACE_NOT_ENOUGH);
|
||||
// }
|
||||
// let minLv = strengthenArr[0].lv; // 从最低装备的等级开始
|
||||
// for (let { lv, id } of strengthenArr) {
|
||||
// changeData.push({
|
||||
// hid: hid,
|
||||
// id: id,
|
||||
// oldLv: lv,
|
||||
// lv: lv,
|
||||
// })
|
||||
// if (lv < minLv) minLv = lv;
|
||||
|
||||
// }
|
||||
|
||||
// let { coin } = await Role.findByRoleId(roleId);
|
||||
|
||||
// if (maxLv > playerLv) {
|
||||
// return resResult(STATUS.ROLE_EQUIP_REACH_MAX);
|
||||
// }
|
||||
// let costCoin = 0; // 消耗铜币
|
||||
// for (let i = minLv; i < maxLv; i++) {
|
||||
// for (let s of strengthenArr) {
|
||||
// if (s.lv == i) {
|
||||
// let cost = gameData.strengthenCost.get(i + 1);
|
||||
// costCoin += cost;
|
||||
|
||||
// s.lv++;
|
||||
// {//记录等级变化
|
||||
// let index = changeData.findIndex(obj => { return obj && obj.id == s.id })
|
||||
// if (index != -1) {
|
||||
// changeData[index].lv = s.lv;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (costCoin > coin) {
|
||||
// return resResult(STATUS.ROLE_COIN_NOT_ENOUGH);
|
||||
// }
|
||||
|
||||
// let result = await handleCost(roleId, sid, [{
|
||||
// id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN),
|
||||
// count: costCoin
|
||||
// }], ITEM_CHANGE_REASON.EQUIP_STRENTHEN);
|
||||
// if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
|
||||
// hero.ePlace = ePlace;
|
||||
|
||||
// await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_BASE, sid, roleId, hero, { ePlace });
|
||||
|
||||
// // 任务
|
||||
// await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs);
|
||||
// //成长任务
|
||||
// await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_STRENGTHEN, 1, changeData)
|
||||
|
||||
// const curHero = {
|
||||
// hid,
|
||||
// ePlace: strengthenArr
|
||||
// }
|
||||
// return resResult(STATUS.SUCCESS, { curHero });
|
||||
|
||||
// }
|
||||
// // 装备栏精炼
|
||||
// public async refine(msg: { hid: number, ePlaceId: number, type: REFINE_TYPE }, session: BackendSession) {
|
||||
// let roleId: string = session.get('roleId');
|
||||
|
||||
Reference in New Issue
Block a user