diff --git a/game-server/app/services/role/checkMaterial.ts b/game-server/app/services/role/checkMaterial.ts index 5b26ad421..4103a43c9 100644 --- a/game-server/app/services/role/checkMaterial.ts +++ b/game-server/app/services/role/checkMaterial.ts @@ -232,17 +232,22 @@ export async function getComposeStoneNeedCost(id: number) { export async function getCurItem(roleId: string, itId: number) { let curItem = new Map(); let stoneItId = gameData.stoneItId.get(itId); + let goodIds = []; for (const { good_id, lv } of stoneItId) { if (lv >= ITID_STONE_LIMIT) continue; let nextLvMaterial = await getComposeStoneNeedCost(good_id); if (!nextLvMaterial) continue; for (let material of nextLvMaterial) { - if (curItem.get(material.id)) continue; - const item = await ItemModel.findbyRoleAndGid(roleId, material.id) - if (!item || item.count == 0) continue; - curItem.set(material.id, item.count); + goodIds.push(material.id); } } + + let items = await ItemModel.find({ roleId, id: { $in: goodIds } }); + if (!items || items.length == 0) return curItem; + for (let { id, count } of items) { + if (count == 0) continue; + curItem.set(id, count); + } return curItem; } @@ -259,10 +264,9 @@ export async function getComposeStoneCostAndAdd(curItem, itId) { //计算升品所需消耗 for (let lv = ITID_STONE_LIMIT - 1; lv >= 1; lv--) { for (let indexLv = lv; indexLv < ITID_STONE_LIMIT; indexLv++) { - let id = gameData.stoneItIdLv.get(`${itId}_${indexLv}`); - let tempItem1 = curItem.get(id) ? curItem.get(id) : 0; - let tempItem2 = allAddItem.get(id) ? allAddItem.get(id) : 0 + let tempItem1 = curItem.get(id) || 0; + let tempItem2 = allAddItem.get(id) || 0 let count = tempItem1 + tempItem2; if (count == 0) continue;//当前品没有,无法进行升下一品 @@ -274,7 +278,7 @@ export async function getComposeStoneCostAndAdd(curItem, itId) { if (!nextLvMaterial || nextLvMaterial.length == 0) { //升下一品不存在消耗 //产出 - let addCount = allAddItem.get(nextLvId) ? allAddItem.get(nextLvId) : 0 + let addCount = allAddItem.get(nextLvId) || 0 allAddItem.set(nextLvId, addCount + count); continue; } @@ -286,17 +290,18 @@ export async function getComposeStoneCostAndAdd(curItem, itId) { console.error("dic_zyz_stone配置错误, good_id=%s", nextLvId); continue; } - let val1 = curItem.get(initial.id) ? curItem.get(initial.id) : 0; - let val2 = allAddItem.get(initial.id) ? allAddItem.get(initial.id) : 0; + let val1 = curItem.get(initial.id) || 0; + let val2 = allAddItem.get(initial.id) || 0; let nextLvCount = Math.floor((val1 + val2) / initial.count);//设置初始值 + for (let material of nextLvMaterial) { if (!material.count || material.count == 0) { nextLvCount = 0; console.error("dic_zyz_stone配置错误, good_id=%s", nextLvId); continue; } - let tempCount1 = curItem.get(material.id) ? curItem.get(material.id) : 0; - let tempCount2 = allAddItem.get(material.id) ? allAddItem.get(material.id) : 0; + let tempCount1 = curItem.get(material.id) || 0; + let tempCount2 = allAddItem.get(material.id) || 0; nextLvCount = Math.min(nextLvCount, Math.floor((tempCount1 + tempCount2) / material.count)); } @@ -305,9 +310,9 @@ export async function getComposeStoneCostAndAdd(curItem, itId) { // 消耗 for (let material of nextLvMaterial) { let needCostCount = nextLvCount * material.count; //需要消耗数量 - let tempCount1 = curItem.get(material.id) ? curItem.get(material.id) : 0; // 当前item中已有的数量 - let tempCount2 = allAddItem.get(material.id) ? allAddItem.get(material.id) : 0; // 当前总产出中已有的数量 - let tempCostCount = allCostItem.get(material.id) ? allCostItem.get(material.id) : 0; // 当前总消耗中已有的数量 + let tempCount1 = curItem.get(material.id) || 0; // 当前item中已有的数量 + let tempCount2 = allAddItem.get(material.id) || 0; // 当前总产出中已有的数量 + let tempCostCount = allCostItem.get(material.id) || 0; // 当前总消耗中已有的数量 let diff = tempCount1 - needCostCount; if (diff > 0) {// 先消耗item中的 @@ -317,7 +322,7 @@ export async function getComposeStoneCostAndAdd(curItem, itId) { } curItem.delete(material.id); - if (tempCount1 != 0) allCostItem.set(material.id, tempCount1);//记录入总消耗(0不记录) + if (tempCount1 != 0) allCostItem.set(material.id, tempCostCount + tempCount1);//记录入总消耗(0不记录) if (tempCount2 - Math.abs(diff) < 0) return;//异常 @@ -326,7 +331,7 @@ export async function getComposeStoneCostAndAdd(curItem, itId) { } // 产出 - let addCount = allAddItem.get(nextLvId) ? allAddItem.get(nextLvId) : 0 + let addCount = allAddItem.get(nextLvId) || 0 allAddItem.set(nextLvId, addCount + nextLvCount); } } diff --git a/shared/resource/jsons/server_const.json b/shared/resource/jsons/server_const.json index 91603265a..422122e7d 100644 --- a/shared/resource/jsons/server_const.json +++ b/shared/resource/jsons/server_const.json @@ -53,7 +53,8 @@ { "id": 39, "desc": "神像进阶", "route": "role.roleHandler.roleTeraphQualityUp", "param": {}, "interval": 1000 }, { "id": 40, "desc": "升级名将谱", "route": "role.roleHandler.activeHeroScroll", "param": {}, "interval": 1000 }, { "id": 41, "desc": "战区聊天", "route": "chat.chatHandler.sendGroupMessage", "param": { "channel": "gvg" }, "interval": 30000 }, - { "id": 42, "desc": "许愿池捐献", "route": "guild.wishPoolHandler.donateGoods", "param": {}, "interval": 1000 } + { "id": 42, "desc": "许愿池捐献", "route": "guild.wishPoolHandler.donateGoods", "param": {}, "interval": 1000 }, + { "id": 43, "desc": "宝石一键合成", "route": "role.equipHandler.composeStoneByItId", "param": {}, "interval": 1000 } ], "TIME_STAMP_OVER": 900000, "ACCESS_CODE_EXPIRE_TIME": 900000,