Fix infinite arena not being challengeable if unlockInstances was true

This commit is contained in:
Melledy
2025-11-17 03:21:56 -08:00
parent a18b7e8a2a
commit 7c95448e4e
2 changed files with 8 additions and 35 deletions

View File

@@ -20,7 +20,7 @@ public class InfinityTowerManager extends PlayerManager {
}
public int getBountyLevel() {
return 1;
return 0;
}
public boolean apply(int levelId, long buildId) {

View File

@@ -5,12 +5,8 @@ import emu.nebula.net.NetMsgId;
import emu.nebula.proto.InfinityTowerInfo.InfinityTowerInfoResp;
import emu.nebula.proto.Public.InfinityTowerLevelInfo;
import emu.nebula.net.HandlerId;
import emu.nebula.Nebula;
import emu.nebula.data.GameData;
import emu.nebula.net.GameSession;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
@HandlerId(NetMsgId.infinity_tower_info_req)
public class HandlerInfinityTowerInfoReq extends NetHandler {
@@ -18,38 +14,15 @@ public class HandlerInfinityTowerInfoReq extends NetHandler {
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Build response
var rsp = InfinityTowerInfoResp.newInstance()
.setBountyLevel(0);
.setBountyLevel(session.getPlayer().getInfinityTowerManager().getBountyLevel());
// Add unlocked levels
if (Nebula.getConfig().getServerOptions().unlockInstances) {
// Force unlock every level
var levels = new Int2ObjectOpenHashMap<InfinityTowerLevelInfo>();
// Get infinite arena log from player progress
for (var entry : session.getPlayer().getProgress().getInfinityArenaLog().int2IntEntrySet()) {
var info = InfinityTowerLevelInfo.newInstance()
.setId(entry.getIntKey())
.setLevelId(entry.getIntValue());
for (var data : GameData.getInfinityTowerLevelDataTable()) {
int id = (int) Math.floor(data.getId() / 10000D);
var info = levels.computeIfAbsent(
id,
diff -> InfinityTowerLevelInfo.newInstance().setId(id)
);
if (data.getId() > info.getLevelId()) {
info.setLevelId(data.getId());
}
}
for (var info : levels.values()) {
rsp.addInfos(info);
}
} else {
// Get infinite arena log from player progress
for (var entry : session.getPlayer().getProgress().getInfinityArenaLog().int2IntEntrySet()) {
var info = InfinityTowerLevelInfo.newInstance()
.setId(entry.getIntKey())
.setLevelId(entry.getIntValue());
rsp.addInfos(info);
}
rsp.addInfos(info);
}
// Encode and send