mirror of
https://github.com/Melledy/Nebula.git
synced 2026-09-19 09:09:54 +02:00
Implement Boss Blitz star rewards
This commit is contained in:
@@ -136,6 +136,7 @@ public class GameData {
|
|||||||
|
|
||||||
// Score boss
|
// Score boss
|
||||||
@Getter private static DataTable<ScoreBossControlDef> ScoreBossControlDataTable = new DataTable<>();
|
@Getter private static DataTable<ScoreBossControlDef> ScoreBossControlDataTable = new DataTable<>();
|
||||||
|
@Getter private static DataTable<ScoreBossRewardDef> ScoreBossRewardDataTable = new DataTable<>();
|
||||||
|
|
||||||
// Activity
|
// Activity
|
||||||
@Getter private static DataTable<ActivityDef> ActivityDataTable = new DataTable<>();
|
@Getter private static DataTable<ActivityDef> ActivityDataTable = new DataTable<>();
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package emu.nebula.data.resources;
|
||||||
|
|
||||||
|
import emu.nebula.data.BaseDef;
|
||||||
|
import emu.nebula.data.ResourceType;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@ResourceType(name = "ScoreBossReward.json")
|
||||||
|
public class ScoreBossRewardDef extends BaseDef {
|
||||||
|
private int StarNeed;
|
||||||
|
private int RewardItemId1;
|
||||||
|
private int RewardNum1;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getId() {
|
||||||
|
return StarNeed;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,17 @@
|
|||||||
package emu.nebula.game.scoreboss;
|
package emu.nebula.game.scoreboss;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import emu.nebula.Nebula;
|
import emu.nebula.Nebula;
|
||||||
import emu.nebula.data.GameData;
|
import emu.nebula.data.GameData;
|
||||||
import emu.nebula.data.resources.ScoreBossControlDef;
|
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.Player;
|
||||||
|
import emu.nebula.game.player.PlayerChangeInfo;
|
||||||
import emu.nebula.game.player.PlayerManager;
|
import emu.nebula.game.player.PlayerManager;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@@ -91,4 +98,54 @@ public class ScoreBossManager extends PlayerManager {
|
|||||||
// Success
|
// Success
|
||||||
return true;
|
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.ScoreBossRankChar;
|
||||||
import emu.nebula.proto.ScoreBossRank.ScoreBossRankData;
|
import emu.nebula.proto.ScoreBossRank.ScoreBossRankData;
|
||||||
import emu.nebula.proto.ScoreBossRank.ScoreBossRankTeam;
|
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.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ public class ScoreBossRankEntry implements GameDatabaseObject {
|
|||||||
private int score;
|
private int score;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private int stars;
|
private int stars;
|
||||||
|
private IntSet claimedRewards;
|
||||||
|
|
||||||
private int controlId;
|
private int controlId;
|
||||||
private Map<Integer, ScoreBossTeamEntry> teams;
|
private Map<Integer, ScoreBossTeamEntry> teams;
|
||||||
@@ -64,6 +66,14 @@ public class ScoreBossRankEntry implements GameDatabaseObject {
|
|||||||
return stars;
|
return stars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IntSet getClaimedRewards() {
|
||||||
|
if (this.claimedRewards == null) {
|
||||||
|
this.claimedRewards = new IntOpenHashSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.claimedRewards;
|
||||||
|
}
|
||||||
|
|
||||||
public void update(Player player) {
|
public void update(Player player) {
|
||||||
this.name = player.getName();
|
this.name = player.getName();
|
||||||
this.level = player.getLevel();
|
this.level = player.getLevel();
|
||||||
@@ -102,6 +112,7 @@ public class ScoreBossRankEntry implements GameDatabaseObject {
|
|||||||
private void reset() {
|
private void reset() {
|
||||||
this.score = 0;
|
this.score = 0;
|
||||||
this.stars = 0;
|
this.stars = 0;
|
||||||
|
this.getClaimedRewards().clear();
|
||||||
this.getTeams().clear();
|
this.getTeams().clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,11 @@ public class HandlerScoreBossInfoReq extends NetHandler {
|
|||||||
|
|
||||||
rsp.addLevels(info);
|
rsp.addLevels(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add claimed rewards
|
||||||
|
for (int id : rankEntry.getClaimedRewards()) {
|
||||||
|
rsp.addStarRewards(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Encode and send
|
// Encode and send
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package emu.nebula.server.handlers;
|
||||||
|
|
||||||
|
import emu.nebula.net.NetHandler;
|
||||||
|
import emu.nebula.net.NetMsgId;
|
||||||
|
import emu.nebula.proto.ScoreBossStarRewardReceive.ScoreBossStarRewardReceiveReq;
|
||||||
|
import emu.nebula.net.HandlerId;
|
||||||
|
import emu.nebula.net.GameSession;
|
||||||
|
|
||||||
|
@HandlerId(NetMsgId.score_boss_star_reward_receive_req)
|
||||||
|
public class HandlerScoreBossStarRewardReceiveReq extends NetHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||||
|
// Parse request
|
||||||
|
var req = ScoreBossStarRewardReceiveReq.parseFrom(message);
|
||||||
|
|
||||||
|
// Claim rewards
|
||||||
|
var change = session.getPlayer().getScoreBossManager().claimRewards(req.getStar());
|
||||||
|
|
||||||
|
// Encode and send
|
||||||
|
return session.encodeMsg(NetMsgId.score_boss_star_reward_receive_succeed_ack, change.toProto());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user