From 337a244711fad043c2b8834242283cec475cacbe Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sat, 18 Nov 2023 16:59:48 -0800 Subject: [PATCH] Update leave challenge logic --- .../java/emu/lunarcore/game/player/Player.java | 11 ++++++++++- .../packet/recv/HandlerLeaveChallengeCsReq.java | 15 ++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/java/emu/lunarcore/game/player/Player.java b/src/main/java/emu/lunarcore/game/player/Player.java index 65d6909..56c42c2 100644 --- a/src/main/java/emu/lunarcore/game/player/Player.java +++ b/src/main/java/emu/lunarcore/game/player/Player.java @@ -43,6 +43,7 @@ import emu.lunarcore.proto.RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo; import emu.lunarcore.server.game.GameServer; import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.BasePacket; +import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.SessionState; import emu.lunarcore.server.packet.send.*; import emu.lunarcore.util.Position; @@ -359,6 +360,13 @@ public class Player { this.battle = battle; } + public void forceQuitBattle() { + if (this.battle != null) { + this.battle = null; + this.getSession().send(CmdId.QuitBattleScNotify); + } + } + public void addStamina(int amount) { this.stamina += amount; this.sendPacket(new PacketStaminaInfoScNotify(this)); @@ -670,4 +678,5 @@ public class Player { return proto; } -} + +} \ No newline at end of file diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerLeaveChallengeCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerLeaveChallengeCsReq.java index 6cfcebe..c203826 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerLeaveChallengeCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerLeaveChallengeCsReq.java @@ -1,6 +1,7 @@ package emu.lunarcore.server.packet.recv; import emu.lunarcore.GameConstants; +import emu.lunarcore.game.enums.PlaneType; import emu.lunarcore.server.game.GameSession; import emu.lunarcore.server.packet.CmdId; import emu.lunarcore.server.packet.Opcodes; @@ -11,9 +12,17 @@ public class HandlerLeaveChallengeCsReq extends PacketHandler { @Override public void handle(GameSession session, byte[] header, byte[] data) throws Exception { - // TODO make sure client is in a challenge mode map - session.getPlayer().getLineupManager().setCurrentExtraLineup(0, false); - session.getPlayer().enterScene(GameConstants.CHALLENGE_ENTRANCE, 0, true); + // Make sure client is in a challenge scene + if (session.getPlayer().getScene() != null && session.getPlayer().getScene().getPlaneType() == PlaneType.Challenge) { + // As of 1.5.0, the server now has to handle the player leaving battle too + session.getPlayer().forceQuitBattle(); + + // Leave scene + session.getPlayer().getLineupManager().setCurrentExtraLineup(0, false); + session.getPlayer().enterScene(GameConstants.CHALLENGE_ENTRANCE, 0, true); + } + + // Send rsp packet to keep the client happy session.send(CmdId.LeaveChallengeScRsp); }