diff --git a/game-server/app/servers/role/handler/authorBookHandler.ts b/game-server/app/servers/role/handler/authorBookHandler.ts index aa4a27bb7..2c38e6cd8 100644 --- a/game-server/app/servers/role/handler/authorBookHandler.ts +++ b/game-server/app/servers/role/handler/authorBookHandler.ts @@ -150,21 +150,26 @@ export class AuthorsBookHandler { return resResult(STATUS.SUCCESS, { goods }); } - public async decomposeSpirit(msg: { id: number, count: number }, session: BackendSession) { + public async decomposeSpirit(msg: { spirits: { id: number, count: number }[] }, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); let roleName: string = session.get('roleName'); - const { id, count } = msg; - let dicSpirit = gameData.spirit.get(id); - if(!dicSpirit) return resResult(STATUS.DIC_DATA_NOT_FOUND); + const { spirits = [] } = msg; + let rewards: RewardInter[] = []; + for(let { id, count } of spirits) { + let dicSpirit = gameData.spirit.get(id); + if(!dicSpirit) return resResult(STATUS.DIC_DATA_NOT_FOUND); + for(let item of dicSpirit.decomposeItem) { + rewards.push({ id: item.id, count: item.count * count }); + } + } - let consumes = [{ id, count }]; + let consumes = spirits; let costResult = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.DECOMPOSE_SPIRIT); if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); - let reward = dicSpirit.decomposeItem; - let goods = await addItems(roleId, roleName, sid, reward, ITEM_CHANGE_REASON.DECOMPOSE_SPIRIT); + let goods = await addItems(roleId, roleName, sid, combineItems(rewards), ITEM_CHANGE_REASON.DECOMPOSE_SPIRIT); return resResult(STATUS.SUCCESS, { goods }); } diff --git a/game-server/app/services/checkParam.ts b/game-server/app/services/checkParam.ts index 3c0a92ab2..2648ebe0b 100644 --- a/game-server/app/services/checkParam.ts +++ b/game-server/app/services/checkParam.ts @@ -2024,11 +2024,18 @@ export function checkRouteParam(route: string, msg: any) { break; } case "role.authorsBookHandler.buySpirit": - case "role.authorsBookHandler.decomposeSpirit": { if(!checkNaturalNumbers(msg.id, msg.count)) return false; break; } + case "role.authorsBookHandler.decomposeSpirit": + { + if(!checkNaturalArray(msg.spirits)) return false; + for(let { id, count } of msg.spirits) { + if(!checkNaturalNumbers(id, count)) return false; + } + break; + } case 'activity.dragonBoatHandler.gameStart': case 'activity.dragonBoatHandler.gameEnd': {