From 35497776d0f1966e866aa14ba35e83245129a030 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Tue, 3 Oct 2023 04:54:25 -0700 Subject: [PATCH] Add basic handling of shops --- .../java/emu/lunarcore/data/GameData.java | 1 + .../emu/lunarcore/data/excel/ShopExcel.java | 26 ++++++++++++ .../lunarcore/data/excel/ShopGoodsExcel.java | 41 +++++++++++++++++++ .../packet/recv/HandlerBuyGoodsCsReq.java | 16 ++++++++ .../packet/send/PacketGetShopListScRsp.java | 22 +++++++++- 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/main/java/emu/lunarcore/data/excel/ShopExcel.java create mode 100644 src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java create mode 100644 src/main/java/emu/lunarcore/server/packet/recv/HandlerBuyGoodsCsReq.java diff --git a/src/main/java/emu/lunarcore/data/GameData.java b/src/main/java/emu/lunarcore/data/GameData.java index 8cbd715..9e32719 100644 --- a/src/main/java/emu/lunarcore/data/GameData.java +++ b/src/main/java/emu/lunarcore/data/GameData.java @@ -28,6 +28,7 @@ public class GameData { @Getter private static Int2ObjectMap mapEntranceExcelMap = new Int2ObjectOpenHashMap<>(); @Getter private static Int2ObjectMap heroExcelMap = new Int2ObjectOpenHashMap<>(); @Getter private static Int2ObjectMap challengeExcelMap = new Int2ObjectOpenHashMap<>(); + @Getter private static Int2ObjectMap shopExcelMap = new Int2ObjectOpenHashMap<>(); private static Int2ObjectMap avatarPromotionExcelMap = new Int2ObjectOpenHashMap<>(); private static Int2ObjectMap avatarSkillTreeExcelMap = new Int2ObjectOpenHashMap<>(); diff --git a/src/main/java/emu/lunarcore/data/excel/ShopExcel.java b/src/main/java/emu/lunarcore/data/excel/ShopExcel.java new file mode 100644 index 0000000..254bde1 --- /dev/null +++ b/src/main/java/emu/lunarcore/data/excel/ShopExcel.java @@ -0,0 +1,26 @@ +package emu.lunarcore.data.excel; + +import emu.lunarcore.data.GameResource; +import emu.lunarcore.data.ResourceType; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import lombok.Getter; + +@Getter +@ResourceType(name = {"ShopConfig.json"}) +public class ShopExcel extends GameResource { + private int ShopID; + private int ShopType; + + private transient Int2ObjectMap goods; + + public ShopExcel() { + this.goods = new Int2ObjectOpenHashMap<>(); + } + + @Override + public int getId() { + return ShopID; + } + +} diff --git a/src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java b/src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java new file mode 100644 index 0000000..e2d847a --- /dev/null +++ b/src/main/java/emu/lunarcore/data/excel/ShopGoodsExcel.java @@ -0,0 +1,41 @@ +package emu.lunarcore.data.excel; + +import emu.lunarcore.data.GameData; +import emu.lunarcore.data.GameResource; +import emu.lunarcore.data.ResourceType; +import emu.lunarcore.data.ResourceType.LoadPriority; +import emu.lunarcore.proto.GoodsOuterClass.Goods; +import lombok.Getter; + +@Getter +@ResourceType(name = {"ShopGoodsConfig.json"}, loadPriority = LoadPriority.LOW) +public class ShopGoodsExcel extends GameResource { + private int GoodsID; + private int ItemID; + private int ItemCount; + private int ShopID; + private int[] CurrencyList; + private int[] CurrencyCostList; + + @Override + public int getId() { + return GoodsID; + } + + @Override + public void onLoad() { + ShopExcel shop = GameData.getShopExcelMap().get(this.ShopID); + if (shop == null) return; + + shop.getGoods().put(this.GoodsID, this); + } + + public Goods toProto() { + var proto = Goods.newInstance() + .setGoodsId(this.getGoodsID()) + .setItemId(this.getItemID()) + .setEndTime(Integer.MAX_VALUE); + + return proto; + } +} diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerBuyGoodsCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerBuyGoodsCsReq.java new file mode 100644 index 0000000..5c849e2 --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerBuyGoodsCsReq.java @@ -0,0 +1,16 @@ +package emu.lunarcore.server.packet.recv; + +import emu.lunarcore.server.game.GameSession; +import emu.lunarcore.server.packet.CmdId; +import emu.lunarcore.server.packet.Opcodes; +import emu.lunarcore.server.packet.PacketHandler; + +@Opcodes(CmdId.BuyGoodsCsReq) +public class HandlerBuyGoodsCsReq extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] header, byte[] data) throws Exception { + session.send(CmdId.BuyGoodsScRsp); + } + +} 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 9a27cdc..c54cc8c 100644 --- a/src/main/java/emu/lunarcore/server/packet/send/PacketGetShopListScRsp.java +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketGetShopListScRsp.java @@ -1,6 +1,9 @@ package emu.lunarcore.server.packet.send; +import emu.lunarcore.data.GameData; +import emu.lunarcore.data.excel.ShopExcel; import emu.lunarcore.proto.GetShopListScRspOuterClass.GetShopListScRsp; +import emu.lunarcore.proto.ShopOuterClass.Shop; import emu.lunarcore.server.packet.BasePacket; import emu.lunarcore.server.packet.CmdId; @@ -8,10 +11,27 @@ public class PacketGetShopListScRsp extends BasePacket { public PacketGetShopListScRsp(int shopType) { super(CmdId.GetShopListScRsp); - + var data = GetShopListScRsp.newInstance() .setShopType(shopType); + for (ShopExcel shopExcel : GameData.getShopExcelMap().values()) { + if (shopExcel.getShopType() != shopType) { + continue; + } + + Shop shop = Shop.newInstance() + .setShopId(shopExcel.getId()) + .setCityLevel(1) + .setEndTime(Integer.MAX_VALUE); + + for (var goodsExcel : shopExcel.getGoods().values()) { + shop.addGoodsList(goodsExcel.toProto()); + } + + data.addShopList(shop); + } + this.setData(data); } }