Compare commits

..

3 Commits

Author SHA1 Message Date
Magix
2b2c612f1e
Merge pull request #1704 from Grasscutters/development
Merge `development` into `stable`
2022-09-03 10:19:26 -07:00
Magix
5529674b90
Merge branch 'stable' into development 2022-09-03 10:18:08 -07:00
Magix
1792c58030 Change version to 1.2.0 2022-06-10 00:23:55 -04:00
44 changed files with 349 additions and 3046 deletions

View File

@ -1,23 +0,0 @@
name: Protect write-access files from being PR'd
on:
pull_request_target:
types:
- opened
- reopened
branches:
- development
paths:
- '.github/'
- '.editorconfig'
- 'CODE_OF_CONDUCT.md'
- 'CONTRIBUTING.md'
- 'LICENSE'
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: superbrothers/close-pull-request@v3
with:
comment: "This PR has been closed for modifying protected files. See `CONTIBUTING.md` for more information."

View File

@ -21,11 +21,3 @@ Your code should follow the standards set below:
- Dependencies that use a separate language (ex. Kotlin) that can run on a JVM are acceptable.
- Dependencies that require the use of native code (ex. JNI) are prohibited.
- Directly adding foreign code (other languages, ex. Kotlin) into the main codebase is prohibited.
- Certain files and folders are forbidden to modify in Pull Requests and may only be changed by Write-Access members. The current list for this can be found in `.github/workflows/protect_files.yml`.
## Intellectual Property
Please avoid adding any direct references to the following, whenever possible:
- Game names
- Character names
- Notable weapon names

View File

@ -45,29 +45,28 @@
½. Create an account using [server console command](https://github.com/Grasscutters/Grasscutter/wiki/Commands#targeting).
1. Redirect traffic: (choose one only)
1. Redirect traffic: (choose one)
- mitmdump: `mitmdump -s proxy.py -k`
- Trust CA certificate:
Trust CA certificate:
- The CA certificate is usually stored in `%USERPROFILE%\.mitmproxy`, double click `mitmproxy-ca-cert.cer` to [install](https://docs.microsoft.com/en-us/skype-sdk/sdn/articles/installing-the-trusted-root-certificate#installing-a-trusted-root-certificate) or...
**Note:** The CA certificate is usually stored in `%USERPROFILE%\.mitmproxy`, or you can download it from `http://mitm.it`
- Via command line *(needs administration privileges)*
Double click for [install](https://docs.microsoft.com/en-us/skype-sdk/sdn/articles/installing-the-trusted-root-certificate#installing-a-trusted-root-certificate) or ...
```shell
certutil -addstore root %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer
```
- Via command line (needs administration privileges)
```shell
certutil -addstore root %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer
```
- Fiddler Classic: Run Fiddler Classic, turn on `Decrypt HTTPS traffic` in (Tools -> Options -> HTTPS) and change the default port in (Tools -> Options -> Connections) to anything other than `8888`, load [this script](https://github.com/Grasscutters/Grasscutter/wiki/Resources#fiddler-classic-jscript) (copy and paste the script in the `FiddlerScript` tab) and click the `Save Script` button.
- Fiddler Classic: Run Fiddler Classic, turn on `Decrypt HTTPS traffic` in (Tools -> Options -> HTTPS) and change the default port in (Tools -> Options -> Connections) to anything other than `8888`, and load [this script](https://github.com/Grasscutters/Grasscutter/wiki/Resources#fiddler-classic-jscript) (copy and paste the script in the `FiddlerScript` tab).
- [Hosts file](https://github.com/Grasscutters/Grasscutter/wiki/Resources#hosts-file)
2. Set network proxy to `127.0.0.1:8080` or the proxy port you specified.
- For mitmproxy: After setting up the network proxy and installing the certificate, check http://mitm.it/ if traffic is passing through mitmproxy.
**You can also use `start.cmd` to start servers and proxy daemons automatically, but you have to set up `JAVA_HOME` enviroment and configure the `start_config.cmd` file.**
**You can also use `start.cmd` to start servers and proxy daemons automatically, but you have to set up JAVA_HOME enviroment and configure the `start_config.cmd` file.**
### Building
@ -105,4 +104,4 @@ You can find the output jar in the root of the project folder.
* If compiling wasn't successful, please check your JDK installation (JDK 17 and validated JDK's bin PATH variable)
* My client doesn't connect, doesn't login, 4206, etc... - Mostly your proxy daemon setup is *the issue*, if using
Fiddler make sure it running on another port except 8888
* Startup sequence: MongoDB > Grasscutter > Proxy Daemon (mitmdump, fiddler, etc.) > Game
* Startup sequence: MongoDB > Grasscutter > Proxy daemon (mitmdump, fiddler, etc.) > Game

View File

@ -43,7 +43,7 @@ sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
group = 'xyz.grasscutters'
version = '1.3.1'
version = '1.3.1-dev'
sourceCompatibility = 17
targetCompatibility = 17

View File

@ -1,677 +0,0 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: ActivityShopSheetInfo.proto
package emu.grasscutter.net.proto;
public final class ActivityShopSheetInfoOuterClass {
private ActivityShopSheetInfoOuterClass() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface ActivityShopSheetInfoOrBuilder extends
// @@protoc_insertion_point(interface_extends:ActivityShopSheetInfo)
com.google.protobuf.MessageOrBuilder {
/**
* <code>uint32 end_time = 1;</code>
* @return The endTime.
*/
int getEndTime();
/**
* <code>uint32 begin_time = 12;</code>
* @return The beginTime.
*/
int getBeginTime();
/**
* <code>uint32 sheet_id = 2;</code>
* @return The sheetId.
*/
int getSheetId();
}
/**
* Protobuf type {@code ActivityShopSheetInfo}
*/
public static final class ActivityShopSheetInfo extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:ActivityShopSheetInfo)
ActivityShopSheetInfoOrBuilder {
private static final long serialVersionUID = 0L;
// Use ActivityShopSheetInfo.newBuilder() to construct.
private ActivityShopSheetInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private ActivityShopSheetInfo() {
}
@java.lang.Override
@SuppressWarnings({"unused"})
protected java.lang.Object newInstance(
UnusedPrivateParameter unused) {
return new ActivityShopSheetInfo();
}
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private ActivityShopSheetInfo(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new java.lang.NullPointerException();
}
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 8: {
endTime_ = input.readUInt32();
break;
}
case 16: {
sheetId_ = input.readUInt32();
break;
}
case 96: {
beginTime_ = input.readUInt32();
break;
}
default: {
if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.internal_static_ActivityShopSheetInfo_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.internal_static_ActivityShopSheetInfo_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.class, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder.class);
}
public static final int END_TIME_FIELD_NUMBER = 1;
private int endTime_;
/**
* <code>uint32 end_time = 1;</code>
* @return The endTime.
*/
@java.lang.Override
public int getEndTime() {
return endTime_;
}
public static final int BEGIN_TIME_FIELD_NUMBER = 12;
private int beginTime_;
/**
* <code>uint32 begin_time = 12;</code>
* @return The beginTime.
*/
@java.lang.Override
public int getBeginTime() {
return beginTime_;
}
public static final int SHEET_ID_FIELD_NUMBER = 2;
private int sheetId_;
/**
* <code>uint32 sheet_id = 2;</code>
* @return The sheetId.
*/
@java.lang.Override
public int getSheetId() {
return sheetId_;
}
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
memoizedIsInitialized = 1;
return true;
}
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (endTime_ != 0) {
output.writeUInt32(1, endTime_);
}
if (sheetId_ != 0) {
output.writeUInt32(2, sheetId_);
}
if (beginTime_ != 0) {
output.writeUInt32(12, beginTime_);
}
unknownFields.writeTo(output);
}
@java.lang.Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (endTime_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeUInt32Size(1, endTime_);
}
if (sheetId_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeUInt32Size(2, sheetId_);
}
if (beginTime_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeUInt32Size(12, beginTime_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@java.lang.Override
public boolean equals(final java.lang.Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo)) {
return super.equals(obj);
}
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo other = (emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo) obj;
if (getEndTime()
!= other.getEndTime()) return false;
if (getBeginTime()
!= other.getBeginTime()) return false;
if (getSheetId()
!= other.getSheetId()) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@java.lang.Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + END_TIME_FIELD_NUMBER;
hash = (53 * hash) + getEndTime();
hash = (37 * hash) + BEGIN_TIME_FIELD_NUMBER;
hash = (53 * hash) + getBeginTime();
hash = (37 * hash) + SHEET_ID_FIELD_NUMBER;
hash = (53 * hash) + getSheetId();
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@java.lang.Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@java.lang.Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* Protobuf type {@code ActivityShopSheetInfo}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:ActivityShopSheetInfo)
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.internal_static_ActivityShopSheetInfo_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.internal_static_ActivityShopSheetInfo_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.class, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder.class);
}
// Construct using emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
}
}
@java.lang.Override
public Builder clear() {
super.clear();
endTime_ = 0;
beginTime_ = 0;
sheetId_ = 0;
return this;
}
@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.internal_static_ActivityShopSheetInfo_descriptor;
}
@java.lang.Override
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo getDefaultInstanceForType() {
return emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.getDefaultInstance();
}
@java.lang.Override
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo build() {
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo buildPartial() {
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo result = new emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo(this);
result.endTime_ = endTime_;
result.beginTime_ = beginTime_;
result.sheetId_ = sheetId_;
onBuilt();
return result;
}
@java.lang.Override
public Builder clone() {
return super.clone();
}
@java.lang.Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.setField(field, value);
}
@java.lang.Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return super.clearField(field);
}
@java.lang.Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return super.clearOneof(oneof);
}
@java.lang.Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, java.lang.Object value) {
return super.setRepeatedField(field, index, value);
}
@java.lang.Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.addRepeatedField(field, value);
}
@java.lang.Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo) {
return mergeFrom((emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo other) {
if (other == emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.getDefaultInstance()) return this;
if (other.getEndTime() != 0) {
setEndTime(other.getEndTime());
}
if (other.getBeginTime() != 0) {
setBeginTime(other.getBeginTime());
}
if (other.getSheetId() != 0) {
setSheetId(other.getSheetId());
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@java.lang.Override
public final boolean isInitialized() {
return true;
}
@java.lang.Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private int endTime_ ;
/**
* <code>uint32 end_time = 1;</code>
* @return The endTime.
*/
@java.lang.Override
public int getEndTime() {
return endTime_;
}
/**
* <code>uint32 end_time = 1;</code>
* @param value The endTime to set.
* @return This builder for chaining.
*/
public Builder setEndTime(int value) {
endTime_ = value;
onChanged();
return this;
}
/**
* <code>uint32 end_time = 1;</code>
* @return This builder for chaining.
*/
public Builder clearEndTime() {
endTime_ = 0;
onChanged();
return this;
}
private int beginTime_ ;
/**
* <code>uint32 begin_time = 12;</code>
* @return The beginTime.
*/
@java.lang.Override
public int getBeginTime() {
return beginTime_;
}
/**
* <code>uint32 begin_time = 12;</code>
* @param value The beginTime to set.
* @return This builder for chaining.
*/
public Builder setBeginTime(int value) {
beginTime_ = value;
onChanged();
return this;
}
/**
* <code>uint32 begin_time = 12;</code>
* @return This builder for chaining.
*/
public Builder clearBeginTime() {
beginTime_ = 0;
onChanged();
return this;
}
private int sheetId_ ;
/**
* <code>uint32 sheet_id = 2;</code>
* @return The sheetId.
*/
@java.lang.Override
public int getSheetId() {
return sheetId_;
}
/**
* <code>uint32 sheet_id = 2;</code>
* @param value The sheetId to set.
* @return This builder for chaining.
*/
public Builder setSheetId(int value) {
sheetId_ = value;
onChanged();
return this;
}
/**
* <code>uint32 sheet_id = 2;</code>
* @return This builder for chaining.
*/
public Builder clearSheetId() {
sheetId_ = 0;
onChanged();
return this;
}
@java.lang.Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
}
@java.lang.Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:ActivityShopSheetInfo)
}
// @@protoc_insertion_point(class_scope:ActivityShopSheetInfo)
private static final emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo();
}
public static emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser<ActivityShopSheetInfo>
PARSER = new com.google.protobuf.AbstractParser<ActivityShopSheetInfo>() {
@java.lang.Override
public ActivityShopSheetInfo parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new ActivityShopSheetInfo(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<ActivityShopSheetInfo> parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser<ActivityShopSheetInfo> getParserForType() {
return PARSER;
}
@java.lang.Override
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_ActivityShopSheetInfo_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_ActivityShopSheetInfo_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
java.lang.String[] descriptorData = {
"\n\033ActivityShopSheetInfo.proto\"O\n\025Activit" +
"yShopSheetInfo\022\020\n\010end_time\030\001 \001(\r\022\022\n\nbegi" +
"n_time\030\014 \001(\r\022\020\n\010sheet_id\030\002 \001(\rB\033\n\031emu.gr" +
"asscutter.net.protob\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
});
internal_static_ActivityShopSheetInfo_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_ActivityShopSheetInfo_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_ActivityShopSheetInfo_descriptor,
new java.lang.String[] { "EndTime", "BeginTime", "SheetId", });
}
// @@protoc_insertion_point(outer_class_scope)
}

