From 6289e3f1b62167e81f2937ad72192b8125909eb8 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Thu, 20 Nov 2025 05:37:21 -0800 Subject: [PATCH] Fix buying energy with gems not giving the correct amount --- .../java/emu/nebula/game/inventory/Inventory.java | 15 +++++++++++---- .../server/handlers/HandlerEnergyBuyReq.java | 6 +++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/emu/nebula/game/inventory/Inventory.java b/src/main/java/emu/nebula/game/inventory/Inventory.java index 73dfb3a..e1adb31 100644 --- a/src/main/java/emu/nebula/game/inventory/Inventory.java +++ b/src/main/java/emu/nebula/game/inventory/Inventory.java @@ -635,20 +635,27 @@ public class Inventory extends PlayerManager implements GameDatabaseObject { return change.setSuccess(true); } - public PlayerChangeInfo buyEnergy() { + public PlayerChangeInfo buyEnergy(int count) { + // Validate count + if (count <= 0 || count > 6) { + return null; + } + // Create change info var change = new PlayerChangeInfo(); // Make sure we have the gems - if (!this.hasItem(GameConstants.ENERGY_BUY_ITEM_ID, 30)) { + int cost = 30 * count; + + if (!this.hasItem(GameConstants.ENERGY_BUY_ITEM_ID, cost)) { return change; } // Remove gems - this.removeItem(GameConstants.ENERGY_BUY_ITEM_ID, 30, change); + this.removeItem(GameConstants.ENERGY_BUY_ITEM_ID, cost, change); // Add energy - this.getPlayer().addEnergy(60, change); + this.getPlayer().addEnergy(60 * count, change); // Success return change; diff --git a/src/main/java/emu/nebula/server/handlers/HandlerEnergyBuyReq.java b/src/main/java/emu/nebula/server/handlers/HandlerEnergyBuyReq.java index 2336e72..58f762a 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerEnergyBuyReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerEnergyBuyReq.java @@ -3,6 +3,7 @@ package emu.nebula.server.handlers; import emu.nebula.net.NetHandler; import emu.nebula.net.NetMsgId; import emu.nebula.proto.EnergyBuy.EnergyBuyResp; +import emu.nebula.proto.Public.UI32; import emu.nebula.net.HandlerId; import emu.nebula.net.GameSession; @@ -11,8 +12,11 @@ public class HandlerEnergyBuyReq extends NetHandler { @Override public byte[] handle(GameSession session, byte[] message) throws Exception { + // Parse request + var req = UI32.parseFrom(message); + // Buy energy - var change = session.getPlayer().getInventory().buyEnergy(); + var change = session.getPlayer().getInventory().buyEnergy(req.getValue()); if (change == null) { return session.encodeMsg(NetMsgId.energy_buy_failed_ack);