Fix rogue protos and implement rogue finish screen

This commit is contained in:
Melledy
2023-11-22 03:39:10 -08:00
parent b7d9a46535
commit 74140b39f2
22 changed files with 3408 additions and 1996 deletions

View File

@@ -9,15 +9,21 @@ import emu.lunarcore.data.excel.RogueAreaExcel;
import emu.lunarcore.data.excel.RogueMapExcel;
import emu.lunarcore.game.battle.Battle;
import emu.lunarcore.game.player.Player;
import emu.lunarcore.game.player.lineup.PlayerLineup;
import emu.lunarcore.proto.AvatarTypeOuterClass.AvatarType;
import emu.lunarcore.proto.BattleEndStatusOuterClass.BattleEndStatus;
import emu.lunarcore.proto.BattleStatisticsOuterClass.BattleStatistics;
import emu.lunarcore.proto.ExtraLineupTypeOuterClass.ExtraLineupType;
import emu.lunarcore.proto.RogueAvatarInfoOuterClass.RogueAvatarInfo;
import emu.lunarcore.proto.RogueBuffInfoOuterClass.RogueBuffInfo;
import emu.lunarcore.proto.RogueBuffSourceOuterClass.RogueBuffSource;
import emu.lunarcore.proto.RogueCurrentInfoOuterClass.RogueCurrentInfo;
import emu.lunarcore.proto.RogueFinishInfoOuterClass.RogueFinishInfo;
import emu.lunarcore.proto.RogueMapInfoOuterClass.RogueMapInfo;
import emu.lunarcore.proto.RogueMiracleInfoOuterClass.RogueMiracleInfo;
import emu.lunarcore.proto.RogueMiracleSourceOuterClass.RogueMiracleSource;
import emu.lunarcore.proto.RogueRecordAvatarOuterClass.RogueRecordAvatar;
import emu.lunarcore.proto.RogueRecordInfoOuterClass.RogueRecordInfo;
import emu.lunarcore.proto.RogueRoomStatusOuterClass.RogueRoomStatus;
import emu.lunarcore.proto.RogueStatusOuterClass.RogueStatus;
import emu.lunarcore.server.packet.send.*;
@@ -46,6 +52,7 @@ public class RogueInstance {
private int aeonId;
private int aeonBuffType;
private boolean isWin;
@Deprecated // Morphia only!
public RogueInstance() {}
@@ -324,13 +331,48 @@ public class RogueInstance {
}
// Set flag for this so it gets serialized
proto.getMutableAchivedMiracleInfo();
proto.getMutableRogueMiracleInfo();
for (var miracle : this.getMiracles().values()) {
proto.getMutableAchivedMiracleInfo().addRogueMiracleList(miracle.toProto());
proto.getMutableRogueMiracleInfo().addRogueMiracleList(miracle.toProto());
}
return proto;
}
public RogueFinishInfo toFinishInfoProto() {
// Rogue record info
var recordInfo = RogueRecordInfo.newInstance();
for (var buff : this.getBuffs().values()) {
recordInfo.addBuffList(buff.toProto());
}
for (var miracle : this.getMiracles().values()) {
recordInfo.addRogueMiracleList(miracle.getId());
}
PlayerLineup lineup = getPlayer().getLineupManager().getExtraLineupByType(ExtraLineupType.LINEUP_ROGUE_VALUE);
if (lineup != null) {
for (int i = 0; i < lineup.getAvatars().size(); i++) {
var recordAvatar = RogueRecordAvatar.newInstance()
.setId(lineup.getAvatars().get(i))
.setSlot(i)
.setAvatarType(AvatarType.AVATAR_FORMAL_TYPE);
recordInfo.addAvatarList(recordAvatar);
}
}
// Create rogue finish info
var proto = RogueFinishInfo.newInstance()
.setAreaId(this.getAreaId())
.setIsWin(this.isWin())
.setPassRoomCount(this.getCurrentSiteId())
.setReachRoomCount(this.getCurrentRoomProgress())
.setRecordInfo(recordInfo);
return proto;
}
}

View File

