From cca991367d473d2eed1935f15270dca59699f394 Mon Sep 17 00:00:00 2001 From: luying Date: Sat, 28 Aug 2021 18:12:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BB=E6=88=90=EF=BC=9A=E5=8D=87=E6=98=9F?= =?UTF-8?q?=E3=80=81=E8=AE=AD=E7=BB=83=E3=80=81=E6=B7=AC=E7=81=AB=E3=80=81?= =?UTF-8?q?=E7=B2=BE=E7=82=BC=E7=9A=84=E4=B8=80=E9=94=AE=E6=B6=88=E8=80=97?= =?UTF-8?q?=E4=B8=8D=E6=AF=8F=E6=AC=A1=E6=9B=B4=E6=96=B0&=E6=8E=A8?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/equipHandler.ts | 27 +++++++++++++--- .../app/servers/role/handler/heroHandler.ts | 32 +++++++++++++------ .../app/servers/role/handler/roleHandler.ts | 3 +- game-server/app/services/equipService.ts | 22 ++++--------- 4 files changed, 54 insertions(+), 30 deletions(-) diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 88867431a..8ded05dbd 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -3,7 +3,7 @@ import { STATUS, EQUIP_STRENGTHEN_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SY import { ItemInter } from "../../../pubUtils/interface"; import { resResult, parseGoodStr } from "../../../pubUtils/util"; -import { addItems, handleCost, decreaseItems, combineItems } from "../../../services/rewardService"; +import { addItems, handleCost, decreaseItems, combineItems, CheckMeterial } from "../../../services/rewardService"; import { EquipModel, EquipType } from "../../../db/Equip"; import { HeroModel, EPlace, HeroType } from "../../../db/Hero"; import Role from "../../../db/Role"; @@ -287,20 +287,28 @@ export class EquipHandler { } let { lv, refineLv: oldRefineLv, equip } = curEplace; // 强化等级,精炼等级,精炼次数 + let check = new CheckMeterial(roleId); 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); + let result = await refineOnce(lv, refineLv); if(!result) break; - refineLv = result; + + let isEnough = await check.decrease(result.consumes); + if(!isEnough) break; // 消耗不足 + refineLv = result.refineLv; times ++; } if(times == 0) { return resResult(STATUS.EQUIP_REFINE_ERR); } + let consumes = check.getConsume(); + let result = await handleCost(roleId, sid, consumes); + if (!result) + return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); + curEplace.refineLv = refineLv; @@ -491,13 +499,18 @@ export class EquipHandler { console.log(dicQuench, dicGoods.quality, grade) if (!dicQuench) return resResult(STATUS.EQUIP_QUENCH_MAX); + let check = new CheckMeterial(roleId); let logs: QuenchLogParam[] = [], times = 0; while( (type == QUENCH_TYPE.ONCE && times < 1 && !checkQuenchMaxByQualityAndGrade(dicGoods.quality, 0, randMain)) || // 淬火一次,保证不超出该品质上限 (type == QUENCH_TYPE.ONE_GRADE && !checkQuenchMaxByQualityAndGrade(dicGoods.quality, grade, randMain)) // 淬火一品,在品相上限内淬火 ) { - let result = await quenchOnce(roleId, sid, randMain, dicQuench, dicGoods); + let result = await quenchOnce(randMain, dicQuench, dicGoods); if(!result) break; + + let isEnough = await check.decrease(result.consumes); + if(!isEnough) break; // 消耗不足 + result.log.setTimes(++times); logs.push(result.log); grade = result.grade; @@ -505,6 +518,10 @@ export class EquipHandler { } if (times == 0) return resResult(STATUS.EQUIP_QUENCH_ERR); + let consumes = check.getConsume(); + let result = await handleCost(roleId, sid, consumes); + if (!result) + return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let equipResult = await EquipModel.updateEquipInfo(eid, { randMain, grade }) let curEquip = { diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 25ff22b59..5dba228fb 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession, ChannelService, HandlerService, } from 'pinus'; -import { handleCost, addItems, unlockFigure, createHeroes, createHero } from '../../../services/rewardService'; +import { handleCost, addItems, unlockFigure, createHeroes, createHero, CheckMeterial } from '../../../services/rewardService'; import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService'; import { resResult, deepCopy } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; @@ -228,12 +228,18 @@ export class HeroHandler { let newStarStage = 0; let max = isOneClick ? ABI_STAGE.END : oldStarStage + 1; + let check = new CheckMeterial(roleId); for (let i = 0; i < max; i++) { - let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: curDicHeroStar.advanceUpFragmentNum }]); - if (!costResult) break; + + let isEnough = await check.decrease([{ id: pieceId, count: curDicHeroStar.advanceUpFragmentNum }]); + if(!isEnough) break; // 消耗不足 newStarStage++; } if (newStarStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); + let consumes = check.getConsume(); + let result = await handleCost(roleId, sid, consumes); + if (!result) + return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let isUpStar = newStarStage == ABI_STAGE.END; @@ -352,15 +358,18 @@ export class HeroHandler { let newColorStarStage = 0; let max = isOneClick ? ABI_STAGE.END : oldColorStarStage + 1; + let check = new CheckMeterial(roleId); for (let i = 0; i < max; i++) { let { fragmentNum, consume } = curDicHeroStar; - - // console.log(JSON.stringify([{id: pieceId, count: fragmentNum}, ...consumeArr])) - let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: fragmentNum }, ...consume]); - if (!costResult) break; + let isEnough = await check.decrease([{ id: pieceId, count: fragmentNum }, ...consume]); + if(!isEnough) break; // 消耗不足 newColorStarStage++; } if (newColorStarStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); + let consumes = check.getConsume(); + let result = await handleCost(roleId, sid, consumes); + if (!result) + return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let isWakeUp = oldColorStar == 0; let isUpStar = isWakeUp || newColorStarStage == ABI_STAGE.END; @@ -415,15 +424,20 @@ export class HeroHandler { let newJobStage = 0; let max = isOneClick ? dicJob.maxStage: hero.jobStage + 1; + let check = new CheckMeterial(roleId); for(let i = 0; i < max; i++) { let singleConsume = dicJob.trainingConsume[hero.jobStage]; if(!singleConsume) break; // 每天消耗不可训练 - let result = await handleCost(roleId, sid, [singleConsume]); - if (!result) break; // 材料不足 + let isEnough = await check.decrease([singleConsume]); + if(!isEnough) break; // 消耗不足 newJobStage ++; } if (newJobStage == 0) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); + let consumes = check.getConsume(); + let result = await handleCost(roleId, sid, consumes); + if (!result) + return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); //重算战力并下发 hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, { diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 17c5c3d58..3796f89a4 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -32,7 +32,7 @@ export class RoleHandler { } async initRole(msg: { roleName: string }, session: BackendSession) { - + console.log('******** initRole start', Date.now()); let roleId = session.get('roleId'); let serverId = session.get('serverId'); let sid: string = session.get('sid'); @@ -71,6 +71,7 @@ export class RoleHandler { await checkPvp(calResult.role); + console.log('******** initRole end', Date.now()); return resResult(STATUS.SUCCESS, { roleId, roleName, heroes: calResult.heros }) diff --git a/game-server/app/services/equipService.ts b/game-server/app/services/equipService.ts index 43c94d93f..b956c5d9a 100644 --- a/game-server/app/services/equipService.ts +++ b/game-server/app/services/equipService.ts @@ -4,10 +4,6 @@ import { HeroModel, HeroType } from "../db/Hero"; import { getGoodById, gameData, getJewelById, getQuenchGradeByValue, getQuenchConsume, getQuenchByQualityAndGrade } from "../pubUtils/data"; import { calPlayerCeAndSave } from "./playerCeService"; import { CONSUME_TYPE, HERO_SYSTEM_TYPE, ITID, TASK_TYPE } from "../consts"; -import { EquipType } from "../db/Equip"; -import { calEquipSeids } from '../pubUtils/playerCe'; -import { checkTask, checkTaskWithHero, checkTaskWithEquip, checkActivityTask } from './taskService'; -import { handleCost } from './rewardService'; import { dicGoods, DicGoods } from '../pubUtils/dictionary/DicGoods'; import { QuenchLogParam } from '../domain/roleField/equip'; import { QUENCH } from '../pubUtils/dicParam'; @@ -88,7 +84,7 @@ export function checkEquipCanPut(hero: HeroType, id: number) { * @param dicGoods 物品表 * @returns */ -export async function quenchOnce(roleId: string, sid: string, randMain: RandMain[], dicQuench: DicQuenchQuality, dicGoods: DicGoods) { +export async function quenchOnce(randMain: RandMain[], dicQuench: DicQuenchQuality, dicGoods: DicGoods) { let { quality, equipLvl } = dicGoods; let canRandMain = randMain.filter(cur => { // 已升满的属性就不再淬火了 @@ -130,11 +126,8 @@ export async function quenchOnce(roleId: string, sid: string, randMain: RandMain // 消耗 let consumes = getQuenchConsume(equipLvl, quality); - let result = await handleCost(roleId, sid, consumes); - if(!result) return false; - let log = new QuenchLogParam(isCriticle, add); - return { randMain, grade, log }; + return { randMain, grade, log, consumes }; } /** @@ -175,18 +168,17 @@ export function getRandSeResult(id: number, randSe: RandSe[]) { return randSe } -export async function refineOnce(roleId: string, sid: string, lv: number, refineLv: number) { +export async function refineOnce(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; + return { + refineLv: refineLv + 1, + consumes: dicRefine.consume + } } export function checkRefineReachNextLv(oldRefineLv: number, refineLv: number) {