From 79e4172c47157cfe8e9b531353bb0eeece17ae97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AF=97=E9=9F=B3=E6=BE=84=E9=B8=A2=20=E9=95=9C=E8=8B=91?= =?UTF-8?q?=E8=8A=B3=E4=BE=9D?= Date: Sat, 18 Jun 2022 14:50:55 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20daily=20dungeon=20didn't=20display=20in?= =?UTF-8?q?=20note(=E7=AC=94=E8=AE=B0)=20(#1296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix Daily dungeon didn't display in note(笔记) -- Buggy * 123 --- .../java/emu/grasscutter/data/GameData.java | 6 +++ .../data/excels/DungeonEntryData.java | 25 +++++++++++ .../HandlerGetDailyDungeonEntryInfoReq.java | 21 +++++++++ .../PacketGetDailyDungeonEntryInfoRsp.java | 43 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 src/main/java/emu/grasscutter/data/excels/DungeonEntryData.java create mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandlerGetDailyDungeonEntryInfoReq.java create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketGetDailyDungeonEntryInfoRsp.java diff --git a/src/main/java/emu/grasscutter/data/GameData.java b/src/main/java/emu/grasscutter/data/GameData.java index 67c7e2945..ffbda065a 100644 --- a/src/main/java/emu/grasscutter/data/GameData.java +++ b/src/main/java/emu/grasscutter/data/GameData.java @@ -78,6 +78,8 @@ public class GameData { private static final Int2ObjectMap worldAreaDataMap = new Int2ObjectOpenHashMap<>(); private static final Int2ObjectMap worldLevelDataMap = new Int2ObjectOpenHashMap<>(); private static final Int2ObjectMap dailyDungeonDataMap = new Int2ObjectOpenHashMap<>(); + private static final Int2ObjectMap dungeonEntryDataMap = new Int2ObjectOpenHashMap<>(); + private static final Int2ObjectMap dungeonDataMap = new Int2ObjectOpenHashMap<>(); private static final Int2ObjectMap questDataMap = new Int2ObjectOpenHashMap<>(); private static final Int2ObjectMap shopGoodsDataMap = new Int2ObjectOpenHashMap<>(); @@ -346,6 +348,10 @@ public class GameData { return dailyDungeonDataMap; } + public static Int2ObjectMap getDungeonEntryDatatMap(){ + return dungeonEntryDataMap; + } + public static Map> getShopGoodsDataEntries() { if (shopGoods.isEmpty()) { shopGoodsDataMap.forEach((k, v) -> { diff --git a/src/main/java/emu/grasscutter/data/excels/DungeonEntryData.java b/src/main/java/emu/grasscutter/data/excels/DungeonEntryData.java new file mode 100644 index 000000000..a73bf5638 --- /dev/null +++ b/src/main/java/emu/grasscutter/data/excels/DungeonEntryData.java @@ -0,0 +1,25 @@ +package emu.grasscutter.data.excels; + +import emu.grasscutter.data.GameResource; +import emu.grasscutter.data.ResourceType; +import lombok.Getter; +import lombok.Setter; + +@ResourceType(name = "DungeonEntryExcelConfigData.json") +@Getter +@Setter +public class DungeonEntryData extends GameResource { + private int dungeonEntryId; + private int sceneId; + private int id; + + @Override + public int getId() { + return this.id; + } + + @Override + public void onLoad() { + + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetDailyDungeonEntryInfoReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetDailyDungeonEntryInfoReq.java new file mode 100644 index 000000000..f81e9bb6b --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerGetDailyDungeonEntryInfoReq.java @@ -0,0 +1,21 @@ +package emu.grasscutter.server.packet.recv; + +import emu.grasscutter.Grasscutter; +import emu.grasscutter.net.packet.Opcodes; +import emu.grasscutter.net.packet.PacketHandler; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.GetDailyDungeonEntryInfoReqOuterClass; +import emu.grasscutter.server.game.GameSession; +import emu.grasscutter.server.packet.send.PacketGetDailyDungeonEntryInfoRsp; + +@Opcodes(PacketOpcodes.GetDailyDungeonEntryInfoReq) +public class HandlerGetDailyDungeonEntryInfoReq extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { + var req= + GetDailyDungeonEntryInfoReqOuterClass.GetDailyDungeonEntryInfoReq.parseFrom(payload); + + session.send(new PacketGetDailyDungeonEntryInfoRsp(req.getSceneId())); + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketGetDailyDungeonEntryInfoRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketGetDailyDungeonEntryInfoRsp.java new file mode 100644 index 000000000..55f3bcc13 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketGetDailyDungeonEntryInfoRsp.java @@ -0,0 +1,43 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.Grasscutter; +import emu.grasscutter.data.GameData; +import emu.grasscutter.data.excels.DungeonEntryData; +import emu.grasscutter.net.packet.BasePacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.DailyDungeonEntryInfoOuterClass; +import emu.grasscutter.net.proto.DungeonEntryInfoOuterClass; +import emu.grasscutter.net.proto.GetDailyDungeonEntryInfoRspOuterClass; + +import java.util.List; + +public class PacketGetDailyDungeonEntryInfoRsp extends BasePacket { + + public PacketGetDailyDungeonEntryInfoRsp(Integer sceneID) { + super(PacketOpcodes.GetDailyDungeonEntryInfoRsp); + + var resp= GetDailyDungeonEntryInfoRspOuterClass.GetDailyDungeonEntryInfoRsp.newBuilder(); + + for (var info : GameData.getDungeonEntryDatatMap().values().parallelStream().filter(d -> d.getSceneId() == sceneID).map(this::getDungonEntryInfo).toList()) + resp.addDailyDungeonInfoList(info); + + this.setData(resp.build()); + } + + private DailyDungeonEntryInfoOuterClass.DailyDungeonEntryInfo getDungonEntryInfo(DungeonEntryData data) { + var dungeonEntryId = data.getDungeonEntryId(); + var id = data.getId(); + + //TODO: 来个爹把这块整活了吧 咚咚咚 + DungeonEntryInfoOuterClass.DungeonEntryInfo dungeonEntryInfo + = DungeonEntryInfoOuterClass.DungeonEntryInfo.newBuilder().setDungeonId(130).build(); + + var builder = DailyDungeonEntryInfoOuterClass.DailyDungeonEntryInfo.newBuilder(); + + builder.setDungeonEntryId(dungeonEntryId); + builder.setDungeonEntryConfigId(id); + builder.setRecommendDungeonEntryInfo(dungeonEntryInfo); + return builder.build(); + } + +}