@@ -23,8 +23,9 @@ import emu.lunarcore.proto.RogueTalentInfoOuterClass.RogueTalentInfo;
import emu.lunarcore.proto.RogueTalentOuterClass.RogueTalent;
import emu.lunarcore.proto.RogueTalentStatusOuterClass.RogueTalentStatus;
import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.send.PacketLeaveRogueScRsp;
import emu.lunarcore.server.packet.send.PacketStartRogueScRsp;
import emu.lunarcore.server.packet.send.PacketSyncRogueFinishScNotify;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
import lombok.Getter;
@@ -126,15 +127,34 @@ public class RogueManager extends BasePlayerManager {
getPlayer().sendPacket(new PacketStartRogueScRsp(getPlayer()));
}
public void leaveRogue() {
if (getPlayer().getRogueInstance() == null) {
getPlayer().getSession().send(CmdId.LeaveRogueScRsp);
return;
}
// Clear rogue instance
getPlayer().setRogueInstance(null);
// Leave scene
getPlayer().getLineupManager().setCurrentExtraLineup(0, false);
getPlayer().enterScene(GameConstants.ROGUE_ENTRANCE, 0, false); // Make sure we dont send an enter scene packet here
// Send packet
getPlayer().sendPacket(new PacketLeaveRogueScRsp(this.getPlayer()));
}
public void quitRogue() {
if (getPlayer().getRogueInstance() == null) {
getPlayer().getSession().send(CmdId.QuitRogueScRsp);
return;
}
getPlayer().setRogueInstance(null);
getPlayer().enterScene(GameConstants.ROGUE_ENTRANCE, 0, true); // Test
getPlayer().getSession().send(CmdId.QuitRogueScRsp);
getPlayer().getSession().send(new PacketSyncRogueFinishScNotify(getPlayer()));
// This isnt correct behavior, but it does the job
this.leaveRogue();
}
public RogueInfo toProto() {
@@ -163,7 +183,7 @@ public class RogueManager extends BasePlayerManager {
.setRogueSeasonInfo(season);
var aeonInfo = RogueAeonInfo.newInstance()
.setUnlockedAeonNum(GameData.getRogueAeonExcelMap().size());
.setUnlockAeonNum(GameData.getRogueAeonExcelMap().size());
for (var aeonExcel : GameData.getRogueAeonExcelMap().values()) {
aeonInfo.addAeonIdList(aeonExcel.getAeonID());
@@ -174,7 +194,6 @@ public class RogueManager extends BasePlayerManager {
.setRogueAeonInfo(aeonInfo)
.setRogueData(data)
.setRogueVirtualItemInfo(getPlayer().toRogueVirtualItemsProto())
.setTalentPoints(getPlayer().getTalentPoints())
.setSeasonId(seasonId)
.setBeginTime(beginTime)
.setEndTime(endTime);

View File

@@ -10,7 +10,7 @@ public class HandlerLeaveRogueCsReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] data) throws Exception {
session.send(CmdId.LeaveRogueScRsp);
session.getPlayer().getRogueManager().leaveRogue();
}
}

View File

@@ -0,0 +1,20 @@
package emu.lunarcore.server.packet.send;
import emu.lunarcore.game.player.Player;
import emu.lunarcore.proto.LeaveRogueScRspOuterClass.LeaveRogueScRsp;
import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CmdId;
public class PacketLeaveRogueScRsp extends BasePacket {
public PacketLeaveRogueScRsp(Player player) {
super(CmdId.LeaveRogueScRsp);
var data = LeaveRogueScRsp.newInstance()
.setLineup(player.getCurrentLineup().toProto())
.setRogueInfo(player.getRogueManager().toProto())
.setScene(player.getScene().toProto());
this.setData(data);
}
}

View File

@@ -13,7 +13,7 @@ public class PacketRollRogueBuffScRsp extends BasePacket {
var data = RollRogueBuffScRsp.newInstance();
if (selectMenu != null) {
data.setRogueBuffSelectInfo(selectMenu.toProto());
data.setBuffSelectInfo(selectMenu.toProto());
} else {
data.setRetcode(1);
}

View File

@@ -0,0 +1,21 @@
package emu.lunarcore.server.packet.send;
import emu.lunarcore.game.player.Player;
import emu.lunarcore.proto.SyncRogueFinishScNotifyOuterClass.SyncRogueFinishScNotify;
import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CmdId;
public class PacketSyncRogueFinishScNotify extends BasePacket {
public PacketSyncRogueFinishScNotify(Player player) {
super(CmdId.SyncRogueFinishScNotify);
var data = SyncRogueFinishScNotify.newInstance();
if (player.getRogueInstance() != null) {
data.setFinishInfo(player.getRogueInstance().toFinishInfoProto());
}
this.setData(data);
}
}