Implement Boss Blitz star rewards

This commit is contained in:
Melledy
2025-12-07 16:31:19 -08:00
parent be5a6709fd
commit 005f138599
6 changed files with 118 additions and 1 deletions
@@ -1,10 +1,17 @@
package emu.nebula.game.scoreboss;
import java.util.Collection;
import java.util.List;
import emu.nebula.Nebula;
import emu.nebula.data.GameData;
import emu.nebula.data.resources.ScoreBossControlDef;
import emu.nebula.data.resources.ScoreBossRewardDef;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.player.Player;
import emu.nebula.game.player.PlayerChangeInfo;
import emu.nebula.game.player.PlayerManager;
import lombok.Getter;
@Getter
@@ -91,4 +98,54 @@ public class ScoreBossManager extends PlayerManager {
// Success
return true;
}
public PlayerChangeInfo claimRewards(int star) {
// Get rank entry
this.getRankEntry();
if (this.ranking == null) {
return new PlayerChangeInfo();
}
// Init variables
Collection<ScoreBossRewardDef> claims = null;
// Add to claim list
if (star > 0) {
var data = GameData.getScoreBossRewardDataTable().get(star);
if (data != null) {
claims = List.of(data);
}
} else {
claims = GameData.getScoreBossRewardDataTable().values();
}
// Init rewards
var rewards = new ItemParamMap();
int starCount = ranking.getStars();
boolean shouldSave = false;
// Try and claim
for (var data : claims) {
// Check if we have earned enough stars
if (starCount >= data.getStarNeed() && !ranking.getClaimedRewards().contains(data.getId())) {
// Add rewards
rewards.add(data.getRewardItemId1(), data.getRewardNum1());
// Set in claimed rewards
this.ranking.getClaimedRewards().add(data.getId());
// Set save flag so we update ranking to the database
shouldSave = true;
}
}
// Save to database
if (shouldSave) {
this.ranking.save();
}
// Add rewards
return this.getPlayer().getInventory().addItems(rewards);
}
}
@@ -16,7 +16,8 @@ import emu.nebula.proto.Public.HonorInfo;
import emu.nebula.proto.ScoreBossRank.ScoreBossRankChar;
import emu.nebula.proto.ScoreBossRank.ScoreBossRankData;
import emu.nebula.proto.ScoreBossRank.ScoreBossRankTeam;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
import lombok.Getter;
import lombok.Setter;
@@ -35,6 +36,7 @@ public class ScoreBossRankEntry implements GameDatabaseObject {
private int score;
@SuppressWarnings("unused")
private int stars;
private IntSet claimedRewards;
private int controlId;
private Map<Integer, ScoreBossTeamEntry> teams;
@@ -64,6 +66,14 @@ public class ScoreBossRankEntry implements GameDatabaseObject {
return stars;
}
public IntSet getClaimedRewards() {
if (this.claimedRewards == null) {
this.claimedRewards = new IntOpenHashSet();
}
return this.claimedRewards;
}
public void update(Player player) {
this.name = player.getName();
this.level = player.getLevel();
@@ -102,6 +112,7 @@ public class ScoreBossRankEntry implements GameDatabaseObject {
private void reset() {
this.score = 0;
this.stars = 0;
this.getClaimedRewards().clear();
this.getTeams().clear();
}