diff --git a/src/main/java/emu/nebula/GameConstants.java b/src/main/java/emu/nebula/GameConstants.java index fc4554d..396c751 100644 --- a/src/main/java/emu/nebula/GameConstants.java +++ b/src/main/java/emu/nebula/GameConstants.java @@ -13,7 +13,9 @@ public class GameConstants { public static final int INTRO_GUIDE_ID = 1; public static final int GOLD_ITEM_ID = 1; - public static final int ENERGY_BUY_ITEM_ID = 2; + public static final int GEM_ITEM_ID = 2; + public static final int PREM_GEM_ITEM_ID = 3; + public static final int ENERGY_BUY_ITEM_ID = GEM_ITEM_ID; public static final int STAR_TOWER_GOLD_ITEM_ID = 11; public static final int EXP_ITEM_ID = 21; diff --git a/src/main/java/emu/nebula/game/inventory/Inventory.java b/src/main/java/emu/nebula/game/inventory/Inventory.java index b042a57..7cc3259 100644 --- a/src/main/java/emu/nebula/game/inventory/Inventory.java +++ b/src/main/java/emu/nebula/game/inventory/Inventory.java @@ -790,6 +790,23 @@ public class Inventory extends PlayerManager implements GameDatabaseObject { return change.setSuccess(true); } + public PlayerChangeInfo convertGems(int amount) { + // Verify that we have the gems + if (!this.hasItem(GameConstants.PREM_GEM_ITEM_ID, amount)) { + return null; + } + + // Create change info + var change = new PlayerChangeInfo(); + + // Convert gems + this.removeItem(GameConstants.PREM_GEM_ITEM_ID, amount, change); + this.addItem(GameConstants.GEM_ITEM_ID, amount, change); + + // Success + return change.setSuccess(true); + } + // Database public void loadFromDatabase() { diff --git a/src/main/java/emu/nebula/server/handlers/HandlerGemConvertReq.java b/src/main/java/emu/nebula/server/handlers/HandlerGemConvertReq.java new file mode 100644 index 0000000..ef37273 --- /dev/null +++ b/src/main/java/emu/nebula/server/handlers/HandlerGemConvertReq.java @@ -0,0 +1,28 @@ +package emu.nebula.server.handlers; + +import emu.nebula.net.NetHandler; +import emu.nebula.net.NetMsgId; +import emu.nebula.proto.Public.UI32; +import emu.nebula.net.HandlerId; +import emu.nebula.net.GameSession; + +@HandlerId(NetMsgId.gem_convert_req) +public class HandlerGemConvertReq extends NetHandler { + + @Override + public byte[] handle(GameSession session, byte[] message) throws Exception { + // Parse request + var req = UI32.parseFrom(message); + + // Convert gems + var change = session.getPlayer().getInventory().convertGems(req.getValue()); + + if (change == null) { + return session.encodeMsg(NetMsgId.gem_convert_failed_ack); + } + + // Encode and send + return session.encodeMsg(NetMsgId.gem_convert_succeed_ack, change.toProto()); + } + +}