diff --git a/src/generated/main/emu/lunarcore/proto/MazeChestOuterClass.java b/src/generated/main/emu/lunarcore/proto/MazeChestOuterClass.java
index 40894c7..cf00ac3 100644
--- a/src/generated/main/emu/lunarcore/proto/MazeChestOuterClass.java
+++ b/src/generated/main/emu/lunarcore/proto/MazeChestOuterClass.java
@@ -19,7 +19,17 @@ public final class MazeChestOuterClass {
private static final long serialVersionUID = 0L;
/**
- * optional .MapInfoChestType map_info_chest_type = 4;
+ * optional uint32 unlocked_amount_list = 1;
+ */
+ private int unlockedAmountList;
+
+ /**
+ * optional uint32 total_amount_list = 4;
+ */
+ private int totalAmountList;
+
+ /**
+ * optional .MapInfoChestType map_info_chest_type = 14;
*/
private int mapInfoChestType;
@@ -34,25 +44,99 @@ public final class MazeChestOuterClass {
}
/**
- * optional .MapInfoChestType map_info_chest_type = 4;
- * @return whether the mapInfoChestType field is set
+ * optional uint32 unlocked_amount_list = 1;
+ * @return whether the unlockedAmountList field is set
*/
- public boolean hasMapInfoChestType() {
+ public boolean hasUnlockedAmountList() {
return (bitField0_ & 0x00000001) != 0;
}
/**
- * optional .MapInfoChestType map_info_chest_type = 4;
+ * optional uint32 unlocked_amount_list = 1;
+ * @return this
+ */
+ public MazeChest clearUnlockedAmountList() {
+ bitField0_ &= ~0x00000001;
+ unlockedAmountList = 0;
+ return this;
+ }
+
+ /**
+ * optional uint32 unlocked_amount_list = 1;
+ * @return the unlockedAmountList
+ */
+ public int getUnlockedAmountList() {
+ return unlockedAmountList;
+ }
+
+ /**
+ * optional uint32 unlocked_amount_list = 1;
+ * @param value the unlockedAmountList to set
+ * @return this
+ */
+ public MazeChest setUnlockedAmountList(final int value) {
+ bitField0_ |= 0x00000001;
+ unlockedAmountList = value;
+ return this;
+ }
+
+ /**
+ * optional uint32 total_amount_list = 4;
+ * @return whether the totalAmountList field is set
+ */
+ public boolean hasTotalAmountList() {
+ return (bitField0_ & 0x00000002) != 0;
+ }
+
+ /**
+ * optional uint32 total_amount_list = 4;
+ * @return this
+ */
+ public MazeChest clearTotalAmountList() {
+ bitField0_ &= ~0x00000002;
+ totalAmountList = 0;
+ return this;
+ }
+
+ /**
+ * optional uint32 total_amount_list = 4;
+ * @return the totalAmountList
+ */
+ public int getTotalAmountList() {
+ return totalAmountList;
+ }
+
+ /**
+ * optional uint32 total_amount_list = 4;
+ * @param value the totalAmountList to set
+ * @return this
+ */
+ public MazeChest setTotalAmountList(final int value) {
+ bitField0_ |= 0x00000002;
+ totalAmountList = value;
+ return this;
+ }
+
+ /**
+ * optional .MapInfoChestType map_info_chest_type = 14;
+ * @return whether the mapInfoChestType field is set
+ */
+ public boolean hasMapInfoChestType() {
+ return (bitField0_ & 0x00000004) != 0;
+ }
+
+ /**
+ * optional .MapInfoChestType map_info_chest_type = 14;
* @return this
*/
public MazeChest clearMapInfoChestType() {
- bitField0_ &= ~0x00000001;
+ bitField0_ &= ~0x00000004;
mapInfoChestType = 0;
return this;
}
/**
- * optional .MapInfoChestType map_info_chest_type = 4;
+ * optional .MapInfoChestType map_info_chest_type = 14;
* @return the mapInfoChestType
*/
public MapInfoChestTypeOuterClass.MapInfoChestType getMapInfoChestType() {
@@ -79,18 +163,18 @@ public final class MazeChestOuterClass {
* @return this
*/
public MazeChest setMapInfoChestTypeValue(final int value) {
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000004;
mapInfoChestType = value;
return this;
}
/**
- * optional .MapInfoChestType map_info_chest_type = 4;
+ * optional .MapInfoChestType map_info_chest_type = 14;
* @param value the mapInfoChestType to set
* @return this
*/
public MazeChest setMapInfoChestType(final MapInfoChestTypeOuterClass.MapInfoChestType value) {
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000004;
mapInfoChestType = value.getNumber();
return this;
}
@@ -100,6 +184,8 @@ public final class MazeChestOuterClass {
cachedSize = other.cachedSize;
if ((bitField0_ | other.bitField0_) != 0) {
bitField0_ = other.bitField0_;
+ unlockedAmountList = other.unlockedAmountList;
+ totalAmountList = other.totalAmountList;
mapInfoChestType = other.mapInfoChestType;
}
return this;
@@ -111,6 +197,12 @@ public final class MazeChestOuterClass {
return this;
}
cachedSize = -1;
+ if (other.hasUnlockedAmountList()) {
+ setUnlockedAmountList(other.unlockedAmountList);
+ }
+ if (other.hasTotalAmountList()) {
+ setTotalAmountList(other.totalAmountList);
+ }
if (other.hasMapInfoChestType()) {
setMapInfoChestTypeValue(other.mapInfoChestType);
}
@@ -124,6 +216,8 @@ public final class MazeChestOuterClass {
}
cachedSize = -1;
bitField0_ = 0;
+ unlockedAmountList = 0;
+ totalAmountList = 0;
mapInfoChestType = 0;
return this;
}
@@ -148,13 +242,23 @@ public final class MazeChestOuterClass {
}
MazeChest other = (MazeChest) o;
return bitField0_ == other.bitField0_
+ && (!hasUnlockedAmountList() || unlockedAmountList == other.unlockedAmountList)
+ && (!hasTotalAmountList() || totalAmountList == other.totalAmountList)
&& (!hasMapInfoChestType() || mapInfoChestType == other.mapInfoChestType);
}
@Override
public void writeTo(final ProtoSink output) throws IOException {
if ((bitField0_ & 0x00000001) != 0) {
+ output.writeRawByte((byte) 8);
+ output.writeUInt32NoTag(unlockedAmountList);
+ }
+ if ((bitField0_ & 0x00000002) != 0) {
output.writeRawByte((byte) 32);
+ output.writeUInt32NoTag(totalAmountList);
+ }
+ if ((bitField0_ & 0x00000004) != 0) {
+ output.writeRawByte((byte) 112);
output.writeEnumNoTag(mapInfoChestType);
}
}
@@ -163,6 +267,12 @@ public final class MazeChestOuterClass {
protected int computeSerializedSize() {
int size = 0;
if ((bitField0_ & 0x00000001) != 0) {
+ size += 1 + ProtoSink.computeUInt32SizeNoTag(unlockedAmountList);
+ }
+ if ((bitField0_ & 0x00000002) != 0) {
+ size += 1 + ProtoSink.computeUInt32SizeNoTag(totalAmountList);
+ }
+ if ((bitField0_ & 0x00000004) != 0) {
size += 1 + ProtoSink.computeEnumSizeNoTag(mapInfoChestType);
}
return size;
@@ -175,12 +285,30 @@ public final class MazeChestOuterClass {
int tag = input.readTag();
while (true) {
switch (tag) {
+ case 8: {
+ // unlockedAmountList
+ unlockedAmountList = input.readUInt32();
+ bitField0_ |= 0x00000001;
+ tag = input.readTag();
+ if (tag != 32) {
+ break;
+ }
+ }
case 32: {
+ // totalAmountList
+ totalAmountList = input.readUInt32();
+ bitField0_ |= 0x00000002;
+ tag = input.readTag();
+ if (tag != 112) {
+ break;
+ }
+ }
+ case 112: {
// mapInfoChestType
final int value = input.readInt32();
if (MapInfoChestTypeOuterClass.MapInfoChestType.forNumber(value) != null) {
mapInfoChestType = value;
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000004;
}
tag = input.readTag();
if (tag != 0) {
@@ -205,6 +333,12 @@ public final class MazeChestOuterClass {
public void writeTo(final JsonSink output) throws IOException {
output.beginObject();
if ((bitField0_ & 0x00000001) != 0) {
+ output.writeUInt32(FieldNames.unlockedAmountList, unlockedAmountList);
+ }
+ if ((bitField0_ & 0x00000002) != 0) {
+ output.writeUInt32(FieldNames.totalAmountList, totalAmountList);
+ }
+ if ((bitField0_ & 0x00000004) != 0) {
output.writeEnum(FieldNames.mapInfoChestType, mapInfoChestType, MapInfoChestTypeOuterClass.MapInfoChestType.converter());
}
output.endObject();
@@ -217,6 +351,30 @@ public final class MazeChestOuterClass {
}
while (!input.isAtEnd()) {
switch (input.readFieldHash()) {
+ case -47476647:
+ case -941040439: {
+ if (input.isAtField(FieldNames.unlockedAmountList)) {
+ if (!input.trySkipNullValue()) {
+ unlockedAmountList = input.readUInt32();
+ bitField0_ |= 0x00000001;
+ }
+ } else {
+ input.skipUnknownField();
+ }
+ break;
+ }
+ case -1767834758:
+ case -642776150: {
+ if (input.isAtField(FieldNames.totalAmountList)) {
+ if (!input.trySkipNullValue()) {
+ totalAmountList = input.readUInt32();
+ bitField0_ |= 0x00000002;
+ }
+ } else {
+ input.skipUnknownField();
+ }
+ break;
+ }
case 602980561:
case -763087610: {
if (input.isAtField(FieldNames.mapInfoChestType)) {
@@ -224,7 +382,7 @@ public final class MazeChestOuterClass {
final MapInfoChestTypeOuterClass.MapInfoChestType value = input.readEnum(MapInfoChestTypeOuterClass.MapInfoChestType.converter());
if (value != null) {
mapInfoChestType = value.getNumber();
- bitField0_ |= 0x00000001;
+ bitField0_ |= 0x00000004;
} else {
input.skipUnknownEnumValue();
}
@@ -286,6 +444,10 @@ public final class MazeChestOuterClass {
* Contains name constants used for serializing JSON
*/
static class FieldNames {
+ static final FieldName unlockedAmountList = FieldName.forField("unlockedAmountList", "unlocked_amount_list");
+
+ static final FieldName totalAmountList = FieldName.forField("totalAmountList", "total_amount_list");
+
static final FieldName mapInfoChestType = FieldName.forField("mapInfoChestType", "map_info_chest_type");
}
}
diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketGetSceneMapInfoScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketGetSceneMapInfoScRsp.java
index 72c4064..e8adf18 100644
--- a/src/main/java/emu/lunarcore/server/packet/send/PacketGetSceneMapInfoScRsp.java
+++ b/src/main/java/emu/lunarcore/server/packet/send/PacketGetSceneMapInfoScRsp.java
@@ -23,43 +23,56 @@ public class PacketGetSceneMapInfoScRsp extends BasePacket {
var data = GetSceneMapInfoScRsp.newInstance();
for (int entryId : list) {
+ // Create maze map
var mazeMap = MazeMapData.newInstance()
- .addUnlockedChestList(MazeChest.newInstance().setMapInfoChestType(MapInfoChestType.MAP_INFO_CHEST_TYPE_NORMAL))
- .addUnlockedChestList(MazeChest.newInstance().setMapInfoChestType(MapInfoChestType.MAP_INFO_CHEST_TYPE_PUZZLE))
- .addUnlockedChestList(MazeChest.newInstance().setMapInfoChestType(MapInfoChestType.MAP_INFO_CHEST_TYPE_CHALLENGE))
.setEntryId(entryId);
- // Map sections. TODO un hardcode
+ // Get map entrance excel
+ MapEntranceExcel excel = GameData.getMapEntranceExcelMap().get(entryId);
+ if (excel == null) {
+ data.addMapList(mazeMap);
+ continue;
+ }
+
+ // Get floor info
+ FloorInfo floorInfo = GameData.getFloorInfo(excel.getPlaneID(), excel.getFloorID());
+ if (floorInfo == null) {
+ data.addMapList(mazeMap);
+ continue;
+ }
+
+ // Chest counts
+ mazeMap.addUnlockedChestList(MazeChest.newInstance().setMapInfoChestType(MapInfoChestType.MAP_INFO_CHEST_TYPE_NORMAL).setTotalAmountList(1));
+ mazeMap.addUnlockedChestList(MazeChest.newInstance().setMapInfoChestType(MapInfoChestType.MAP_INFO_CHEST_TYPE_PUZZLE).setTotalAmountList(1));
+ mazeMap.addUnlockedChestList(MazeChest.newInstance().setMapInfoChestType(MapInfoChestType.MAP_INFO_CHEST_TYPE_CHALLENGE).setTotalAmountList(1));
+
+ // Add groups (Npc icons on the map, etc)
+ for (GroupInfo groupInfo : floorInfo.getGroups().values()) {
+ var mazeGroup = MazeGroup.newInstance().setGroupId(groupInfo.getId());
+ mazeMap.addMazeGroupList(mazeGroup);
+ }
+
+ // Map unlocked teleports
+ for (var teleport : floorInfo.getCachedTeleports().values()) {
+ mazeMap.addAllUnlockedTeleportList(teleport.getMappingInfoID());
+ }
+
+ // Map unlocked checkpoints that are not unlocked normally
+ for (var prop : floorInfo.getUnlockedCheckpoints()) {
+ var mazeProp = MazeProp.newInstance()
+ .setGroupId(prop.getAnchorGroupID())
+ .setConfigId(prop.getID())
+ .setState(PropState.CheckPointEnable.getVal());
+
+ mazeMap.addMazePropList(mazeProp);
+ }
+
+ // Lighten sections
for (int i = 0; i < 100; i++) {
mazeMap.addAllLightenSectionList(i);
}
-
- // Maze groups (Npc icons on the map, etc)
- MapEntranceExcel excel = GameData.getMapEntranceExcelMap().get(entryId);
- if (excel != null) {
- FloorInfo floorInfo = GameData.getFloorInfo(excel.getPlaneID(), excel.getFloorID());
- if (floorInfo != null) {
- // Add groups
- for (GroupInfo groupInfo : floorInfo.getGroups().values()) {
- var mazeGroup = MazeGroup.newInstance().setGroupId(groupInfo.getId());
- mazeMap.addMazeGroupList(mazeGroup);
- }
- // Map unlocked teleports
- for (var teleport : floorInfo.getCachedTeleports().values()) {
- mazeMap.addAllUnlockedTeleportList(teleport.getMappingInfoID());
- }
- // Map unlocked checkpoints that are not unlocked normally
- for (var prop : floorInfo.getUnlockedCheckpoints()) {
- var mazeProp = MazeProp.newInstance()
- .setGroupId(prop.getAnchorGroupID())
- .setConfigId(prop.getID())
- .setState(PropState.CheckPointEnable.getVal());
-
- mazeMap.addMazePropList(mazeProp);
- }
- }
- }
+ // Add to proto
data.addMapList(mazeMap);
}