装备:强化

This commit is contained in:
luying
2022-02-15 18:01:37 +08:00
parent 465cc15e43
commit f25d44e391
18 changed files with 12919 additions and 187 deletions

View File

@@ -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');