diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 29e0e1f16..bf5deffe4 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -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 = 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 = 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() }); - console.log('##########', lockNum, removeSeidList); if (lockNum >= randSe.length) { return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN); diff --git a/game-server/app/servers/role/handler/itemHandler.ts b/game-server/app/servers/role/handler/itemHandler.ts index b66129c5e..95cc08778 100644 --- a/game-server/app/servers/role/handler/itemHandler.ts +++ b/game-server/app/servers/role/handler/itemHandler.ts @@ -1,21 +1,12 @@ 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, DEBUG_MAGIC_WORD } from "../../../consts"; -import { ItemInter, RewardInter } from "../../../pubUtils/interface"; +import { STATUS, CONSUME_TYPE, DEBUG_MAGIC_WORD } from "../../../consts"; +import { RewardInter } from "../../../pubUtils/interface"; -import { resResult, parseGoodStr, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util"; -import { addItems, handleCost, decreaseItems } from "../../../services/rewardService"; -import Equip, { EquipModel, EquipType } from "../../../db/Equip"; -import { HeroModel, EPlace } from "../../../db/Hero"; -import Role, { RoleModel } from "../../../db/Role"; -import { calPlayerCeAndSave } from "../../../services/playerCeService"; +import { resResult } from "../../../pubUtils/util"; +import { addItems, handleCost } from "../../../services/rewardService"; +import { RoleModel } from "../../../db/Role"; import { gameData } from "../../../pubUtils/data"; -import { EQUIP } from "../../../pubUtils/dicParam"; -import { ITID, SPEICAL_ITEM, QUALITY_TYPE } from "../../../consts/constModules/itemConst"; -import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerCe } from "../../../services/equipService"; - -import { indexOf, findIndex } from 'underscore'; -import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService"; -import { checkTaskWithHero, checkTaskWithEquip, checkTask, checkTaskWithArgs, checkTaskConditionEquipSuitJewelStage, checkActivityTask } from "../../../services/taskService"; +import { ITID } from "../../../consts/constModules/itemConst"; import { useGiftPackage } from "../../../services/activity/giftPackageService"; import { getAp, setAp, setApBuyTimes } from "../../../services/actionPointService"; import { ActionPointModel } from "../../../db/ActionPoint"; diff --git a/game-server/app/services/equipService.ts b/game-server/app/services/equipService.ts index 9c89fd730..1803bf007 100644 --- a/game-server/app/services/equipService.ts +++ b/game-server/app/services/equipService.ts @@ -240,4 +240,27 @@ export function getRandSeResult(id: number, randSe: RandSe[]) { } } return randSe +} + +export async function refineOnce(roleId: string, sid: string, lv: number, refineLv: number) { + + let dicRefine = gameData.refine.get(refineLv + 1); + if (!dicRefine) return false; + + if(lv < dicRefine.levelLimited) return false; + + // 消耗 + let result = await handleCost(roleId, sid, dicRefine.consume); + if (!result) return false; + + return refineLv + 1; +} + +export function checkRefineReachNextLv(oldRefineLv: number, refineLv: number) { + let oldDic = gameData.refine.get(oldRefineLv); + let dic = gameData.refine.get(refineLv); + if(!oldDic || !dic) return true; + + console.log('*******', dic.level, oldDic.level) + return dic.level > oldDic.level; } \ No newline at end of file diff --git a/shared/consts/constModules/heroConst.ts b/shared/consts/constModules/heroConst.ts index 51a18bf18..ec2637542 100644 --- a/shared/consts/constModules/heroConst.ts +++ b/shared/consts/constModules/heroConst.ts @@ -27,9 +27,7 @@ export enum HERO_SYSTEM_TYPE { export const HERO_GROW_MAX = { STAR: 6, COLORSTAR: 6, - QUALITY: 3, - EQUIP_STRENGTHEN: 100, - EQUIP_REFINE: 15 + QUALITY: 3 } export const JOB_TYPE = { diff --git a/shared/consts/constModules/itemConst.ts b/shared/consts/constModules/itemConst.ts index c777d8c94..683d48e9a 100644 --- a/shared/consts/constModules/itemConst.ts +++ b/shared/consts/constModules/itemConst.ts @@ -164,11 +164,6 @@ export const CURRENCY_TYPE = { KING_EXP: 'kingExp' } - -export const SPEICAL_ITEM = { - REFINE_ADD_RATE: [17039] -}; - const currencyArr = [ { "gid": 31001, "name": "铜钱", "type": CURRENCY_TYPE.COIN }, { "gid": 31002, "name": "元宝", "type": CURRENCY_TYPE.GOLD }, @@ -279,4 +274,10 @@ export const SPECIAL_ATTR = { export enum QUENCH_TYPE { ONCE = 1, // 升一级 ONE_GRADE = 2, // 升一品 +} + +// 精炼类型 +export enum REFINE_TYPE { + ONCE = 1, // 精炼一次 + ONE_LEVEL = 2, // 精炼一级 } \ No newline at end of file diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 235d86357..1df83c274 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -278,6 +278,7 @@ 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: '该装备等级不足或材料不足' }, //全局养成30600-30699 ROLE_REACH_MAX_TITLE_LEVEL: { code: 30600, simStr: '玩家已达到最高的爵位' }, ROLE_TERAPH_NOT_STRENGTHEN: { code: 30601, simStr: '玩家神像不能强化' }, diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index 79f7fafb5..4ef763afb 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -62,7 +62,7 @@ function getInitialEplace() { p.id = i; p.equip = null; p.lv = 0; - p.refineLv = 0; + p.refineLv = 1; ePlace.push(p); } diff --git a/shared/pubUtils/dictionary/DicQuenchQuality.ts b/shared/pubUtils/dictionary/DicQuenchQuality.ts index a6b8f15c5..c472718d2 100644 --- a/shared/pubUtils/dictionary/DicQuenchQuality.ts +++ b/shared/pubUtils/dictionary/DicQuenchQuality.ts @@ -1,4 +1,4 @@ -import { readFileAndParse, parseGoodStr } from '../util' +import { readFileAndParse } from '../util' import { FILENAME } from '../../consts' export interface DicQuenchQuality { diff --git a/shared/pubUtils/dictionary/DicRefine.ts b/shared/pubUtils/dictionary/DicRefine.ts index 9c594334e..17366e2b1 100644 --- a/shared/pubUtils/dictionary/DicRefine.ts +++ b/shared/pubUtils/dictionary/DicRefine.ts @@ -9,13 +9,14 @@ export interface DicRefine { readonly id: number; // 精炼等级 readonly level: number; + // 精炼次数 + readonly count: number; + // 等级限制 + readonly levelLimited: number; // 提高属性百分比 readonly upPercent: number; // 材料 - readonly material: Array; - // 成功率 - readonly successRate: number; - + readonly consume: Array; } export const dicRefine = new Map(); @@ -24,8 +25,8 @@ export function loadRefine() { let arr = readFileAndParse(FILENAME.DIC_REFINE); arr.forEach(o => { - o.material = parseGoodStr(o.material) - dicRefine.set(o.level, o); + o.consume = parseGoodStr(o.consume) + dicRefine.set(o.id, o); }); arr = undefined; diff --git a/shared/pubUtils/itemUtils.ts b/shared/pubUtils/itemUtils.ts index 88e178ab5..d886e02dc 100644 --- a/shared/pubUtils/itemUtils.ts +++ b/shared/pubUtils/itemUtils.ts @@ -5,7 +5,7 @@ import { ItemModel } from '../db/Item'; import { EquipModel, RandSe, Holes, RandMain } from './../db/Equip'; import { BagInter, EquipInter } from './interface'; import { gameData, getQuenchByQualityAndGrade, getQuenchGradeByValue } from './data'; -import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE, HERO_SYSTEM_TYPE, TASK_TYPE } from '../consts'; +import { RANDOM_SE_COUNT, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE, HERO_SYSTEM_TYPE, TASK_TYPE } from '../consts'; import { getRandValueByMinMax, getRandEelm } from './util'; import { findWhere } from 'underscore';