View File

@ -1,537 +0,0 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: GetActivityShopSheetInfoReq.proto
package emu.grasscutter.net.proto;
public final class GetActivityShopSheetInfoReqOuterClass {
private GetActivityShopSheetInfoReqOuterClass() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface GetActivityShopSheetInfoReqOrBuilder extends
// @@protoc_insertion_point(interface_extends:GetActivityShopSheetInfoReq)
com.google.protobuf.MessageOrBuilder {
/**
* <code>uint32 shop_type = 7;</code>
* @return The shopType.
*/
int getShopType();
}
/**
* Protobuf type {@code GetActivityShopSheetInfoReq}
*/
public static final class GetActivityShopSheetInfoReq extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:GetActivityShopSheetInfoReq)
GetActivityShopSheetInfoReqOrBuilder {
private static final long serialVersionUID = 0L;
// Use GetActivityShopSheetInfoReq.newBuilder() to construct.
private GetActivityShopSheetInfoReq(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private GetActivityShopSheetInfoReq() {
}
@java.lang.Override
@SuppressWarnings({"unused"})
protected java.lang.Object newInstance(
UnusedPrivateParameter unused) {
return new GetActivityShopSheetInfoReq();
}
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private GetActivityShopSheetInfoReq(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new java.lang.NullPointerException();
}
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 56: {
shopType_ = input.readUInt32();
break;
}
default: {
if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.internal_static_GetActivityShopSheetInfoReq_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.internal_static_GetActivityShopSheetInfoReq_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq.class, emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq.Builder.class);
}
public static final int SHOP_TYPE_FIELD_NUMBER = 7;
private int shopType_;
/**
* <code>uint32 shop_type = 7;</code>
* @return The shopType.
*/
@java.lang.Override
public int getShopType() {
return shopType_;
}
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
memoizedIsInitialized = 1;
return true;
}
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (shopType_ != 0) {
output.writeUInt32(7, shopType_);
}
unknownFields.writeTo(output);
}
@java.lang.Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (shopType_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeUInt32Size(7, shopType_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@java.lang.Override
public boolean equals(final java.lang.Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq)) {
return super.equals(obj);
}
emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq other = (emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq) obj;
if (getShopType()
!= other.getShopType()) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@java.lang.Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + SHOP_TYPE_FIELD_NUMBER;
hash = (53 * hash) + getShopType();
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@java.lang.Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@java.lang.Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* Protobuf type {@code GetActivityShopSheetInfoReq}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:GetActivityShopSheetInfoReq)
emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReqOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.internal_static_GetActivityShopSheetInfoReq_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.internal_static_GetActivityShopSheetInfoReq_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq.class, emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq.Builder.class);
}
// Construct using emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
}
}
@java.lang.Override
public Builder clear() {
super.clear();
shopType_ = 0;
return this;
}
@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.internal_static_GetActivityShopSheetInfoReq_descriptor;
}
@java.lang.Override
public emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq getDefaultInstanceForType() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq.getDefaultInstance();
}
@java.lang.Override
public emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq build() {
emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq buildPartial() {
emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq result = new emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq(this);
result.shopType_ = shopType_;
onBuilt();
return result;
}
@java.lang.Override
public Builder clone() {
return super.clone();
}
@java.lang.Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.setField(field, value);
}
@java.lang.Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return super.clearField(field);
}
@java.lang.Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return super.clearOneof(oneof);
}
@java.lang.Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, java.lang.Object value) {
return super.setRepeatedField(field, index, value);
}
@java.lang.Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.addRepeatedField(field, value);
}
@java.lang.Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq) {
return mergeFrom((emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq other) {
if (other == emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq.getDefaultInstance()) return this;
if (other.getShopType() != 0) {
setShopType(other.getShopType());
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@java.lang.Override
public final boolean isInitialized() {
return true;
}
@java.lang.Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private int shopType_ ;
/**
* <code>uint32 shop_type = 7;</code>
* @return The shopType.
*/
@java.lang.Override
public int getShopType() {
return shopType_;
}
/**
* <code>uint32 shop_type = 7;</code>
* @param value The shopType to set.
* @return This builder for chaining.
*/
public Builder setShopType(int value) {
shopType_ = value;
onChanged();
return this;
}
/**
* <code>uint32 shop_type = 7;</code>
* @return This builder for chaining.
*/
public Builder clearShopType() {
shopType_ = 0;
onChanged();
return this;
}
@java.lang.Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
}
@java.lang.Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:GetActivityShopSheetInfoReq)
}
// @@protoc_insertion_point(class_scope:GetActivityShopSheetInfoReq)
private static final emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq();
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser<GetActivityShopSheetInfoReq>
PARSER = new com.google.protobuf.AbstractParser<GetActivityShopSheetInfoReq>() {
@java.lang.Override
public GetActivityShopSheetInfoReq parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new GetActivityShopSheetInfoReq(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<GetActivityShopSheetInfoReq> parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser<GetActivityShopSheetInfoReq> getParserForType() {
return PARSER;
}
@java.lang.Override
public emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_GetActivityShopSheetInfoReq_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_GetActivityShopSheetInfoReq_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
java.lang.String[] descriptorData = {
"\n!GetActivityShopSheetInfoReq.proto\"0\n\033G" +
"etActivityShopSheetInfoReq\022\021\n\tshop_type\030" +
"\007 \001(\rB\033\n\031emu.grasscutter.net.protob\006prot" +
"o3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
});
internal_static_GetActivityShopSheetInfoReq_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_GetActivityShopSheetInfoReq_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_GetActivityShopSheetInfoReq_descriptor,
new java.lang.String[] { "ShopType", });
}
// @@protoc_insertion_point(outer_class_scope)
}

View File

