diff --git a/src/main/java/emu/grasscutter/game/dungeons/DungeonChallenge.java b/src/main/java/emu/grasscutter/game/dungeons/DungeonChallenge.java index 686f6023e..608587765 100644 --- a/src/main/java/emu/grasscutter/game/dungeons/DungeonChallenge.java +++ b/src/main/java/emu/grasscutter/game/dungeons/DungeonChallenge.java @@ -23,7 +23,8 @@ public class DungeonChallenge { private int challengeIndex; private int challengeId; - private boolean isSuccess; + private boolean success; + private boolean progress; private int score; private int objective = 0; @@ -60,11 +61,15 @@ public class DungeonChallenge { } public boolean isSuccess() { - return isSuccess; + return success; } public void setSuccess(boolean isSuccess) { - this.isSuccess = isSuccess; + this.success = isSuccess; + } + + public boolean inProgress() { + return progress; } public int getScore() { @@ -72,10 +77,12 @@ public class DungeonChallenge { } public void start() { + this.progress = true; getScene().broadcastPacket(new PacketDungeonChallengeBeginNotify(this)); } public void finish() { + this.progress = false; getScene().broadcastPacket(new PacketDungeonChallengeFinishNotify(this)); if (this.isSuccess()) { diff --git a/src/main/java/emu/grasscutter/game/world/Scene.java b/src/main/java/emu/grasscutter/game/world/Scene.java index e886d135b..9166499be 100644 --- a/src/main/java/emu/grasscutter/game/world/Scene.java +++ b/src/main/java/emu/grasscutter/game/world/Scene.java @@ -25,6 +25,7 @@ import emu.grasscutter.scripts.data.SceneBlock; import emu.grasscutter.scripts.data.SceneGadget; import emu.grasscutter.scripts.data.SceneGroup; import emu.grasscutter.scripts.data.ScriptArgs; +import emu.grasscutter.server.packet.send.PacketDungeonChallengeFinishNotify; import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify; import emu.grasscutter.server.packet.send.PacketLifeStateChangeNotify; import emu.grasscutter.server.packet.send.PacketSceneEntityAppearNotify; @@ -212,6 +213,11 @@ public class Scene { } public synchronized void removePlayer(Player player) { + // Remove from challenge if leaving + if (this.getChallenge() != null && this.getChallenge().inProgress()) { + player.sendPacket(new PacketDungeonChallengeFinishNotify(this.getChallenge())); + } + // Remove player from scene getPlayers().remove(player); player.setScene(null);