From cde7b377079df63928adb0f02bf6975f1eff4065 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Tue, 17 Oct 2023 06:18:36 -0700 Subject: [PATCH] Fix talking to npcs soft locking the client --- ...stTalkByPerformanceNpcCsReqOuterClass.java | 305 ++++++++++++++ ...stTalkByPerformanceNpcScRspOuterClass.java | 380 ++++++++++++++++++ .../proto/NpcTalkInfoOuterClass.java | 339 ++++++++++++++++ ...dlerGetFirstTalkByPerformanceNpcCsReq.java | 6 +- ...cketGetFirstTalkByPerformanceNpcScRsp.java | 25 ++ 5 files changed, 1054 insertions(+), 1 deletion(-) create mode 100644 src/generated/main/emu/lunarcore/proto/GetFirstTalkByPerformanceNpcCsReqOuterClass.java create mode 100644 src/generated/main/emu/lunarcore/proto/GetFirstTalkByPerformanceNpcScRspOuterClass.java create mode 100644 src/generated/main/emu/lunarcore/proto/NpcTalkInfoOuterClass.java create mode 100644 src/main/java/emu/lunarcore/server/packet/send/PacketGetFirstTalkByPerformanceNpcScRsp.java diff --git a/src/generated/main/emu/lunarcore/proto/GetFirstTalkByPerformanceNpcCsReqOuterClass.java b/src/generated/main/emu/lunarcore/proto/GetFirstTalkByPerformanceNpcCsReqOuterClass.java new file mode 100644 index 0000000..12cc4d8 --- /dev/null +++ b/src/generated/main/emu/lunarcore/proto/GetFirstTalkByPerformanceNpcCsReqOuterClass.java @@ -0,0 +1,305 @@ +// 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 GetFirstTalkByPerformanceNpcCsReqOuterClass { + /** + * Protobuf type {@code GetFirstTalkByPerformanceNpcCsReq} + */ + public static final class GetFirstTalkByPerformanceNpcCsReq extends ProtoMessage implements Cloneable { + private static final long serialVersionUID = 0L; + + /** + * repeated uint32 npc_talk_list = 14; + */ + private final RepeatedInt npcTalkList = RepeatedInt.newEmptyInstance(); + + private GetFirstTalkByPerformanceNpcCsReq() { + } + + /** + * @return a new empty instance of {@code GetFirstTalkByPerformanceNpcCsReq} + */ + public static GetFirstTalkByPerformanceNpcCsReq newInstance() { + return new GetFirstTalkByPerformanceNpcCsReq(); + } + + /** + * repeated uint32 npc_talk_list = 14; + * @return whether the npcTalkList field is set + */ + public boolean hasNpcTalkList() { + return (bitField0_ & 0x00000001) != 0; + } + + /** + * repeated uint32 npc_talk_list = 14; + * @return this + */ + public GetFirstTalkByPerformanceNpcCsReq clearNpcTalkList() { + bitField0_ &= ~0x00000001; + npcTalkList.clear(); + return this; + } + + /** + * repeated uint32 npc_talk_list = 14; + * + * 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 #getMutableNpcTalkList()} if you want to modify it. + * + * @return internal storage object for reading + */ + public RepeatedInt getNpcTalkList() { + return npcTalkList; + } + + /** + * repeated uint32 npc_talk_list = 14; + * + * 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 getMutableNpcTalkList() { + bitField0_ |= 0x00000001; + return npcTalkList; + } + + /** + * repeated uint32 npc_talk_list = 14; + * @param value the npcTalkList to add + * @return this + */ + public GetFirstTalkByPerformanceNpcCsReq addNpcTalkList(final int value) { + bitField0_ |= 0x00000001; + npcTalkList.add(value); + return this; + } + + /** + * repeated uint32 npc_talk_list = 14; + * @param values the npcTalkList to add + * @return this + */ + public GetFirstTalkByPerformanceNpcCsReq addAllNpcTalkList(final int... values) { + bitField0_ |= 0x00000001; + npcTalkList.addAll(values); + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcCsReq copyFrom( + final GetFirstTalkByPerformanceNpcCsReq other) { + cachedSize = other.cachedSize; + if ((bitField0_ | other.bitField0_) != 0) { + bitField0_ = other.bitField0_; + npcTalkList.copyFrom(other.npcTalkList); + } + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcCsReq mergeFrom( + final GetFirstTalkByPerformanceNpcCsReq other) { + if (other.isEmpty()) { + return this; + } + cachedSize = -1; + if (other.hasNpcTalkList()) { + getMutableNpcTalkList().addAll(other.npcTalkList); + } + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcCsReq clear() { + if (isEmpty()) { + return this; + } + cachedSize = -1; + bitField0_ = 0; + npcTalkList.clear(); + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcCsReq clearQuick() { + if (isEmpty()) { + return this; + } + cachedSize = -1; + bitField0_ = 0; + npcTalkList.clear(); + return this; + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof GetFirstTalkByPerformanceNpcCsReq)) { + return false; + } + GetFirstTalkByPerformanceNpcCsReq other = (GetFirstTalkByPerformanceNpcCsReq) o; + return bitField0_ == other.bitField0_ + && (!hasNpcTalkList() || npcTalkList.equals(other.npcTalkList)); + } + + @Override + public void writeTo(final ProtoSink output) throws IOException { + if ((bitField0_ & 0x00000001) != 0) { + for (int i = 0; i < npcTalkList.length(); i++) { + output.writeRawByte((byte) 112); + output.writeUInt32NoTag(npcTalkList.array()[i]); + } + } + } + + @Override + protected int computeSerializedSize() { + int size = 0; + if ((bitField0_ & 0x00000001) != 0) { + size += (1 * npcTalkList.length()) + ProtoSink.computeRepeatedUInt32SizeNoTag(npcTalkList); + } + return size; + } + + @Override + @SuppressWarnings("fallthrough") + public GetFirstTalkByPerformanceNpcCsReq mergeFrom(final ProtoSource input) throws IOException { + // Enabled Fall-Through Optimization (QuickBuffers) + int tag = input.readTag(); + while (true) { + switch (tag) { + case 114: { + // npcTalkList [packed=true] + input.readPackedUInt32(npcTalkList, 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 112: { + // npcTalkList [packed=false] + tag = input.readRepeatedUInt32(npcTalkList, tag); + bitField0_ |= 0x00000001; + break; + } + } + } + } + + @Override + public void writeTo(final JsonSink output) throws IOException { + output.beginObject(); + if ((bitField0_ & 0x00000001) != 0) { + output.writeRepeatedUInt32(FieldNames.npcTalkList, npcTalkList); + } + output.endObject(); + } + + @Override + public GetFirstTalkByPerformanceNpcCsReq mergeFrom(final JsonSource input) throws IOException { + if (!input.beginObject()) { + return this; + } + while (!input.isAtEnd()) { + switch (input.readFieldHash()) { + case 273662315: + case -1372553101: { + if (input.isAtField(FieldNames.npcTalkList)) { + if (!input.trySkipNullValue()) { + input.readRepeatedUInt32(npcTalkList); + bitField0_ |= 0x00000001; + } + } else { + input.skipUnknownField(); + } + break; + } + default: { + input.skipUnknownField(); + break; + } + } + } + input.endObject(); + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcCsReq clone() { + return new GetFirstTalkByPerformanceNpcCsReq().copyFrom(this); + } + + @Override + public boolean isEmpty() { + return ((bitField0_) == 0); + } + + public static GetFirstTalkByPerformanceNpcCsReq parseFrom(final byte[] data) throws + InvalidProtocolBufferException { + return ProtoMessage.mergeFrom(new GetFirstTalkByPerformanceNpcCsReq(), data).checkInitialized(); + } + + public static GetFirstTalkByPerformanceNpcCsReq parseFrom(final ProtoSource input) throws + IOException { + return ProtoMessage.mergeFrom(new GetFirstTalkByPerformanceNpcCsReq(), input).checkInitialized(); + } + + public static GetFirstTalkByPerformanceNpcCsReq parseFrom(final JsonSource input) throws + IOException { + return ProtoMessage.mergeFrom(new GetFirstTalkByPerformanceNpcCsReq(), input).checkInitialized(); + } + + /** + * @return factory for creating GetFirstTalkByPerformanceNpcCsReq messages + */ + public static MessageFactory getFactory() { + return GetFirstTalkByPerformanceNpcCsReqFactory.INSTANCE; + } + + private enum GetFirstTalkByPerformanceNpcCsReqFactory implements MessageFactory { + INSTANCE; + + @Override + public GetFirstTalkByPerformanceNpcCsReq create() { + return GetFirstTalkByPerformanceNpcCsReq.newInstance(); + } + } + + /** + * Contains name constants used for serializing JSON + */ + static class FieldNames { + static final FieldName npcTalkList = FieldName.forField("npcTalkList", "npc_talk_list"); + } + } +} diff --git a/src/generated/main/emu/lunarcore/proto/GetFirstTalkByPerformanceNpcScRspOuterClass.java b/src/generated/main/emu/lunarcore/proto/GetFirstTalkByPerformanceNpcScRspOuterClass.java new file mode 100644 index 0000000..a2da238 --- /dev/null +++ b/src/generated/main/emu/lunarcore/proto/GetFirstTalkByPerformanceNpcScRspOuterClass.java @@ -0,0 +1,380 @@ +// 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.RepeatedMessage; + +public final class GetFirstTalkByPerformanceNpcScRspOuterClass { + /** + * Protobuf type {@code GetFirstTalkByPerformanceNpcScRsp} + */ + public static final class GetFirstTalkByPerformanceNpcScRsp extends ProtoMessage implements Cloneable { + private static final long serialVersionUID = 0L; + + /** + * optional uint32 retcode = 3; + */ + private int retcode; + + /** + * repeated .NpcTalkInfo npc_talk_info_list = 5; + */ + private final RepeatedMessage npcTalkInfoList = RepeatedMessage.newEmptyInstance(NpcTalkInfoOuterClass.NpcTalkInfo.getFactory()); + + private GetFirstTalkByPerformanceNpcScRsp() { + } + + /** + * @return a new empty instance of {@code GetFirstTalkByPerformanceNpcScRsp} + */ + public static GetFirstTalkByPerformanceNpcScRsp newInstance() { + return new GetFirstTalkByPerformanceNpcScRsp(); + } + + /** + * optional uint32 retcode = 3; + * @return whether the retcode field is set + */ + public boolean hasRetcode() { + return (bitField0_ & 0x00000001) != 0; + } + + /** + * optional uint32 retcode = 3; + * @return this + */ + public GetFirstTalkByPerformanceNpcScRsp clearRetcode() { + bitField0_ &= ~0x00000001; + retcode = 0; + return this; + } + + /** + * optional uint32 retcode = 3; + * @return the retcode + */ + public int getRetcode() { + return retcode; + } + + /** + * optional uint32 retcode = 3; + * @param value the retcode to set + * @return this + */ + public GetFirstTalkByPerformanceNpcScRsp setRetcode(final int value) { + bitField0_ |= 0x00000001; + retcode = value; + return this; + } + + /** + * repeated .NpcTalkInfo npc_talk_info_list = 5; + * @return whether the npcTalkInfoList field is set + */ + public boolean hasNpcTalkInfoList() { + return (bitField0_ & 0x00000002) != 0; + } + + /** + * repeated .NpcTalkInfo npc_talk_info_list = 5; + * @return this + */ + public GetFirstTalkByPerformanceNpcScRsp clearNpcTalkInfoList() { + bitField0_ &= ~0x00000002; + npcTalkInfoList.clear(); + return this; + } + + /** + * repeated .NpcTalkInfo npc_talk_info_list = 5; + * + * 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 #getMutableNpcTalkInfoList()} if you want to modify it. + * + * @return internal storage object for reading + */ + public RepeatedMessage getNpcTalkInfoList() { + return npcTalkInfoList; + } + + /** + * repeated .NpcTalkInfo npc_talk_info_list = 5; + * + * 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 RepeatedMessage getMutableNpcTalkInfoList() { + bitField0_ |= 0x00000002; + return npcTalkInfoList; + } + + /** + * repeated .NpcTalkInfo npc_talk_info_list = 5; + * @param value the npcTalkInfoList to add + * @return this + */ + public GetFirstTalkByPerformanceNpcScRsp addNpcTalkInfoList( + final NpcTalkInfoOuterClass.NpcTalkInfo value) { + bitField0_ |= 0x00000002; + npcTalkInfoList.add(value); + return this; + } + + /** + * repeated .NpcTalkInfo npc_talk_info_list = 5; + * @param values the npcTalkInfoList to add + * @return this + */ + public GetFirstTalkByPerformanceNpcScRsp addAllNpcTalkInfoList( + final NpcTalkInfoOuterClass.NpcTalkInfo... values) { + bitField0_ |= 0x00000002; + npcTalkInfoList.addAll(values); + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcScRsp copyFrom( + final GetFirstTalkByPerformanceNpcScRsp other) { + cachedSize = other.cachedSize; + if ((bitField0_ | other.bitField0_) != 0) { + bitField0_ = other.bitField0_; + retcode = other.retcode; + npcTalkInfoList.copyFrom(other.npcTalkInfoList); + } + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcScRsp mergeFrom( + final GetFirstTalkByPerformanceNpcScRsp other) { + if (other.isEmpty()) { + return this; + } + cachedSize = -1; + if (other.hasRetcode()) { + setRetcode(other.retcode); + } + if (other.hasNpcTalkInfoList()) { + getMutableNpcTalkInfoList().addAll(other.npcTalkInfoList); + } + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcScRsp clear() { + if (isEmpty()) { + return this; + } + cachedSize = -1; + bitField0_ = 0; + retcode = 0; + npcTalkInfoList.clear(); + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcScRsp clearQuick() { + if (isEmpty()) { + return this; + } + cachedSize = -1; + bitField0_ = 0; + npcTalkInfoList.clearQuick(); + return this; + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof GetFirstTalkByPerformanceNpcScRsp)) { + return false; + } + GetFirstTalkByPerformanceNpcScRsp other = (GetFirstTalkByPerformanceNpcScRsp) o; + return bitField0_ == other.bitField0_ + && (!hasRetcode() || retcode == other.retcode) + && (!hasNpcTalkInfoList() || npcTalkInfoList.equals(other.npcTalkInfoList)); + } + + @Override + public void writeTo(final ProtoSink output) throws IOException { + if ((bitField0_ & 0x00000001) != 0) { + output.writeRawByte((byte) 24); + output.writeUInt32NoTag(retcode); + } + if ((bitField0_ & 0x00000002) != 0) { + for (int i = 0; i < npcTalkInfoList.length(); i++) { + output.writeRawByte((byte) 42); + output.writeMessageNoTag(npcTalkInfoList.get(i)); + } + } + } + + @Override + protected int computeSerializedSize() { + int size = 0; + if ((bitField0_ & 0x00000001) != 0) { + size += 1 + ProtoSink.computeUInt32SizeNoTag(retcode); + } + if ((bitField0_ & 0x00000002) != 0) { + size += (1 * npcTalkInfoList.length()) + ProtoSink.computeRepeatedMessageSizeNoTag(npcTalkInfoList); + } + return size; + } + + @Override + @SuppressWarnings("fallthrough") + public GetFirstTalkByPerformanceNpcScRsp mergeFrom(final ProtoSource input) throws IOException { + // Enabled Fall-Through Optimization (QuickBuffers) + int tag = input.readTag(); + while (true) { + switch (tag) { + case 24: { + // retcode + retcode = input.readUInt32(); + bitField0_ |= 0x00000001; + tag = input.readTag(); + if (tag != 42) { + break; + } + } + case 42: { + // npcTalkInfoList + tag = input.readRepeatedMessage(npcTalkInfoList, tag); + bitField0_ |= 0x00000002; + 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); + } + if ((bitField0_ & 0x00000002) != 0) { + output.writeRepeatedMessage(FieldNames.npcTalkInfoList, npcTalkInfoList); + } + output.endObject(); + } + + @Override + public GetFirstTalkByPerformanceNpcScRsp 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; + } + case -1326095175: + case 2015989466: { + if (input.isAtField(FieldNames.npcTalkInfoList)) { + if (!input.trySkipNullValue()) { + input.readRepeatedMessage(npcTalkInfoList); + bitField0_ |= 0x00000002; + } + } else { + input.skipUnknownField(); + } + break; + } + default: { + input.skipUnknownField(); + break; + } + } + } + input.endObject(); + return this; + } + + @Override + public GetFirstTalkByPerformanceNpcScRsp clone() { + return new GetFirstTalkByPerformanceNpcScRsp().copyFrom(this); + } + + @Override + public boolean isEmpty() { + return ((bitField0_) == 0); + } + + public static GetFirstTalkByPerformanceNpcScRsp parseFrom(final byte[] data) throws + InvalidProtocolBufferException { + return ProtoMessage.mergeFrom(new GetFirstTalkByPerformanceNpcScRsp(), data).checkInitialized(); + } + + public static GetFirstTalkByPerformanceNpcScRsp parseFrom(final ProtoSource input) throws + IOException { + return ProtoMessage.mergeFrom(new GetFirstTalkByPerformanceNpcScRsp(), input).checkInitialized(); + } + + public static GetFirstTalkByPerformanceNpcScRsp parseFrom(final JsonSource input) throws + IOException { + return ProtoMessage.mergeFrom(new GetFirstTalkByPerformanceNpcScRsp(), input).checkInitialized(); + } + + /** + * @return factory for creating GetFirstTalkByPerformanceNpcScRsp messages + */ + public static MessageFactory getFactory() { + return GetFirstTalkByPerformanceNpcScRspFactory.INSTANCE; + } + + private enum GetFirstTalkByPerformanceNpcScRspFactory implements MessageFactory { + INSTANCE; + + @Override + public GetFirstTalkByPerformanceNpcScRsp create() { + return GetFirstTalkByPerformanceNpcScRsp.newInstance(); + } + } + + /** + * Contains name constants used for serializing JSON + */ + static class FieldNames { + static final FieldName retcode = FieldName.forField("retcode"); + + static final FieldName npcTalkInfoList = FieldName.forField("npcTalkInfoList", "npc_talk_info_list"); + } + } +} diff --git a/src/generated/main/emu/lunarcore/proto/NpcTalkInfoOuterClass.java b/src/generated/main/emu/lunarcore/proto/NpcTalkInfoOuterClass.java new file mode 100644 index 0000000..47758e0 --- /dev/null +++ b/src/generated/main/emu/lunarcore/proto/NpcTalkInfoOuterClass.java @@ -0,0 +1,339 @@ +// 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 NpcTalkInfoOuterClass { + /** + * Protobuf type {@code NpcTalkInfo} + */ + public static final class NpcTalkInfo extends ProtoMessage implements Cloneable { + private static final long serialVersionUID = 0L; + + /** + * optional uint32 npc_talk_id = 13; + */ + private int npcTalkId; + + /** + * optional bool NEFMOJIHOFJ = 5; + */ + private boolean nEFMOJIHOFJ; + + private NpcTalkInfo() { + } + + /** + * @return a new empty instance of {@code NpcTalkInfo} + */ + public static NpcTalkInfo newInstance() { + return new NpcTalkInfo(); + } + + /** + * optional uint32 npc_talk_id = 13; + * @return whether the npcTalkId field is set + */ + public boolean hasNpcTalkId() { + return (bitField0_ & 0x00000001) != 0; + } + + /** + * optional uint32 npc_talk_id = 13; + * @return this + */ + public NpcTalkInfo clearNpcTalkId() { + bitField0_ &= ~0x00000001; + npcTalkId = 0; + return this; + } + + /** + * optional uint32 npc_talk_id = 13; + * @return the npcTalkId + */ + public int getNpcTalkId() { + return npcTalkId; + } + + /** + * optional uint32 npc_talk_id = 13; + * @param value the npcTalkId to set + * @return this + */ + public NpcTalkInfo setNpcTalkId(final int value) { + bitField0_ |= 0x00000001; + npcTalkId = value; + return this; + } + + /** + * optional bool NEFMOJIHOFJ = 5; + * @return whether the nEFMOJIHOFJ field is set + */ + public boolean hasNEFMOJIHOFJ() { + return (bitField0_ & 0x00000002) != 0; + } + + /** + * optional bool NEFMOJIHOFJ = 5; + * @return this + */ + public NpcTalkInfo clearNEFMOJIHOFJ() { + bitField0_ &= ~0x00000002; + nEFMOJIHOFJ = false; + return this; + } + + /** + * optional bool NEFMOJIHOFJ = 5; + * @return the nEFMOJIHOFJ + */ + public boolean getNEFMOJIHOFJ() { + return nEFMOJIHOFJ; + } + + /** + * optional bool NEFMOJIHOFJ = 5; + * @param value the nEFMOJIHOFJ to set + * @return this + */ + public NpcTalkInfo setNEFMOJIHOFJ(final boolean value) { + bitField0_ |= 0x00000002; + nEFMOJIHOFJ = value; + return this; + } + + @Override + public NpcTalkInfo copyFrom(final NpcTalkInfo other) { + cachedSize = other.cachedSize; + if ((bitField0_ | other.bitField0_) != 0) { + bitField0_ = other.bitField0_; + npcTalkId = other.npcTalkId; + nEFMOJIHOFJ = other.nEFMOJIHOFJ; + } + return this; + } + + @Override + public NpcTalkInfo mergeFrom(final NpcTalkInfo other) { + if (other.isEmpty()) { + return this; + } + cachedSize = -1; + if (other.hasNpcTalkId()) { + setNpcTalkId(other.npcTalkId); + } + if (other.hasNEFMOJIHOFJ()) { + setNEFMOJIHOFJ(other.nEFMOJIHOFJ); + } + return this; + } + + @Override + public NpcTalkInfo clear() { + if (isEmpty()) { + return this; + } + cachedSize = -1; + bitField0_ = 0; + npcTalkId = 0; + nEFMOJIHOFJ = false; + return this; + } + + @Override + public NpcTalkInfo 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 NpcTalkInfo)) { + return false; + } + NpcTalkInfo other = (NpcTalkInfo) o; + return bitField0_ == other.bitField0_ + && (!hasNpcTalkId() || npcTalkId == other.npcTalkId) + && (!hasNEFMOJIHOFJ() || nEFMOJIHOFJ == other.nEFMOJIHOFJ); + } + + @Override + public void writeTo(final ProtoSink output) throws IOException { + if ((bitField0_ & 0x00000001) != 0) { + output.writeRawByte((byte) 104); + output.writeUInt32NoTag(npcTalkId); + } + if ((bitField0_ & 0x00000002) != 0) { + output.writeRawByte((byte) 40); + output.writeBoolNoTag(nEFMOJIHOFJ); + } + } + + @Override + protected int computeSerializedSize() { + int size = 0; + if ((bitField0_ & 0x00000001) != 0) { + size += 1 + ProtoSink.computeUInt32SizeNoTag(npcTalkId); + } + if ((bitField0_ & 0x00000002) != 0) { + size += 2; + } + return size; + } + + @Override + @SuppressWarnings("fallthrough") + public NpcTalkInfo mergeFrom(final ProtoSource input) throws IOException { + // Enabled Fall-Through Optimization (QuickBuffers) + int tag = input.readTag(); + while (true) { + switch (tag) { + case 104: { + // npcTalkId + npcTalkId = input.readUInt32(); + bitField0_ |= 0x00000001; + tag = input.readTag(); + if (tag != 40) { + break; + } + } + case 40: { + // nEFMOJIHOFJ + nEFMOJIHOFJ = input.readBool(); + 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.npcTalkId, npcTalkId); + } + if ((bitField0_ & 0x00000002) != 0) { + output.writeBool(FieldNames.nEFMOJIHOFJ, nEFMOJIHOFJ); + } + output.endObject(); + } + + @Override + public NpcTalkInfo mergeFrom(final JsonSource input) throws IOException { + if (!input.beginObject()) { + return this; + } + while (!input.isAtEnd()) { + switch (input.readFieldHash()) { + case 836037928: + case 1634324016: { + if (input.isAtField(FieldNames.npcTalkId)) { + if (!input.trySkipNullValue()) { + npcTalkId = input.readUInt32(); + bitField0_ |= 0x00000001; + } + } else { + input.skipUnknownField(); + } + break; + } + case -731622309: { + if (input.isAtField(FieldNames.nEFMOJIHOFJ)) { + if (!input.trySkipNullValue()) { + nEFMOJIHOFJ = input.readBool(); + bitField0_ |= 0x00000002; + } + } else { + input.skipUnknownField(); + } + break; + } + default: { + input.skipUnknownField(); + break; + } + } + } + input.endObject(); + return this; + } + + @Override + public NpcTalkInfo clone() { + return new NpcTalkInfo().copyFrom(this); + } + + @Override + public boolean isEmpty() { + return ((bitField0_) == 0); + } + + public static NpcTalkInfo parseFrom(final byte[] data) throws InvalidProtocolBufferException { + return ProtoMessage.mergeFrom(new NpcTalkInfo(), data).checkInitialized(); + } + + public static NpcTalkInfo parseFrom(final ProtoSource input) throws IOException { + return ProtoMessage.mergeFrom(new NpcTalkInfo(), input).checkInitialized(); + } + + public static NpcTalkInfo parseFrom(final JsonSource input) throws IOException { + return ProtoMessage.mergeFrom(new NpcTalkInfo(), input).checkInitialized(); + } + + /** + * @return factory for creating NpcTalkInfo messages + */ + public static MessageFactory getFactory() { + return NpcTalkInfoFactory.INSTANCE; + } + + private enum NpcTalkInfoFactory implements MessageFactory { + INSTANCE; + + @Override + public NpcTalkInfo create() { + return NpcTalkInfo.newInstance(); + } + } + + /** + * Contains name constants used for serializing JSON + */ + static class FieldNames { + static final FieldName npcTalkId = FieldName.forField("npcTalkId", "npc_talk_id"); + + static final FieldName nEFMOJIHOFJ = FieldName.forField("NEFMOJIHOFJ"); + } + } +} diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerGetFirstTalkByPerformanceNpcCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerGetFirstTalkByPerformanceNpcCsReq.java index b25184e..68c9765 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerGetFirstTalkByPerformanceNpcCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerGetFirstTalkByPerformanceNpcCsReq.java @@ -1,16 +1,20 @@ package emu.lunarcore.server.packet.recv; +import emu.lunarcore.proto.GetFirstTalkByPerformanceNpcCsReqOuterClass.GetFirstTalkByPerformanceNpcCsReq; 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.PacketGetFirstTalkByPerformanceNpcScRsp; @Opcodes(CmdId.GetFirstTalkByPerformanceNpcCsReq) public class HandlerGetFirstTalkByPerformanceNpcCsReq extends PacketHandler { @Override public void handle(GameSession session, byte[] header, byte[] data) throws Exception { - session.send(CmdId.GetFirstTalkByPerformanceNpcScRsp); + var req = GetFirstTalkByPerformanceNpcCsReq.parseFrom(data); + + session.send(new PacketGetFirstTalkByPerformanceNpcScRsp(req)); } } diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketGetFirstTalkByPerformanceNpcScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketGetFirstTalkByPerformanceNpcScRsp.java new file mode 100644 index 0000000..d8f9443 --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketGetFirstTalkByPerformanceNpcScRsp.java @@ -0,0 +1,25 @@ +package emu.lunarcore.server.packet.send; + +import emu.lunarcore.proto.GetFirstTalkByPerformanceNpcCsReqOuterClass.GetFirstTalkByPerformanceNpcCsReq; +import emu.lunarcore.proto.GetFirstTalkByPerformanceNpcScRspOuterClass.GetFirstTalkByPerformanceNpcScRsp; +import emu.lunarcore.proto.NpcTalkInfoOuterClass.NpcTalkInfo; +import emu.lunarcore.server.packet.BasePacket; +import emu.lunarcore.server.packet.CmdId; + +public class PacketGetFirstTalkByPerformanceNpcScRsp extends BasePacket { + + public PacketGetFirstTalkByPerformanceNpcScRsp(GetFirstTalkByPerformanceNpcCsReq req) { + super(CmdId.GetFirstTalkByPerformanceNpcScRsp); + + var data = GetFirstTalkByPerformanceNpcScRsp.newInstance(); + + for (int id: req.getNpcTalkList()) { + var info = NpcTalkInfo.newInstance() + .setNpcTalkId(id); + + data.addNpcTalkInfoList(info); + } + + this.setData(data); + } +}