diff --git a/src/main/java/emu/grasscutter/game/shop/ShopChestBatchUseTable.java b/src/main/java/emu/grasscutter/game/shop/ShopChestBatchUseTable.java deleted file mode 100644 index c3b15da86..000000000 --- a/src/main/java/emu/grasscutter/game/shop/ShopChestBatchUseTable.java +++ /dev/null @@ -1,25 +0,0 @@ -package emu.grasscutter.game.shop; - -import java.util.ArrayList; -import java.util.List; - -public class ShopChestBatchUseTable { - private int itemId; - private List optionItem = new ArrayList<>(); - - public int getItemId() { - return itemId; - } - - public void setItemId(int itemId) { - this.itemId = itemId; - } - - public List getOptionItem() { - return optionItem; - } - - public void setOptionItem(List optionItem) { - this.optionItem = optionItem; - } -} diff --git a/src/main/java/emu/grasscutter/game/shop/ShopSystem.java b/src/main/java/emu/grasscutter/game/shop/ShopSystem.java index ccef76b6f..cae941752 100644 --- a/src/main/java/emu/grasscutter/game/shop/ShopSystem.java +++ b/src/main/java/emu/grasscutter/game/shop/ShopSystem.java @@ -18,7 +18,6 @@ import java.util.List; public class ShopSystem extends BaseGameSystem { private final Int2ObjectMap> shopData; private final List shopChestData; - private final List shopChestBatchUseData; private static final int REFRESH_HOUR = 4; // In GMT+8 server private static final String TIME_ZONE = "Asia/Shanghai"; // GMT+8 Timezone @@ -27,7 +26,6 @@ public class ShopSystem extends BaseGameSystem { super(server); this.shopData = new Int2ObjectOpenHashMap<>(); this.shopChestData = new ArrayList<>(); - this.shopChestBatchUseData = new ArrayList<>(); this.load(); } @@ -39,10 +37,6 @@ public class ShopSystem extends BaseGameSystem { return shopChestData; } - public List getShopChestBatchUseData() { - return shopChestBatchUseData; - } - public static int getShopNextRefreshTime(ShopInfo shopInfo) { return switch (shopInfo.getShopRefreshType()) { case SHOP_REFRESH_DAILY -> Utils.getNextTimestampOfThisHour(REFRESH_HOUR, TIME_ZONE, shopInfo.getShopRefreshParam()); @@ -96,25 +90,9 @@ public class ShopSystem extends BaseGameSystem { } } - private void loadShopChestBatchUse() { - getShopChestBatchUseData().clear(); - try { - List shopChestBatchUseTableList = DataLoader.loadList("ShopChestBatchUse.json", ShopChestBatchUseTable.class); - if (shopChestBatchUseTableList.size() > 0) { - getShopChestBatchUseData().addAll(shopChestBatchUseTableList); - Grasscutter.getLogger().debug("ShopChestBatchUse data successfully loaded."); - } else { - Grasscutter.getLogger().error("Unable to load ShopChestBatchUse data. ShopChestBatchUse data size is 0."); - } - } catch (Exception e) { - Grasscutter.getLogger().error("Unable to load ShopChestBatchUse data.", e); - } - } - public synchronized void load() { loadShop(); loadShopChest(); - loadShopChestBatchUse(); } public GameServer getServer() { diff --git a/src/main/java/emu/grasscutter/game/systems/InventorySystem.java b/src/main/java/emu/grasscutter/game/systems/InventorySystem.java index f6b4a64ab..f2e323d6b 100644 --- a/src/main/java/emu/grasscutter/game/systems/InventorySystem.java +++ b/src/main/java/emu/grasscutter/game/systems/InventorySystem.java @@ -10,10 +10,8 @@ import emu.grasscutter.data.GameData; import emu.grasscutter.data.common.ItemParamData; import emu.grasscutter.data.common.ItemUseData; import emu.grasscutter.data.excels.AvatarPromoteData; -import emu.grasscutter.data.excels.AvatarSkillData; import emu.grasscutter.data.excels.AvatarSkillDepotData; import emu.grasscutter.data.excels.ItemData; -import emu.grasscutter.data.excels.ProudSkillData; import emu.grasscutter.data.excels.WeaponPromoteData; import emu.grasscutter.data.excels.AvatarSkillDepotData.InherentProudSkillOpens; import emu.grasscutter.game.avatar.Avatar; @@ -23,7 +21,6 @@ import emu.grasscutter.game.player.Player; import emu.grasscutter.game.props.ActionReason; import emu.grasscutter.game.props.ItemUseOp; import emu.grasscutter.game.props.ItemUseTarget; -import emu.grasscutter.game.shop.ShopChestBatchUseTable; import emu.grasscutter.game.shop.ShopChestTable; import emu.grasscutter.net.proto.ItemParamOuterClass.ItemParam; import emu.grasscutter.net.proto.MaterialInfoOuterClass.MaterialInfo; @@ -713,6 +710,7 @@ public class InventorySystem extends BaseGameSystem { int used = 0; boolean useSuccess = false; ItemData itemData = useItem.getItemData(); + if (itemData == null) return null; // Use switch (itemData.getMaterialType()) { @@ -816,26 +814,20 @@ public class InventorySystem extends BaseGameSystem { } break; case MATERIAL_CHEST_BATCH_USE: - if (optionId < 1) { - break; - } - List shopChestBatchUseTableList = player.getServer().getShopSystem().getShopChestBatchUseData(); - for (ShopChestBatchUseTable shopChestBatchUseTable : shopChestBatchUseTableList) { - if (shopChestBatchUseTable.getItemId() != useItem.getItemId()) { - continue; - } - - if (shopChestBatchUseTable.getOptionItem() == null || optionId > shopChestBatchUseTable.getOptionItem().size()) { - break; - } - - int optionItemId = shopChestBatchUseTable.getOptionItem().get(optionId - 1); + if (optionId < 1) return null; // 1-indexed selection + for (var use : itemData.getItemUse()) { + if (use.getUseOp() != ItemUseOp.ITEM_USE_CHEST_SELECT_ITEM) continue; + String[] choices = use.getUseParam()[0].split(","); + if (optionId > choices.length) return null; + String[] choiceParts = choices[optionId-1].split(":"); + int optionItemId = Integer.parseInt(choiceParts[0]); + int optionItemCount = Integer.parseInt(choiceParts[1]); ItemData optionItem = GameData.getItemDataMap().get(optionItemId); if (optionItem == null) { break; } - player.getInventory().addItem(new GameItem(optionItem, count), ActionReason.Shop); + player.getInventory().addItem(new GameItem(optionItem, optionItemCount * count), ActionReason.Shop); used = count; break; diff --git a/src/main/resources/defaults/data/ShopChestBatchUse.json b/src/main/resources/defaults/data/ShopChestBatchUse.json deleted file mode 100644 index 38de4e16a..000000000 --- a/src/main/resources/defaults/data/ShopChestBatchUse.json +++ /dev/null @@ -1,55 +0,0 @@ -[ - { - "itemId": 115017, - "optionItem": [ - 104302, - 104305, - 104308, - 104311, - 104314, - 104317, - 104321, - 104324, - 104327 - ] - }, - { - "itemId": 115024, - "optionItem": [ - 114001, - 114005, - 114009, - 114013, - 114017, - 114021, - 114025, - 114029, - 114033 - ] - }, - { - "itemId": 115013, - "optionItem": [ - 104112, - 104122, - 104142, - 104152, - 104162, - 104172 - ] - }, - { - "itemId": 115025, - "optionItem": [ - 114002, - 114006, - 114010, - 114014, - 114018, - 114022, - 114026, - 114030, - 114034 - ] - } -]