@ -1,986 +0,0 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: GetActivityShopSheetInfoRsp.proto
package emu.grasscutter.net.proto;
public final class GetActivityShopSheetInfoRspOuterClass {
private GetActivityShopSheetInfoRspOuterClass() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface GetActivityShopSheetInfoRspOrBuilder extends
// @@protoc_insertion_point(interface_extends:GetActivityShopSheetInfoRsp)
com.google.protobuf.MessageOrBuilder {
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
java.util.List<emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo>
getSheetInfoListList();
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo getSheetInfoList(int index);
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
int getSheetInfoListCount();
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
java.util.List<? extends emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder>
getSheetInfoListOrBuilderList();
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder getSheetInfoListOrBuilder(
int index);
/**
* <code>uint32 shop_type = 8;</code>
* @return The shopType.
*/
int getShopType();
/**
* <code>int32 retcode = 13;</code>
* @return The retcode.
*/
int getRetcode();
}
/**
* Protobuf type {@code GetActivityShopSheetInfoRsp}
*/
public static final class GetActivityShopSheetInfoRsp extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:GetActivityShopSheetInfoRsp)
GetActivityShopSheetInfoRspOrBuilder {
private static final long serialVersionUID = 0L;
// Use GetActivityShopSheetInfoRsp.newBuilder() to construct.
private GetActivityShopSheetInfoRsp(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private GetActivityShopSheetInfoRsp() {
sheetInfoList_ = java.util.Collections.emptyList();
}
@java.lang.Override
@SuppressWarnings({"unused"})
protected java.lang.Object newInstance(
UnusedPrivateParameter unused) {
return new GetActivityShopSheetInfoRsp();
}
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private GetActivityShopSheetInfoRsp(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new java.lang.NullPointerException();
}
int mutable_bitField0_ = 0;
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 50: {
if (!((mutable_bitField0_ & 0x00000001) != 0)) {
sheetInfoList_ = new java.util.ArrayList<emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo>();
mutable_bitField0_ |= 0x00000001;
}
sheetInfoList_.add(
input.readMessage(emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.parser(), extensionRegistry));
break;
}
case 64: {
shopType_ = input.readUInt32();
break;
}
case 104: {
retcode_ = input.readInt32();
break;
}
default: {
if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
if (((mutable_bitField0_ & 0x00000001) != 0)) {
sheetInfoList_ = java.util.Collections.unmodifiableList(sheetInfoList_);
}
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.internal_static_GetActivityShopSheetInfoRsp_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.internal_static_GetActivityShopSheetInfoRsp_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp.class, emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp.Builder.class);
}
public static final int SHEET_INFO_LIST_FIELD_NUMBER = 6;
private java.util.List<emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo> sheetInfoList_;
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
@java.lang.Override
public java.util.List<emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo> getSheetInfoListList() {
return sheetInfoList_;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
@java.lang.Override
public java.util.List<? extends emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder>
getSheetInfoListOrBuilderList() {
return sheetInfoList_;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
@java.lang.Override
public int getSheetInfoListCount() {
return sheetInfoList_.size();
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
@java.lang.Override
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo getSheetInfoList(int index) {
return sheetInfoList_.get(index);
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
@java.lang.Override
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder getSheetInfoListOrBuilder(
int index) {
return sheetInfoList_.get(index);
}
public static final int SHOP_TYPE_FIELD_NUMBER = 8;
private int shopType_;
/**
* <code>uint32 shop_type = 8;</code>
* @return The shopType.
*/
@java.lang.Override
public int getShopType() {
return shopType_;
}
public static final int RETCODE_FIELD_NUMBER = 13;
private int retcode_;
/**
* <code>int32 retcode = 13;</code>
* @return The retcode.
*/
@java.lang.Override
public int getRetcode() {
return retcode_;
}
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
memoizedIsInitialized = 1;
return true;
}
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
for (int i = 0; i < sheetInfoList_.size(); i++) {
output.writeMessage(6, sheetInfoList_.get(i));
}
if (shopType_ != 0) {
output.writeUInt32(8, shopType_);
}
if (retcode_ != 0) {
output.writeInt32(13, retcode_);
}
unknownFields.writeTo(output);
}
@java.lang.Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
for (int i = 0; i < sheetInfoList_.size(); i++) {
size += com.google.protobuf.CodedOutputStream
.computeMessageSize(6, sheetInfoList_.get(i));
}
if (shopType_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeUInt32Size(8, shopType_);
}
if (retcode_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(13, retcode_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@java.lang.Override
public boolean equals(final java.lang.Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp)) {
return super.equals(obj);
}
emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp other = (emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp) obj;
if (!getSheetInfoListList()
.equals(other.getSheetInfoListList())) return false;
if (getShopType()
!= other.getShopType()) return false;
if (getRetcode()
!= other.getRetcode()) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@java.lang.Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
if (getSheetInfoListCount() > 0) {
hash = (37 * hash) + SHEET_INFO_LIST_FIELD_NUMBER;
hash = (53 * hash) + getSheetInfoListList().hashCode();
}
hash = (37 * hash) + SHOP_TYPE_FIELD_NUMBER;
hash = (53 * hash) + getShopType();
hash = (37 * hash) + RETCODE_FIELD_NUMBER;
hash = (53 * hash) + getRetcode();
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@java.lang.Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@java.lang.Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* Protobuf type {@code GetActivityShopSheetInfoRsp}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:GetActivityShopSheetInfoRsp)
emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRspOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.internal_static_GetActivityShopSheetInfoRsp_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.internal_static_GetActivityShopSheetInfoRsp_fieldAccessorTable
.ensureFieldAccessorsInitialized(
emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp.class, emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp.Builder.class);
}
// Construct using emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
getSheetInfoListFieldBuilder();
}
}
@java.lang.Override
public Builder clear() {
super.clear();
if (sheetInfoListBuilder_ == null) {
sheetInfoList_ = java.util.Collections.emptyList();
bitField0_ = (bitField0_ & ~0x00000001);
} else {
sheetInfoListBuilder_.clear();
}
shopType_ = 0;
retcode_ = 0;
return this;
}
@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.internal_static_GetActivityShopSheetInfoRsp_descriptor;
}
@java.lang.Override
public emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp getDefaultInstanceForType() {
return emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp.getDefaultInstance();
}
@java.lang.Override
public emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp build() {
emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp buildPartial() {
emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp result = new emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp(this);
int from_bitField0_ = bitField0_;
if (sheetInfoListBuilder_ == null) {
if (((bitField0_ & 0x00000001) != 0)) {
sheetInfoList_ = java.util.Collections.unmodifiableList(sheetInfoList_);
bitField0_ = (bitField0_ & ~0x00000001);
}
result.sheetInfoList_ = sheetInfoList_;
} else {
result.sheetInfoList_ = sheetInfoListBuilder_.build();
}
result.shopType_ = shopType_;
result.retcode_ = retcode_;
onBuilt();
return result;
}
@java.lang.Override
public Builder clone() {
return super.clone();
}
@java.lang.Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.setField(field, value);
}
@java.lang.Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return super.clearField(field);
}
@java.lang.Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return super.clearOneof(oneof);
}
@java.lang.Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, java.lang.Object value) {
return super.setRepeatedField(field, index, value);
}
@java.lang.Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.addRepeatedField(field, value);
}
@java.lang.Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp) {
return mergeFrom((emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp other) {
if (other == emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp.getDefaultInstance()) return this;
if (sheetInfoListBuilder_ == null) {
if (!other.sheetInfoList_.isEmpty()) {
if (sheetInfoList_.isEmpty()) {
sheetInfoList_ = other.sheetInfoList_;
bitField0_ = (bitField0_ & ~0x00000001);
} else {
ensureSheetInfoListIsMutable();
sheetInfoList_.addAll(other.sheetInfoList_);
}
onChanged();
}
} else {
if (!other.sheetInfoList_.isEmpty()) {
if (sheetInfoListBuilder_.isEmpty()) {
sheetInfoListBuilder_.dispose();
sheetInfoListBuilder_ = null;
sheetInfoList_ = other.sheetInfoList_;
bitField0_ = (bitField0_ & ~0x00000001);
sheetInfoListBuilder_ =
com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
getSheetInfoListFieldBuilder() : null;
} else {
sheetInfoListBuilder_.addAllMessages(other.sheetInfoList_);
}
}
}
if (other.getShopType() != 0) {
setShopType(other.getShopType());
}
if (other.getRetcode() != 0) {
setRetcode(other.getRetcode());
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@java.lang.Override
public final boolean isInitialized() {
return true;
}
@java.lang.Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private int bitField0_;
private java.util.List<emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo> sheetInfoList_ =
java.util.Collections.emptyList();
private void ensureSheetInfoListIsMutable() {
if (!((bitField0_ & 0x00000001) != 0)) {
sheetInfoList_ = new java.util.ArrayList<emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo>(sheetInfoList_);
bitField0_ |= 0x00000001;
}
}
private com.google.protobuf.RepeatedFieldBuilderV3<
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder> sheetInfoListBuilder_;
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public java.util.List<emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo> getSheetInfoListList() {
if (sheetInfoListBuilder_ == null) {
return java.util.Collections.unmodifiableList(sheetInfoList_);
} else {
return sheetInfoListBuilder_.getMessageList();
}
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public int getSheetInfoListCount() {
if (sheetInfoListBuilder_ == null) {
return sheetInfoList_.size();
} else {
return sheetInfoListBuilder_.getCount();
}
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo getSheetInfoList(int index) {
if (sheetInfoListBuilder_ == null) {
return sheetInfoList_.get(index);
} else {
return sheetInfoListBuilder_.getMessage(index);
}
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder setSheetInfoList(
int index, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo value) {
if (sheetInfoListBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
}
ensureSheetInfoListIsMutable();
sheetInfoList_.set(index, value);
onChanged();
} else {
sheetInfoListBuilder_.setMessage(index, value);
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder setSheetInfoList(
int index, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder builderForValue) {
if (sheetInfoListBuilder_ == null) {
ensureSheetInfoListIsMutable();
sheetInfoList_.set(index, builderForValue.build());
onChanged();
} else {
sheetInfoListBuilder_.setMessage(index, builderForValue.build());
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder addSheetInfoList(emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo value) {
if (sheetInfoListBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
}
ensureSheetInfoListIsMutable();
sheetInfoList_.add(value);
onChanged();
} else {
sheetInfoListBuilder_.addMessage(value);
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder addSheetInfoList(
int index, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo value) {
if (sheetInfoListBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
}
ensureSheetInfoListIsMutable();
sheetInfoList_.add(index, value);
onChanged();
} else {
sheetInfoListBuilder_.addMessage(index, value);
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder addSheetInfoList(
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder builderForValue) {
if (sheetInfoListBuilder_ == null) {
ensureSheetInfoListIsMutable();
sheetInfoList_.add(builderForValue.build());
onChanged();
} else {
sheetInfoListBuilder_.addMessage(builderForValue.build());
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder addSheetInfoList(
int index, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder builderForValue) {
if (sheetInfoListBuilder_ == null) {
ensureSheetInfoListIsMutable();
sheetInfoList_.add(index, builderForValue.build());
onChanged();
} else {
sheetInfoListBuilder_.addMessage(index, builderForValue.build());
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder addAllSheetInfoList(
java.lang.Iterable<? extends emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo> values) {
if (sheetInfoListBuilder_ == null) {
ensureSheetInfoListIsMutable();
com.google.protobuf.AbstractMessageLite.Builder.addAll(
values, sheetInfoList_);
onChanged();
} else {
sheetInfoListBuilder_.addAllMessages(values);
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder clearSheetInfoList() {
if (sheetInfoListBuilder_ == null) {
sheetInfoList_ = java.util.Collections.emptyList();
bitField0_ = (bitField0_ & ~0x00000001);
onChanged();
} else {
sheetInfoListBuilder_.clear();
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public Builder removeSheetInfoList(int index) {
if (sheetInfoListBuilder_ == null) {
ensureSheetInfoListIsMutable();
sheetInfoList_.remove(index);
onChanged();
} else {
sheetInfoListBuilder_.remove(index);
}
return this;
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder getSheetInfoListBuilder(
int index) {
return getSheetInfoListFieldBuilder().getBuilder(index);
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder getSheetInfoListOrBuilder(
int index) {
if (sheetInfoListBuilder_ == null) {
return sheetInfoList_.get(index); } else {
return sheetInfoListBuilder_.getMessageOrBuilder(index);
}
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public java.util.List<? extends emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder>
getSheetInfoListOrBuilderList() {
if (sheetInfoListBuilder_ != null) {
return sheetInfoListBuilder_.getMessageOrBuilderList();
} else {
return java.util.Collections.unmodifiableList(sheetInfoList_);
}
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder addSheetInfoListBuilder() {
return getSheetInfoListFieldBuilder().addBuilder(
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.getDefaultInstance());
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder addSheetInfoListBuilder(
int index) {
return getSheetInfoListFieldBuilder().addBuilder(
index, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.getDefaultInstance());
}
/**
* <code>repeated .ActivityShopSheetInfo sheet_info_list = 6;</code>
*/
public java.util.List<emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder>
getSheetInfoListBuilderList() {
return getSheetInfoListFieldBuilder().getBuilderList();
}
private com.google.protobuf.RepeatedFieldBuilderV3<
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder>
getSheetInfoListFieldBuilder() {
if (sheetInfoListBuilder_ == null) {
sheetInfoListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo.Builder, emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfoOrBuilder>(
sheetInfoList_,
((bitField0_ & 0x00000001) != 0),
getParentForChildren(),
isClean());
sheetInfoList_ = null;
}
return sheetInfoListBuilder_;
}
private int shopType_ ;
/**
* <code>uint32 shop_type = 8;</code>
* @return The shopType.
*/
@java.lang.Override
public int getShopType() {
return shopType_;
}
/**
* <code>uint32 shop_type = 8;</code>
* @param value The shopType to set.
* @return This builder for chaining.
*/
public Builder setShopType(int value) {
shopType_ = value;
onChanged();
return this;
}
/**
* <code>uint32 shop_type = 8;</code>
* @return This builder for chaining.
*/
public Builder clearShopType() {
shopType_ = 0;
onChanged();
return this;
}
private int retcode_ ;
/**
* <code>int32 retcode = 13;</code>
* @return The retcode.
*/
@java.lang.Override
public int getRetcode() {
return retcode_;
}
/**
* <code>int32 retcode = 13;</code>
* @param value The retcode to set.
* @return This builder for chaining.
*/
public Builder setRetcode(int value) {
retcode_ = value;
onChanged();
return this;
}
/**
* <code>int32 retcode = 13;</code>
* @return This builder for chaining.
*/
public Builder clearRetcode() {
retcode_ = 0;
onChanged();
return this;
}
@java.lang.Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
}
@java.lang.Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:GetActivityShopSheetInfoRsp)
}
// @@protoc_insertion_point(class_scope:GetActivityShopSheetInfoRsp)
private static final emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp();
}
public static emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser<GetActivityShopSheetInfoRsp>
PARSER = new com.google.protobuf.AbstractParser<GetActivityShopSheetInfoRsp>() {
@java.lang.Override
public GetActivityShopSheetInfoRsp parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new GetActivityShopSheetInfoRsp(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<GetActivityShopSheetInfoRsp> parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser<GetActivityShopSheetInfoRsp> getParserForType() {
return PARSER;
}
@java.lang.Override
public emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_GetActivityShopSheetInfoRsp_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_GetActivityShopSheetInfoRsp_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
java.lang.String[] descriptorData = {
"\n!GetActivityShopSheetInfoRsp.proto\032\033Act" +
"ivityShopSheetInfo.proto\"r\n\033GetActivityS" +
"hopSheetInfoRsp\022/\n\017sheet_info_list\030\006 \003(\013" +
"2\026.ActivityShopSheetInfo\022\021\n\tshop_type\030\010 " +
"\001(\r\022\017\n\007retcode\030\r \001(\005B\033\n\031emu.grasscutter." +
"net.protob\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.getDescriptor(),
});
internal_static_GetActivityShopSheetInfoRsp_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_GetActivityShopSheetInfoRsp_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_GetActivityShopSheetInfoRsp_descriptor,
new java.lang.String[] { "SheetInfoList", "ShopType", "Retcode", });
emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.getDescriptor();
}
// @@protoc_insertion_point(outer_class_scope)
}

View File

@ -1,52 +0,0 @@
package emu.grasscutter.command;
import javax.annotation.Nonnull;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CommandHelpers {
public static final Pattern lvlRegex = Pattern.compile("l(?:vl?)?(\\d+)"); // Java doesn't have raw string literals :(
public static final Pattern amountRegex = Pattern.compile("((?<=x)\\d+|\\d+(?=x)(?!x\\d))");
public static final Pattern refineRegex = Pattern.compile("r(\\d+)");
public static final Pattern rankRegex = Pattern.compile("(\\d+)\\*");
public static final Pattern constellationRegex = Pattern.compile("c(\\d+)");
public static final Pattern stateRegex = Pattern.compile("state(\\d+)");
public static final Pattern blockRegex = Pattern.compile("blk(\\d+)");
public static final Pattern groupRegex = Pattern.compile("grp(\\d+)");
public static final Pattern configRegex = Pattern.compile("cfg(\\d+)");
public static final Pattern hpRegex = Pattern.compile("hp(\\d+)");
public static final Pattern maxHPRegex = Pattern.compile("maxhp(\\d+)");
public static final Pattern atkRegex = Pattern.compile("atk(\\d+)");
public static final Pattern defRegex = Pattern.compile("def(\\d+)");
public static final Pattern aiRegex = Pattern.compile("ai(\\d+)");
public static int matchIntOrNeg(Pattern pattern, String arg) {
Matcher match = pattern.matcher(arg);
if (match.find()) {
return Integer.parseInt(match.group(1)); // This should be exception-safe as only \d+ can be passed to it (i.e. non-empty string of pure digits)
}
return -1;
}
public static <T> List<String> parseIntParameters(List<String> args, @Nonnull T params, Map<Pattern, BiConsumer<T, Integer>> map) {
for (int i = args.size() - 1; i >= 0; i--) {
String arg = args.get(i).toLowerCase();
boolean deleteArg = false;
int argNum;
for (var entry : map.entrySet()) {
if ((argNum = matchIntOrNeg(entry.getKey(), arg)) != -1) {
entry.getValue().accept(params, argNum);
deleteArg = true;
break;
}
}
if (deleteArg) {
args.remove(i);
}
}
return args;
}
}

View File

@ -6,34 +6,35 @@ import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.inventory.Inventory;
import emu.grasscutter.game.inventory.ItemType;
import emu.grasscutter.game.player.Player;
import lombok.Setter;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import static emu.grasscutter.command.CommandHelpers.*;
@Command(
label = "clear",
usage = {"(all|wp|art|mat) [lv<max level>] [r<max refinement>] [<max rarity>*]"},
permission = "player.clearinv",
permissionTargeted = "player.clearinv.others")
public final class ClearCommand implements CommandHandler {
private static Pattern lvlRegex = Pattern.compile("l(?:vl?)?(\\d+)"); // Java doesn't have raw string literals :(
private static Pattern refineRegex = Pattern.compile("r(\\d+)");
private static Pattern rankRegex = Pattern.compile("(\\d+)\\*");
private static final Map<Pattern, BiConsumer<ClearItemParameters, Integer>> intCommandHandlers = Map.ofEntries(
Map.entry(lvlRegex, ClearItemParameters::setLvl),
Map.entry(refineRegex, ClearItemParameters::setRefinement),
Map.entry(rankRegex, ClearItemParameters::setRank)
);
private static int matchIntOrNeg(Pattern pattern, String arg) {
Matcher match = pattern.matcher(arg);
if (match.find()) {
return Integer.parseInt(match.group(1)); // This should be exception-safe as only \d+ can be passed to it (i.e. non-empty string of pure digits)
}
return -1;
}
private static class ClearItemParameters {
@Setter public int lvl = 1;
@Setter public int refinement = 1;
@Setter public int rank = 4;
}
public int lvl = 1;
public int refinement = 1;
public int rank = 4;
};
private Stream<GameItem> getOther(ItemType type, Inventory playerInventory, ClearItemParameters param) {
return playerInventory.getItems().values().stream()
@ -58,8 +59,28 @@ public final class ClearCommand implements CommandHandler {
Inventory playerInventory = targetPlayer.getInventory();
ClearItemParameters param = new ClearItemParameters();
// Extract any tagged int arguments (e.g. "lv90", "x100", "r5")
parseIntParameters(args, param, intCommandHandlers);
// Extract any tagged arguments (e.g. "lv90", "x100", "r5")
for (int i = args.size() - 1; i >= 0; i--) { // Reverse iteration as we are deleting elements
String arg = args.get(i).toLowerCase();
boolean deleteArg = false;
int argNum;
// Note that a single argument can actually match all of these, e.g. "lv90r5*"
if ((argNum = matchIntOrNeg(lvlRegex, arg)) != -1) {
param.lvl = argNum;
deleteArg = true;
}
if ((argNum = matchIntOrNeg(refineRegex, arg)) != -1) {
param.refinement = argNum;
deleteArg = true;
}
if ((argNum = matchIntOrNeg(rankRegex, arg)) != -1) {
param.rank = argNum;
deleteArg = true;
}
if (deleteArg) {
args.remove(i);
}
}
if (args.size() < 1) {
sendUsageMessage(sender);

View File

@ -1,5 +1,6 @@
package emu.grasscutter.command.commands;
import emu.grasscutter.GameConstants;
import emu.grasscutter.command.Command;
import emu.grasscutter.command.CommandHandler;
import emu.grasscutter.data.GameData;
@ -15,15 +16,12 @@ import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.ActionReason;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.utils.SparseSet;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.regex.Pattern;
import static emu.grasscutter.command.CommandHelpers.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Command(
label = "give",
@ -35,7 +33,20 @@ import static emu.grasscutter.command.CommandHelpers.*;
permissionTargeted = "player.give.others",
threading = true)
public final class GiveCommand implements CommandHandler {
private enum GiveAllType {
private static Pattern lvlRegex = Pattern.compile("l(?:vl?)?(\\d+)"); // Java doesn't have raw string literals :(
private static Pattern refineRegex = Pattern.compile("r(\\d+)");
private static Pattern constellationRegex = Pattern.compile("c(\\d+)");
private static Pattern amountRegex = Pattern.compile("((?<=x)\\d+|\\d+(?=x)(?!x\\d))");
private static int matchIntOrNeg(Pattern pattern, String arg) {
Matcher match = pattern.matcher(arg);
if (match.find()) {
return Integer.parseInt(match.group(1)); // This should be exception-safe as only \d+ can be passed to it (i.e. non-empty string of pure digits)
}
return -1;
}
private static enum GiveAllType {
NONE,
ALL,
WEAPONS,
@ -43,31 +54,48 @@ public final class GiveCommand implements CommandHandler {
AVATARS
}
private static final Map<Pattern, BiConsumer<GiveItemParameters, Integer>> intCommandHandlers = Map.ofEntries(
Map.entry(lvlRegex, GiveItemParameters::setLvl),
Map.entry(refineRegex, GiveItemParameters::setRefinement),
Map.entry(amountRegex, GiveItemParameters::setAmount),
Map.entry(constellationRegex, GiveItemParameters::setConstellation)
);
private static class GiveItemParameters {
public int id;
@Setter public int lvl = 0;
@Setter public int amount = 1;
@Setter public int refinement = 1;
@Setter public int constellation = -1;
public int lvl = 0;
public int amount = 1;
public int refinement = 1;
public int constellation = -1;
public int mainPropId = -1;
public List<Integer> appendPropIdList;
public ItemData data;
public AvatarData avatarData;
public GiveAllType giveAllType = GiveAllType.NONE;
}
};
private GiveItemParameters parseArgs(Player sender, List<String> args) throws IllegalArgumentException {
GiveItemParameters param = new GiveItemParameters();
// Extract any tagged arguments (e.g. "lv90", "x100", "r5")
parseIntParameters(args, param, intCommandHandlers);
for (int i = args.size() - 1; i >= 0; i--) { // Reverse iteration as we are deleting elements
String arg = args.get(i).toLowerCase();
boolean deleteArg = false;
int argNum;
// Note that a single argument can actually match all of these, e.g. "lv90r5x100"
if ((argNum = matchIntOrNeg(lvlRegex, arg)) != -1) {
param.lvl = argNum;
deleteArg = true;
}
if ((argNum = matchIntOrNeg(refineRegex, arg)) != -1) {
param.refinement = argNum;
deleteArg = true;
}
if ((argNum = matchIntOrNeg(constellationRegex, arg)) != -1) {
param.constellation = argNum;
deleteArg = true;
}
if ((argNum = matchIntOrNeg(amountRegex, arg)) != -1) {
param.amount = argNum;
deleteArg = true;
}
if (deleteArg) {
args.remove(i);
}
}
// At this point, first remaining argument MUST be itemId/avatarId
if (args.size() < 1) {

View File

@ -13,8 +13,7 @@ public final class PositionCommand implements CommandHandler {
@Override
public void execute(Player sender, Player targetPlayer, List<String> args) {
Position pos = targetPlayer.getPosition();
Position rot = targetPlayer.getRotation();
CommandHandler.sendTranslatedMessage(sender, "commands.position.success",
pos.getX(), pos.getY(), pos.getZ(), rot.getX(), rot.getY(), rot.getZ(), targetPlayer.getSceneId());
pos.getX(), pos.getY(), pos.getZ(), targetPlayer.getSceneId());
}
}

View File

@ -8,70 +8,53 @@ import emu.grasscutter.data.excels.ItemData;
import emu.grasscutter.data.excels.MonsterData;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.EntityType;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.utils.Position;
import lombok.Setter;
import emu.grasscutter.game.world.Scene;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.regex.Pattern;
import static emu.grasscutter.command.CommandHelpers.*;
import static emu.grasscutter.config.Configuration.GAME_OPTIONS;
import static emu.grasscutter.config.Configuration.*;
import static emu.grasscutter.utils.Language.translate;
@Command(
label = "spawn",
usage = {"spawn <entityId> [amount] [level(monster only)] [<x> <y> <z>(monster only)]"},
aliases = {"drop"},
usage = {
"<itemId> [x<amount>] [blk<blockId>] [grp<groupId>] [cfg<configId>] <x> <y> <z>",
"<gadgetId> [x<amount>] [state<state>] [maxhp<maxhp>] [hp<hp>(0 for infinite)] [atk<atk>] [def<def>] [blk<blockId>] [grp<groupId>] [cfg<configId>] <x> <y> <z>",
"<monsterId> [x<amount>] [lv<level>] [ai<aiId>] [maxhp<maxhp>] [hp<hp>(0 for infinite)] [atk<atk>] [def<def>] [blk<blockId>] [grp<groupId>] [cfg<configId>] <x> <y> <z>"},
permission = "server.spawn",
permissionTargeted = "server.spawn.others")
public final class SpawnCommand implements CommandHandler {
private static final Map<Pattern, BiConsumer<SpawnParameters, Integer>> intCommandHandlers = Map.ofEntries(
Map.entry(lvlRegex, SpawnParameters::setLvl),
Map.entry(amountRegex, SpawnParameters::setAmount),
Map.entry(stateRegex, SpawnParameters::setState),
Map.entry(blockRegex, SpawnParameters::setBlockId),
Map.entry(groupRegex, SpawnParameters::setGroupId),
Map.entry(configRegex, SpawnParameters::setConfigId),
Map.entry(maxHPRegex, SpawnParameters::setMaxHP),
Map.entry(hpRegex, SpawnParameters::setHp),
Map.entry(defRegex, SpawnParameters::setDef),
Map.entry(atkRegex, SpawnParameters::setAtk),
Map.entry(aiRegex, SpawnParameters::setAi)
);
@Override
public void execute(Player sender, Player targetPlayer, List<String> args) {
SpawnParameters param = new SpawnParameters();
parseIntParameters(args, param, intCommandHandlers);
// At this point, first remaining argument MUST be the id and the rest the pos
if (args.size() < 1) {
sendUsageMessage(sender); // Reachable if someone does `/give lv90` or similar
throw new IllegalArgumentException();
}
int id = 0; // This is just to shut up the linter, it's not a real default
int amount = 1;
int level = 1;
float x = 0, y = 0, z = 0;
switch (args.size()) {
case 4:
case 6:
try {
float x, y, z;
x = Float.parseFloat(args.get(1));
y = Float.parseFloat(args.get(2));
z = Float.parseFloat(args.get(3));
param.pos = new Position(x, y, z);
x = Float.parseFloat(args.get(3));
y = Float.parseFloat(args.get(4));
z = Float.parseFloat(args.get(5));
} catch (NumberFormatException ignored) {
CommandHandler.sendMessage(sender, translate(sender, "commands.execution.argument_error"));
} // Fallthrough
case 3:
try {
level = Integer.parseInt(args.get(2));
} catch (NumberFormatException ignored) {
CommandHandler.sendMessage(sender, translate(sender, "commands.execution.argument_error"));
} // Fallthrough
case 2:
try {
amount = Integer.parseInt(args.get(1));
} catch (NumberFormatException ignored) {
CommandHandler.sendMessage(sender, translate(sender, "commands.generic.invalid.amount"));
} // Fallthrough
case 1:
try {
param.id = Integer.parseInt(args.get(0));
id = Integer.parseInt(args.get(0));
} catch (NumberFormatException ignored) {
CommandHandler.sendMessage(sender, translate(sender, "commands.generic.invalid.entityId"));
}
@ -81,102 +64,45 @@ public final class SpawnCommand implements CommandHandler {
return;
}
MonsterData monsterData = GameData.getMonsterDataMap().get(param.id);
GadgetData gadgetData = GameData.getGadgetDataMap().get(param.id);
ItemData itemData = GameData.getItemDataMap().get(param.id);
MonsterData monsterData = GameData.getMonsterDataMap().get(id);
GadgetData gadgetData = GameData.getGadgetDataMap().get(id);
ItemData itemData = GameData.getItemDataMap().get(id);
if (monsterData == null && gadgetData == null && itemData == null) {
CommandHandler.sendMessage(sender, translate(sender, "commands.generic.invalid.entityId"));
return;
}
param.scene = targetPlayer.getScene();
Scene scene = targetPlayer.getScene();
if (param.scene.getEntities().size() + param.amount > GAME_OPTIONS.sceneEntityLimit) {
param.amount = Math.max(Math.min(GAME_OPTIONS.sceneEntityLimit - param.scene.getEntities().size(), param.amount), 0);
CommandHandler.sendMessage(sender, translate(sender, "commands.spawn.limit_reached", param.amount));
if (param.amount <= 0) {
if (scene.getEntities().size() + amount > GAME_OPTIONS.sceneEntityLimit) {
amount = Math.max(Math.min(GAME_OPTIONS.sceneEntityLimit - scene.getEntities().size(), amount), 0);
CommandHandler.sendMessage(sender, translate(sender, "commands.spawn.limit_reached", amount));
if (amount <= 0) {
return;
}
}
double maxRadius = Math.sqrt(param.amount * 0.2 / Math.PI);
if (param.pos == null) {
param.pos = targetPlayer.getPosition();
}
for (int i = 0; i < param.amount; i++) {
Position pos = GetRandomPositionInCircle(param.pos, maxRadius).addY(3);
double maxRadius = Math.sqrt(amount * 0.2 / Math.PI);
Position center = (x != 0 && y != 0 && z != 0)
? (new Position(x, y, z))
: (targetPlayer.getPosition());
for (int i = 0; i < amount; i++) {
Position pos = GetRandomPositionInCircle(center, maxRadius).addY(3);
GameEntity entity = null;
if (itemData != null) {
entity = createItem(itemData, param, pos);
entity = new EntityItem(scene, null, itemData, pos, 1, true);
}
if (gadgetData != null) {
pos.addY(-3);
entity = createGadget(gadgetData, param, pos, targetPlayer);
entity = new EntityVehicle(scene, targetPlayer, id, 0, pos, targetPlayer.getRotation());
}
if (monsterData != null) {
entity = createMonster(monsterData, param, pos);
entity = new EntityMonster(scene, monsterData, pos, level);
}
applyCommonParameters(entity, param);
param.scene.addEntity(entity);
}
CommandHandler.sendMessage(sender, translate(sender, "commands.spawn.success", param.amount, param.id));
}
;
private EntityItem createItem(ItemData itemData, SpawnParameters param, Position pos) {
return new EntityItem(param.scene, null, itemData, pos, 1, true);
}
private EntityMonster createMonster(MonsterData monsterData, SpawnParameters param, Position pos) {
var entity = new EntityMonster(param.scene, monsterData, pos, param.lvl);
if (param.ai != -1) {
entity.setAiId(param.ai);
}
return entity;
}
private EntityBaseGadget createGadget(GadgetData gadgetData, SpawnParameters param, Position pos, Player targetPlayer) {
EntityBaseGadget entity;
if (gadgetData.getType() == EntityType.Vehicle) {
entity = new EntityVehicle(param.scene, targetPlayer, param.id, 0, pos, targetPlayer.getRotation());
} else {
entity = new EntityGadget(param.scene, param.id, pos, targetPlayer.getRotation());
if (param.state != -1) {
((EntityGadget) entity).setState(param.state);
}
}
return entity;
}
private void applyCommonParameters(GameEntity entity, SpawnParameters param) {
if (param.blockId != -1) {
entity.setBlockId(param.blockId);
}
if (param.groupId != -1) {
entity.setGroupId(param.groupId);
}
if (param.configId != -1) {
entity.setConfigId(param.configId);
}
if (param.maxHP != -1) {
entity.setFightProperty(FightProperty.FIGHT_PROP_MAX_HP, param.maxHP);
entity.setFightProperty(FightProperty.FIGHT_PROP_BASE_HP, param.maxHP);
}
if (param.hp != -1) {
entity.setFightProperty(FightProperty.FIGHT_PROP_CUR_HP, param.hp == 0 ? Float.MAX_VALUE : param.hp);
}
if (param.atk != -1) {
entity.setFightProperty(FightProperty.FIGHT_PROP_ATTACK, param.atk);
entity.setFightProperty(FightProperty.FIGHT_PROP_CUR_ATTACK, param.atk);
}
if (param.def != -1) {
entity.setFightProperty(FightProperty.FIGHT_PROP_DEFENSE, param.def);
entity.setFightProperty(FightProperty.FIGHT_PROP_CUR_DEFENSE, param.def);
scene.addEntity(entity);
}
CommandHandler.sendMessage(sender, translate(sender, "commands.spawn.success", amount, id));
}
private Position GetRandomPositionInCircle(Position origin, double radius) {
@ -186,21 +112,4 @@ public final class SpawnCommand implements CommandHandler {
target.addX((float) (r * Math.cos(angle))).addZ((float) (r * Math.sin(angle)));
return target;
}
private static class SpawnParameters {
@Setter public int id;
@Setter public int lvl = 1;
@Setter public int amount = 1;
@Setter public int blockId = -1;
@Setter public int groupId = -1;
@Setter public int configId = -1;
@Setter public int state = -1;
@Setter public int hp = -1;
@Setter public int maxHP = -1;
@Setter public int atk = -1;
@Setter public int def = -1;
@Setter public int ai = -1;
@Setter public Position pos = null;
public Scene scene = null;
}
}

View File

@ -29,7 +29,6 @@ public class GameData {
private static final Int2ObjectMap<QuestEncryptionKey> questsKeys = new Int2ObjectOpenHashMap<>();
private static final Int2ObjectMap<HomeworldDefaultSaveData> homeworldDefaultSaveData = new Int2ObjectOpenHashMap<>();
private static final Int2ObjectMap<SceneNpcBornData> npcBornData = new Int2ObjectOpenHashMap<>();
@Getter private static final Map<String, ConfigGadget> gadgetConfigData = new HashMap<>();
// ExcelConfigs
private static final Int2ObjectMap<PlayerLevelData> playerLevelDataMap = new Int2ObjectOpenHashMap<>();
@ -107,7 +106,6 @@ public class GameData {
private static final Int2ObjectMap<CookBonusData> cookBonusDataMap = new Int2ObjectOpenHashMap<>();
@Getter private static final Int2ObjectMap<ActivityData> activityDataMap = new Int2ObjectOpenHashMap<>();
@Getter private static final Int2ObjectMap<ActivityShopData> activityShopDataMap = new Int2ObjectOpenHashMap<>();
@Getter private static final Int2ObjectMap<ActivityWatcherData> activityWatcherDataMap = new Int2ObjectOpenHashMap<>();
@Getter private static final Int2ObjectMap<MusicGameBasicData> musicGameBasicDataMap = new Int2ObjectOpenHashMap<>();
@Getter private static final Int2ObjectMap<PersonalLineData> personalLineDataMap = new Int2ObjectOpenHashMap<>();

View File

@ -68,7 +68,6 @@ public class ResourceLoader {
// Process into depots
GameDepot.load();
// Load spawn data and quests
loadGadgetConfigData();
loadSpawnData();
loadQuests();
loadScriptSceneData();
@ -494,31 +493,6 @@ public class ResourceLoader {
Grasscutter.getLogger().debug("Loaded " + GameData.getSceneNpcBornData().size() + " SceneNpcBornDatas.");
}
@SneakyThrows
private static void loadGadgetConfigData() {
Files.list(Path.of(RESOURCE("BinOutput/Gadget/"))).forEach(filePath -> {
var file = filePath.toFile();
if (file.isDirectory() || !file.getName().endsWith("json")) {
return;
}
Map<String, ConfigGadget> config;
try {
config = JsonUtils.loadToMap(filePath.toString(), String.class, ConfigGadget.class);
} catch (Exception e) {
Grasscutter.getLogger().error("failed to load ConfigGadget entries for "+filePath, e);
return;
}
for (Entry<String, ConfigGadget> e : config.entrySet()) {
GameData.getGadgetConfigData().put(e.getKey(), e.getValue());
}
});
Grasscutter.getLogger().debug("Loaded {} ConfigGadget entries.", GameData.getGadgetConfigData().size());
}
@SneakyThrows
private static void loadBlossomResources() {
GameDepot.setBlossomConfig(DataLoader.loadClass("BlossomConfig.json", BlossomConfig.class));

View File

@ -1,15 +0,0 @@
package emu.grasscutter.data.binout;
import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import javax.annotation.Nullable;
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ConfigGadget {
// There are more values that can be added that might be useful in the json
@Nullable
ConfigGadgetCombat combat;
}

View File

@ -1,12 +0,0 @@
package emu.grasscutter.data.binout;
import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ConfigGadgetCombat {
// There are more values that can be added that might be useful in the json
ConfigGadgetCombatProperty property;
}

View File

@ -1,19 +0,0 @@
package emu.grasscutter.data.binout;
import com.google.gson.annotations.SerializedName;
import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ConfigGadgetCombatProperty {
float HP;
boolean isLockHP;
boolean isInvincible;
boolean isGhostToAllied;
float attack;
float defence;
float weight;
boolean useCreatorProperty;
}

View File

@ -1,30 +0,0 @@
package emu.grasscutter.data.excels;
import emu.grasscutter.data.GameResource;
import emu.grasscutter.data.ResourceType;
import emu.grasscutter.game.shop.ShopType;
import lombok.Getter;
import java.util.List;
@ResourceType(name = "ActivityShopOverallExcelConfigData.json")
public class ActivityShopData extends GameResource {
@Getter
private int scheduleId;
@Getter
private ShopType shopType;
@Getter
private List<Integer> sheetList;
@Override
public int getId() {
return getShopTypeId();
}
public int getShopTypeId() {
if (this.shopType == null)
this.shopType = ShopType.SHOP_TYPE_NONE;
return shopType.shopTypeId;
}
}

View File

@ -1,6 +1,5 @@
package emu.grasscutter.data.excels;
import com.google.gson.annotations.SerializedName;
import emu.grasscutter.data.GameResource;
import emu.grasscutter.data.ResourceType;
import emu.grasscutter.data.common.ItemParamData;
@ -25,12 +24,11 @@ public class ShopGoodsData extends GameResource {
private int maxPlayerLevel;
private int buyLimit;
@SerializedName(value="subTabId", alternate={"secondarySheetId"})
private int subTabId;
private String refreshType;
private transient ShopInfo.ShopRefreshType refreshTypeEnum;
private int refreshParam;
@Override

View File

@ -19,12 +19,10 @@ import java.util.concurrent.ConcurrentHashMap;
@Getter
public class ActivityManager extends BasePlayerManager {
private static final Map<Integer, ActivityConfigItem> activityConfigItemMap;
@Getter private static final Map<Integer, ActivityConfigItem> scheduleActivityConfigMap;
private final Map<Integer, PlayerActivityData> playerActivityDataMap;
static {
activityConfigItemMap = new HashMap<>();
scheduleActivityConfigMap = new HashMap<>();
loadActivityConfigData();
}
@ -63,7 +61,6 @@ public class ActivityManager extends BasePlayerManager {
item.setActivityHandler(activityHandler);
activityConfigItemMap.putIfAbsent(item.getActivityId(), item);
scheduleActivityConfigMap.putIfAbsent(item.getScheduleId(), item);
});
Grasscutter.getLogger().info("Enable {} activities.", activityConfigItemMap.size());

View File

@ -1,7 +1,5 @@
package emu.grasscutter.game.entity;
import emu.grasscutter.data.binout.ConfigGadget;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.game.world.Scene;
public abstract class EntityBaseGadget extends GameEntity {
@ -16,30 +14,4 @@ public abstract class EntityBaseGadget extends GameEntity {
public void onDeath(int killerId) {
super.onDeath(killerId); // Invoke super class's onDeath() method.
}
protected void fillFightProps(ConfigGadget configGadget) {
if (configGadget == null || configGadget.getCombat() == null) {
return;
}
var combatData = configGadget.getCombat();
var combatProperties = combatData.getProperty();
var targetHp = combatProperties.getHP();
setFightProperty(FightProperty.FIGHT_PROP_MAX_HP, targetHp);
setFightProperty(FightProperty.FIGHT_PROP_BASE_HP, targetHp);
if (combatProperties.isInvincible()) {
targetHp = Float.POSITIVE_INFINITY;
}
setFightProperty(FightProperty.FIGHT_PROP_CUR_HP, targetHp);
var atk = combatProperties.getAttack();
setFightProperty(FightProperty.FIGHT_PROP_BASE_ATTACK, atk);
setFightProperty(FightProperty.FIGHT_PROP_CUR_ATTACK, atk);
var def = combatProperties.getDefence();
setFightProperty(FightProperty.FIGHT_PROP_BASE_DEFENSE, def);
setFightProperty(FightProperty.FIGHT_PROP_CUR_DEFENSE, def);
setLockHP(combatProperties.isLockHP());
}
}

View File

@ -1,20 +1,21 @@
package emu.grasscutter.game.entity;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.ConfigGadget;
import emu.grasscutter.data.excels.GadgetData;
import emu.grasscutter.game.entity.gadget.*;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.EntityIdType;
import emu.grasscutter.game.props.EntityType;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.game.props.LifeState;
import emu.grasscutter.game.props.PlayerProperty;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.game.world.SpawnDataEntry;
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
import emu.grasscutter.net.proto.AnimatorParameterValueInfoPairOuterClass.AnimatorParameterValueInfoPair;
import emu.grasscutter.net.proto.EntityAuthorityInfoOuterClass.EntityAuthorityInfo;
import emu.grasscutter.net.proto.EntityClientDataOuterClass.EntityClientData;
import emu.grasscutter.net.proto.EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo;
import emu.grasscutter.net.proto.FightPropPairOuterClass.FightPropPair;
import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.MotionInfoOuterClass.MotionInfo;
import emu.grasscutter.net.proto.PropPairOuterClass.PropPair;
@ -23,18 +24,18 @@ import emu.grasscutter.net.proto.SceneEntityAiInfoOuterClass.SceneEntityAiInfo;
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType;
import emu.grasscutter.scripts.constants.EventType;
import emu.grasscutter.scripts.data.SceneGadget;
import emu.grasscutter.scripts.data.ScriptArgs;
import emu.grasscutter.server.packet.send.PacketGadgetStateNotify;
import emu.grasscutter.server.packet.send.PacketLifeStateChangeNotify;
import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.ProtoHelper;
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
import lombok.Getter;
import lombok.ToString;
import javax.annotation.Nullable;
@ToString(callSuper = true)
public class EntityGadget extends EntityBaseGadget {
private final GadgetData data;
@ -47,20 +48,14 @@ public class EntityGadget extends EntityBaseGadget {
private GadgetContent content;
private Int2FloatOpenHashMap fightProp;
private SceneGadget metaGadget;
@Nullable @Getter
private ConfigGadget configGadget;
public EntityGadget(Scene scene, int gadgetId, Position pos, Position rot) {
super(scene);
this.data = GameData.getGadgetDataMap().get(gadgetId);
if (data!=null && data.getJsonName()!=null) {
this.configGadget = GameData.getGadgetConfigData().get(data.getJsonName());
}
this.id = getScene().getWorld().getNextEntityId(EntityIdType.GADGET);
this.gadgetId = gadgetId;
this.pos = pos.clone();
this.rot = rot != null ? rot.clone() : new Position();
fillFightProps(configGadget);
}
public EntityGadget(Scene scene, int gadgetId, Position pos) {

View File

@ -37,8 +37,6 @@ import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.ProtoHelper;
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
import lombok.Getter;
import lombok.Setter;
public class EntityMonster extends GameEntity {
private final MonsterData monsterData;
@ -50,8 +48,6 @@ public class EntityMonster extends GameEntity {
private final int level;
private int weaponEntityId;
private int poseId;
@Getter @Setter
private int aiId=-1;
public EntityMonster(Scene scene, MonsterData monsterData, Position pos, int level) {
super(scene);
@ -293,9 +289,6 @@ public class EntityMonster extends GameEntity {
monsterInfo.addWeaponList(weaponInfo);
}
if (this.aiId!=-1) {
monsterInfo.setAiConfigId(aiId);
}
entityInfo.setMonster(monsterInfo);

View File

@ -1,18 +1,16 @@
package emu.grasscutter.game.entity;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.ConfigGadget;
import emu.grasscutter.data.excels.GadgetData;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.EntityIdType;
import emu.grasscutter.game.props.FightProperty;
import emu.grasscutter.game.props.PlayerProperty;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
import emu.grasscutter.net.proto.AnimatorParameterValueInfoPairOuterClass.AnimatorParameterValueInfoPair;
import emu.grasscutter.net.proto.EntityAuthorityInfoOuterClass.EntityAuthorityInfo;
import emu.grasscutter.net.proto.EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo;
import emu.grasscutter.net.proto.FightPropPairOuterClass.FightPropPair;
import emu.grasscutter.net.proto.FightPropPairOuterClass.*;
import emu.grasscutter.net.proto.MotionInfoOuterClass.MotionInfo;
import emu.grasscutter.net.proto.PropPairOuterClass.PropPair;
import emu.grasscutter.net.proto.ProtEntityTypeOuterClass.ProtEntityType;
@ -20,18 +18,18 @@ import emu.grasscutter.net.proto.SceneEntityAiInfoOuterClass.SceneEntityAiInfo;
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
import emu.grasscutter.net.proto.VehicleInfoOuterClass.VehicleInfo;
import emu.grasscutter.net.proto.VehicleMemberOuterClass.VehicleMember;
import emu.grasscutter.net.proto.VehicleInfoOuterClass.*;
import emu.grasscutter.net.proto.VehicleMemberOuterClass.*;
import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.ProtoHelper;
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
import lombok.Getter;
import lombok.Setter;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
public class EntityVehicle extends EntityBaseGadget {
@ -46,7 +44,6 @@ public class EntityVehicle extends EntityBaseGadget {
@Getter @Setter private float curStamina;
@Getter private List<VehicleMember> vehicleMembers;
@Nullable @Getter private ConfigGadget configGadget;
public EntityVehicle(Scene scene, Player player, int gadgetId, int pointId, Position pos, Position rot) {
super(scene);
@ -57,21 +54,21 @@ public class EntityVehicle extends EntityBaseGadget {
this.rot = new Position(rot);
this.gadgetId = gadgetId;
this.pointId = pointId;
this.curStamina = 240; // might be in configGadget.GCALKECLLLP.JBAKBEFIMBN.ANBMPHPOALP
this.vehicleMembers = new ArrayList<>();
GadgetData data = GameData.getGadgetDataMap().get(gadgetId);
if (data != null && data.getJsonName() != null) {
this.configGadget = GameData.getGadgetConfigData().get(data.getJsonName());
this.curStamina = 240;
this.vehicleMembers = new ArrayList<VehicleMember>();
switch (gadgetId) {
case 45001001,45001002 -> { // TODO: Not hardcode this. Waverider (skiff)
this.addFightProperty(FightProperty.FIGHT_PROP_BASE_HP, 10000);
this.addFightProperty(FightProperty.FIGHT_PROP_BASE_ATTACK, 100);
this.addFightProperty(FightProperty.FIGHT_PROP_CUR_ATTACK, 100);
this.addFightProperty(FightProperty.FIGHT_PROP_CUR_HP, 10000);
this.addFightProperty(FightProperty.FIGHT_PROP_CUR_DEFENSE, 0);
this.addFightProperty(FightProperty.FIGHT_PROP_CUR_SPEED, 0);
this.addFightProperty(FightProperty.FIGHT_PROP_CHARGE_EFFICIENCY, 0);
this.addFightProperty(FightProperty.FIGHT_PROP_MAX_HP, 10000);
}
}
fillFightProps(configGadget);
}
@Override
protected void fillFightProps(ConfigGadget configGadget) {
super.fillFightProps(configGadget);
this.addFightProperty(FightProperty.FIGHT_PROP_CUR_SPEED, 0);
this.addFightProperty(FightProperty.FIGHT_PROP_CHARGE_EFFICIENCY, 0);
}
@Override

View File

@ -37,8 +37,6 @@ public abstract class GameEntity {
@Getter @Setter private int lastMoveSceneTimeMs;
@Getter @Setter private int lastMoveReliableSeq;
@Getter @Setter private boolean lockHP;
// Abilities
private Object2FloatMap<String> metaOverrideMap;
private Int2ObjectMap<String> metaModifiers;
@ -108,10 +106,6 @@ public abstract class GameEntity {
return this.getFightProperties().getOrDefault(prop.getId(), 0f);
}
public boolean hasFightProperty(FightProperty prop) {
return this.getFightProperties().containsKey(prop.getId());
}
public void addAllFightPropsToEntityInfo(SceneEntityInfo.Builder entityInfo) {
for (Int2FloatMap.Entry entry : this.getFightProperties().int2FloatEntrySet()) {
if (entry.getIntKey() == 0) {
@ -159,7 +153,7 @@ public abstract class GameEntity {
public void damage(float amount, int killerId) {
// Check if the entity has properties.
if (this.getFightProperties() == null || !hasFightProperty(FightProperty.FIGHT_PROP_CUR_HP)) {
if (this.getFightProperties() == null) {
return;
}
@ -170,10 +164,9 @@ public abstract class GameEntity {
return; // If the event is canceled, do not damage the entity.
}
float curHp = getFightProperty(FightProperty.FIGHT_PROP_CUR_HP);
if (curHp != Float.POSITIVE_INFINITY && !lockHP || lockHP && curHp <= event.getDamage()) {
// Add negative HP to the current HP property.
this.addFightProperty(FightProperty.FIGHT_PROP_CUR_HP, -(event.getDamage()));
if (getFightProperty(FightProperty.FIGHT_PROP_CUR_HP) != Float.POSITIVE_INFINITY) {
// Add negative HP to the current HP property.
this.addFightProperty(FightProperty.FIGHT_PROP_CUR_HP, -(event.getDamage()));
}
// Check if dead

View File

@ -13,7 +13,7 @@ public class GachaBanner {
@Getter private int gachaType;
@Getter private int scheduleId;
@Getter private String prefabPath;
private String previewPrefabPath;
@Getter private String previewPrefabPath;
@Getter private String titlePath;
private int costItemId = 0;
private int costItemAmount = 1;
@ -47,12 +47,6 @@ public class GachaBanner {
private int costItem = 0;
@Getter private int wishMaxProgress = 2;
public String getPreviewPrefabPath() {
if (this.previewPrefabPath != null && !this.previewPrefabPath.isEmpty())
return this.previewPrefabPath;
return "UI_Tab_" + this.prefabPath;
}
public ItemParamData getCost(int numRolls) {
return switch (numRolls) {
case 10 -> new ItemParamData((costItemId10 > 0) ? costItemId10 : getCostItem(), costItemAmount10);

View File

@ -273,15 +273,11 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
private void addVirtualItem(int itemId, int count) {
switch (itemId) {
case 101 -> // Character exp
this.player.getTeamManager().getActiveTeam().stream().map(e -> e.getAvatar()).forEach(
avatar -> this.player.getServer().getInventorySystem().upgradeAvatar(this.player, avatar, count)
);
this.player.getServer().getInventorySystem().upgradeAvatar(this.player, this.player.getTeamManager().getCurrentAvatarEntity().getAvatar(), count);
case 102 -> // Adventure exp
this.player.addExpDirectly(count);
case 105 -> // Companionship exp
this.player.getTeamManager().getActiveTeam().stream().map(e -> e.getAvatar()).forEach(
avatar -> this.player.getServer().getInventorySystem().upgradeAvatarFetterLevel(this.player, avatar, count * (this.player.isInMultiplayer() ? 2 : 1))
);
this.player.getServer().getInventorySystem().upgradeAvatarFetterLevel(this.player, this.player.getTeamManager().getCurrentAvatarEntity().getAvatar(), count);
case 106 -> // Resin
this.player.getResinManager().addResin(count);
case 107 -> // Legendary Key

View File

@ -3,10 +3,10 @@ package emu.grasscutter.game.player;
import static emu.grasscutter.config.Configuration.*;
import java.util.*;
import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Transient;
import emu.grasscutter.GameConstants;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.AvatarSkillDepotData;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.entity.EntityAvatar;
@ -37,8 +37,6 @@ import emu.grasscutter.server.packet.send.PacketRemoveCustomTeamRsp;
import emu.grasscutter.server.packet.send.PacketSceneTeamUpdateNotify;
import emu.grasscutter.server.packet.send.PacketSetUpAvatarTeamRsp;
import emu.grasscutter.server.packet.send.PacketWorldPlayerDieNotify;
import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.Utils;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
@ -116,7 +114,7 @@ public class TeamManager extends BasePlayerDataManager {
public TeamInfo getCurrentTeamInfo() {
if (useTemporarilyTeamIndex >= 0 &&
useTemporarilyTeamIndex < temporaryTeam.size()) {
useTemporarilyTeamIndex < temporaryTeam.size()) {
return temporaryTeam.get(useTemporarilyTeamIndex);
}
if (this.getPlayer().isInMultiplayer()) {
@ -277,8 +275,8 @@ public class TeamManager extends BasePlayerDataManager {
.map(e -> e.getKey())
.filter(elementType -> elementType.getTeamResonanceId() != 0)
.forEach(elementType -> {
this.teamResonances.add(elementType.getTeamResonanceId());
this.teamResonancesConfig.add(elementType.getConfigHash());
this.teamResonances.add(elementType.getTeamResonanceId());
this.teamResonancesConfig.add(elementType.getConfigHash());
});
// Four element resonance
@ -412,30 +410,30 @@ public class TeamManager extends BasePlayerDataManager {
public void setupTemporaryTeam(List<List<Long>> guidList) {
this.temporaryTeam = guidList.stream().map(list -> {
// Sanity checks
if (list.size() == 0 || list.size() > this.getMaxTeamSize()) {
return null;
}
// Set team data
LinkedHashSet<Avatar> newTeam = new LinkedHashSet<>();
for (Long aLong : list) {
Avatar avatar = this.getPlayer().getAvatars().getAvatarByGuid(aLong);
if (avatar == null || newTeam.contains(avatar)) {
// Should never happen
// Sanity checks
if (list.size() == 0 || list.size() > this.getMaxTeamSize()) {
return null;
}
newTeam.add(avatar);
}
// convert to avatar ids
return newTeam.stream()
.map(Avatar::getAvatarId)
.toList();
})
.filter(Objects::nonNull)
.map(TeamInfo::new)
.toList();
// Set team data
LinkedHashSet<Avatar> newTeam = new LinkedHashSet<>();
for (Long aLong : list) {
Avatar avatar = this.getPlayer().getAvatars().getAvatarByGuid(aLong);
if (avatar == null || newTeam.contains(avatar)) {
// Should never happen
return null;
}
newTeam.add(avatar);
}
// convert to avatar ids
return newTeam.stream()
.map(Avatar::getAvatarId)
.toList();
})
.filter(Objects::nonNull)
.map(TeamInfo::new)
.toList();
}
public void useTemporaryTeam(int index) {
@ -569,8 +567,8 @@ public class TeamManager extends BasePlayerDataManager {
}
entity.setFightProperty(
FightProperty.FIGHT_PROP_CUR_HP,
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP) * .1f
FightProperty.FIGHT_PROP_CUR_HP,
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP) * .1f
);
this.getPlayer().sendPacket(new PacketAvatarFightPropUpdateNotify(entity.getAvatar(), FightProperty.FIGHT_PROP_CUR_HP));
this.getPlayer().sendPacket(new PacketAvatarLifeStateChangeNotify(entity.getAvatar()));
@ -589,13 +587,13 @@ public class TeamManager extends BasePlayerDataManager {
}
entity.setFightProperty(
FightProperty.FIGHT_PROP_CUR_HP,
(float) Math.min(
(entity.getFightProperty(FightProperty.FIGHT_PROP_CUR_HP) +
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP) * (float) healRate / 100.0 +
(float) healAmount / 100.0),
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP)
)
FightProperty.FIGHT_PROP_CUR_HP,
(float) Math.min(
(entity.getFightProperty(FightProperty.FIGHT_PROP_CUR_HP) +
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP) * (float) healRate / 100.0 +
(float) healAmount / 100.0),
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP)
)
);
this.getPlayer().sendPacket(new PacketAvatarFightPropUpdateNotify(entity.getAvatar(), FightProperty.FIGHT_PROP_CUR_HP));
this.getPlayer().sendPacket(new PacketAvatarLifeStateChangeNotify(entity.getAvatar()));
@ -618,37 +616,24 @@ public class TeamManager extends BasePlayerDataManager {
// Revive all team members
for (EntityAvatar entity : this.getActiveTeam()) {
entity.setFightProperty(
FightProperty.FIGHT_PROP_CUR_HP,
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP) * .4f
FightProperty.FIGHT_PROP_CUR_HP,
entity.getFightProperty(FightProperty.FIGHT_PROP_MAX_HP) * .4f
);
this.getPlayer().sendPacket(new PacketAvatarFightPropUpdateNotify(entity.getAvatar(), FightProperty.FIGHT_PROP_CUR_HP));
this.getPlayer().sendPacket(new PacketAvatarLifeStateChangeNotify(entity.getAvatar()));
}
// Teleport player and set player position
try {
this.getPlayer().sendPacket(new PacketPlayerEnterSceneNotify(this.getPlayer(), EnterType.ENTER_TYPE_SELF, EnterReason.Revival, player.getSceneId(), getRespawnPosition()));
player.getPosition().set(getRespawnPosition());
}catch (Exception e) {
this.getPlayer().sendPacket(new PacketPlayerEnterSceneNotify(this.getPlayer(), EnterType.ENTER_TYPE_SELF, EnterReason.Revival, 3, GameConstants.START_POSITION));
player.getPosition().set(GameConstants.START_POSITION); // If something goes wrong, the resurrection is here
}
// Teleport player
this.getPlayer().sendPacket(new PacketPlayerEnterSceneNotify(this.getPlayer(), EnterType.ENTER_TYPE_SELF, EnterReason.Revival, 3, GameConstants.START_POSITION));
// Set player position
player.setSceneId(3);
player.getPosition().set(GameConstants.START_POSITION);
// Packets
this.getPlayer().sendPacket(new BasePacket(PacketOpcodes.WorldPlayerReviveRsp));
}
public Position getRespawnPosition() {
var deathPos = this.getPlayer().getPosition();
int sceneId = this.getPlayer().getSceneId();
// Get the closest trans point to where the player died.
var respawnPoint = this.getPlayer().getUnlockedScenePoints(sceneId).stream()
.map(pointId -> GameData.getScenePointEntryById(sceneId, pointId))
.filter(point -> point.getPointData().getType().equals("SceneTransPoint"))
.min((Comparator.comparingDouble(pos -> Utils.getDist(pos.getPointData().getTranPos(), deathPos))));
return respawnPoint.get().getPointData().getTranPos();
}
public void saveAvatars() {
// Save all avatars from active team
for (EntityAvatar entity : this.getActiveTeam()) {

View File

@ -8,99 +8,86 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
public enum EntityType {
None (0),
Avatar (1),
Monster (2),
Bullet (3),
AttackPhyisicalUnit (4),
AOE (5),
Camera (6),
EnviroArea (7),
Equip (8),
MonsterEquip (9),
Grass (10),
Level (11),
NPC (12),
TransPointFirst (13),
TransPointFirstGadget (14),
TransPointSecond (15),
TransPointSecondGadget (16),
DropItem (17),
Field (18),
Gadget (19),
Water (20),
GatherPoint (21),
GatherObject (22),
AirflowField (23),
SpeedupField (24),
Gear (25),
Chest (26),
EnergyBall (27),
ElemCrystal (28),
Timeline (29),
Worktop (30),
Team (31),
Platform (32),
AmberWind (33),
EnvAnimal (34),
SealGadget (35),
Tree (36),
Bush (37),
QuestGadget (38),
Lightning (39),
RewardPoint (40),
RewardStatue (41),
MPLevel (42),
WindSeed (43),
MpPlayRewardPoint (44),
ViewPoint (45),
RemoteAvatar (46),
GeneralRewardPoint (47),
PlayTeam (48),
OfferingGadget (49),
EyePoint (50),
MiracleRing (51),
Foundation (52),
WidgetGadget (53),
Vehicle (54),
SubEquip (55),
FishRod (56),
CustomTile (57),
FishPool (58),
CustomGadget (59),
BlackMud (60),
RoguelikeOperatorGadget (61),
NightCrowGadget (62),
Projector (63),
Screen (64),
EchoShell (65),
UIInteractGadget (66),
PlaceHolder (99);
None (0),
Avatar (1),
Monster (2),
Bullet (3),
AttackPhyisicalUnit (4),
AOE (5),
Camera (6),
EnviroArea (7),
Equip (8),
MonsterEquip (9),
Grass (10),
Level (11),
NPC (12),
TransPointFirst (13),
TransPointFirstGadget (14),
TransPointSecond (15),
TransPointSecondGadget (16),
DropItem (17),
Field (18),
Gadget (19),
Water (20),
GatherPoint (21),
GatherObject (22),
AirflowField (23),
SpeedupField (24),
Gear (25),
Chest (26),
EnergyBall (27),
ElemCrystal (28),
Timeline (29),
Worktop (30),
Team (31),
Platform (32),
AmberWind (33),
EnvAnimal (34),
SealGadget (35),
Tree (36),
Bush (37),
QuestGadget (38),
Lightning (39),
RewardPoint (40),
RewardStatue (41),
MPLevel (42),
WindSeed (43),
MpPlayRewardPoint (44),
ViewPoint (45),
RemoteAvatar (46),
GeneralRewardPoint (47),
PlayTeam (48),
OfferingGadget (49),
EyePoint (50),
MiracleRing (51),
Foundation (52),
WidgetGadget (53),
PlaceHolder (99);
private final int value;
private static final Int2ObjectMap<EntityType> map = new Int2ObjectOpenHashMap<>();
private static final Map<String, EntityType> stringMap = new HashMap<>();
static {
Stream.of(values()).forEach(e -> {
map.put(e.getValue(), e);
stringMap.put(e.name(), e);
});
}
private EntityType(int value) {
this.value = value;
}
private final int value;
private static final Int2ObjectMap<EntityType> map = new Int2ObjectOpenHashMap<>();
private static final Map<String, EntityType> stringMap = new HashMap<>();
static {
Stream.of(values()).forEach(e -> {
map.put(e.getValue(), e);
stringMap.put(e.name(), e);
});
}
private EntityType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public static EntityType getTypeByValue(int value) {
return map.getOrDefault(value, None);
}
public static EntityType getTypeByName(String name) {
return stringMap.getOrDefault(name, None);
}
public int getValue() {
return value;
}
public static EntityType getTypeByValue(int value) {
return map.getOrDefault(value, None);
}
public static EntityType getTypeByName(String name) {
return stringMap.getOrDefault(name, None);
}
}

View File

@ -1,107 +0,0 @@
package emu.grasscutter.game.shop;
/**
* ShopTypes 0-1010 based on `ActivityShopOverallExcelConfigData.json`
* ShopTypes for activities are partially guessed on the version, and partially tested
* ShopTypes 1011-1070 are mostly based of `BinOutput/InterAction/Shop`
*/
public enum ShopType {
SHOP_TYPE_NONE(0),
SHOP_TYPE_PAIMON(900),
SHOP_TYPE_PACKAGE(902),
SHOP_TYPE_MCOIN(903),
SHOP_TYPE_RECOMMEND(1001),
SHOP_TYPE_CITY(1002),
SHOP_TYPE_BLACKSMITH(1003),
SHOP_TYPE_GROCERY(1004),
SHOP_TYPE_FOOD(1005),
SHOP_TYPE_SEA_LAMP(1006),
SHOP_TYPE_VIRTUAL_SHOP(1007),
SHOP_TYPE_LIYUE_GROCERY(1008),
SHOP_TYPE_LIYUE_SOUVENIR(1009),
SHOP_TYPE_LIYUE_RESTAURANT(1010),
SHOP_TYPE_NPC_Flora(1011),
SHOP_TYPE_NPC_Charles(1012),
SHOP_TYPE_NPC_Shiliu(1013),
SHOP_TYPE_NPC_Schulz(1014),
SHOP_TYPE_NPC_Brook(1015),
SHOP_TYPE_NPC_Hopkins(1016),
SHOP_TYPE_NPC_Draff(1017),
SHOP_TYPE_NPC_Chloris(1018),
SHOP_TYPE_NPC_Licai(1019),
SHOP_TYPE_NPC_Yueshu(1020),
SHOP_TYPE_NPC_Gui(1021),
SHOP_TYPE_NPC_Gao(1022),
SHOP_TYPE_NPC_Sun(1023),
SHOP_TYPE_NPC_Qiming(1024),
SHOP_TYPE_NPC_Zhangshun(1025),
SHOP_TYPE_NPC_Chen(1026),
SHOP_TYPE_NPC_ErNiang(1027),
SHOP_TYPE_NPC_Shitou(1028),
SHOP_TYPE_NPC_Jifang(1029),
SHOP_TYPE_NPC_Zhu(1030),
SHOP_TYPE_NPC_Bai(1031),
SHOP_TYPE_NPC_Kai(1032),
SHOP_TYPE_NPC_Linglang(1033),
SHOP_TYPE_NPC_VerrGoldet(1034),
SHOP_TYPE_NPC_Zhou(1035),
SHOP_TYPE_TASK_Ekaterina(1036),
SHOP_TYPE_ACTIVITY_ASTER(1037),
SHOP_TYPE_TASK_Tartaglia(1038),
SHOP_TYPE_NPC_Harris(1039),
SHOP_TYPE_ACTIVITY_DRAGON_SPINE(1040),
SHOP_TYPE_ACTIVITY_TREASURE_MAP(1041),
SHOP_TYPE_NPC_Yinian(1042),
SHOP_TYPE_ACTIVITY_SEA_LAMP(1043), //event guess
SHOP_TYPE_ACTIVITY_FLEUR_FAIR(1044),
SHOP_TYPE_NPC_Changshun(1045),
SHOP_TYPE_NPC_Bolai(1046),
SHOP_TYPE_NPC_Ashanpo(1047),
SHOP_TYPE_HOME(1048),
SHOP_TYPE_HOME_LIMIT(1049),
SHOP_TYPE_NPC_MasterLu(1050),
SHOP_TYPE_NPC_Goth(1051),
SHOP_TYPE_COSTUME(1052),
SHOP_TYPE_NPC_Obata(1053),
SHOP_TYPE_NPC_Qiuyue(1054),
SHOP_TYPE_NPC_Ryouko(1055),
SHOP_TYPE_INAZUMA_GROCERY(1056),
SHOP_TYPE_INAZUMA_SOUVENIR(1057),
SHOP_TYPE_INAZUMA_RESTAURANT(1058),
SHOP_TYPE_NPC_Kuroda(1059),
SHOP_TYPE_NPC_KiminamiAnna(1060),
SHOP_TYPE_NPC_Tomoki(1061),
SHOP_TYPE_NPC_Karpillia(1062),
SHOP_TYPE_BLACKSMITH_INAZUMA(1063),
SHOP_TYPE_FISH(1064),
SHOP_TYPE_FISH_LIYUE(1065),
SHOP_TYPE_FISH_INAZUMA(1066),
SHOP_TYPE_NPC_Kiyoko(1067),
SHOP_TYPE_EXPIRED_WIDGET_MENGDE(1068),
SHOP_TYPE_CAPTURE_ANIMAL_SHOP(1069),
SHOP_TYPE_NPC_YamashiroKenta(1070),
SHOP_TYPE_ACTIVITY_CHANNELLER_SLAB(15001), //prob
SHOP_TYPE_ACTIVITY_SUMMER_TIME(16001),
SHOP_TYPE_ACTIVITY_BOUNCE_CONJURING(16002),
SHOP_TYPE_ACTIVITY_BLITZ_RUSH(20001),// guess
SHOP_TYPE_ACTIVITY_CHESS(20002),// guess
SHOP_TYPE_ACTIVITY_WINTER_CAMP(20004),
SHOP_TYPE_ACTIVITY_LANTERN_RITE(20005),// guess
SHOP_TYPE_ACTIVITY_ROGUELIKE_DUNGEON(22001),// guess
SHOP_TYPE_ACTIVITY_ROGUE_DIARY(27001),// guess
SHOP_TYPE_ACTIVITY_SUMMER_TIME_V2(28001), // guess
SHOP_TYPE_ACTIVITY_GRAVEN_INNOCENCE(30001); // guess
public final int shopTypeId;
ShopType(int shopTypeId) {
this.shopTypeId = shopTypeId;
}
public static ShopType getById(int shopTypeId) {
for (ShopType type : ShopType.values()) {
if (type.shopTypeId == shopTypeId) return type;
}
return SHOP_TYPE_NONE;
}
}

View File

@ -1,19 +0,0 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.GetActivityShopSheetInfoReqOuterClass.GetActivityShopSheetInfoReq;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketGetActivityShopSheetInfoRsp;
@Opcodes(PacketOpcodes.GetActivityShopSheetInfoReq)
public class HandlerGetActivityShopSheetInfoReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
GetActivityShopSheetInfoReq req = GetActivityShopSheetInfoReq.parseFrom(payload);
session.getPlayer().sendPacket(new PacketGetActivityShopSheetInfoRsp(req.getShopType()));
}
}

View File

@ -1,50 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.data.GameData;
import emu.grasscutter.game.activity.ActivityConfigItem;
import emu.grasscutter.game.activity.ActivityManager;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.ActivityShopSheetInfoOuterClass.ActivityShopSheetInfo;
import emu.grasscutter.net.proto.GetActivityShopSheetInfoRspOuterClass.GetActivityShopSheetInfoRsp;
import emu.grasscutter.net.proto.RetcodeOuterClass;
import java.util.ArrayList;
import java.util.List;
public class PacketGetActivityShopSheetInfoRsp extends BasePacket {
public PacketGetActivityShopSheetInfoRsp(int shopType) {
super(PacketOpcodes.GetActivityShopSheetInfoRsp);
var sheetInfo = GameData.getActivityShopDataMap().get(shopType);
ActivityConfigItem activityConfigItem = null;
if (sheetInfo != null) {
activityConfigItem = ActivityManager.getScheduleActivityConfigMap().get(sheetInfo.getScheduleId());
}
if (sheetInfo == null || activityConfigItem == null) {
setData(GetActivityShopSheetInfoRsp.newBuilder()
.setShopType(shopType)
.setRetcode(RetcodeOuterClass.Retcode.RET_SHOP_NOT_OPEN_VALUE)
.build());
return;
}
List<ActivityShopSheetInfo> sheetInfos = new ArrayList<>(sheetInfo.getSheetList().size());
for (int id : sheetInfo.getSheetList()) {
sheetInfos.add(ActivityShopSheetInfo.newBuilder()
.setSheetId(id)
.setBeginTime((int) activityConfigItem.getBeginTime().getTime())
.setEndTime((int) activityConfigItem.getEndTime().getTime())
.build());
}
setData(GetActivityShopSheetInfoRsp.newBuilder()
.setShopType(shopType)
.addAllSheetInfoList(sheetInfos)
.build());
}
}

View File

@ -97,9 +97,7 @@ public final class Tools {
// Write txt files
for (int i = 0; i < TextStrings.NUM_LANGUAGES; i++) {
File GMHandbookOutputpath=new File("./GM Handbook");
GMHandbookOutputpath.mkdir();
final String fileName = "./GM Handbook/GM Handbook - %s.txt".formatted(TextStrings.ARR_LANGUAGES[i]);
final String fileName = "./GM Handbook - %s.txt".formatted(TextStrings.ARR_LANGUAGES[i]);
try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName), StandardCharsets.UTF_8), false)) {
writer.write(handbookBuilders.get(i).toString());
}

View File

@ -5,6 +5,7 @@
"scheduleId": 803,
"bannerType": "EVENT",
"prefabPath": "GachaShowPanel_A016",
"previewPrefabPath": "UI_Tab_GachaShowPanel_A016",
"titlePath": "UI_GACHA_SHOW_PANEL_A016_TITLE",
"costItemId": 224,
"costItemAmount10": 8,
@ -21,6 +22,7 @@
"scheduleId": 893,
"bannerType": "STANDARD",
"prefabPath": "GachaShowPanel_A022",
"previewPrefabPath": "UI_Tab_GachaShowPanel_A022",
"titlePath": "UI_GACHA_SHOW_PANEL_A022_TITLE",
"costItemId": 224,
"beginTime": 0,
@ -34,14 +36,15 @@
"gachaType": 301,
"scheduleId": 903,
"bannerType": "EVENT",
"prefabPath": "GachaShowPanel_A094",
"titlePath": "UI_GACHA_SHOW_PANEL_A028_TITLE",
"prefabPath": "GachaShowPanel_A091",
"previewPrefabPath": "UI_Tab_GachaShowPanel_A091",
"titlePath": "UI_GACHA_SHOW_PANEL_A045_TITLE",
"costItemId": 223,
"beginTime": 0,
"endTime": 1924992000,
"sortId": 9998,
"rateUpItems4": [1025, 1043, 1068],
"rateUpItems5": [1037],
"rateUpItems4": [1067, 1039, 1031],
"rateUpItems5": [1069],
"weights5": [[1,80], [73,80], [90,10000]]
},
{
@ -49,14 +52,15 @@
"gachaType": 400,
"scheduleId": 923,
"bannerType": "EVENT",
"prefabPath": "GachaShowPanel_A095",
"titlePath": "UI_GACHA_SHOW_PANEL_A053_TITLE",
"prefabPath": "GachaShowPanel_A092",
"previewPrefabPath": "UI_Tab_GachaShowPanel_A092",
"titlePath": "UI_GACHA_SHOW_PANEL_A018_TITLE",
"costItemId": 223,
"beginTime": 0,
"endTime": 1924992000,
"sortId": 9998,
"rateUpItems4": [1025, 1043, 1068],
"rateUpItems5": [1054],
"rateUpItems4": [1067, 1039, 1031],
"rateUpItems5": [1030],
"fallbackItems5Pool2": [],
"weights5": [[1,80], [73,80], [90,10000]]
},
@ -65,14 +69,15 @@
"gachaType": 302,
"scheduleId": 913,
"bannerType": "WEAPON",
"prefabPath": "GachaShowPanel_A096",
"prefabPath": "GachaShowPanel_A093",
"previewPrefabPath": "UI_Tab_GachaShowPanel_A093",
"titlePath": "UI_GACHA_SHOW_PANEL_A013_TITLE",
"costItemId": 223,
"beginTime": 0,
"endTime": 1924992000,
"sortId": 9997,
"rateUpItems4":[11403, 15405, 13401, 14409, 12401],
"rateUpItems5": [15502, 14506],
"rateUpItems4":[15402, 11401, 13407, 14401, 12402],
"rateUpItems5": [15511, 13504],
"fallbackItems5Pool1": [],
"weights4": [[1,600], [7,600], [8,6600], [10,12600]],
"weights5": [[1,100], [62,100], [73,7800], [80,10000]],

View File

@ -207,8 +207,8 @@
"description": "Grants or removes a permission for a user"
},
"position": {
"success": "Coordinates: %s, %s, %s\nRotation%s, %s, %s\nScene ID: %s",
"description": "Gets position and rotation information"
"success": "Coordinates: %s, %s, %s\nScene ID: %s",
"description": "Get coordinates"
},
"quest": {
"added": "Quest %s added.",

View File

@ -207,8 +207,8 @@
"description": "Da o quita un permiso a un jugador"
},
"position": {
"success": "Coordenadas: %s, %s, %s\nRotación: %s, %s, %s\nID del escenario: %s",
"description": "Obtener información sobre ubicación y rotación"
"success": "Coordenadas: %s, %s, %s\nID del escenario: %s",
"description": "Da las coordenadas en el escenario actual"
},
"quest": {
"added": "Misión %s añadida.",

View File

@ -207,8 +207,8 @@
"description": "Accorde ou retire une permission a un utilisateur"
},
"position": {
"success": "Coordonées: %s, %s, %s\nRotatifs%s, %s, %s\nID de la scène: %s",
"description": "Obtient des informations de position et de rotation"
"success": "Coordonées: %s, %s, %s\nID de la scène: %s",
"description": "Obtenir vos coordonnées"
},
"quest": {
"added": "Quête %s ajoutée.",

View File

@ -207,8 +207,8 @@
"description": "ユーザーの権限を付与または削除します"
},
"position": {
"success": "座標%s、%s、%s\n回転%s、%s、%s\nシーンID: %s",
"description": "位置と回転情報を取得します"
"success": "座標: %s、%s、%s\nシーンID: %s",
"description": "座標を取得する"
},
"quest": {
"added": "クエスト %s が追加されました。",

View File

@ -207,8 +207,8 @@
"description": "사용자에게 권한을 부여하거나 제거합니다."
},
"position": {
"success": "좌표: %s, %s, %s\n회전:%s, %s, %s\nScene ID: %s",
"description": "위치 및 회전 정보를 가져옵니다"
"success": "좌표: %s, %s, %s\nScene ID: %s",
"description": "좌표를 출력합니다"
},
"quest": {
"added": "%s 퀘스트가 추가되었습니다.",

View File

@ -207,8 +207,8 @@
"description": "Dodaj lub usuń uprawnienia podanego gracza."
},
"position": {
"success": "Koordynaty: (%s, %s, %s).\nKrążyć%s, %s, %s\nID sceny: %s.",
"description": "Pobiera informacje o pozycji i obrocie"
"success": "Koordynaty: (%s, %s, %s).\nID sceny: %s.",
"description": "Pokaż gdzie znajduje się dany gracz."
},
"quest": {
"added": "Zadanie %s zostało dodane.",

View File

@ -207,8 +207,8 @@
"description": "Acordă sau elimină o permisiune de la un utilizator."
},
"position": {
"success": "Coordonate: %s, %s, %s\nGravitează%s, %s, %s\nScene ID: %s",
"description": "Obține informații despre poziție și rotație"
"success": "Coordonate: %s, %s, %s\nScene ID: %s",
"description": "Obțineți coordonatele"
},
"quest": {
"added": "Misiunea %s adăugată.",

View File

@ -207,7 +207,7 @@
"description": "Добавляет (add) или удаляет (remove) разрешения у пользователя"
},
"position": {
"success": "Координаты: %s, %s, %s\nПоворот:%s, %s, %s\nID сцены: %s",
"success": "Координаты: %s, %s, %s\nID сцены: %s",
"description": "Позволяет получить координаты"
},
"quest": {

View File

@ -181,7 +181,7 @@
},
"killall": {
"scene_not_found_in_player_world": "未在玩家世界中找到此场景。",
"kill_monsters_in_scene": "已杀死 %s 个怪物。 [场景ID: %s ]",
"kill_monsters_in_scene": "已杀死场景 %s 中的 %s 个怪物。",
"description": "杀死所有怪物"
},
"killCharacter": {
@ -207,8 +207,8 @@
"description": "添加或移除指定玩家的权限"
},
"position": {
"success": "坐标:%s, %s, %s\n旋转:%s, %s, %s\n场景ID%s",
"description": "获取所在位置和旋转信息"
"success": "坐标:%s, %s, %s\n场景ID%s",
"description": "获取所在位置"
},
"quest": {
"added": "已添加任务 %s。",
@ -330,7 +330,7 @@
"weather": {
"success": "已设置天气ID 为 %s气候类型为 %s。",
"status": "当前天气ID 为 %s气候类型为 %s。",
"description": "更改天气ID和气候类型。\n\t天气ID可以在 ./Resources/ExcelBinOutput/WeatherExcelConfigData.json 中找到。\n\t气候类型sunny(晴天), cloudy(多云), rain(雨), thunderstorm(雷雨), snow(雪), mist(雾)"
"description": "更改天气ID和气候类型。天气ID可以在 ./Resources/ExcelBinOutput/WeatherExcelConfigData.json 中找到。\n\t气候类型sunny(晴天), cloudy(多云), rain(雨), thunderstorm(雷雨), snow(雪), mist(雾)"
},
"ban": {
"success": "成功封禁玩家。",
@ -384,19 +384,19 @@
}
},
"plugin": {
"directory_failed": "无法创建插件目录:",
"unable_to_load": "无法加载插件。",
"invalid_config": "插件:%s 的配置文件无效。",
"invalid_main_class": "插件:%s 的主类无效。",
"missing_config": "插件:%s 缺少有效的配置文件。",
"failed_to_load_plugin": "无法加载插件:%s",
"failed_to_load": "无法加载插件。",
"failed_to_load_dependencies": "无法加载插件依赖。",
"loading_plugin": "正在加载插件:%s",
"failed_add_id": "无法添加插件标识符:%s",
"enabling_plugin": "启用插件:%s",
"enabling_failed": "无法启用插件:%s",
"disabling_plugin": "正在禁用插件:%s",
"disabling_failed": "无法禁用插件:%s"
"directory_failed": "🇺🇸Failed to create plugins directory: ",
"unable_to_load": "🇺🇸Unable to load plugin.",
"invalid_config": "🇺🇸Plugin %s has an invalid config file.",
"invalid_main_class": "🇺🇸Plugin %s has an invalid main class.",
"missing_config": "🇺🇸Plugin %s lacks a valid config file.",
"failed_to_load_plugin": "🇺🇸Failed to load plugin: %s",
"failed_to_load": "🇺🇸Failed to load a plugin.",
"failed_to_load_dependencies": "🇺🇸Failed to load plugins with dependencies.",
"loading_plugin": "🇺🇸Loading plugin: %s",
"failed_add_id": "🇺🇸Failed to add plugin identifier: %s",
"enabling_plugin": "🇺🇸Enabling plugin: %s",
"enabling_failed": "🇺🇸Failed to enable plugin: %s",
"disabling_plugin": "🇺🇸Disabling plugin: %s",
"disabling_failed": "🇺🇸Failed to disable plugin: %s"
}
}

View File

@ -207,8 +207,8 @@
"description": "指派或移除指定玩家的權限。"
},
"position": {
"success": "坐標:%s, %s, %s\n旋轉%s, %s, %s\n場景ID%s",
"description": "獲取所在坐標和旋轉信息"
"success": "座標%s, %s, %s\n場景ID%s",
"description": "獲取目前所在位置的座標。"
},
"quest": {
"added": "已添加任務 %s",