From 20b6ee3931bbd0298763383149ad51adfbca2699 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:28:42 -0800 Subject: [PATCH] Implement ascension skin change --- .../emu/nebula/game/character/Character.java | 20 +++++++++++++++++++ .../emu/nebula/game/inventory/Inventory.java | 9 +++++++++ 2 files changed, 29 insertions(+) diff --git a/src/main/java/emu/nebula/game/character/Character.java b/src/main/java/emu/nebula/game/character/Character.java index b45b423..46d08be 100644 --- a/src/main/java/emu/nebula/game/character/Character.java +++ b/src/main/java/emu/nebula/game/character/Character.java @@ -17,9 +17,13 @@ import emu.nebula.database.GameDatabaseObject; import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.player.Player; import emu.nebula.game.player.PlayerChangeInfo; +import emu.nebula.net.NetMsgId; +import emu.nebula.proto.Notify.Skin; +import emu.nebula.proto.Notify.SkinChange; import emu.nebula.proto.Public.Char; import emu.nebula.proto.Public.CharGemPreset; import emu.nebula.proto.Public.CharGemSlot; +import emu.nebula.proto.Public.UI32; import emu.nebula.proto.PublicStarTower.StarTowerChar; import emu.nebula.proto.PublicStarTower.StarTowerCharGem; import emu.nebula.util.Bitset; @@ -191,6 +195,22 @@ public class Character implements GameDatabaseObject { // Add advance level this.advance++; + // Check if we need to add skin + if (this.getAdvance() == this.getData().getAdvanceSkinUnlockLevel()) { + // Set advance skin + this.skin = this.getData().getAdvanceSkinId(); + + // Send packets + this.getPlayer().addNextPackage( + NetMsgId.character_skin_gain_notify, + Skin.newInstance().setNew(UI32.newInstance().setValue(this.getSkin())) + ); + this.getPlayer().addNextPackage( + NetMsgId.character_skin_change_notify, + SkinChange.newInstance().setCharId(this.getCharId()).setSkinId(this.getSkin()) + ); + } + // Save to database this.save(); diff --git a/src/main/java/emu/nebula/game/inventory/Inventory.java b/src/main/java/emu/nebula/game/inventory/Inventory.java index be116d7..b69c3a1 100644 --- a/src/main/java/emu/nebula/game/inventory/Inventory.java +++ b/src/main/java/emu/nebula/game/inventory/Inventory.java @@ -9,8 +9,11 @@ import emu.nebula.Nebula; import emu.nebula.data.GameData; import emu.nebula.database.GameDatabaseObject; import emu.nebula.game.player.PlayerManager; +import emu.nebula.net.NetMsgId; +import emu.nebula.proto.Notify.Skin; import emu.nebula.proto.Public.Item; import emu.nebula.proto.Public.Res; +import emu.nebula.proto.Public.UI32; import emu.nebula.game.player.Player; import emu.nebula.game.player.PlayerChangeInfo; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; @@ -129,6 +132,12 @@ public class Inventory extends PlayerManager implements GameDatabaseObject { // Save to database Nebula.getGameDatabase().addToList(this, this.getUid(), "extraSkins", id); + + // Send packet + this.getPlayer().addNextPackage( + NetMsgId.character_skin_gain_notify, + Skin.newInstance().setNew(UI32.newInstance().setValue(id)) + ); } public IntCollection getAllHeadIcons() {