Implement enabling rogue talents

This commit is contained in:
Melledy
2023-10-28 14:54:23 -07:00
parent 7839bf2a05
commit 4ddb900641
12 changed files with 1177 additions and 99 deletions

View File

@@ -0,0 +1,260 @@
// 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 EnableRogueTalentCsReqOuterClass {
/**
* Protobuf type {@code EnableRogueTalentCsReq}
*/
public static final class EnableRogueTalentCsReq extends ProtoMessage<EnableRogueTalentCsReq> implements Cloneable {
private static final long serialVersionUID = 0L;
/**
* <code>optional uint32 talent_id = 8;</code>
*/
private int talentId;
private EnableRogueTalentCsReq() {
}
/**
* @return a new empty instance of {@code EnableRogueTalentCsReq}
*/
public static EnableRogueTalentCsReq newInstance() {
return new EnableRogueTalentCsReq();
}
/**
* <code>optional uint32 talent_id = 8;</code>
* @return whether the talentId field is set
*/
public boolean hasTalentId() {
return (bitField0_ & 0x00000001) != 0;
}
/**
* <code>optional uint32 talent_id = 8;</code>
* @return this
*/
public EnableRogueTalentCsReq clearTalentId() {
bitField0_ &= ~0x00000001;
talentId = 0;
return this;
}
/**
* <code>optional uint32 talent_id = 8;</code>
* @return the talentId
*/
public int getTalentId() {
return talentId;
}
/**
* <code>optional uint32 talent_id = 8;</code>
* @param value the talentId to set
* @return this
*/
public EnableRogueTalentCsReq setTalentId(final int value) {
bitField0_ |= 0x00000001;
talentId = value;
return this;
}
@Override
public EnableRogueTalentCsReq copyFrom(final EnableRogueTalentCsReq other) {
cachedSize = other.cachedSize;
if ((bitField0_ | other.bitField0_) != 0) {
bitField0_ = other.bitField0_;
talentId = other.talentId;
}
return this;
}
@Override
public EnableRogueTalentCsReq mergeFrom(final EnableRogueTalentCsReq other) {
if (other.isEmpty()) {
return this;
}
cachedSize = -1;
if (other.hasTalentId()) {
setTalentId(other.talentId);
}
return this;
}
@Override
public EnableRogueTalentCsReq clear() {
if (isEmpty()) {
return this;
}
cachedSize = -1;
bitField0_ = 0;
talentId = 0;
return this;
}
@Override
public EnableRogueTalentCsReq 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 EnableRogueTalentCsReq)) {
return false;
}
EnableRogueTalentCsReq other = (EnableRogueTalentCsReq) o;
return bitField0_ == other.bitField0_
&& (!hasTalentId() || talentId == other.talentId);
}
@Override
public void writeTo(final ProtoSink output) throws IOException {
if ((bitField0_ & 0x00000001) != 0) {
output.writeRawByte((byte) 64);
output.writeUInt32NoTag(talentId);
}
}
@Override
protected int computeSerializedSize() {
int size = 0;
if ((bitField0_ & 0x00000001) != 0) {
size += 1 + ProtoSink.computeUInt32SizeNoTag(talentId);
}
return size;
}
@Override
@SuppressWarnings("fallthrough")
public EnableRogueTalentCsReq mergeFrom(final ProtoSource input) throws IOException {
// Enabled Fall-Through Optimization (QuickBuffers)
int tag = input.readTag();
while (true) {
switch (tag) {
case 64: {
// talentId
talentId = 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.talentId, talentId);
}
output.endObject();
}
@Override
public EnableRogueTalentCsReq mergeFrom(final JsonSource input) throws IOException {
if (!input.beginObject()) {
return this;
}
while (!input.isAtEnd()) {
switch (input.readFieldHash()) {
case -615305433:
case -1894577842: {
if (input.isAtField(FieldNames.talentId)) {
if (!input.trySkipNullValue()) {
talentId = input.readUInt32();
bitField0_ |= 0x00000001;
}
} else {
input.skipUnknownField();
}
break;
}
default: {
input.skipUnknownField();
break;
}
}
}
input.endObject();
return this;
}
@Override
public EnableRogueTalentCsReq clone() {
return new EnableRogueTalentCsReq().copyFrom(this);
}
@Override
public boolean isEmpty() {
return ((bitField0_) == 0);
}
public static EnableRogueTalentCsReq parseFrom(final byte[] data) throws
InvalidProtocolBufferException {
return ProtoMessage.mergeFrom(new EnableRogueTalentCsReq(), data).checkInitialized();
}
public static EnableRogueTalentCsReq parseFrom(final ProtoSource input) throws IOException {
return ProtoMessage.mergeFrom(new EnableRogueTalentCsReq(), input).checkInitialized();
}
public static EnableRogueTalentCsReq parseFrom(final JsonSource input) throws IOException {
return ProtoMessage.mergeFrom(new EnableRogueTalentCsReq(), input).checkInitialized();
}
/**
* @return factory for creating EnableRogueTalentCsReq messages
*/
public static MessageFactory<EnableRogueTalentCsReq> getFactory() {
return EnableRogueTalentCsReqFactory.INSTANCE;
}
private enum EnableRogueTalentCsReqFactory implements MessageFactory<EnableRogueTalentCsReq> {
INSTANCE;
@Override
public EnableRogueTalentCsReq create() {
return EnableRogueTalentCsReq.newInstance();
}
}
/**
* Contains name constants used for serializing JSON
*/
static class FieldNames {
static final FieldName talentId = FieldName.forField("talentId", "talent_id");
}
}
}

View File

