装备:精炼

This commit is contained in:
luying
2021-07-29 18:01:36 +08:00
parent 365f89acfa
commit 3c4f45bcd0
10 changed files with 71 additions and 79 deletions

View File

@@ -2,7 +2,7 @@ import { Application, BackendSession, HandlerService, } from "pinus";
import { STATUS, EQUIP_STRENGTHEN_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SYSTEM_TYPE, CONSUME_TYPE, HERO_GROW_MAX, MSG_SOURCE, JEWEL_PUSH_LV, TASK_TYPE, HERO_CE_RATIO } from "../../../consts";
import { ItemInter } from "../../../pubUtils/interface";
import { resResult, parseGoodStr, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util";
import { resResult, parseGoodStr } from "../../../pubUtils/util";
import { addItems, handleCost, decreaseItems } from "../../../services/rewardService";
import { EquipModel, EquipType } from "../../../db/Equip";
import { HeroModel, EPlace } from "../../../db/Hero";
@@ -10,8 +10,8 @@ import Role from "../../../db/Role";
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, getRandSeResult } from "../../../services/equipService";
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 { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService";
@@ -268,14 +268,14 @@ export class EquipHandler {
}
// 装备栏精炼
public async refine(msg: { hid: number, ePlaceId: number, material: { id: number, count: number }[] }, session: BackendSession) {
public async refine(msg: { hid: number, ePlaceId: number, type: REFINE_TYPE }, session: BackendSession) {
let roleId: string = session.get('roleId');
let roleName: string = session.get('roleName');
let serverId = session.get('serverId');
let sid: string = session.get('sid');
let funcs: number[] = session.get('funcs');
let { hid, ePlaceId, material } = msg;
let { hid, ePlaceId, type } = msg;
let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
@@ -285,45 +285,25 @@ export class EquipHandler {
if (!curEplace) {
return resResult(STATUS.ROLE_EQUIP_PLACE_NOT_ENOUGH);
}
let { lv, refineLv, equip } = curEplace; // 强化等级,精炼等级,精炼次数
let { lv, refineLv: oldRefineLv, equip } = curEplace; // 强化等级,精炼等级,精炼次数
if (lv < HERO_GROW_MAX.EQUIP_STRENGTHEN) {
return resResult(STATUS.ROLE_EQUIP_NOT_REACH_MAX);
let refineLv = oldRefineLv, times = 0;
while(
(type == REFINE_TYPE.ONCE && times == 0) ||
(type == REFINE_TYPE.ONE_LEVEL && !checkRefineReachNextLv(oldRefineLv, refineLv) )
) {
let result = await refineOnce(roleId, sid, lv, refineLv);
console.log('*******', result);
if(!result) break;
refineLv = result;
times ++;
}
if (refineLv >= HERO_GROW_MAX.EQUIP_REFINE) {
return resResult(STATUS.ROLE_EQUIP_REACH_MAX);
if(times == 0) {
return resResult(STATUS.EQUIP_REFINE_ERR);
}
curEplace.refineLv = refineLv;
// 是否成功精炼
let dicRefine = gameData.refine.get(refineLv + 1);
if (!dicRefine) {
return resResult(STATUS.DIC_DATA_NOT_FOUND)
}
let { successRate } = dicRefine;
for (let { id, count } of material) {
let dicGoods = gameData.goods.get(id);
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
if (!SPEICAL_ITEM.REFINE_ADD_RATE.includes(id)) {
return resResult(STATUS.ROLE_WRONG_ITEM)
}
successRate += count * dicGoods.value;
if (isNaN(successRate)) console.error(id, count, dicGoods.value);
}
let ran = Math.floor(Math.random() * 100);
let isSuccess = ran <= successRate;
// 消耗道具提升成功率 每个道具提升10%成功率
// 精炼
if (isSuccess) {
curEplace.refineLv++;
}
// 消耗
let cost = dicRefine.material.concat(material);
let result = await handleCost(roleId, sid, cost);
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_BASE, sid, roleId, hero, { ePlace });
@@ -332,13 +312,11 @@ export class EquipHandler {
ePlace: [curEplace]
}
if (isSuccess) {
let curEquip = <EquipType>equip;
pushEquipRefineSucMsg(roleId, roleName, serverId, curEplace, curEquip ? curEquip.quality : 0);
await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_REFINE, 1, true, {});
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_REFINE_LV, 1, { lv: curEplace.refineLv });
}
return resResult(STATUS.SUCCESS, { isSuccess, curHero });
let curEquip = <EquipType>equip;
pushEquipRefineSucMsg(roleId, roleName, serverId, curEplace, curEquip ? curEquip.quality : 0);
await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_REFINE, times, true, {});
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_REFINE_LV, times, { lv: curEplace.refineLv });
return resResult(STATUS.SUCCESS, { curHero });
}
// 装备洗炼锁定
@@ -431,7 +409,6 @@ export class EquipHandler {
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);