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;
import org.h2.util.Utils;
import emu.lunarcore.data.GameResource;
import emu.lunarcore.data.ResourceType;
import lombok.Getter;
@@ -13,6 +15,9 @@ public class MapEntranceExcel extends GameResource {
private int StartGroupID;
private int StartAnchorID;
private int[] FinishMainMissionList = Utils.EMPTY_INT_ARRAY;
private int[] FinishSubMissionList = Utils.EMPTY_INT_ARRAY;
@Override
public int getId() {
return ID;

View File

@@ -4,15 +4,13 @@ import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler;
import emu.lunarcore.server.packet.send.PacketGetEnteredSceneScRsp;
@Opcodes(CmdId.GetEnteredSceneCsReq)
public class HandlerGetEnteredSceneCsReq extends PacketHandler {
@Override
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(new PacketGetEnteredSceneScRsp(session.getPlayer()));
session.send(CmdId.GetEnteredSceneScRsp);
}
}

View File

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