From 959987700514d943077f2bef3d5439463163d197 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sat, 13 Dec 2025 00:49:55 -0800 Subject: [PATCH] Clear current player level ids when settling --- .../game/infinitytower/InfinityTowerManager.java | 5 ++++- .../emu/nebula/game/instance/InstanceManager.java | 4 ++++ src/main/java/emu/nebula/game/story/StoryManager.java | 10 ++++++++++ .../handlers/HandlerInfinityTowerSettleReq.java | 11 ++++++++--- .../nebula/server/handlers/HandlerStoryApplyReq.java | 8 ++++++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/emu/nebula/game/infinitytower/InfinityTowerManager.java b/src/main/java/emu/nebula/game/infinitytower/InfinityTowerManager.java index df8bc41..b10ac97 100644 --- a/src/main/java/emu/nebula/game/infinitytower/InfinityTowerManager.java +++ b/src/main/java/emu/nebula/game/infinitytower/InfinityTowerManager.java @@ -13,7 +13,6 @@ import lombok.Getter; public class InfinityTowerManager extends PlayerManager { private InfinityTowerLevelDef levelData; private int levelId; - private long buildId; public InfinityTowerManager(Player player) { @@ -79,6 +78,10 @@ public class InfinityTowerManager extends PlayerManager { // Trigger achievement this.getPlayer().trigger(AchievementCondition.InfinityTowerClearSpecificFloor, 10, this.getLevelId(), 0); + // Clear instance + this.levelId = 0; + this.buildId = 0; + // Success return change.setSuccess(true); } diff --git a/src/main/java/emu/nebula/game/instance/InstanceManager.java b/src/main/java/emu/nebula/game/instance/InstanceManager.java index cb6b047..9cbfa2f 100644 --- a/src/main/java/emu/nebula/game/instance/InstanceManager.java +++ b/src/main/java/emu/nebula/game/instance/InstanceManager.java @@ -70,6 +70,10 @@ public class InstanceManager extends PlayerManager { // Set extra data change.setExtraData(settleData); + // Clear instance + this.curInstanceId = 0; + this.rewardType = 0; + // Success return change.setSuccess(true); } diff --git a/src/main/java/emu/nebula/game/story/StoryManager.java b/src/main/java/emu/nebula/game/story/StoryManager.java index 35a974b..6869f2b 100644 --- a/src/main/java/emu/nebula/game/story/StoryManager.java +++ b/src/main/java/emu/nebula/game/story/StoryManager.java @@ -37,6 +37,9 @@ public class StoryManager extends PlayerManager implements GameDatabaseObject { // Note: Story options are seperate from regular story ids to save database space, since most stories do not have options private Map options; + // Current story + private transient int storyId; + @Deprecated // Morphia only public StoryManager() { @@ -53,6 +56,10 @@ public class StoryManager extends PlayerManager implements GameDatabaseObject { this.save(); } + public void apply(int idx) { + this.storyId = idx; + } + public boolean hasNew() { if (this.getCompletedStories().size() < GameData.getStoryDataTable().size()) { return true; @@ -111,6 +118,9 @@ public class StoryManager extends PlayerManager implements GameDatabaseObject { Nebula.getGameDatabase().addToSet(this, this.getPlayerUid(), "evidences", id); } + // Clear current story + this.storyId = 0; + // Complete return change; } diff --git a/src/main/java/emu/nebula/server/handlers/HandlerInfinityTowerSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerInfinityTowerSettleReq.java index cd0454d..da0fd01 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerInfinityTowerSettleReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerInfinityTowerSettleReq.java @@ -16,8 +16,13 @@ public class HandlerInfinityTowerSettleReq extends NetHandler { // Parse request var req = InfinityTowerSettleReq.parseFrom(message); - // Settle + // Get manager and save current level/build var manager = session.getPlayer().getInfinityTowerManager(); + + int level = manager.getLevelId(); + long build = manager.getBuildId(); + + // Settle var change = manager.settle(req.getValue()); if (change == null) { @@ -25,10 +30,10 @@ public class HandlerInfinityTowerSettleReq extends NetHandler { } // Get next level - int nextLevel = manager.getLevelId() + 1; + int nextLevel = level + 1; // Try to apply for next level - if (!manager.apply(nextLevel, -1)) { + if (!manager.apply(nextLevel, build)) { nextLevel = 0; } diff --git a/src/main/java/emu/nebula/server/handlers/HandlerStoryApplyReq.java b/src/main/java/emu/nebula/server/handlers/HandlerStoryApplyReq.java index 632b795..e5f9583 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerStoryApplyReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerStoryApplyReq.java @@ -2,6 +2,7 @@ package emu.nebula.server.handlers; import emu.nebula.net.NetHandler; import emu.nebula.net.NetMsgId; +import emu.nebula.proto.StoryApply.StoryApplyReq; import emu.nebula.net.HandlerId; import emu.nebula.net.GameSession; @@ -10,6 +11,13 @@ public class HandlerStoryApplyReq extends NetHandler { @Override public byte[] handle(GameSession session, byte[] message) throws Exception { + // Parse request + var req = StoryApplyReq.parseFrom(message); + + // Apply for story + session.getPlayer().getStoryManager().apply(req.getIdx()); + + // Encode response return session.encodeMsg(NetMsgId.story_apply_succeed_ack); }