diff --git a/Management-Server/src/main/java/ms/net/event/HSReadEvent.java b/Management-Server/src/main/java/ms/net/event/HSReadEvent.java index 3c4df5229..9a76cca2a 100644 --- a/Management-Server/src/main/java/ms/net/event/HSReadEvent.java +++ b/Management-Server/src/main/java/ms/net/event/HSReadEvent.java @@ -1,12 +1,16 @@ package ms.net.event; import java.nio.ByteBuffer; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; import java.util.Locale; import ms.Management; import ms.net.IoReadEvent; import ms.net.IoSession; import ms.net.packet.IoBuffer; +import ms.system.mysql.SQLManager; import ms.system.util.ManagementConstants; import ms.world.PlayerSession; import ms.world.WorldDatabase; @@ -73,6 +77,47 @@ public final class HSReadEvent extends IoReadEvent { player.getWorld().getPlayers().remove(username); player.setWorldId(0); break; + case 36: + buf = new IoBuffer(); + username = ByteBufferUtils.getString(buffer).toLowerCase(); + password = ByteBufferUtils.getString(buffer); + int credits = buffer.getInt(); + if (!password.equals(ManagementConstants.getSECRET_KEY())){ + System.out.println("Password mismatch (attempt=" + password + ")!"); + buf.put(1); + buff = buf.toByteBuffer(); + buff.flip(); + session.queue(buff); + return; + } + try (Connection con = SQLManager.getConnection()) { + Statement stmt = con.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT credits FROM members WHERE username = \"" + username + "\";"); + int original; + if (rs.next()) original = rs.getInt(1); + else { + buf.put(2); + buff = buf.toByteBuffer(); + buff.flip(); + session.queue(buff); + return; + } + stmt.execute("UPDATE members SET credits = " + (original + credits) + " WHERE username = \"" + username + "\";"); + buf.put(0); + buf.putInt(original + credits); + buff = buf.toByteBuffer(); + buff.flip(); + session.queue(buff); + } catch (Exception e) { + buf.put(3); + buf.putString(e.toString()); + buff = buf.toByteBuffer(); + buff.flip(); + session.queue(buff); + e.printStackTrace(); + } + break; + default: System.err.println("Unhandled handshake opcode: " + opcode + "."); session.disconnect();