From 7b22b575b71e46d5feceeb7f5a12f2e6e1fc7cce Mon Sep 17 00:00:00 2001 From: Kinesis Date: Sun, 1 May 2022 12:43:44 +0800 Subject: [PATCH] implement McoinExchange packet Handler --- proto/McoinExchangeHcoinReq.proto | 8 ++++++ proto/McoinExchangeHcoinRsp.proto | 8 ++++++ .../recv/HandlerMcoinExchangeHcoinReq.java | 26 +++++++++++++++++++ .../send/PacketMcoinExchangeHcoinRsp.java | 18 +++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 proto/McoinExchangeHcoinReq.proto create mode 100644 proto/McoinExchangeHcoinRsp.proto create mode 100644 src/main/java/emu/grasscutter/server/packet/recv/HandlerMcoinExchangeHcoinReq.java create mode 100644 src/main/java/emu/grasscutter/server/packet/send/PacketMcoinExchangeHcoinRsp.java diff --git a/proto/McoinExchangeHcoinReq.proto b/proto/McoinExchangeHcoinReq.proto new file mode 100644 index 000000000..5b6f37ee9 --- /dev/null +++ b/proto/McoinExchangeHcoinReq.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; + +option java_package = "emu.grasscutter.net.proto"; + +message McoinExchangeHcoinReq { + uint32 mCoinNum = 1; + uint32 hCoinNum = 2; +} diff --git a/proto/McoinExchangeHcoinRsp.proto b/proto/McoinExchangeHcoinRsp.proto new file mode 100644 index 000000000..b1904885b --- /dev/null +++ b/proto/McoinExchangeHcoinRsp.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; + +option java_package = "emu.grasscutter.net.proto"; + +message McoinExchangeHcoinRsp { + uint32 mCoinNum = 1; + uint32 hCoinNum = 2; +} diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerMcoinExchangeHcoinReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerMcoinExchangeHcoinReq.java new file mode 100644 index 000000000..0f3d2e7f8 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerMcoinExchangeHcoinReq.java @@ -0,0 +1,26 @@ +package emu.grasscutter.server.packet.recv; + +import emu.grasscutter.net.packet.Opcodes; +import emu.grasscutter.net.packet.PacketHandler; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.McoinExchangeHcoinReqOuterClass; +import emu.grasscutter.server.game.GameSession; +import emu.grasscutter.server.packet.send.PacketMcoinExchangeHcoinRsp; + +@Opcodes(PacketOpcodes.McoinExchangeHcoinReq) +public class HandlerMcoinExchangeHcoinReq extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { + McoinExchangeHcoinReqOuterClass.McoinExchangeHcoinReq exchangeReq = McoinExchangeHcoinReqOuterClass.McoinExchangeHcoinReq.parseFrom(payload); + if (session == null) { + return; + } else if (session.getPlayer().getCrystals() < exchangeReq.getMCoinNum()) { + return; + } + session.getPlayer().setCrystals(session.getPlayer().getCrystals() - exchangeReq.getMCoinNum()); + session.getPlayer().setPrimogems(session.getPlayer().getPrimogems() + exchangeReq.getHCoinNum()); + session.getPlayer().save(); + session.send(new PacketMcoinExchangeHcoinRsp(session.getPlayer().getCrystals(), session.getPlayer().getPrimogems())); + } +} diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketMcoinExchangeHcoinRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketMcoinExchangeHcoinRsp.java new file mode 100644 index 000000000..65bef7b27 --- /dev/null +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketMcoinExchangeHcoinRsp.java @@ -0,0 +1,18 @@ +package emu.grasscutter.server.packet.send; + +import emu.grasscutter.net.packet.BasePacket; +import emu.grasscutter.net.packet.PacketOpcodes; +import emu.grasscutter.net.proto.McoinExchangeHcoinRspOuterClass; + +public class PacketMcoinExchangeHcoinRsp extends BasePacket { + + public PacketMcoinExchangeHcoinRsp(int mcoin, int hcoin) { + super(PacketOpcodes.McoinExchangeHcoinRsp); + + McoinExchangeHcoinRspOuterClass.McoinExchangeHcoinRsp mcoinExchangeHcoinRsp = McoinExchangeHcoinRspOuterClass.McoinExchangeHcoinRsp.newBuilder() + .setMCoinNum(mcoin) + .setHCoinNum(hcoin).build(); + + this.setData(mcoinExchangeHcoinRsp); + } +}