Clear current player level ids when settling

This commit is contained in:
Melledy
2025-12-13 00:49:55 -08:00
parent 31e56ae17f
commit 9599877005
5 changed files with 34 additions and 4 deletions

View File

@@ -13,7 +13,6 @@ import lombok.Getter;
public class InfinityTowerManager extends PlayerManager { public class InfinityTowerManager extends PlayerManager {
private InfinityTowerLevelDef levelData; private InfinityTowerLevelDef levelData;
private int levelId; private int levelId;
private long buildId; private long buildId;
public InfinityTowerManager(Player player) { public InfinityTowerManager(Player player) {
@@ -79,6 +78,10 @@ public class InfinityTowerManager extends PlayerManager {
// Trigger achievement // Trigger achievement
this.getPlayer().trigger(AchievementCondition.InfinityTowerClearSpecificFloor, 10, this.getLevelId(), 0); this.getPlayer().trigger(AchievementCondition.InfinityTowerClearSpecificFloor, 10, this.getLevelId(), 0);
// Clear instance
this.levelId = 0;
this.buildId = 0;
// Success // Success
return change.setSuccess(true); return change.setSuccess(true);
} }

View File

@@ -70,6 +70,10 @@ public class InstanceManager extends PlayerManager {
// Set extra data // Set extra data
change.setExtraData(settleData); change.setExtraData(settleData);
// Clear instance
this.curInstanceId = 0;
this.rewardType = 0;
// Success // Success
return change.setSuccess(true); return change.setSuccess(true);
} }

View File

@@ -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 // Note: Story options are seperate from regular story ids to save database space, since most stories do not have options
private Map<Integer, StoryOptionLog> options; private Map<Integer, StoryOptionLog> options;
// Current story
private transient int storyId;
@Deprecated // Morphia only @Deprecated // Morphia only
public StoryManager() { public StoryManager() {
@@ -53,6 +56,10 @@ public class StoryManager extends PlayerManager implements GameDatabaseObject {
this.save(); this.save();
} }
public void apply(int idx) {
this.storyId = idx;
}
public boolean hasNew() { public boolean hasNew() {
if (this.getCompletedStories().size() < GameData.getStoryDataTable().size()) { if (this.getCompletedStories().size() < GameData.getStoryDataTable().size()) {
return true; return true;
@@ -111,6 +118,9 @@ public class StoryManager extends PlayerManager implements GameDatabaseObject {
Nebula.getGameDatabase().addToSet(this, this.getPlayerUid(), "evidences", id); Nebula.getGameDatabase().addToSet(this, this.getPlayerUid(), "evidences", id);
} }
// Clear current story
this.storyId = 0;
// Complete // Complete
return change; return change;
} }

View File

@@ -16,8 +16,13 @@ public class HandlerInfinityTowerSettleReq extends NetHandler {
// Parse request // Parse request
var req = InfinityTowerSettleReq.parseFrom(message); var req = InfinityTowerSettleReq.parseFrom(message);
// Settle // Get manager and save current level/build
var manager = session.getPlayer().getInfinityTowerManager(); var manager = session.getPlayer().getInfinityTowerManager();
int level = manager.getLevelId();
long build = manager.getBuildId();
// Settle
var change = manager.settle(req.getValue()); var change = manager.settle(req.getValue());
if (change == null) { if (change == null) {
@@ -25,10 +30,10 @@ public class HandlerInfinityTowerSettleReq extends NetHandler {
} }
// Get next level // Get next level
int nextLevel = manager.getLevelId() + 1; int nextLevel = level + 1;
// Try to apply for next level // Try to apply for next level
if (!manager.apply(nextLevel, -1)) { if (!manager.apply(nextLevel, build)) {
nextLevel = 0; nextLevel = 0;
} }

View File

@@ -2,6 +2,7 @@ package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler; import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId; import emu.nebula.net.NetMsgId;
import emu.nebula.proto.StoryApply.StoryApplyReq;
import emu.nebula.net.HandlerId; import emu.nebula.net.HandlerId;
import emu.nebula.net.GameSession; import emu.nebula.net.GameSession;
@@ -10,6 +11,13 @@ public class HandlerStoryApplyReq extends NetHandler {
@Override @Override
public byte[] handle(GameSession session, byte[] message) throws Exception { 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); return session.encodeMsg(NetMsgId.story_apply_succeed_ack);
} }