feat(玉石一键合成): 新增

This commit is contained in:
zhangxk
2023-07-14 15:37:05 +08:00
committed by luying
parent 1d1531723b
commit 6c73466071
2 changed files with 24 additions and 18 deletions

View File

@@ -232,17 +232,22 @@ export async function getComposeStoneNeedCost(id: number) {
export async function getCurItem(roleId: string, itId: number) {
let curItem = new Map<number, number>();
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);
}
}

View File

@@ -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,