diff --git a/src/main/java/emu/nebula/game/player/Player.java b/src/main/java/emu/nebula/game/player/Player.java index 6aab79e..e15c709 100644 --- a/src/main/java/emu/nebula/game/player/Player.java +++ b/src/main/java/emu/nebula/game/player/Player.java @@ -284,6 +284,27 @@ public class Player implements GameDatabaseObject { // Success return true; } + + public boolean setSkin(int skinId) { + // Skip if we are setting the same skin + if (this.skinId == skinId) { + return true; + } + + // Make sure we own this skin + if (!getInventory().hasSkin(skinId)) { + return false; + } + + // Set skin + this.skinId = skinId; + + // Update in database + Nebula.getGameDatabase().update(this, this.getUid(), "skinId", this.getSkinId()); + + // Success + return false; + } public boolean setShowChars(RepeatedInt charIds) { // Sanity check diff --git a/src/main/java/emu/nebula/server/handlers/HandlerPlayerSkinShowReq.java b/src/main/java/emu/nebula/server/handlers/HandlerPlayerSkinShowReq.java new file mode 100644 index 0000000..1c89cde --- /dev/null +++ b/src/main/java/emu/nebula/server/handlers/HandlerPlayerSkinShowReq.java @@ -0,0 +1,28 @@ +package emu.nebula.server.handlers; + +import emu.nebula.net.NetHandler; +import emu.nebula.net.NetMsgId; +import emu.nebula.proto.PlayerSkinShow.PlayerSkinShowReq; +import emu.nebula.net.HandlerId; +import emu.nebula.net.GameSession; + +@HandlerId(NetMsgId.player_skin_show_req) +public class HandlerPlayerSkinShowReq extends NetHandler { + + @Override + public byte[] handle(GameSession session, byte[] message) throws Exception { + // Parse req + var req = PlayerSkinShowReq.parseFrom(message); + + // Set player skin + boolean success = session.getPlayer().setSkin(req.getSkinId()); + + if (success == false) { + session.encodeMsg(NetMsgId.player_skin_show_failed_ack); + } + + // Encode and send + return session.encodeMsg(NetMsgId.player_skin_show_succeed_ack); + } + +}