Fix some scenes not showing up in the map

This commit is contained in:
Melledy
2023-12-07 03:07:21 -08:00
parent e6f65f47f5
commit 8d57e357c0
3 changed files with 24 additions and 12 deletions

View File

@@ -1,5 +1,7 @@
package emu.lunarcore.data.excel; package emu.lunarcore.data.excel;
import org.h2.util.Utils;
import emu.lunarcore.data.GameResource; import emu.lunarcore.data.GameResource;
import emu.lunarcore.data.ResourceType; import emu.lunarcore.data.ResourceType;
import lombok.Getter; import lombok.Getter;
@@ -12,6 +14,9 @@ public class MapEntranceExcel extends GameResource {
private int FloorID; private int FloorID;
private int StartGroupID; private int StartGroupID;
private int StartAnchorID; private int StartAnchorID;
private int[] FinishMainMissionList = Utils.EMPTY_INT_ARRAY;
private int[] FinishSubMissionList = Utils.EMPTY_INT_ARRAY;
@Override @Override
public int getId() { public int getId() {

View File

@@ -4,15 +4,13 @@ import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes; import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler; import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketGetEnteredSceneScRsp;
@Opcodes(CmdId.GetEnteredSceneCsReq) @Opcodes(CmdId.GetEnteredSceneCsReq)
public class HandlerGetEnteredSceneCsReq extends PacketHandler { public class HandlerGetEnteredSceneCsReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] data) throws Exception { public void handle(GameSession session, byte[] data) throws Exception {
// Note: This packet is not necessary for the client to load into a scene session.send(CmdId.GetEnteredSceneScRsp);
session.send(new PacketGetEnteredSceneScRsp(session.getPlayer()));
} }
} }

View File

@@ -1,26 +1,35 @@
package emu.lunarcore.server.packet.send; package emu.lunarcore.server.packet.send;
import emu.lunarcore.game.player.Player; import emu.lunarcore.data.GameData;
import emu.lunarcore.proto.EnteredSceneInfoOuterClass.EnteredSceneInfo; import emu.lunarcore.proto.EnteredSceneInfoOuterClass.EnteredSceneInfo;
import emu.lunarcore.proto.GetEnteredSceneScRspOuterClass.GetEnteredSceneScRsp; import emu.lunarcore.proto.GetEnteredSceneScRspOuterClass.GetEnteredSceneScRsp;
import emu.lunarcore.server.packet.BasePacket; import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CacheablePacket;
import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.CmdId;
@CacheablePacket
public class PacketGetEnteredSceneScRsp extends BasePacket { public class PacketGetEnteredSceneScRsp extends BasePacket {
public PacketGetEnteredSceneScRsp(Player player) { public PacketGetEnteredSceneScRsp() {
super(CmdId.GetEnteredSceneScRsp); super(CmdId.GetEnteredSceneScRsp);
var sceneInfo = EnteredSceneInfo.newInstance(); var data = GetEnteredSceneScRsp.newInstance();
if (player.getScene() != null) { // TODO find a better way to get these scenes
sceneInfo.setFloorId(player.getScene().getFloorId()); for (var excel : GameData.getMapEntranceExcelMap().values()) {
sceneInfo.setPlaneId(player.getScene().getPlaneId()); // Skip these
if (excel.getFinishMainMissionList().length == 0 && excel.getFinishSubMissionList().length == 0) {
continue;
}
// Add info
var info = EnteredSceneInfo.newInstance()
.setPlaneId(excel.getPlaneID())
.setFloorId(excel.getFloorID());
data.addEnteredSceneInfo(info);
} }
var data = GetEnteredSceneScRsp.newInstance()
.addEnteredSceneInfo(sceneInfo);
this.setData(data); this.setData(data);
} }
} }