From 02e55301e44c3ddc209b46b667a71567a48f23c9 Mon Sep 17 00:00:00 2001 From: Hiro Date: Thu, 30 Nov 2023 10:41:50 +0200 Subject: [PATCH] basic TextJoinQueryCsReq handler (not fully implemented) --- .../proto/TextJoinQueryCsReqOuterClass.java | 301 ++++++++++++++++++ .../proto/TextJoinQueryScRspOuterClass.java | 259 +++++++++++++++ .../java/emu/lunarcore/data/GameData.java | 1 + .../lunarcore/data/excel/TextJoinExcel.java | 24 ++ .../recv/HandlerTextJoinQueryCsReq.java | 17 + .../packet/send/PacketTextJoinQueryScRsp.java | 18 ++ 6 files changed, 620 insertions(+) create mode 100644 src/generated/main/emu/lunarcore/proto/TextJoinQueryCsReqOuterClass.java create mode 100644 src/generated/main/emu/lunarcore/proto/TextJoinQueryScRspOuterClass.java create mode 100644 src/main/java/emu/lunarcore/data/excel/TextJoinExcel.java create mode 100644 src/main/java/emu/lunarcore/server/packet/recv/HandlerTextJoinQueryCsReq.java create mode 100644 src/main/java/emu/lunarcore/server/packet/send/PacketTextJoinQueryScRsp.java diff --git a/src/generated/main/emu/lunarcore/proto/TextJoinQueryCsReqOuterClass.java b/src/generated/main/emu/lunarcore/proto/TextJoinQueryCsReqOuterClass.java new file mode 100644 index 0000000..b3ce615 --- /dev/null +++ b/src/generated/main/emu/lunarcore/proto/TextJoinQueryCsReqOuterClass.java @@ -0,0 +1,301 @@ +// 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; +import us.hebi.quickbuf.RepeatedInt; + +public final class TextJoinQueryCsReqOuterClass { + /** + * Protobuf type {@code TextJoinQueryCsReq} + */ + public static final class TextJoinQueryCsReq extends ProtoMessage implements Cloneable { + private static final long serialVersionUID = 0L; + + /** + * repeated uint32 text_join_id_list = 7; + */ + private final RepeatedInt textJoinIdList = RepeatedInt.newEmptyInstance(); + + private TextJoinQueryCsReq() { + } + + /** + * @return a new empty instance of {@code TextJoinQueryCsReq} + */ + public static TextJoinQueryCsReq newInstance() { + return new TextJoinQueryCsReq(); + } + + /** + * repeated uint32 text_join_id_list = 7; + * @return whether the textJoinIdList field is set + */ + public boolean hasTextJoinIdList() { + return (bitField0_ & 0x00000001) != 0; + } + + /** + * repeated uint32 text_join_id_list = 7; + * @return this + */ + public TextJoinQueryCsReq clearTextJoinIdList() { + bitField0_ &= ~0x00000001; + textJoinIdList.clear(); + return this; + } + + /** + * repeated uint32 text_join_id_list = 7; + * + * This method returns the internal storage object without modifying any has state. + * The returned object should not be modified and be treated as read-only. + * + * Use {@link #getMutableTextJoinIdList()} if you want to modify it. + * + * @return internal storage object for reading + */ + public RepeatedInt getTextJoinIdList() { + return textJoinIdList; + } + + /** + * repeated uint32 text_join_id_list = 7; + * + * This method returns the internal storage object and sets the corresponding + * has state. The returned object will become part of this message and its + * contents may be modified as long as the has state is not cleared. + * + * @return internal storage object for modifications + */ + public RepeatedInt getMutableTextJoinIdList() { + bitField0_ |= 0x00000001; + return textJoinIdList; + } + + /** + * repeated uint32 text_join_id_list = 7; + * @param value the textJoinIdList to add + * @return this + */ + public TextJoinQueryCsReq addTextJoinIdList(final int value) { + bitField0_ |= 0x00000001; + textJoinIdList.add(value); + return this; + } + + /** + * repeated uint32 text_join_id_list = 7; + * @param values the textJoinIdList to add + * @return this + */ + public TextJoinQueryCsReq addAllTextJoinIdList(final int... values) { + bitField0_ |= 0x00000001; + textJoinIdList.addAll(values); + return this; + } + + @Override + public TextJoinQueryCsReq copyFrom(final TextJoinQueryCsReq other) { + cachedSize = other.cachedSize; + if ((bitField0_ | other.bitField0_) != 0) { + bitField0_ = other.bitField0_; + textJoinIdList.copyFrom(other.textJoinIdList); + } + return this; + } + + @Override + public TextJoinQueryCsReq mergeFrom(final TextJoinQueryCsReq other) { + if (other.isEmpty()) { + return this; + } + cachedSize = -1; + if (other.hasTextJoinIdList()) { + getMutableTextJoinIdList().addAll(other.textJoinIdList); + } + return this; + } + + @Override + public TextJoinQueryCsReq clear() { + if (isEmpty()) { + return this; + } + cachedSize = -1; + bitField0_ = 0; + textJoinIdList.clear(); + return this; + } + + @Override + public TextJoinQueryCsReq clearQuick() { + if (isEmpty()) { + return this; + } + cachedSize = -1; + bitField0_ = 0; + textJoinIdList.clear(); + return this; + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof TextJoinQueryCsReq)) { + return false; + } + TextJoinQueryCsReq other = (TextJoinQueryCsReq) o; + return bitField0_ == other.bitField0_ + && (!hasTextJoinIdList() || textJoinIdList.equals(other.textJoinIdList)); + } + + @Override + public void writeTo(final ProtoSink output) throws IOException { + if ((bitField0_ & 0x00000001) != 0) { + for (int i = 0; i < textJoinIdList.length(); i++) { + output.writeRawByte((byte) 56); + output.writeUInt32NoTag(textJoinIdList.array()[i]); + } + } + } + + @Override + protected int computeSerializedSize() { + int size = 0; + if ((bitField0_ & 0x00000001) != 0) { + size += (1 * textJoinIdList.length()) + ProtoSink.computeRepeatedUInt32SizeNoTag(textJoinIdList); + } + return size; + } + + @Override + @SuppressWarnings("fallthrough") + public TextJoinQueryCsReq mergeFrom(final ProtoSource input) throws IOException { + // Enabled Fall-Through Optimization (QuickBuffers) + int tag = input.readTag(); + while (true) { + switch (tag) { + case 58: { + // textJoinIdList [packed=true] + input.readPackedUInt32(textJoinIdList, tag); + bitField0_ |= 0x00000001; + tag = input.readTag(); + if (tag != 0) { + break; + } + } + case 0: { + return this; + } + default: { + if (!input.skipField(tag)) { + return this; + } + tag = input.readTag(); + break; + } + case 56: { + // textJoinIdList [packed=false] + tag = input.readRepeatedUInt32(textJoinIdList, tag); + bitField0_ |= 0x00000001; + break; + } + } + } + } + + @Override + public void writeTo(final JsonSink output) throws IOException { + output.beginObject(); + if ((bitField0_ & 0x00000001) != 0) { + output.writeRepeatedUInt32(FieldNames.textJoinIdList, textJoinIdList); + } + output.endObject(); + } + + @Override + public TextJoinQueryCsReq mergeFrom(final JsonSource input) throws IOException { + if (!input.beginObject()) { + return this; + } + while (!input.isAtEnd()) { + switch (input.readFieldHash()) { + case 1149123376: + case 449627391: { + if (input.isAtField(FieldNames.textJoinIdList)) { + if (!input.trySkipNullValue()) { + input.readRepeatedUInt32(textJoinIdList); + bitField0_ |= 0x00000001; + } + } else { + input.skipUnknownField(); + } + break; + } + default: { + input.skipUnknownField(); + break; + } + } + } + input.endObject(); + return this; + } + + @Override + public TextJoinQueryCsReq clone() { + return new TextJoinQueryCsReq().copyFrom(this); + } + + @Override + public boolean isEmpty() { + return ((bitField0_) == 0); + } + + public static TextJoinQueryCsReq parseFrom(final byte[] data) throws + InvalidProtocolBufferException { + return ProtoMessage.mergeFrom(new TextJoinQueryCsReq(), data).checkInitialized(); + } + + public static TextJoinQueryCsReq parseFrom(final ProtoSource input) throws IOException { + return ProtoMessage.mergeFrom(new TextJoinQueryCsReq(), input).checkInitialized(); + } + + public static TextJoinQueryCsReq parseFrom(final JsonSource input) throws IOException { + return ProtoMessage.mergeFrom(new TextJoinQueryCsReq(), input).checkInitialized(); + } + + /** + * @return factory for creating TextJoinQueryCsReq messages + */ + public static MessageFactory getFactory() { + return TextJoinQueryCsReqFactory.INSTANCE; + } + + private enum TextJoinQueryCsReqFactory implements MessageFactory { + INSTANCE; + + @Override + public TextJoinQueryCsReq create() { + return TextJoinQueryCsReq.newInstance(); + } + } + + /** + * Contains name constants used for serializing JSON + */ + static class FieldNames { + static final FieldName textJoinIdList = FieldName.forField("textJoinIdList", "text_join_id_list"); + } + } +} diff --git a/src/generated/main/emu/lunarcore/proto/TextJoinQueryScRspOuterClass.java b/src/generated/main/emu/lunarcore/proto/TextJoinQueryScRspOuterClass.java new file mode 100644 index 0000000..9f836d1 --- /dev/null +++ b/src/generated/main/emu/lunarcore/proto/TextJoinQueryScRspOuterClass.java @@ -0,0 +1,259 @@ +// 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 TextJoinQueryScRspOuterClass { + /** + * Protobuf type {@code TextJoinQueryScRsp} + */ + public static final class TextJoinQueryScRsp extends ProtoMessage implements Cloneable { + private static final long serialVersionUID = 0L; + + /** + * optional uint32 retcode = 13; + */ + private int retcode; + + private TextJoinQueryScRsp() { + } + + /** + * @return a new empty instance of {@code TextJoinQueryScRsp} + */ + public static TextJoinQueryScRsp newInstance() { + return new TextJoinQueryScRsp(); + } + + /** + * optional uint32 retcode = 13; + * @return whether the retcode field is set + */ + public boolean hasRetcode() { + return (bitField0_ & 0x00000001) != 0; + } + + /** + * optional uint32 retcode = 13; + * @return this + */ + public TextJoinQueryScRsp clearRetcode() { + bitField0_ &= ~0x00000001; + retcode = 0; + return this; + } + + /** + * optional uint32 retcode = 13; + * @return the retcode + */ + public int getRetcode() { + return retcode; + } + + /** + * optional uint32 retcode = 13; + * @param value the retcode to set + * @return this + */ + public TextJoinQueryScRsp setRetcode(final int value) { + bitField0_ |= 0x00000001; + retcode = value; + return this; + } + + @Override + public TextJoinQueryScRsp copyFrom(final TextJoinQueryScRsp other) { + cachedSize = other.cachedSize; + if ((bitField0_ | other.bitField0_) != 0) { + bitField0_ = other.bitField0_; + retcode = other.retcode; + } + return this; + } + + @Override + public TextJoinQueryScRsp mergeFrom(final TextJoinQueryScRsp other) { + if (other.isEmpty()) { + return this; + } + cachedSize = -1; + if (other.hasRetcode()) { + setRetcode(other.retcode); + } + return this; + } + + @Override + public TextJoinQueryScRsp clear() { + if (isEmpty()) { + return this; + } + cachedSize = -1; + bitField0_ = 0; + retcode = 0; + return this; + } + + @Override + public TextJoinQueryScRsp 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 TextJoinQueryScRsp)) { + return false; + } + TextJoinQueryScRsp other = (TextJoinQueryScRsp) o; + return bitField0_ == other.bitField0_ + && (!hasRetcode() || retcode == other.retcode); + } + + @Override + public void writeTo(final ProtoSink output) throws IOException { + if ((bitField0_ & 0x00000001) != 0) { + output.writeRawByte((byte) 104); + output.writeUInt32NoTag(retcode); + } + } + + @Override + protected int computeSerializedSize() { + int size = 0; + if ((bitField0_ & 0x00000001) != 0) { + size += 1 + ProtoSink.computeUInt32SizeNoTag(retcode); + } + return size; + } + + @Override + @SuppressWarnings("fallthrough") + public TextJoinQueryScRsp mergeFrom(final ProtoSource input) throws IOException { + // Enabled Fall-Through Optimization (QuickBuffers) + int tag = input.readTag(); + while (true) { + switch (tag) { + case 104: { + // retcode + retcode = input.readUInt32(); + bitField0_ |= 0x00000001; + 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.retcode, retcode); + } + output.endObject(); + } + + @Override + public TextJoinQueryScRsp mergeFrom(final JsonSource input) throws IOException { + if (!input.beginObject()) { + return this; + } + while (!input.isAtEnd()) { + switch (input.readFieldHash()) { + case 1097936398: { + if (input.isAtField(FieldNames.retcode)) { + if (!input.trySkipNullValue()) { + retcode = input.readUInt32(); + bitField0_ |= 0x00000001; + } + } else { + input.skipUnknownField(); + } + break; + } + default: { + input.skipUnknownField(); + break; + } + } + } + input.endObject(); + return this; + } + + @Override + public TextJoinQueryScRsp clone() { + return new TextJoinQueryScRsp().copyFrom(this); + } + + @Override + public boolean isEmpty() { + return ((bitField0_) == 0); + } + + public static TextJoinQueryScRsp parseFrom(final byte[] data) throws + InvalidProtocolBufferException { + return ProtoMessage.mergeFrom(new TextJoinQueryScRsp(), data).checkInitialized(); + } + + public static TextJoinQueryScRsp parseFrom(final ProtoSource input) throws IOException { + return ProtoMessage.mergeFrom(new TextJoinQueryScRsp(), input).checkInitialized(); + } + + public static TextJoinQueryScRsp parseFrom(final JsonSource input) throws IOException { + return ProtoMessage.mergeFrom(new TextJoinQueryScRsp(), input).checkInitialized(); + } + + /** + * @return factory for creating TextJoinQueryScRsp messages + */ + public static MessageFactory getFactory() { + return TextJoinQueryScRspFactory.INSTANCE; + } + + private enum TextJoinQueryScRspFactory implements MessageFactory { + INSTANCE; + + @Override + public TextJoinQueryScRsp create() { + return TextJoinQueryScRsp.newInstance(); + } + } + + /** + * Contains name constants used for serializing JSON + */ + static class FieldNames { + static final FieldName retcode = FieldName.forField("retcode"); + } + } +} diff --git a/src/main/java/emu/lunarcore/data/GameData.java b/src/main/java/emu/lunarcore/data/GameData.java index 7cef824..63b48a9 100644 --- a/src/main/java/emu/lunarcore/data/GameData.java +++ b/src/main/java/emu/lunarcore/data/GameData.java @@ -61,6 +61,7 @@ public class GameData { private static Int2ObjectMap monsterDropExcelMap = new Int2ObjectOpenHashMap<>(); private static Int2ObjectMap monsterExcelMap = new Int2ObjectOpenHashMap<>(); private static Int2ObjectMap questExcelMap = new Int2ObjectLinkedOpenHashMap<>(); + private static Int2ObjectMap textJoinExcelMap = new Int2ObjectLinkedOpenHashMap<>(); private static Int2ObjectMap playerLevelExcelMap = new Int2ObjectOpenHashMap<>(); private static Int2ObjectMap expTypeExcelMap = new Int2ObjectOpenHashMap<>(); diff --git a/src/main/java/emu/lunarcore/data/excel/TextJoinExcel.java b/src/main/java/emu/lunarcore/data/excel/TextJoinExcel.java new file mode 100644 index 0000000..66ce22f --- /dev/null +++ b/src/main/java/emu/lunarcore/data/excel/TextJoinExcel.java @@ -0,0 +1,24 @@ +package emu.lunarcore.data.excel; + +import emu.lunarcore.data.GameResource; +import emu.lunarcore.data.ResourceType; +import emu.lunarcore.util.Utils; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import lombok.Getter; + +@Getter +@ResourceType(name = {"TextJoinConfig.json"}) +public class TextJoinExcel extends GameResource { + private int TextJoinID; + private int DefaultItem; + private IntArrayList TextJoinItemList; + + @Override + public int getId() { + return TextJoinID; + } + + public IntArrayList getTextJoinItemList() { + return TextJoinItemList; + } +} diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerTextJoinQueryCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerTextJoinQueryCsReq.java new file mode 100644 index 0000000..649406b --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerTextJoinQueryCsReq.java @@ -0,0 +1,17 @@ +package emu.lunarcore.server.packet.recv; + +import emu.lunarcore.server.game.GameSession; +import emu.lunarcore.server.packet.CmdId; +import emu.lunarcore.server.packet.Opcodes; +import emu.lunarcore.server.packet.PacketHandler; +import emu.lunarcore.server.packet.send.PacketTextJoinQueryScRsp; + +@Opcodes(CmdId.TextJoinQueryCsReq) +public class HandlerTextJoinQueryCsReq extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] data) throws Exception { + session.send(new PacketTextJoinQueryScRsp(session.getPlayer())); + } + +} diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketTextJoinQueryScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketTextJoinQueryScRsp.java new file mode 100644 index 0000000..c4215e6 --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketTextJoinQueryScRsp.java @@ -0,0 +1,18 @@ +package emu.lunarcore.server.packet.send; + +import emu.lunarcore.game.mail.Mail; +import emu.lunarcore.game.player.Player; +import emu.lunarcore.proto.TextJoinQueryScRspOuterClass.TextJoinQueryScRsp; +import emu.lunarcore.server.packet.BasePacket; +import emu.lunarcore.server.packet.CmdId; + +public class PacketTextJoinQueryScRsp extends BasePacket { + + public PacketTextJoinQueryScRsp(Player player) { + super(CmdId.TextJoinQueryScRsp); + + var data = TextJoinQueryScRsp.newInstance(); + + this.setData(data); + } +}