diff --git a/src/main/java/emu/nebula/game/inventory/ItemParamMap.java b/src/main/java/emu/nebula/game/inventory/ItemParamMap.java index 3cd3adb..4c75c9c 100644 --- a/src/main/java/emu/nebula/game/inventory/ItemParamMap.java +++ b/src/main/java/emu/nebula/game/inventory/ItemParamMap.java @@ -67,6 +67,17 @@ public class ItemParamMap extends Int2IntLinkedOpenHashMap implements ObjectBidi return params; } + @Override + public ItemParamMap clone() { + var map = new ItemParamMap(); + + for (var entry : this) { + map.put(entry.getIntKey(), entry.getIntValue()); + } + + return map; + } + // Iterable @Override @@ -145,7 +156,7 @@ public class ItemParamMap extends Int2IntLinkedOpenHashMap implements ObjectBidi return map; } - // + // Static helpers public static ItemParamMap of(int... entries) { // Create diff --git a/src/main/java/emu/nebula/game/jointdrill/JointDrillRankEntry.java b/src/main/java/emu/nebula/game/jointdrill/JointDrillRankEntry.java index 2d964d1..2f6d7de 100644 --- a/src/main/java/emu/nebula/game/jointdrill/JointDrillRankEntry.java +++ b/src/main/java/emu/nebula/game/jointdrill/JointDrillRankEntry.java @@ -10,10 +10,13 @@ import emu.nebula.database.GameDatabaseObject; import emu.nebula.game.player.Player; import emu.nebula.game.tower.StarTowerBuild; import emu.nebula.game.character.GameCharacter; +import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.proto.JointDrillRank.JointDrillRankChar; import emu.nebula.proto.JointDrillRank.JointDrillRankData; import emu.nebula.proto.JointDrillRank.JointDrillRankTeam; import emu.nebula.proto.Public.HonorInfo; +import emu.nebula.proto.Public.ItemTpl; +import emu.nebula.proto.PublicStarTower.BuildPotential; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import lombok.Getter; @@ -153,6 +156,10 @@ public class JointDrillRankEntry implements GameDatabaseObject { private int damage; private int time; private List characters; + private int[] discs; + private ItemParamMap potentials; + private ItemParamMap notes; + private int[] secondaryIds; @Deprecated // Morphia only public JointDrillTeamEntry() { @@ -164,6 +171,10 @@ public class JointDrillRankEntry implements GameDatabaseObject { this.buildScore = build.getScore(); this.time = time; this.damage = damage; + this.discs = build.getDiscIds(); + this.potentials = build.getPotentials().clone(); + this.notes = build.getSubNoteSkills().clone(); + this.secondaryIds = build.getSecondarySkills().toIntArray(); this.characters = new ArrayList<>(); for (var charId : build.getCharIds()) { @@ -184,6 +195,30 @@ public class JointDrillRankEntry implements GameDatabaseObject { proto.addChars(c.toProto()); } + // Lazy way to add extra info. + // Discs, secondary ids, potentials, and notes were all added in the same update, + // so we don't need to null check each one individually. + if (this.getDiscs() != null) { + proto.addAllDiscs(this.getDiscs()); + proto.addAllActiveSecondaryIds(this.getSecondaryIds()); + + for (var pot : this.getPotentials()) { + var info = BuildPotential.newInstance() + .setPotentialId(pot.getIntKey()) + .setLevel(pot.getIntValue()); + + proto.addPotentials(info); + } + + for (var note : this.getNotes()) { + var info = ItemTpl.newInstance() + .setTid(note.getIntKey()) + .setQty(note.getIntValue()); + + proto.addNotes(info); + } + } + return proto; } } diff --git a/src/main/java/emu/nebula/game/scoreboss/ScoreBossRankEntry.java b/src/main/java/emu/nebula/game/scoreboss/ScoreBossRankEntry.java index 91f3a9b..d7f521d 100644 --- a/src/main/java/emu/nebula/game/scoreboss/ScoreBossRankEntry.java +++ b/src/main/java/emu/nebula/game/scoreboss/ScoreBossRankEntry.java @@ -12,7 +12,10 @@ import emu.nebula.database.GameDatabaseObject; import emu.nebula.game.player.Player; import emu.nebula.game.tower.StarTowerBuild; import emu.nebula.game.character.GameCharacter; +import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.proto.Public.HonorInfo; +import emu.nebula.proto.Public.ItemTpl; +import emu.nebula.proto.PublicStarTower.BuildPotential; import emu.nebula.proto.ScoreBossRank.ScoreBossRankChar; import emu.nebula.proto.ScoreBossRank.ScoreBossRankData; import emu.nebula.proto.ScoreBossRank.ScoreBossRankTeam; @@ -184,6 +187,10 @@ public class ScoreBossRankEntry implements GameDatabaseObject { private int levelScore; private int skillScore; private List characters; + private int[] discs; + private ItemParamMap potentials; + private ItemParamMap notes; + private int[] secondaryIds; @Deprecated // Morphia only public ScoreBossTeamEntry() { @@ -196,6 +203,10 @@ public class ScoreBossRankEntry implements GameDatabaseObject { this.stars = stars; this.levelScore = score; this.skillScore = skillScore; + this.discs = build.getDiscIds(); + this.potentials = build.getPotentials().clone(); + this.notes = build.getSubNoteSkills().clone(); + this.secondaryIds = build.getSecondarySkills().toIntArray(); this.characters = new ArrayList<>(); for (var charId : build.getCharIds()) { @@ -215,6 +226,30 @@ public class ScoreBossRankEntry implements GameDatabaseObject { proto.addChars(c.toProto()); } + // Lazy way to add extra info. + // Discs, secondary ids, potentials, and notes were all added in the same update, + // so we don't need to null check each one individually. + if (this.getDiscs() != null) { + proto.addAllDiscs(this.getDiscs()); + proto.addAllActiveSecondaryIds(this.getSecondaryIds()); + + for (var pot : this.getPotentials()) { + var info = BuildPotential.newInstance() + .setPotentialId(pot.getIntKey()) + .setLevel(pot.getIntValue()); + + proto.addPotentials(info); + } + + for (var note : this.getNotes()) { + var info = ItemTpl.newInstance() + .setTid(note.getIntKey()) + .setQty(note.getIntValue()); + + proto.addNotes(info); + } + } + return proto; } }