mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-23 10:44:36 +01:00
Fix rogue protos and implement rogue finish screen
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user