From 09d169c5821eca64d22475992b2c4d13bc681676 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Mon, 27 Nov 2023 06:44:25 -0800 Subject: [PATCH] Fix starlight/ember exchange stores --- src/main/java/emu/lunarcore/data/excel/ShopExcel.java | 4 ++-- src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java | 3 +++ src/main/java/emu/lunarcore/game/shop/ShopService.java | 6 ++++-- .../server/packet/send/PacketGetShopListScRsp.java | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/emu/lunarcore/data/excel/ShopExcel.java b/src/main/java/emu/lunarcore/data/excel/ShopExcel.java index 254bde1..637df35 100644 --- a/src/main/java/emu/lunarcore/data/excel/ShopExcel.java +++ b/src/main/java/emu/lunarcore/data/excel/ShopExcel.java @@ -2,8 +2,8 @@ package emu.lunarcore.data.excel; import emu.lunarcore.data.GameResource; import emu.lunarcore.data.ResourceType; +import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import lombok.Getter; @Getter @@ -15,7 +15,7 @@ public class ShopExcel extends GameResource { private transient Int2ObjectMap goods; public ShopExcel() { - this.goods = new Int2ObjectOpenHashMap<>(); + this.goods = new Int2ObjectAVLTreeMap<>(); } @Override diff --git a/src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java b/src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java index 56bb792..8720469 100644 --- a/src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java +++ b/src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java @@ -34,6 +34,9 @@ public class ShopGoodsExcel extends GameResource { @Override public void onLoad() { + // Skip if we dont have an item id associated with this goods excel + if (this.getItemID() == 0) return; + // Add to shop excel ShopExcel shop = GameData.getShopExcelMap().get(this.ShopID); if (shop == null) return; diff --git a/src/main/java/emu/lunarcore/game/shop/ShopService.java b/src/main/java/emu/lunarcore/game/shop/ShopService.java index 5705c6b..13541d7 100644 --- a/src/main/java/emu/lunarcore/game/shop/ShopService.java +++ b/src/main/java/emu/lunarcore/game/shop/ShopService.java @@ -26,18 +26,20 @@ public class ShopService extends BaseGameService { ShopGoodsExcel goods = shop.getGoods().get(goodsId); if (goods == null) return null; + ItemExcel itemExcel = GameData.getItemExcelMap().get(goods.getItemID()); + if (itemExcel == null) return null; + // Verify item params if (!player.getInventory().verifyItems(goods.getCostList(), count)) { return null; } - // Pay items + // Handle payment player.getInventory().removeItemsByParams(goods.getCostList(), count); // Buy items List items = new ArrayList<>(); - ItemExcel itemExcel = GameData.getItemExcelMap().get(goods.getItemID()); if (!itemExcel.isEquippable()) { GameItem item = new GameItem(itemExcel, goods.getItemCount() * count); items.add(item); diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketGetShopListScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketGetShopListScRsp.java index c54cc8c..856f2ae 100644 --- a/src/main/java/emu/lunarcore/server/packet/send/PacketGetShopListScRsp.java +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketGetShopListScRsp.java @@ -16,7 +16,7 @@ public class PacketGetShopListScRsp extends BasePacket { .setShopType(shopType); for (ShopExcel shopExcel : GameData.getShopExcelMap().values()) { - if (shopExcel.getShopType() != shopType) { + if (shopExcel.getShopType() != shopType || shopExcel.getGoods().size() == 0) { continue; } @@ -24,7 +24,7 @@ public class PacketGetShopListScRsp extends BasePacket { .setShopId(shopExcel.getId()) .setCityLevel(1) .setEndTime(Integer.MAX_VALUE); - + for (var goodsExcel : shopExcel.getGoods().values()) { shop.addGoodsList(goodsExcel.toProto()); }