@@ -0,0 +1,362 @@
// 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 EnableRogueTalentScRspOuterClass {
/**
* Protobuf type {@code EnableRogueTalentScRsp}
*/
public static final class EnableRogueTalentScRsp extends ProtoMessage<EnableRogueTalentScRsp> implements Cloneable {
private static final long serialVersionUID = 0L;
/**
* <code>optional uint32 retcode = 11;</code>
*/
private int retcode;
/**
* <code>optional .RogueTalentInfo talent_info = 15;</code>
*/
private final RogueTalentInfoOuterClass.RogueTalentInfo talentInfo = RogueTalentInfoOuterClass.RogueTalentInfo.newInstance();
private EnableRogueTalentScRsp() {
}
/**
* @return a new empty instance of {@code EnableRogueTalentScRsp}
*/
public static EnableRogueTalentScRsp newInstance() {
return new EnableRogueTalentScRsp();
}
/**
* <code>optional uint32 retcode = 11;</code>
* @return whether the retcode field is set
*/
public boolean hasRetcode() {
return (bitField0_ & 0x00000001) != 0;
}
/**
* <code>optional uint32 retcode = 11;</code>
* @return this
*/
public EnableRogueTalentScRsp clearRetcode() {
bitField0_ &= ~0x00000001;
retcode = 0;
return this;
}
/**
* <code>optional uint32 retcode = 11;</code>
* @return the retcode
*/
public int getRetcode() {
return retcode;
}
/**
* <code>optional uint32 retcode = 11;</code>
* @param value the retcode to set
* @return this
*/
public EnableRogueTalentScRsp setRetcode(final int value) {
bitField0_ |= 0x00000001;
retcode = value;
return this;
}
/**
* <code>optional .RogueTalentInfo talent_info = 15;</code>
* @return whether the talentInfo field is set
*/
public boolean hasTalentInfo() {
return (bitField0_ & 0x00000002) != 0;
}
/**
* <code>optional .RogueTalentInfo talent_info = 15;</code>
* @return this
*/
public EnableRogueTalentScRsp clearTalentInfo() {
bitField0_ &= ~0x00000002;
talentInfo.clear();
return this;
}
/**
* <code>optional .RogueTalentInfo talent_info = 15;</code>
*
* 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 #getMutableTalentInfo()} if you want to modify it.
*
* @return internal storage object for reading
*/
public RogueTalentInfoOuterClass.RogueTalentInfo getTalentInfo() {
return talentInfo;
}
/**
* <code>optional .RogueTalentInfo talent_info = 15;</code>
*
* 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 RogueTalentInfoOuterClass.RogueTalentInfo getMutableTalentInfo() {
bitField0_ |= 0x00000002;
return talentInfo;
}
/**
* <code>optional .RogueTalentInfo talent_info = 15;</code>
* @param value the talentInfo to set
* @return this
*/
public EnableRogueTalentScRsp setTalentInfo(
final RogueTalentInfoOuterClass.RogueTalentInfo value) {
bitField0_ |= 0x00000002;
talentInfo.copyFrom(value);
return this;
}
@Override
public EnableRogueTalentScRsp copyFrom(final EnableRogueTalentScRsp other) {
cachedSize = other.cachedSize;
if ((bitField0_ | other.bitField0_) != 0) {
bitField0_ = other.bitField0_;
retcode = other.retcode;
talentInfo.copyFrom(other.talentInfo);
}
return this;
}
@Override
public EnableRogueTalentScRsp mergeFrom(final EnableRogueTalentScRsp other) {
if (other.isEmpty()) {
return this;
}
cachedSize = -1;
if (other.hasRetcode()) {
setRetcode(other.retcode);
}
if (other.hasTalentInfo()) {
getMutableTalentInfo().mergeFrom(other.talentInfo);
}
return this;
}
@Override
public EnableRogueTalentScRsp clear() {
if (isEmpty()) {
return this;
}
cachedSize = -1;
bitField0_ = 0;
retcode = 0;
talentInfo.clear();
return this;
}
@Override
public EnableRogueTalentScRsp clearQuick() {
if (isEmpty()) {
return this;
}
cachedSize = -1;
bitField0_ = 0;
talentInfo.clearQuick();
return this;
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (!(o instanceof EnableRogueTalentScRsp)) {
return false;
}
EnableRogueTalentScRsp other = (EnableRogueTalentScRsp) o;
return bitField0_ == other.bitField0_
&& (!hasRetcode() || retcode == other.retcode)
&& (!hasTalentInfo() || talentInfo.equals(other.talentInfo));
}
@Override
public void writeTo(final ProtoSink output) throws IOException {
if ((bitField0_ & 0x00000001) != 0) {
output.writeRawByte((byte) 88);
output.writeUInt32NoTag(retcode);
}
if ((bitField0_ & 0x00000002) != 0) {
output.writeRawByte((byte) 122);
output.writeMessageNoTag(talentInfo);
}
}
@Override
protected int computeSerializedSize() {
int size = 0;
if ((bitField0_ & 0x00000001) != 0) {
size += 1 + ProtoSink.computeUInt32SizeNoTag(retcode);
}
if ((bitField0_ & 0x00000002) != 0) {
size += 1 + ProtoSink.computeMessageSizeNoTag(talentInfo);
}
return size;
}
@Override
@SuppressWarnings("fallthrough")
public EnableRogueTalentScRsp mergeFrom(final ProtoSource input) throws IOException {
// Enabled Fall-Through Optimization (QuickBuffers)
int tag = input.readTag();
while (true) {
switch (tag) {
case 88: {
// retcode
retcode = input.readUInt32();
bitField0_ |= 0x00000001;
tag = input.readTag();
if (tag != 122) {
break;
}
}
case 122: {
// talentInfo
input.readMessage(talentInfo);
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.retcode, retcode);
}
if ((bitField0_ & 0x00000002) != 0) {
output.writeMessage(FieldNames.talentInfo, talentInfo);
}
output.endObject();
}
@Override
public EnableRogueTalentScRsp 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 1396978618:
case 376840225: {
if (input.isAtField(FieldNames.talentInfo)) {
if (!input.trySkipNullValue()) {
input.readMessage(talentInfo);
bitField0_ |= 0x00000002;
}
} else {
input.skipUnknownField();
}
break;
}
default: {
input.skipUnknownField();
break;
}
}
}
input.endObject();
return this;
}
@Override
public EnableRogueTalentScRsp clone() {
return new EnableRogueTalentScRsp().copyFrom(this);
}
@Override
public boolean isEmpty() {
return ((bitField0_) == 0);
}
public static EnableRogueTalentScRsp parseFrom(final byte[] data) throws
InvalidProtocolBufferException {
return ProtoMessage.mergeFrom(new EnableRogueTalentScRsp(), data).checkInitialized();
}
public static EnableRogueTalentScRsp parseFrom(final ProtoSource input) throws IOException {
return ProtoMessage.mergeFrom(new EnableRogueTalentScRsp(), input).checkInitialized();
}
public static EnableRogueTalentScRsp parseFrom(final JsonSource input) throws IOException {
return ProtoMessage.mergeFrom(new EnableRogueTalentScRsp(), input).checkInitialized();
}
/**
* @return factory for creating EnableRogueTalentScRsp messages
*/
public static MessageFactory<EnableRogueTalentScRsp> getFactory() {
return EnableRogueTalentScRspFactory.INSTANCE;
}
private enum EnableRogueTalentScRspFactory implements MessageFactory<EnableRogueTalentScRsp> {
INSTANCE;
@Override
public EnableRogueTalentScRsp create() {
return EnableRogueTalentScRsp.newInstance();
}
}
/**
* Contains name constants used for serializing JSON
*/
static class FieldNames {
static final FieldName retcode = FieldName.forField("retcode");
static final FieldName talentInfo = FieldName.forField("talentInfo", "talent_info");
}
}
}

