From 2e579cffd58e48945bee3e8bc9e5f7e5a2d61ddf Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Mon, 23 Oct 2023 10:15:13 -0700 Subject: [PATCH] Fix composed relics having the same sub/main affix sometimes --- .../emu/lunarcore/game/inventory/GameItem.java | 16 ++++++++++++---- .../lunarcore/game/service/InventoryService.java | 15 +++++++++------ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/java/emu/lunarcore/game/inventory/GameItem.java b/src/main/java/emu/lunarcore/game/inventory/GameItem.java index ee255ba..78dd1ea 100644 --- a/src/main/java/emu/lunarcore/game/inventory/GameItem.java +++ b/src/main/java/emu/lunarcore/game/inventory/GameItem.java @@ -68,8 +68,12 @@ public class GameItem { public GameItem(ItemExcel data) { this(data, 1); } - + public GameItem(ItemExcel excel, int count) { + this(excel, count, 0); + } + + public GameItem(ItemExcel excel, int count, int overrideMainAffix) { this.itemId = excel.getId(); this.excel = excel; @@ -87,9 +91,13 @@ public class GameItem { // Init affixes if (getExcel().getRelicExcel() != null) { // Main affix - var affix = GameDepot.getRandomRelicMainAffix(getExcel().getRelicExcel().getMainAffixGroup()); - if (affix != null) { - this.mainAffix = affix.getAffixID(); + if (overrideMainAffix > 0) { + this.mainAffix = overrideMainAffix; + } else { + var affix = GameDepot.getRandomRelicMainAffix(getExcel().getRelicExcel().getMainAffixGroup()); + if (affix != null) { + this.mainAffix = affix.getAffixID(); + } } // Sub affixes int baseSubAffixes = Math.min(Math.max(getExcel().getRarity().getVal() - 2, 0), 3); diff --git a/src/main/java/emu/lunarcore/game/service/InventoryService.java b/src/main/java/emu/lunarcore/game/service/InventoryService.java index bf95bd5..4d30a1c 100644 --- a/src/main/java/emu/lunarcore/game/service/InventoryService.java +++ b/src/main/java/emu/lunarcore/game/service/InventoryService.java @@ -606,12 +606,20 @@ public class InventoryService extends BaseGameService { return null; } + // Get relic excel + ItemExcel itemExcel = GameData.getItemExcelMap().get(relicId); + if (itemExcel == null) { + return null; + } + // Build cost items List costItems = new ArrayList<>(); costItems.addAll(excel.getMaterialCost()); // Check main affix if (mainAffix > 0) { + // TODO verify main affix on item + for (int specialId : excel.getSpecialMaterialCost()) { costItems.add(new ItemParam(specialId, 1)); } @@ -630,12 +638,7 @@ public class InventoryService extends BaseGameService { List items = new ArrayList<>(); for (int i = 0; i < count; i++) { - GameItem item = new GameItem(relicId, 1); - - if (mainAffix > 0) { - item.setMainAffix(mainAffix); - } - + GameItem item = new GameItem(itemExcel, 1, mainAffix); items.add(item); }