mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-21 19:34:42 +01:00
Show available story dungeons to the player
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.DungeonEntryInfoReqOuterClass.DungeonEntryInfoReq;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
@Opcodes(PacketOpcodes.DungeonEntryInfoReq)
|
||||
public class HandlerDungeonEntryInfoReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
DungeonEntryInfoReq req = DungeonEntryInfoReq.parseFrom(payload);
|
||||
|
||||
session.getServer().getDungeonSystem().getEntryInfo(session.getPlayer(), req.getPointId());
|
||||
}
|
||||
}
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.DungeonEntryInfoReqOuterClass.DungeonEntryInfoReq;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
@Opcodes(PacketOpcodes.DungeonEntryInfoReq)
|
||||
public class HandlerDungeonEntryInfoReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
DungeonEntryInfoReq req = DungeonEntryInfoReq.parseFrom(payload);
|
||||
|
||||
session.getServer().getDungeonSystem().sendEntryInfoFor(session.getPlayer(), req.getPointId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,35 +1,63 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.data.common.PointData;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.DungeonEntryInfoOuterClass.DungeonEntryInfo;
|
||||
import emu.grasscutter.net.proto.DungeonEntryInfoRspOuterClass.DungeonEntryInfoRsp;
|
||||
|
||||
public class PacketDungeonEntryInfoRsp extends BasePacket {
|
||||
|
||||
public PacketDungeonEntryInfoRsp(Player player, PointData pointData) {
|
||||
super(PacketOpcodes.DungeonEntryInfoRsp);
|
||||
|
||||
DungeonEntryInfoRsp.Builder proto =
|
||||
DungeonEntryInfoRsp.newBuilder().setPointId(pointData.getId());
|
||||
|
||||
if (pointData.getDungeonIds() != null) {
|
||||
for (int dungeonId : pointData.getDungeonIds()) {
|
||||
DungeonEntryInfo info = DungeonEntryInfo.newBuilder().setDungeonId(dungeonId).build();
|
||||
proto.addDungeonEntryList(info);
|
||||
}
|
||||
}
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
public PacketDungeonEntryInfoRsp() {
|
||||
super(PacketOpcodes.DungeonEntryInfoRsp);
|
||||
|
||||
DungeonEntryInfoRsp proto = DungeonEntryInfoRsp.newBuilder().setRetcode(1).build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.data.common.PointData;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.DungeonEntryInfoOuterClass.DungeonEntryInfo;
|
||||
import emu.grasscutter.net.proto.DungeonEntryInfoRspOuterClass.DungeonEntryInfoRsp;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketDungeonEntryInfoRsp extends BasePacket {
|
||||
|
||||
public PacketDungeonEntryInfoRsp(PointData pointData) {
|
||||
super(PacketOpcodes.DungeonEntryInfoRsp);
|
||||
|
||||
DungeonEntryInfoRsp.Builder proto =
|
||||
DungeonEntryInfoRsp.newBuilder().setPointId(pointData.getId());
|
||||
|
||||
if (pointData.getDungeonIds() != null) {
|
||||
for (int dungeonId : pointData.getDungeonIds()) {
|
||||
DungeonEntryInfo info = DungeonEntryInfo.newBuilder().setDungeonId(dungeonId).build();
|
||||
proto.addDungeonEntryList(info);
|
||||
}
|
||||
}
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used in conjunction with quest-related dungeons.
|
||||
*
|
||||
* @param pointData The data associated with the dungeon.
|
||||
* @param additional A collection of additional quest-related dungeon IDs.
|
||||
*/
|
||||
public PacketDungeonEntryInfoRsp(PointData pointData, List<Integer> additional) {
|
||||
super(PacketOpcodes.DungeonEntryInfoRsp);
|
||||
|
||||
var packet = DungeonEntryInfoRsp.newBuilder()
|
||||
.setPointId(pointData.getId());
|
||||
|
||||
// Add dungeon IDs from the point data.
|
||||
if (pointData.getDungeonIds() != null) {
|
||||
Arrays.stream(pointData.getDungeonIds())
|
||||
.forEach(id -> packet.addDungeonEntryList(
|
||||
DungeonEntryInfo.newBuilder().setDungeonId(id)));
|
||||
}
|
||||
|
||||
// Add additional dungeon IDs.
|
||||
additional.forEach(id -> packet.addDungeonEntryList(
|
||||
DungeonEntryInfo.newBuilder().setDungeonId(id)));
|
||||
|
||||
this.setData(packet);
|
||||
}
|
||||
|
||||
public PacketDungeonEntryInfoRsp() {
|
||||
super(PacketOpcodes.DungeonEntryInfoRsp);
|
||||
|
||||
DungeonEntryInfoRsp proto = DungeonEntryInfoRsp.newBuilder().setRetcode(1).build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user