View File

@@ -56,9 +56,9 @@ public final class RogueInfoOuterClass {
private int status;
/**
* <code>optional .RogueVirtualItems rogue_virtual_items = 5;</code>
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 5;</code>
*/
private final RogueVirtualItemsOuterClass.RogueVirtualItems rogueVirtualItems = RogueVirtualItemsOuterClass.RogueVirtualItems.newInstance();
private final RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo rogueVirtualItemInfo = RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo.newInstance();
/**
* <code>optional .RogueCurrentInfo rogue_progress = 83;</code>
@@ -390,39 +390,39 @@ public final class RogueInfoOuterClass {
}
/**
* <code>optional .RogueVirtualItems rogue_virtual_items = 5;</code>
* @return whether the rogueVirtualItems field is set
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 5;</code>
* @return whether the rogueVirtualItemInfo field is set
*/
public boolean hasRogueVirtualItems() {
public boolean hasRogueVirtualItemInfo() {
return (bitField0_ & 0x00000080) != 0;
}
/**
* <code>optional .RogueVirtualItems rogue_virtual_items = 5;</code>
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 5;</code>
* @return this
*/
public RogueInfo clearRogueVirtualItems() {
public RogueInfo clearRogueVirtualItemInfo() {
bitField0_ &= ~0x00000080;
rogueVirtualItems.clear();
rogueVirtualItemInfo.clear();
return this;
}
/**
* <code>optional .RogueVirtualItems rogue_virtual_items = 5;</code>
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 5;</code>
*
* 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 #getMutableRogueVirtualItems()} if you want to modify it.
* Use {@link #getMutableRogueVirtualItemInfo()} if you want to modify it.
*
* @return internal storage object for reading
*/
public RogueVirtualItemsOuterClass.RogueVirtualItems getRogueVirtualItems() {
return rogueVirtualItems;
public RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo getRogueVirtualItemInfo() {
return rogueVirtualItemInfo;
}
/**
* <code>optional .RogueVirtualItems rogue_virtual_items = 5;</code>
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 5;</code>
*
* This method returns the internal storage object and sets the corresponding
* has state. The returned object will become part of this message and its
@@ -430,20 +430,20 @@ public final class RogueInfoOuterClass {
*
* @return internal storage object for modifications
*/
public RogueVirtualItemsOuterClass.RogueVirtualItems getMutableRogueVirtualItems() {
public RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo getMutableRogueVirtualItemInfo() {
bitField0_ |= 0x00000080;
return rogueVirtualItems;
return rogueVirtualItemInfo;
}
/**
* <code>optional .RogueVirtualItems rogue_virtual_items = 5;</code>
* @param value the rogueVirtualItems to set
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 5;</code>
* @param value the rogueVirtualItemInfo to set
* @return this
*/
public RogueInfo setRogueVirtualItems(
final RogueVirtualItemsOuterClass.RogueVirtualItems value) {
public RogueInfo setRogueVirtualItemInfo(
final RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo value) {
bitField0_ |= 0x00000080;
rogueVirtualItems.copyFrom(value);
rogueVirtualItemInfo.copyFrom(value);
return this;
}
@@ -881,7 +881,7 @@ public final class RogueInfoOuterClass {
talentPoints = other.talentPoints;
hDBPIDMBJOH = other.hDBPIDMBJOH;
status = other.status;
rogueVirtualItems.copyFrom(other.rogueVirtualItems);
rogueVirtualItemInfo.copyFrom(other.rogueVirtualItemInfo);
rogueProgress.copyFrom(other.rogueProgress);
rogueData.copyFrom(other.rogueData);
rogueAeonInfo.copyFrom(other.rogueAeonInfo);
@@ -920,8 +920,8 @@ public final class RogueInfoOuterClass {
if (other.hasStatus()) {
setStatusValue(other.status);
}
if (other.hasRogueVirtualItems()) {
getMutableRogueVirtualItems().mergeFrom(other.rogueVirtualItems);
if (other.hasRogueVirtualItemInfo()) {
getMutableRogueVirtualItemInfo().mergeFrom(other.rogueVirtualItemInfo);
}
if (other.hasRogueProgress()) {
getMutableRogueProgress().mergeFrom(other.rogueProgress);
@@ -961,7 +961,7 @@ public final class RogueInfoOuterClass {
talentPoints = 0;
hDBPIDMBJOH = 0;
status = 0;
rogueVirtualItems.clear();
rogueVirtualItemInfo.clear();
rogueProgress.clear();
rogueData.clear();
rogueAeonInfo.clear();
@@ -979,7 +979,7 @@ public final class RogueInfoOuterClass {
}
cachedSize = -1;
bitField0_ = 0;
rogueVirtualItems.clearQuick();
rogueVirtualItemInfo.clearQuick();
rogueProgress.clearQuick();
rogueData.clearQuick();
rogueAeonInfo.clearQuick();
@@ -1007,7 +1007,7 @@ public final class RogueInfoOuterClass {
&& (!hasTalentPoints() || talentPoints == other.talentPoints)
&& (!hasHDBPIDMBJOH() || hDBPIDMBJOH == other.hDBPIDMBJOH)
&& (!hasStatus() || status == other.status)
&& (!hasRogueVirtualItems() || rogueVirtualItems.equals(other.rogueVirtualItems))
&& (!hasRogueVirtualItemInfo() || rogueVirtualItemInfo.equals(other.rogueVirtualItemInfo))
&& (!hasRogueProgress() || rogueProgress.equals(other.rogueProgress))
&& (!hasRogueData() || rogueData.equals(other.rogueData))
&& (!hasRogueAeonInfo() || rogueAeonInfo.equals(other.rogueAeonInfo))
@@ -1049,7 +1049,7 @@ public final class RogueInfoOuterClass {
}
if ((bitField0_ & 0x00000080) != 0) {
output.writeRawByte((byte) 42);
output.writeMessageNoTag(rogueVirtualItems);
output.writeMessageNoTag(rogueVirtualItemInfo);
}
if ((bitField0_ & 0x00000100) != 0) {
output.writeRawLittleEndian16((short) 1434);
@@ -1110,7 +1110,7 @@ public final class RogueInfoOuterClass {
size += 1 + ProtoSink.computeEnumSizeNoTag(status);
}
if ((bitField0_ & 0x00000080) != 0) {
size += 1 + ProtoSink.computeMessageSizeNoTag(rogueVirtualItems);
size += 1 + ProtoSink.computeMessageSizeNoTag(rogueVirtualItemInfo);
}
if ((bitField0_ & 0x00000100) != 0) {
size += 2 + ProtoSink.computeMessageSizeNoTag(rogueProgress);
@@ -1210,8 +1210,8 @@ public final class RogueInfoOuterClass {
}
}
case 42: {
// rogueVirtualItems
input.readMessage(rogueVirtualItems);
// rogueVirtualItemInfo
input.readMessage(rogueVirtualItemInfo);
bitField0_ |= 0x00000080;
tag = input.readTag();
if (tag != 666) {
@@ -1325,7 +1325,7 @@ public final class RogueInfoOuterClass {
output.writeEnum(FieldNames.status, status, RogueStatusOuterClass.RogueStatus.converter());
}
if ((bitField0_ & 0x00000080) != 0) {
output.writeMessage(FieldNames.rogueVirtualItems, rogueVirtualItems);
output.writeMessage(FieldNames.rogueVirtualItemInfo, rogueVirtualItemInfo);
}
if ((bitField0_ & 0x00000100) != 0) {
output.writeMessage(FieldNames.rogueProgress, rogueProgress);
@@ -1444,11 +1444,11 @@ public final class RogueInfoOuterClass {
}
break;
}
case 370696815:
case -768163865: {
if (input.isAtField(FieldNames.rogueVirtualItems)) {
case 1066755410:
case 1452147457: {
if (input.isAtField(FieldNames.rogueVirtualItemInfo)) {
if (!input.trySkipNullValue()) {
input.readMessage(rogueVirtualItems);
input.readMessage(rogueVirtualItemInfo);
bitField0_ |= 0x00000080;
}
} else {
@@ -1606,7 +1606,7 @@ public final class RogueInfoOuterClass {
static final FieldName status = FieldName.forField("status");
static final FieldName rogueVirtualItems = FieldName.forField("rogueVirtualItems", "rogue_virtual_items");
static final FieldName rogueVirtualItemInfo = FieldName.forField("rogueVirtualItemInfo", "rogue_virtual_item_info");
static final FieldName rogueProgress = FieldName.forField("rogueProgress", "rogue_progress");

View File

@@ -11,11 +11,11 @@ import us.hebi.quickbuf.ProtoMessage;
import us.hebi.quickbuf.ProtoSink;
import us.hebi.quickbuf.ProtoSource;
public final class RogueVirtualItemsOuterClass {
public final class RogueVirtualItemInfoOuterClass {
/**
* Protobuf type {@code RogueVirtualItems}
* Protobuf type {@code RogueVirtualItemInfo}
*/
public static final class RogueVirtualItems extends ProtoMessage<RogueVirtualItems> implements Cloneable {
public static final class RogueVirtualItemInfo extends ProtoMessage<RogueVirtualItemInfo> implements Cloneable {
private static final long serialVersionUID = 0L;
/**
@@ -38,14 +38,14 @@ public final class RogueVirtualItemsOuterClass {
*/
private int rogueTalentPoints;
private RogueVirtualItems() {
private RogueVirtualItemInfo() {
}
/**
* @return a new empty instance of {@code RogueVirtualItems}
* @return a new empty instance of {@code RogueVirtualItemInfo}
*/
public static RogueVirtualItems newInstance() {
return new RogueVirtualItems();
public static RogueVirtualItemInfo newInstance() {
return new RogueVirtualItemInfo();
}
/**
@@ -60,7 +60,7 @@ public final class RogueVirtualItemsOuterClass {
* <code>optional uint32 ALLDDMKKICK = 1;</code>
* @return this
*/
public RogueVirtualItems clearALLDDMKKICK() {
public RogueVirtualItemInfo clearALLDDMKKICK() {
bitField0_ &= ~0x00000001;
aLLDDMKKICK = 0;
return this;
@@ -79,7 +79,7 @@ public final class RogueVirtualItemsOuterClass {
* @param value the aLLDDMKKICK to set
* @return this
*/
public RogueVirtualItems setALLDDMKKICK(final int value) {
public RogueVirtualItemInfo setALLDDMKKICK(final int value) {
bitField0_ |= 0x00000001;
aLLDDMKKICK = value;
return this;
@@ -97,7 +97,7 @@ public final class RogueVirtualItemsOuterClass {
* <code>optional uint32 DOMMGENHGKE = 4;</code>
* @return this
*/
public RogueVirtualItems clearDOMMGENHGKE() {
public RogueVirtualItemInfo clearDOMMGENHGKE() {
bitField0_ &= ~0x00000002;
dOMMGENHGKE = 0;
return this;
@@ -116,7 +116,7 @@ public final class RogueVirtualItemsOuterClass {
* @param value the dOMMGENHGKE to set
* @return this
*/
public RogueVirtualItems setDOMMGENHGKE(final int value) {
public RogueVirtualItemInfo setDOMMGENHGKE(final int value) {
bitField0_ |= 0x00000002;
dOMMGENHGKE = value;
return this;
@@ -134,7 +134,7 @@ public final class RogueVirtualItemsOuterClass {
* <code>optional uint32 KMAGFHIIALA = 10;</code>
* @return this
*/
public RogueVirtualItems clearKMAGFHIIALA() {
public RogueVirtualItemInfo clearKMAGFHIIALA() {
bitField0_ &= ~0x00000004;
kMAGFHIIALA = 0;
return this;
@@ -153,7 +153,7 @@ public final class RogueVirtualItemsOuterClass {
* @param value the kMAGFHIIALA to set
* @return this
*/
public RogueVirtualItems setKMAGFHIIALA(final int value) {
public RogueVirtualItemInfo setKMAGFHIIALA(final int value) {
bitField0_ |= 0x00000004;
kMAGFHIIALA = value;
return this;
@@ -171,7 +171,7 @@ public final class RogueVirtualItemsOuterClass {
* <code>optional uint32 rogue_talent_points = 14;</code>
* @return this
*/
public RogueVirtualItems clearRogueTalentPoints() {
public RogueVirtualItemInfo clearRogueTalentPoints() {
bitField0_ &= ~0x00000008;
rogueTalentPoints = 0;
return this;
@@ -190,14 +190,14 @@ public final class RogueVirtualItemsOuterClass {
* @param value the rogueTalentPoints to set
* @return this
*/
public RogueVirtualItems setRogueTalentPoints(final int value) {
public RogueVirtualItemInfo setRogueTalentPoints(final int value) {
bitField0_ |= 0x00000008;
rogueTalentPoints = value;
return this;
}
@Override
public RogueVirtualItems copyFrom(final RogueVirtualItems other) {
public RogueVirtualItemInfo copyFrom(final RogueVirtualItemInfo other) {
cachedSize = other.cachedSize;
if ((bitField0_ | other.bitField0_) != 0) {
bitField0_ = other.bitField0_;
@@ -210,7 +210,7 @@ public final class RogueVirtualItemsOuterClass {
}
@Override
public RogueVirtualItems mergeFrom(final RogueVirtualItems other) {
public RogueVirtualItemInfo mergeFrom(final RogueVirtualItemInfo other) {
if (other.isEmpty()) {
return this;
}
@@ -231,7 +231,7 @@ public final class RogueVirtualItemsOuterClass {
}
@Override
public RogueVirtualItems clear() {
public RogueVirtualItemInfo clear() {
if (isEmpty()) {
return this;
}
@@ -245,7 +245,7 @@ public final class RogueVirtualItemsOuterClass {
}
@Override
public RogueVirtualItems clearQuick() {
public RogueVirtualItemInfo clearQuick() {
if (isEmpty()) {
return this;
}
@@ -259,10 +259,10 @@ public final class RogueVirtualItemsOuterClass {
if (o == this) {
return true;
}
if (!(o instanceof RogueVirtualItems)) {
if (!(o instanceof RogueVirtualItemInfo)) {
return false;
}
RogueVirtualItems other = (RogueVirtualItems) o;
RogueVirtualItemInfo other = (RogueVirtualItemInfo) o;
return bitField0_ == other.bitField0_
&& (!hasALLDDMKKICK() || aLLDDMKKICK == other.aLLDDMKKICK)
&& (!hasDOMMGENHGKE() || dOMMGENHGKE == other.dOMMGENHGKE)
@@ -310,7 +310,7 @@ public final class RogueVirtualItemsOuterClass {
@Override
@SuppressWarnings("fallthrough")
public RogueVirtualItems mergeFrom(final ProtoSource input) throws IOException {
public RogueVirtualItemInfo mergeFrom(final ProtoSource input) throws IOException {
// Enabled Fall-Through Optimization (QuickBuffers)
int tag = input.readTag();
while (true) {
@@ -384,7 +384,7 @@ public final class RogueVirtualItemsOuterClass {
}
@Override
public RogueVirtualItems mergeFrom(final JsonSource input) throws IOException {
public RogueVirtualItemInfo mergeFrom(final JsonSource input) throws IOException {
if (!input.beginObject()) {
return this;
}
@@ -446,8 +446,8 @@ public final class RogueVirtualItemsOuterClass {
}
@Override
public RogueVirtualItems clone() {
return new RogueVirtualItems().copyFrom(this);
public RogueVirtualItemInfo clone() {
return new RogueVirtualItemInfo().copyFrom(this);
}
@Override
@@ -455,32 +455,32 @@ public final class RogueVirtualItemsOuterClass {
return ((bitField0_) == 0);
}
public static RogueVirtualItems parseFrom(final byte[] data) throws
public static RogueVirtualItemInfo parseFrom(final byte[] data) throws
InvalidProtocolBufferException {
return ProtoMessage.mergeFrom(new RogueVirtualItems(), data).checkInitialized();
return ProtoMessage.mergeFrom(new RogueVirtualItemInfo(), data).checkInitialized();
}
public static RogueVirtualItems parseFrom(final ProtoSource input) throws IOException {
return ProtoMessage.mergeFrom(new RogueVirtualItems(), input).checkInitialized();
public static RogueVirtualItemInfo parseFrom(final ProtoSource input) throws IOException {
return ProtoMessage.mergeFrom(new RogueVirtualItemInfo(), input).checkInitialized();
}
public static RogueVirtualItems parseFrom(final JsonSource input) throws IOException {
return ProtoMessage.mergeFrom(new RogueVirtualItems(), input).checkInitialized();
public static RogueVirtualItemInfo parseFrom(final JsonSource input) throws IOException {
return ProtoMessage.mergeFrom(new RogueVirtualItemInfo(), input).checkInitialized();
}
/**
* @return factory for creating RogueVirtualItems messages
* @return factory for creating RogueVirtualItemInfo messages
*/
public static MessageFactory<RogueVirtualItems> getFactory() {
return RogueVirtualItemsFactory.INSTANCE;
public static MessageFactory<RogueVirtualItemInfo> getFactory() {
return RogueVirtualItemInfoFactory.INSTANCE;
}
private enum RogueVirtualItemsFactory implements MessageFactory<RogueVirtualItems> {
private enum RogueVirtualItemInfoFactory implements MessageFactory<RogueVirtualItemInfo> {
INSTANCE;
@Override
public RogueVirtualItems create() {
return RogueVirtualItems.newInstance();
public RogueVirtualItemInfo create() {
return RogueVirtualItemInfo.newInstance();
}
}

View File

@@ -0,0 +1,285 @@
// 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 SyncRogueVirtualItemInfoScNotifyOuterClass {
/**
* Protobuf type {@code SyncRogueVirtualItemInfoScNotify}
*/
public static final class SyncRogueVirtualItemInfoScNotify extends ProtoMessage<SyncRogueVirtualItemInfoScNotify> implements Cloneable {
private static final long serialVersionUID = 0L;
/**
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 15;</code>
*/
private final RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo rogueVirtualItemInfo = RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo.newInstance();
private SyncRogueVirtualItemInfoScNotify() {
}
/**
* @return a new empty instance of {@code SyncRogueVirtualItemInfoScNotify}
*/
public static SyncRogueVirtualItemInfoScNotify newInstance() {
return new SyncRogueVirtualItemInfoScNotify();
}
/**
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 15;</code>
* @return whether the rogueVirtualItemInfo field is set
*/
public boolean hasRogueVirtualItemInfo() {
return (bitField0_ & 0x00000001) != 0;
}
/**
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 15;</code>
* @return this
*/
public SyncRogueVirtualItemInfoScNotify clearRogueVirtualItemInfo() {
bitField0_ &= ~0x00000001;
rogueVirtualItemInfo.clear();
return this;
}
/**
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 15;</code>
*
* 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 #getMutableRogueVirtualItemInfo()} if you want to modify it.
*
* @return internal storage object for reading
*/
public RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo getRogueVirtualItemInfo() {
return rogueVirtualItemInfo;
}
/**
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 15;</code>
*
* 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 RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo getMutableRogueVirtualItemInfo() {
bitField0_ |= 0x00000001;
return rogueVirtualItemInfo;
}
/**
* <code>optional .RogueVirtualItemInfo rogue_virtual_item_info = 15;</code>
* @param value the rogueVirtualItemInfo to set
* @return this
*/
public SyncRogueVirtualItemInfoScNotify setRogueVirtualItemInfo(
final RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo value) {
bitField0_ |= 0x00000001;
rogueVirtualItemInfo.copyFrom(value);
return this;
}
@Override
public SyncRogueVirtualItemInfoScNotify copyFrom(final SyncRogueVirtualItemInfoScNotify other) {
cachedSize = other.cachedSize;
if ((bitField0_ | other.bitField0_) != 0) {
bitField0_ = other.bitField0_;
rogueVirtualItemInfo.copyFrom(other.rogueVirtualItemInfo);
}
return this;
}
@Override
public SyncRogueVirtualItemInfoScNotify mergeFrom(
final SyncRogueVirtualItemInfoScNotify other) {
if (other.isEmpty()) {
return this;
}
cachedSize = -1;
if (other.hasRogueVirtualItemInfo()) {
getMutableRogueVirtualItemInfo().mergeFrom(other.rogueVirtualItemInfo);
}
return this;
}
@Override
public SyncRogueVirtualItemInfoScNotify clear() {
if (isEmpty()) {
return this;
}
cachedSize = -1;
bitField0_ = 0;
rogueVirtualItemInfo.clear();
return this;
}
@Override
public SyncRogueVirtualItemInfoScNotify clearQuick() {
if (isEmpty()) {
return this;
}
cachedSize = -1;
bitField0_ = 0;
rogueVirtualItemInfo.clearQuick();
return this;
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (!(o instanceof SyncRogueVirtualItemInfoScNotify)) {
return false;
}
SyncRogueVirtualItemInfoScNotify other = (SyncRogueVirtualItemInfoScNotify) o;
return bitField0_ == other.bitField0_
&& (!hasRogueVirtualItemInfo() || rogueVirtualItemInfo.equals(other.rogueVirtualItemInfo));
}
@Override
public void writeTo(final ProtoSink output) throws IOException {
if ((bitField0_ & 0x00000001) != 0) {
output.writeRawByte((byte) 122);
output.writeMessageNoTag(rogueVirtualItemInfo);
}
}
@Override
protected int computeSerializedSize() {
int size = 0;
if ((bitField0_ & 0x00000001) != 0) {
size += 1 + ProtoSink.computeMessageSizeNoTag(rogueVirtualItemInfo);
}
return size;
}
@Override
@SuppressWarnings("fallthrough")
public SyncRogueVirtualItemInfoScNotify mergeFrom(final ProtoSource input) throws IOException {
// Enabled Fall-Through Optimization (QuickBuffers)
int tag = input.readTag();
while (true) {
switch (tag) {
case 122: {
// rogueVirtualItemInfo
input.readMessage(rogueVirtualItemInfo);
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.writeMessage(FieldNames.rogueVirtualItemInfo, rogueVirtualItemInfo);
}
output.endObject();
}
@Override
public SyncRogueVirtualItemInfoScNotify mergeFrom(final JsonSource input) throws IOException {
if (!input.beginObject()) {
return this;
}
while (!input.isAtEnd()) {
switch (input.readFieldHash()) {
case 1066755410:
case 1452147457: {
if (input.isAtField(FieldNames.rogueVirtualItemInfo)) {
if (!input.trySkipNullValue()) {
input.readMessage(rogueVirtualItemInfo);
bitField0_ |= 0x00000001;
}
} else {
input.skipUnknownField();
}
break;
}
default: {
input.skipUnknownField();
break;
}
}
}
input.endObject();
return this;
}
@Override
public SyncRogueVirtualItemInfoScNotify clone() {
return new SyncRogueVirtualItemInfoScNotify().copyFrom(this);
}
@Override
public boolean isEmpty() {
return ((bitField0_) == 0);
}
public static SyncRogueVirtualItemInfoScNotify parseFrom(final byte[] data) throws
InvalidProtocolBufferException {
return ProtoMessage.mergeFrom(new SyncRogueVirtualItemInfoScNotify(), data).checkInitialized();
}
public static SyncRogueVirtualItemInfoScNotify parseFrom(final ProtoSource input) throws
IOException {
return ProtoMessage.mergeFrom(new SyncRogueVirtualItemInfoScNotify(), input).checkInitialized();
}
public static SyncRogueVirtualItemInfoScNotify parseFrom(final JsonSource input) throws
IOException {
return ProtoMessage.mergeFrom(new SyncRogueVirtualItemInfoScNotify(), input).checkInitialized();
}
/**
* @return factory for creating SyncRogueVirtualItemInfoScNotify messages
*/
public static MessageFactory<SyncRogueVirtualItemInfoScNotify> getFactory() {
return SyncRogueVirtualItemInfoScNotifyFactory.INSTANCE;
}
private enum SyncRogueVirtualItemInfoScNotifyFactory implements MessageFactory<SyncRogueVirtualItemInfoScNotify> {
INSTANCE;
@Override
public SyncRogueVirtualItemInfoScNotify create() {
return SyncRogueVirtualItemInfoScNotify.newInstance();
}
}
/**
* Contains name constants used for serializing JSON
*/
static class FieldNames {
static final FieldName rogueVirtualItemInfo = FieldName.forField("rogueVirtualItemInfo", "rogue_virtual_item_info");
}
}
}

View File

@@ -38,6 +38,7 @@ import emu.lunarcore.game.scene.triggers.PropTriggerType;
import emu.lunarcore.proto.BoardDataSyncOuterClass.BoardDataSync;
import emu.lunarcore.proto.HeadIconOuterClass.HeadIcon;
import emu.lunarcore.proto.PlayerBasicInfoOuterClass.PlayerBasicInfo;
import emu.lunarcore.proto.RogueVirtualItemInfoOuterClass.RogueVirtualItemInfo;
import emu.lunarcore.server.game.GameServer;
import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.BasePacket;
@@ -45,6 +46,7 @@ import emu.lunarcore.server.packet.SessionState;
import emu.lunarcore.server.packet.send.PacketEnterSceneByServerScNotify;
import emu.lunarcore.server.packet.send.PacketPlayerSyncScNotify;
import emu.lunarcore.server.packet.send.PacketSceneEntityMoveScNotify;
import emu.lunarcore.server.packet.send.PacketSyncRogueVirtualItemInfoScNotify;
import emu.lunarcore.util.Position;
import lombok.Getter;
@@ -303,6 +305,7 @@ public class Player {
public void addTalentPoints(int amount) {
this.talentPoints += amount;
this.sendPacket(new PacketSyncRogueVirtualItemInfoScNotify(this));
}
public void addStamina(int amount) {
@@ -548,7 +551,8 @@ public class Player {
this.getInventory().loadFromDatabase();
this.getMailbox().loadFromDatabase();
this.getChallengeManager().loadFromDatabase();
this.getRogueManager().loadFromDatabase();
// Load Etc
this.getLineupManager().validate(this);
this.getAvatars().setupHeroPaths();
@@ -588,4 +592,11 @@ public class Player {
return proto;
}
public RogueVirtualItemInfo toRogueVirtualItemsProto() {
var proto = RogueVirtualItemInfo.newInstance()
.setRogueTalentPoints(this.getTalentPoints());
return proto;
}
}

View File

@@ -4,8 +4,10 @@ import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import emu.lunarcore.GameConstants;
import emu.lunarcore.LunarCore;
import emu.lunarcore.data.GameData;
import emu.lunarcore.data.GameDepot;
import emu.lunarcore.data.excel.RogueTalentExcel;
import emu.lunarcore.game.player.BasePlayerManager;
import emu.lunarcore.game.player.Player;
import emu.lunarcore.game.player.PlayerLineup;
@@ -17,15 +19,53 @@ import emu.lunarcore.proto.RogueInfoDataOuterClass.RogueInfoData;
import emu.lunarcore.proto.RogueInfoOuterClass.RogueInfo;
import emu.lunarcore.proto.RogueScoreRewardInfoOuterClass.RogueScoreRewardInfo;
import emu.lunarcore.proto.RogueSeasonInfoOuterClass.RogueSeasonInfo;
import emu.lunarcore.proto.RogueTalentInfoOuterClass.RogueTalentInfo;
import emu.lunarcore.proto.RogueTalentOuterClass.RogueTalent;
import emu.lunarcore.proto.RogueTalentStatusOuterClass.RogueTalentStatus;
import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.send.PacketStartRogueScRsp;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
import lombok.Getter;
import us.hebi.quickbuf.RepeatedInt;
@Getter
public class RogueManager extends BasePlayerManager {
private IntSet talents;
public RogueManager(Player player) {
super(player);
this.talents = new IntOpenHashSet();
}
public boolean hasTalent(int talentId) {
return this.getTalents().contains(talentId);
}
public boolean enableTalent(int talentId) {
// Sanity check so we dont enable the same talent
if (this.getTalents().contains(talentId)) {
return false;
}
// Get talent excel
RogueTalentExcel excel = GameData.getRogueTalentExcelMap().get(talentId);
if (excel == null) return false;
// Verify items
if (!getPlayer().getInventory().verifyItems(excel.getCost())) {
return false;
}
// Pay items
getPlayer().getInventory().removeItemsByParams(excel.getCost());
// Add talent
RogueTalentData talent = new RogueTalentData(getPlayer(), excel.getTalentID());
talent.save();
return getTalents().add(talentId);
}
public void startRogue(int areaId, int aeonId, RepeatedInt avatarIdList) {
@@ -133,26 +173,24 @@ public class RogueManager extends BasePlayerManager {
.setRogueScoreInfo(score)
.setRogueAeonInfo(aeonInfo)
.setRogueData(data)
.setRogueVirtualItemInfo(getPlayer().toRogueVirtualItemsProto())
.setTalentPoints(getPlayer().getTalentPoints())
.setSeasonId(seasonId)
.setBeginTime(beginTime)
.setEndTime(endTime);
proto.getMutableRogueVirtualItems()
.setRogueTalentPoints(getPlayer().getTalentPoints());
// Rogue data
RogueInstance curRogue = this.getPlayer().getRogueInstance();
if (curRogue != null) {
proto.setStatus(curRogue.getStatus());
RogueInstance instance = this.getPlayer().getRogueInstance();
if (instance != null) {
proto.setStatus(instance.getStatus());
proto.setRogueProgress(this.getPlayer().getRogueInstance().toProto());
proto.setRoomMap(proto.getRogueProgress().getRoomMap());
for (int id : curRogue.getBaseAvatarIds()) {
for (int id : instance.getBaseAvatarIds()) {
proto.addBaseAvatarIdList(id);
}
aeonInfo.setSelectedAeonId(curRogue.getAeonId());
aeonInfo.setSelectedAeonId(instance.getAeonId());
}
// Add areas
@@ -165,10 +203,10 @@ public class RogueManager extends BasePlayerManager {
.setAreaId(excel.getRogueAreaID())
.setRogueAreaStatus(RogueAreaStatus.ROGUE_AREA_STATUS_FIRST_PASS);
if (curRogue != null && excel == curRogue.getExcel()) {
area.setMapId(curRogue.getExcel().getMapId());
area.setCurReachRoomNum(curRogue.getCurrentRoomProgress());
area.setRogueStatus(curRogue.getStatus());
if (instance != null && excel == instance.getExcel()) {
area.setMapId(instance.getExcel().getMapId());
area.setCurReachRoomNum(instance.getCurrentRoomProgress());
area.setRogueStatus(instance.getStatus());
}
proto.addRogueAreaList(area);
@@ -177,4 +215,34 @@ public class RogueManager extends BasePlayerManager {
return proto;
}
public RogueTalentInfo toTalentInfoProto() {
var proto = RogueTalentInfo.newInstance();
for (RogueTalentExcel excel : GameData.getRogueTalentExcelMap().values()) {
var talent = RogueTalent.newInstance()
.setTalentId(excel.getTalentID());
if (this.hasTalent(excel.getTalentID())) {
talent.setStatus(RogueTalentStatus.ROGUE_TALENT_STATUS_ENABLE);
} else {
talent.setStatus(RogueTalentStatus.ROGUE_TALENT_STATUS_UNLOCK);
}
proto.addRogueTalent(talent);
}
return proto;
}
// Database
public void loadFromDatabase() {
// Load talent data
var stream = LunarCore.getGameDatabase().getObjects(RogueTalentData.class, "ownerUid", this.getPlayer().getUid());
stream.forEach(talent -> {
this.getTalents().add(talent.getTalentId());
});
}
}

View File

@@ -0,0 +1,33 @@
package emu.lunarcore.game.rogue;
import org.bson.types.ObjectId;
import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Id;
import dev.morphia.annotations.Indexed;
import emu.lunarcore.LunarCore;
import emu.lunarcore.game.player.Player;
import lombok.Getter;
@Getter
@Entity(value = "rogueTalents", useDiscriminator = false)
public class RogueTalentData {
@Id
private ObjectId id;
@Indexed
private int ownerUid;
private int talentId;
@Deprecated // Morphia only
public RogueTalentData() {}
public RogueTalentData(Player player, int talentId) {
this.ownerUid = player.getUid();
this.talentId = talentId;
}
public void save() {
LunarCore.getGameDatabase().save(this);
}
}

View File

@@ -0,0 +1,24 @@
package emu.lunarcore.server.packet.recv;
import emu.lunarcore.proto.EnableRogueTalentCsReqOuterClass.EnableRogueTalentCsReq;
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.PacketEnableRogueTalentScRsp;
@Opcodes(CmdId.EnableRogueTalentCsReq)
public class HandlerEnableRogueTalentCsReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] data) throws Exception {
var req = EnableRogueTalentCsReq.parseFrom(data);
if (session.getPlayer().getRogueManager().enableTalent(req.getTalentId())) {
session.send(new PacketEnableRogueTalentScRsp(session.getPlayer().getRogueManager()));
} else {
session.send(new PacketEnableRogueTalentScRsp());
}
}
}

View File

@@ -0,0 +1,28 @@
package emu.lunarcore.server.packet.send;
import emu.lunarcore.game.rogue.RogueManager;
import emu.lunarcore.proto.EnableRogueTalentScRspOuterClass.EnableRogueTalentScRsp;
import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CmdId;
public class PacketEnableRogueTalentScRsp extends BasePacket {
public PacketEnableRogueTalentScRsp() {
super(CmdId.EnableRogueTalentScRsp);
var data = EnableRogueTalentScRsp.newInstance()
.setRetcode(1);
this.setData(data);
}
public PacketEnableRogueTalentScRsp(RogueManager rogueManager) {
super(CmdId.EnableRogueTalentScRsp);
var data = EnableRogueTalentScRsp.newInstance()
.setTalentInfo(rogueManager.toTalentInfoProto());
this.setData(data);
}
}

View File

@@ -1,11 +1,7 @@
package emu.lunarcore.server.packet.send;
import emu.lunarcore.data.GameData;
import emu.lunarcore.data.excel.RogueTalentExcel;
import emu.lunarcore.game.rogue.RogueManager;
import emu.lunarcore.proto.GetRogueTalentInfoScRspOuterClass.GetRogueTalentInfoScRsp;
import emu.lunarcore.proto.RogueTalentOuterClass.RogueTalent;
import emu.lunarcore.proto.RogueTalentStatusOuterClass.RogueTalentStatus;
import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CmdId;
@@ -14,15 +10,8 @@ public class PacketGetRogueTalentInfoScRsp extends BasePacket {
public PacketGetRogueTalentInfoScRsp(RogueManager rogueManager) {
super(CmdId.GetRogueTalentInfoScRsp);
var data = GetRogueTalentInfoScRsp.newInstance();
for (RogueTalentExcel excel : GameData.getRogueTalentExcelMap().values()) {
var talent = RogueTalent.newInstance()
.setTalentId(excel.getTalentID())
.setStatus(RogueTalentStatus.ROGUE_TALENT_STATUS_UNLOCK);
data.getMutableTalentInfo().addRogueTalent(talent);
}
var data = GetRogueTalentInfoScRsp.newInstance()
.setTalentInfo(rogueManager.toTalentInfoProto());
this.setData(data);
}

View File

@@ -0,0 +1,18 @@
package emu.lunarcore.server.packet.send;
import emu.lunarcore.game.player.Player;
import emu.lunarcore.proto.SyncRogueVirtualItemInfoScNotifyOuterClass.SyncRogueVirtualItemInfoScNotify;
import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CmdId;
public class PacketSyncRogueVirtualItemInfoScNotify extends BasePacket {
public PacketSyncRogueVirtualItemInfoScNotify(Player player) {
super(CmdId.SyncRogueVirtualItemInfoScNotify);
var data = SyncRogueVirtualItemInfoScNotify.newInstance()
.setRogueVirtualItemInfo(player.toRogueVirtualItemsProto());
this.setData(data);
}
}