Update leave challenge logic

This commit is contained in:
Melledy
2023-11-18 16:59:48 -08:00
parent f8c0ce2c11
commit 337a244711
2 changed files with 22 additions and 4 deletions

View File

@@ -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;
}
}
}

View File

@@ -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);
}