fix(startower): fix level up logic

This commit is contained in:
Fishia
2025-11-28 07:14:59 -08:00
committed by Melledy
parent 3e47c8ef06
commit 7577bf87d4
2 changed files with 22 additions and 17 deletions
@@ -7,6 +7,7 @@ import lombok.Getter;
@Getter @Getter
@ResourceType(name = "StarTowerFloorExp.json") @ResourceType(name = "StarTowerFloorExp.json")
public class StarTowerFloorExpDef extends BaseDef { public class StarTowerFloorExpDef extends BaseDef {
private int Id;
private int StarTowerId; private int StarTowerId;
private int Stage; private int Stage;
private int NormalExp; private int NormalExp;
@@ -16,6 +17,6 @@ public class StarTowerFloorExpDef extends BaseDef {
@Override @Override
public int getId() { public int getId() {
return StarTowerId; return Id;
} }
} }
@@ -6,6 +6,7 @@ import java.util.List;
import dev.morphia.annotations.Entity; import dev.morphia.annotations.Entity;
import emu.nebula.GameConstants; import emu.nebula.GameConstants;
import emu.nebula.Nebula;
import emu.nebula.data.GameData; import emu.nebula.data.GameData;
import emu.nebula.data.resources.PotentialDef; import emu.nebula.data.resources.PotentialDef;
import emu.nebula.data.resources.StarTowerDef; import emu.nebula.data.resources.StarTowerDef;
@@ -227,35 +228,33 @@ public class StarTowerGame {
return gold; return gold;
} }
public int levelUp(int exp, int picks) { public int levelUp(int picks) {
if (this.teamExp + exp >= this.nextLevelExp) { if (this.teamExp >= this.nextLevelExp) {
// Level up // Level up
this.teamLevel++; this.teamLevel++;
// Add 1 to pending potential picks // Add 1 to pending potential picks
picks++; picks++;
// Handle excess exp // Subtract target exp
if (this.teamExp + exp - this.nextLevelExp > 0) { this.teamExp = this.teamExp - this.nextLevelExp;
int excessExp = this.teamExp + exp - this.nextLevelExp;
return levelUp(excessExp, picks);
}
// Next level // Update next level exp
this.nextLevelExp = GameData.getStarTowerTeamExpDataTable().get(this.teamLevel + 1).getNeedExp(); this.nextLevelExp = GameData.getStarTowerTeamExpDataTable().get(this.teamLevel + 1).getNeedExp();
}
else { // Re-check and continue processing if we still got exp
// Update current team exp if (this.teamExp > 0) {
this.teamExp += exp; return levelUp(picks);
}
} }
// Return picks // Return picks
return picks; return picks;
} }
public int levelUp(int exp) { public int levelUp() {
int potentialPicks = 0; int potentialPicks = 0;
return this.levelUp(exp, potentialPicks); return this.levelUp(potentialPicks);
} }
// Cases // Cases
@@ -480,7 +479,11 @@ public class StarTowerGame {
// Handle leveling up // Handle leveling up
// Get relevant floor exp data // Get relevant floor exp data
var floorExpData = GameData.getStarTowerFloorExpDataTable().get(this.getId()); // fishiatee: THERE'S NO LINQ IN JAVAAAAAAAAAAAAA
var floorExpData = GameData.getStarTowerFloorExpDataTable().stream()
.filter(f -> f.getStarTowerId() == this.getId())
.findFirst()
.orElseThrow();
int expReward = 0; int expReward = 0;
// Determine appropriate exp reward // Determine appropriate exp reward
@@ -504,7 +507,8 @@ public class StarTowerGame {
} }
// Level up // Level up
this.pendingPotentialCases += this.levelUp(expReward); this.teamExp += expReward;
this.pendingPotentialCases += this.levelUp();
// Add clear time // Add clear time
this.battleTime += proto.getVictory().getTime(); this.battleTime += proto.getVictory().getTime();