From fa08bcebaeae89de71880f3aae5900274944d2a0 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sun, 7 Dec 2025 23:01:46 -0800 Subject: [PATCH] Give crescendo/talent material if we are adding duplicate discs/characters --- .../game/character/CharacterStorage.java | 18 ++++++++--- .../emu/nebula/game/inventory/Inventory.java | 32 ++++++++++++++++--- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/main/java/emu/nebula/game/character/CharacterStorage.java b/src/main/java/emu/nebula/game/character/CharacterStorage.java index 4dd3769..1ae441c 100644 --- a/src/main/java/emu/nebula/game/character/CharacterStorage.java +++ b/src/main/java/emu/nebula/game/character/CharacterStorage.java @@ -58,10 +58,15 @@ public class CharacterStorage extends PlayerManager { return null; } - return this.addCharacter(GameData.getCharacterDataTable().get(charId)); + // Get data + var data = GameData.getCharacterDataTable().get(charId); + if (data == null) return null; + + // Add character + return this.addCharacter(data); } - private GameCharacter addCharacter(CharacterDef data) { + public GameCharacter addCharacter(CharacterDef data) { // Sanity check to make sure we dont have this character already if (this.hasCharacter(data.getId())) { return null; @@ -132,10 +137,15 @@ public class CharacterStorage extends PlayerManager { return null; } - return this.addDisc(GameData.getDiscDataTable().get(discId)); + // Get data + var data = GameData.getDiscDataTable().get(discId); + if (data == null) return null; + + // Add disc + return this.addDisc(data); } - private GameDisc addDisc(DiscDef data) { + public GameDisc addDisc(DiscDef data) { // Sanity check to make sure we dont have this disc already if (this.hasDisc(data.getId())) { return null; diff --git a/src/main/java/emu/nebula/game/inventory/Inventory.java b/src/main/java/emu/nebula/game/inventory/Inventory.java index 5826354..4930fda 100644 --- a/src/main/java/emu/nebula/game/inventory/Inventory.java +++ b/src/main/java/emu/nebula/game/inventory/Inventory.java @@ -377,12 +377,23 @@ public class Inventory extends PlayerManager implements GameDatabaseObject { } } case Disc -> { - if (amount <= 0) { + // Cannot remove discs + if (amount <= 0) break; + + // Get disc data + var discData = GameData.getDiscDataTable().get(id); + if (discData == null) break; + + // Add transform item instead if we already have this disc + if (getPlayer().getCharacters().hasDisc(id)) { + this.addItem(discData.getTransformItemId(), amount, change); break; } - var disc = getPlayer().getCharacters().addDisc(id); + // Add disc + var disc = getPlayer().getCharacters().addDisc(discData); + // Add to change info if (disc != null) { change.add(disc.toProto()); } else { @@ -390,12 +401,23 @@ public class Inventory extends PlayerManager implements GameDatabaseObject { } } case Char -> { - if (amount <= 0) { + // Cannot remove characters + if (amount <= 0) break; + + // Get character data + var charData = GameData.getCharacterDataTable().get(id); + if (charData == null) break; + + // Add transform item instead if we already have this character + if (getPlayer().getCharacters().hasCharacter(id)) { + this.addItem(charData.getFragmentsId(), charData.getTransformQty(), change); break; } - var character = getPlayer().getCharacters().addCharacter(id); - + // Add character + var character = getPlayer().getCharacters().addCharacter(charData); + + // Add to change info if (character != null) { change.add(character.toProto()); } else {