diff --git a/src/generated/main/emu/lunarcore/proto/ExchangeHcoinCsReqOuterClass.java b/src/generated/main/emu/lunarcore/proto/ExchangeHcoinCsReqOuterClass.java
index 0b0aad5..0873a93 100644
--- a/src/generated/main/emu/lunarcore/proto/ExchangeHcoinCsReqOuterClass.java
+++ b/src/generated/main/emu/lunarcore/proto/ExchangeHcoinCsReqOuterClass.java
@@ -19,7 +19,7 @@ public final class ExchangeHcoinCsReqOuterClass {
private static final long serialVersionUID = 0L;
/**
- * optional uint32 num = 6;
+ * optional uint32 num = 8;
*/
private int num;
@@ -34,7 +34,7 @@ public final class ExchangeHcoinCsReqOuterClass {
}
/**
- * optional uint32 num = 6;
+ * optional uint32 num = 8;
* @return whether the num field is set
*/
public boolean hasNum() {
@@ -42,7 +42,7 @@ public final class ExchangeHcoinCsReqOuterClass {
}
/**
- * optional uint32 num = 6;
+ * optional uint32 num = 8;
* @return this
*/
public ExchangeHcoinCsReq clearNum() {
@@ -52,7 +52,7 @@ public final class ExchangeHcoinCsReqOuterClass {
}
/**
- * optional uint32 num = 6;
+ * optional uint32 num = 8;
* @return the num
*/
public int getNum() {
@@ -60,7 +60,7 @@ public final class ExchangeHcoinCsReqOuterClass {
}
/**
- * optional uint32 num = 6;
+ * optional uint32 num = 8;
* @param value the num to set
* @return this
*/
@@ -129,7 +129,7 @@ public final class ExchangeHcoinCsReqOuterClass {
@Override
public void writeTo(final ProtoSink output) throws IOException {
if ((bitField0_ & 0x00000001) != 0) {
- output.writeRawByte((byte) 48);
+ output.writeRawByte((byte) 64);
output.writeUInt32NoTag(num);
}
}
@@ -150,7 +150,7 @@ public final class ExchangeHcoinCsReqOuterClass {
int tag = input.readTag();
while (true) {
switch (tag) {
- case 48: {
+ case 64: {
// num
num = input.readUInt32();
bitField0_ |= 0x00000001;
diff --git a/src/generated/main/emu/lunarcore/proto/ExchangeHcoinScRspOuterClass.java b/src/generated/main/emu/lunarcore/proto/ExchangeHcoinScRspOuterClass.java
deleted file mode 100644
index 36d8b0a..0000000
--- a/src/generated/main/emu/lunarcore/proto/ExchangeHcoinScRspOuterClass.java
+++ /dev/null
@@ -1,339 +0,0 @@
-// Code generated by protocol buffer compiler. Do not edit!
-package emu.lunarcore.proto;
-
-import java.io.IOException;
-import us.hebi.quickbuf.FieldName;
-import us.hebi.quickbuf.InvalidProtocolBufferException;
-import us.hebi.quickbuf.JsonSink;
-import us.hebi.quickbuf.JsonSource;
-import us.hebi.quickbuf.MessageFactory;
-import us.hebi.quickbuf.ProtoMessage;
-import us.hebi.quickbuf.ProtoSink;
-import us.hebi.quickbuf.ProtoSource;
-
-public final class ExchangeHcoinScRspOuterClass {
- /**
- * Protobuf type {@code ExchangeHcoinScRsp}
- */
- public static final class ExchangeHcoinScRsp extends ProtoMessage implements Cloneable {
- private static final long serialVersionUID = 0L;
-
- /**
- * optional uint32 num = 2;
- */
- private int num;
-
- /**
- * optional uint32 retcode = 7;
- */
- private int retcode;
-
- private ExchangeHcoinScRsp() {
- }
-
- /**
- * @return a new empty instance of {@code ExchangeHcoinScRsp}
- */
- public static ExchangeHcoinScRsp newInstance() {
- return new ExchangeHcoinScRsp();
- }
-
- /**
- * optional uint32 num = 2;
- * @return whether the num field is set
- */
- public boolean hasNum() {
- return (bitField0_ & 0x00000001) != 0;
- }
-
- /**
- * optional uint32 num = 2;
- * @return this
- */
- public ExchangeHcoinScRsp clearNum() {
- bitField0_ &= ~0x00000001;
- num = 0;
- return this;
- }
-
- /**
- * optional uint32 num = 2;
- * @return the num
- */
- public int getNum() {
- return num;
- }
-
- /**
- * optional uint32 num = 2;
- * @param value the num to set
- * @return this
- */
- public ExchangeHcoinScRsp setNum(final int value) {
- bitField0_ |= 0x00000001;
- num = value;
- return this;
- }
-
- /**
- * optional uint32 retcode = 7;
- * @return whether the retcode field is set
- */
- public boolean hasRetcode() {
- return (bitField0_ & 0x00000002) != 0;
- }
-
- /**
- * optional uint32 retcode = 7;
- * @return this
- */
- public ExchangeHcoinScRsp clearRetcode() {
- bitField0_ &= ~0x00000002;
- retcode = 0;
- return this;
- }
-
- /**
- * optional uint32 retcode = 7;
- * @return the retcode
- */
- public int getRetcode() {
- return retcode;
- }
-
- /**
- * optional uint32 retcode = 7;
- * @param value the retcode to set
- * @return this
- */
- public ExchangeHcoinScRsp setRetcode(final int value) {
- bitField0_ |= 0x00000002;
- retcode = value;
- return this;
- }
-
- @Override
- public ExchangeHcoinScRsp copyFrom(final ExchangeHcoinScRsp other) {
- cachedSize = other.cachedSize;
- if ((bitField0_ | other.bitField0_) != 0) {
- bitField0_ = other.bitField0_;
- num = other.num;
- retcode = other.retcode;
- }
- return this;
- }
-
- @Override
- public ExchangeHcoinScRsp mergeFrom(final ExchangeHcoinScRsp other) {
- if (other.isEmpty()) {
- return this;
- }
- cachedSize = -1;
- if (other.hasNum()) {
- setNum(other.num);
- }
- if (other.hasRetcode()) {
- setRetcode(other.retcode);
- }
- return this;
- }
-
- @Override
- public ExchangeHcoinScRsp clear() {
- if (isEmpty()) {
- return this;
- }
- cachedSize = -1;
- bitField0_ = 0;
- num = 0;
- retcode = 0;
- return this;
- }
-
- @Override
- public ExchangeHcoinScRsp clearQuick() {
- if (isEmpty()) {
- return this;
- }
- cachedSize = -1;
- bitField0_ = 0;
- return this;
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == this) {
- return true;
- }
- if (!(o instanceof ExchangeHcoinScRsp)) {
- return false;
- }
- ExchangeHcoinScRsp other = (ExchangeHcoinScRsp) o;
- return bitField0_ == other.bitField0_
- && (!hasNum() || num == other.num)
- && (!hasRetcode() || retcode == other.retcode);
- }
-
- @Override
- public void writeTo(final ProtoSink output) throws IOException {
- if ((bitField0_ & 0x00000001) != 0) {
- output.writeRawByte((byte) 16);
- output.writeUInt32NoTag(num);
- }
- if ((bitField0_ & 0x00000002) != 0) {
- output.writeRawByte((byte) 56);
- output.writeUInt32NoTag(retcode);
- }
- }
-
- @Override
- protected int computeSerializedSize() {
- int size = 0;
- if ((bitField0_ & 0x00000001) != 0) {
- size += 1 + ProtoSink.computeUInt32SizeNoTag(num);
- }
- if ((bitField0_ & 0x00000002) != 0) {
- size += 1 + ProtoSink.computeUInt32SizeNoTag(retcode);
- }
- return size;
- }
-
- @Override
- @SuppressWarnings("fallthrough")
- public ExchangeHcoinScRsp mergeFrom(final ProtoSource input) throws IOException {
- // Enabled Fall-Through Optimization (QuickBuffers)
- int tag = input.readTag();
- while (true) {
- switch (tag) {
- case 16: {
- // num
- num = input.readUInt32();
- bitField0_ |= 0x00000001;
- tag = input.readTag();
- if (tag != 56) {
- break;
- }
- }
- case 56: {
- // retcode
- retcode = input.readUInt32();
- bitField0_ |= 0x00000002;
- tag = input.readTag();
- if (tag != 0) {
- break;
- }
- }
- case 0: {
- return this;
- }
- default: {
- if (!input.skipField(tag)) {
- return this;
- }
- tag = input.readTag();
- break;
- }
- }
- }
- }
-
- @Override
- public void writeTo(final JsonSink output) throws IOException {
- output.beginObject();
- if ((bitField0_ & 0x00000001) != 0) {
- output.writeUInt32(FieldNames.num, num);
- }
- if ((bitField0_ & 0x00000002) != 0) {
- output.writeUInt32(FieldNames.retcode, retcode);
- }
- output.endObject();
- }
-
- @Override
- public ExchangeHcoinScRsp mergeFrom(final JsonSource input) throws IOException {
- if (!input.beginObject()) {
- return this;
- }
- while (!input.isAtEnd()) {
- switch (input.readFieldHash()) {
- case 109446: {
- if (input.isAtField(FieldNames.num)) {
- if (!input.trySkipNullValue()) {
- num = input.readUInt32();
- bitField0_ |= 0x00000001;
- }
- } else {
- input.skipUnknownField();
- }
- break;
- }
- case 1097936398: {
- if (input.isAtField(FieldNames.retcode)) {
- if (!input.trySkipNullValue()) {
- retcode = input.readUInt32();
- bitField0_ |= 0x00000002;
- }
- } else {
- input.skipUnknownField();
- }
- break;
- }
- default: {
- input.skipUnknownField();
- break;
- }
- }
- }
- input.endObject();
- return this;
- }
-
- @Override
- public ExchangeHcoinScRsp clone() {
- return new ExchangeHcoinScRsp().copyFrom(this);
- }
-
- @Override
- public boolean isEmpty() {
- return ((bitField0_) == 0);
- }
-
- public static ExchangeHcoinScRsp parseFrom(final byte[] data) throws
- InvalidProtocolBufferException {
- return ProtoMessage.mergeFrom(new ExchangeHcoinScRsp(), data).checkInitialized();
- }
-
- public static ExchangeHcoinScRsp parseFrom(final ProtoSource input) throws IOException {
- return ProtoMessage.mergeFrom(new ExchangeHcoinScRsp(), input).checkInitialized();
- }
-
- public static ExchangeHcoinScRsp parseFrom(final JsonSource input) throws IOException {
- return ProtoMessage.mergeFrom(new ExchangeHcoinScRsp(), input).checkInitialized();
- }
-
- /**
- * @return factory for creating ExchangeHcoinScRsp messages
- */
- public static MessageFactory getFactory() {
- return ExchangeHcoinScRspFactory.INSTANCE;
- }
-
- private enum ExchangeHcoinScRspFactory implements MessageFactory {
- INSTANCE;
-
- @Override
- public ExchangeHcoinScRsp create() {
- return ExchangeHcoinScRsp.newInstance();
- }
- }
-
- /**
- * Contains name constants used for serializing JSON
- */
- static class FieldNames {
- static final FieldName num = FieldName.forField("num");
-
- static final FieldName retcode = FieldName.forField("retcode");
- }
- }
-}
diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerExchangeHcoinCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerExchangeHcoinCsReq.java
new file mode 100644
index 0000000..c94ee1f
--- /dev/null
+++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerExchangeHcoinCsReq.java
@@ -0,0 +1,25 @@
+package emu.lunarcore.server.packet.recv;
+
+import emu.lunarcore.proto.ExchangeHcoinCsReqOuterClass.ExchangeHcoinCsReq;
+import emu.lunarcore.server.game.GameSession;
+import emu.lunarcore.server.packet.CmdId;
+import emu.lunarcore.server.packet.Opcodes;
+import emu.lunarcore.server.packet.PacketHandler;
+
+@Opcodes(CmdId.ExchangeHcoinCsReq)
+public class HandlerExchangeHcoinCsReq extends PacketHandler {
+
+ @Override
+ public void handle(GameSession session, byte[] header, byte[] data) throws Exception {
+ var req = ExchangeHcoinCsReq.parseFrom(data);
+
+ if (session.getPlayer().getMcoin() >= req.getNum()) {
+ session.getPlayer().addMCoin(-req.getNum());
+ session.getPlayer().addHCoin(req.getNum());
+ session.getPlayer().save();
+ }
+
+ session.send(CmdId.ExchangeHcoinScRsp);
+ }
+
+}