Update some protos and add /giveall skins command

This commit is contained in:
Melledy
2026-04-24 03:32:01 -07:00
parent 1a4c3e1b00
commit 24fd219835
21 changed files with 347 additions and 232 deletions

View File

@@ -33,8 +33,8 @@
### Compiling the server
1. Open your system terminal, and compile the server with `./gradlew jar`
2. Create a folder named `resources` in your server directory
3. Download the `Config`, `TextMap`, and `ExcelBin` folders from [https://github.com/Dimbreath/StarRailData](https://github.com/Dimbreath/StarRailData) and place them into your resources folder.
4. Run the server with `java -jar LunarCore.jar` from your system terminal. Lunar Core comes with a built-in internal MongoDB server for its database, so no Mongodb installation is required. However, it is highly recommended to install Mongodb anyway.
3. Download the `Config`, `TextMap`, and `ExcelBin` folders from [https://github.com/Dimbreath/StarRailData](https://gitlab.com/Dimbreath/turnbasedgamedata) and place them into your resources folder.
4. Run the server with `java -jar LunarCore.jar` from your system terminal. Lunar Core comes with a built-in internal MongoDB server for its database, so no Mongodb installation is required. However, it is highly recommended to install Mongodb anyway.
### Connecting with the client (Fiddler method)
1. **Log in with the client to an official server and Hoyoverse account at least once to download game data.**
@@ -66,21 +66,27 @@ Server commands can be run in the server console or in-game. There is a dummy us
```
/account {create | delete} [username] (reserved player uid). Creates or deletes an account.
/avatar lv(level) p(ascension) r(eidolon) s(skill levels). Sets the current avatar's properties.
/clear {relics | lightcones | materials | items}. Removes filtered items from the player inventory.
/gender {male | female}. Sets the player's gender.
/give [item id] x[amount] lv[number]. Gives the targetted player an item.
/giveall {materials | avatars | lightcones | relics}. Gives the targeted player items.
/avatar {cur | all | lineup} lv(level) p(ascension) e(eidolon) s(skill levels). Sets the current avatar's properties
/buildavatar [{avatar id} | cur | all | lineup]. Creates a set of relics for the selected avatars
/clear {relics | lightcones | materials | items} lv(filter level). Removes filter items from the targeted player's inventory.
/energy. Refills all characters energy in current lineup.
/gender {male | female}. Sets the player gender.
/give [item id] x(amount) lv(level) r(rank) p(promotion). Gives the targeted player an item.
/giveall {materials | avatars | lightcones | relics | usables} lv(level). Gives the targeted player items.
/heal. Heals your avatars.
/help. Displays a list of available commands.
/kick @[player id]. Kicks a player from the server.
/lineup [avatar ids]. USE AT YOUR OWN RISK. Sets your current lineup with the specified avatar ids.
/mail [content]. Sends the targeted player a system mail.
/permission {add | remove | clear} [permission]. Gives/removes a permission from the targeted player.
/refill. Refill your skill points in open world.
/refill - refill your skill points in open world.
/reload. Reloads the server config.
/scene [scene id] [floor id]. Teleports the player to the specified scene.
/setlevel [level] - Sets the targeted player's trailblazer level.
/spawn [npc monster id/prop id] s[stage id] x[amount] lv[level] r[radius] <battle monster ids...>. Spawns a monster or prop near the targeted player.
/stop. Stops the server
/unstuck @[player id]. Unstucks an offline player if they're in a scene that doesn't load.
/status. Displays the status of the server.
/stop - Stops the server
/tp [x] [y] [z]. Teleports the player to the specified coordinates.
/unstuck @[player id]. Unstucks an offline player if theyre in a scene that doesnt load.
/worldlevel [world level]. Sets the targeted player's equilibrium level.
```

View File

@@ -115,9 +115,9 @@ public final class GateserverOuterClass {
private final Utf8String mdkResVersion = Utf8String.newEmptyInstance();
/**
* <code>optional string asset_bundle_url_2 = 1417;</code>
* <code>optional string base_asset_bundle_url = 1417;</code>
*/
private final Utf8String assetBundleUrl2 = Utf8String.newEmptyInstance();
private final Utf8String baseAssetBundleUrl = Utf8String.newEmptyInstance();
/**
* <code>optional string ifix_url = 1488;</code>
@@ -1090,67 +1090,67 @@ public final class GateserverOuterClass {
}
/**
* <code>optional string asset_bundle_url_2 = 1417;</code>
* @return whether the assetBundleUrl2 field is set
* <code>optional string base_asset_bundle_url = 1417;</code>
* @return whether the baseAssetBundleUrl field is set
*/
public boolean hasAssetBundleUrl2() {
public boolean hasBaseAssetBundleUrl() {
return (bitField0_ & 0x00080000) != 0;
}
/**
* <code>optional string asset_bundle_url_2 = 1417;</code>
* <code>optional string base_asset_bundle_url = 1417;</code>
* @return this
*/
public Gateserver clearAssetBundleUrl2() {
public Gateserver clearBaseAssetBundleUrl() {
bitField0_ &= ~0x00080000;
assetBundleUrl2.clear();
baseAssetBundleUrl.clear();
return this;
}
/**
* <code>optional string asset_bundle_url_2 = 1417;</code>
* @return the assetBundleUrl2
* <code>optional string base_asset_bundle_url = 1417;</code>
* @return the baseAssetBundleUrl
*/
public String getAssetBundleUrl2() {
return assetBundleUrl2.getString();
public String getBaseAssetBundleUrl() {
return baseAssetBundleUrl.getString();
}
/**
* <code>optional string asset_bundle_url_2 = 1417;</code>
* @return internal {@code Utf8String} representation of assetBundleUrl2 for reading
* <code>optional string base_asset_bundle_url = 1417;</code>
* @return internal {@code Utf8String} representation of baseAssetBundleUrl for reading
*/
public Utf8String getAssetBundleUrl2Bytes() {
return this.assetBundleUrl2;
public Utf8String getBaseAssetBundleUrlBytes() {
return this.baseAssetBundleUrl;
}
/**
* <code>optional string asset_bundle_url_2 = 1417;</code>
* @return internal {@code Utf8String} representation of assetBundleUrl2 for modifications
* <code>optional string base_asset_bundle_url = 1417;</code>
* @return internal {@code Utf8String} representation of baseAssetBundleUrl for modifications
*/
public Utf8String getMutableAssetBundleUrl2Bytes() {
public Utf8String getMutableBaseAssetBundleUrlBytes() {
bitField0_ |= 0x00080000;
return this.assetBundleUrl2;
return this.baseAssetBundleUrl;
}
/**
* <code>optional string asset_bundle_url_2 = 1417;</code>
* @param value the assetBundleUrl2 to set
* <code>optional string base_asset_bundle_url = 1417;</code>
* @param value the baseAssetBundleUrl to set
* @return this
*/
public Gateserver setAssetBundleUrl2(final CharSequence value) {
public Gateserver setBaseAssetBundleUrl(final CharSequence value) {
bitField0_ |= 0x00080000;
assetBundleUrl2.copyFrom(value);
baseAssetBundleUrl.copyFrom(value);
return this;
}
/**
* <code>optional string asset_bundle_url_2 = 1417;</code>
* @param value the assetBundleUrl2 to set
* <code>optional string base_asset_bundle_url = 1417;</code>
* @param value the baseAssetBundleUrl to set
* @return this
*/
public Gateserver setAssetBundleUrl2(final Utf8String value) {
public Gateserver setBaseAssetBundleUrl(final Utf8String value) {
bitField0_ |= 0x00080000;
assetBundleUrl2.copyFrom(value);
baseAssetBundleUrl.copyFrom(value);
return this;
}
@@ -1243,7 +1243,7 @@ public final class GateserverOuterClass {
clientSecretKey.copyFrom(other.clientSecretKey);
ifixVersion.copyFrom(other.ifixVersion);
mdkResVersion.copyFrom(other.mdkResVersion);
assetBundleUrl2.copyFrom(other.assetBundleUrl2);
baseAssetBundleUrl.copyFrom(other.baseAssetBundleUrl);
ifixUrl.copyFrom(other.ifixUrl);
}
return this;
@@ -1312,8 +1312,8 @@ public final class GateserverOuterClass {
if (other.hasMdkResVersion()) {
getMutableMdkResVersionBytes().copyFrom(other.mdkResVersion);
}
if (other.hasAssetBundleUrl2()) {
getMutableAssetBundleUrl2Bytes().copyFrom(other.assetBundleUrl2);
if (other.hasBaseAssetBundleUrl()) {
getMutableBaseAssetBundleUrlBytes().copyFrom(other.baseAssetBundleUrl);
}
if (other.hasIfixUrl()) {
getMutableIfixUrlBytes().copyFrom(other.ifixUrl);
@@ -1347,7 +1347,7 @@ public final class GateserverOuterClass {
clientSecretKey.clear();
ifixVersion.clear();
mdkResVersion.clear();
assetBundleUrl2.clear();
baseAssetBundleUrl.clear();
ifixUrl.clear();
return this;
}
@@ -1368,7 +1368,7 @@ public final class GateserverOuterClass {
clientSecretKey.clear();
ifixVersion.clear();
mdkResVersion.clear();
assetBundleUrl2.clear();
baseAssetBundleUrl.clear();
ifixUrl.clear();
return this;
}
@@ -1402,7 +1402,7 @@ public final class GateserverOuterClass {
&& (!hasClientSecretKey() || clientSecretKey.equals(other.clientSecretKey))
&& (!hasIfixVersion() || ifixVersion.equals(other.ifixVersion))
&& (!hasMdkResVersion() || mdkResVersion.equals(other.mdkResVersion))
&& (!hasAssetBundleUrl2() || assetBundleUrl2.equals(other.assetBundleUrl2))
&& (!hasBaseAssetBundleUrl() || baseAssetBundleUrl.equals(other.baseAssetBundleUrl))
&& (!hasIfixUrl() || ifixUrl.equals(other.ifixUrl));
}
@@ -1486,7 +1486,7 @@ public final class GateserverOuterClass {
}
if ((bitField0_ & 0x00080000) != 0) {
output.writeRawLittleEndian16((short) 22730);
output.writeStringNoTag(assetBundleUrl2);
output.writeStringNoTag(baseAssetBundleUrl);
}
if ((bitField0_ & 0x00100000) != 0) {
output.writeRawLittleEndian16((short) 23938);
@@ -1555,7 +1555,7 @@ public final class GateserverOuterClass {
size += 2 + ProtoSink.computeStringSizeNoTag(mdkResVersion);
}
if ((bitField0_ & 0x00080000) != 0) {
size += 2 + ProtoSink.computeStringSizeNoTag(assetBundleUrl2);
size += 2 + ProtoSink.computeStringSizeNoTag(baseAssetBundleUrl);
}
if ((bitField0_ & 0x00100000) != 0) {
size += 2 + ProtoSink.computeStringSizeNoTag(ifixUrl);
@@ -1742,8 +1742,8 @@ public final class GateserverOuterClass {
}
}
case 11338: {
// assetBundleUrl2
input.readString(assetBundleUrl2);
// baseAssetBundleUrl
input.readString(baseAssetBundleUrl);
bitField0_ |= 0x00080000;
tag = input.readTag();
if (tag != 11906) {
@@ -1834,7 +1834,7 @@ public final class GateserverOuterClass {
output.writeString(FieldNames.mdkResVersion, mdkResVersion);
}
if ((bitField0_ & 0x00080000) != 0) {
output.writeString(FieldNames.assetBundleUrl2, assetBundleUrl2);
output.writeString(FieldNames.baseAssetBundleUrl, baseAssetBundleUrl);
}
if ((bitField0_ & 0x00100000) != 0) {
output.writeString(FieldNames.ifixUrl, ifixUrl);
@@ -2066,11 +2066,11 @@ public final class GateserverOuterClass {
}
break;
}
case -247376043:
case -1775001516: {
if (input.isAtField(FieldNames.assetBundleUrl2)) {
case 436849070:
case -324796273: {
if (input.isAtField(FieldNames.baseAssetBundleUrl)) {
if (!input.trySkipNullValue()) {
input.readString(assetBundleUrl2);
input.readString(baseAssetBundleUrl);
bitField0_ |= 0x00080000;
}
} else {
@@ -2180,7 +2180,7 @@ public final class GateserverOuterClass {
static final FieldName mdkResVersion = FieldName.forField("mdkResVersion", "mdk_res_version");
static final FieldName assetBundleUrl2 = FieldName.forField("assetBundleUrl2", "asset_bundle_url_2");
static final FieldName baseAssetBundleUrl = FieldName.forField("baseAssetBundleUrl", "base_asset_bundle_url");
static final FieldName ifixUrl = FieldName.forField("ifixUrl", "ifix_url");
}

View File

@@ -20,16 +20,12 @@ public final class GetFriendLoginInfoScRspOuterClass {
private static final long serialVersionUID = 0L;
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 13;</code>
* <code>optional uint32 retcode = 2;</code>
*/
private int retcode;
/**
* <code>repeated uint32 friend_uid_list = 7;</code>
* <code>repeated uint32 friend_uid_list = 13;</code>
*/
private final RepeatedInt friendUidList = RepeatedInt.newEmptyInstance();
@@ -44,11 +40,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 13;</code>
* <code>optional uint32 retcode = 2;</code>
* @return whether the retcode field is set
*/
public boolean hasRetcode() {
@@ -56,11 +48,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 13;</code>
* <code>optional uint32 retcode = 2;</code>
* @return this
*/
public GetFriendLoginInfoScRsp clearRetcode() {
@@ -70,11 +58,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 13;</code>
* <code>optional uint32 retcode = 2;</code>
* @return the retcode
*/
public int getRetcode() {
@@ -82,11 +66,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 13;</code>
* <code>optional uint32 retcode = 2;</code>
* @param value the retcode to set
* @return this
*/
@@ -97,7 +77,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <code>repeated uint32 friend_uid_list = 7;</code>
* <code>repeated uint32 friend_uid_list = 13;</code>
* @return whether the friendUidList field is set
*/
public boolean hasFriendUidList() {
@@ -105,7 +85,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <code>repeated uint32 friend_uid_list = 7;</code>
* <code>repeated uint32 friend_uid_list = 13;</code>
* @return this
*/
public GetFriendLoginInfoScRsp clearFriendUidList() {
@@ -115,7 +95,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <code>repeated uint32 friend_uid_list = 7;</code>
* <code>repeated uint32 friend_uid_list = 13;</code>
*
* This method returns the internal storage object without modifying any has state.
* The returned object should not be modified and be treated as read-only.
@@ -129,7 +109,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <code>repeated uint32 friend_uid_list = 7;</code>
* <code>repeated uint32 friend_uid_list = 13;</code>
*
* This method returns the internal storage object and sets the corresponding
* has state. The returned object will become part of this message and its
@@ -143,7 +123,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <code>repeated uint32 friend_uid_list = 7;</code>
* <code>repeated uint32 friend_uid_list = 13;</code>
* @param value the friendUidList to add
* @return this
*/
@@ -154,7 +134,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
}
/**
* <code>repeated uint32 friend_uid_list = 7;</code>
* <code>repeated uint32 friend_uid_list = 13;</code>
* @param values the friendUidList to add
* @return this
*/
@@ -230,12 +210,12 @@ public final class GetFriendLoginInfoScRspOuterClass {
@Override
public void writeTo(final ProtoSink output) throws IOException {
if ((bitField0_ & 0x00000001) != 0) {
output.writeRawByte((byte) 104);
output.writeRawByte((byte) 16);
output.writeUInt32NoTag(retcode);
}
if ((bitField0_ & 0x00000002) != 0) {
for (int i = 0; i < friendUidList.length(); i++) {
output.writeRawByte((byte) 56);
output.writeRawByte((byte) 104);
output.writeUInt32NoTag(friendUidList.array()[i]);
}
}
@@ -260,16 +240,16 @@ public final class GetFriendLoginInfoScRspOuterClass {
int tag = input.readTag();
while (true) {
switch (tag) {
case 104: {
case 16: {
// retcode
retcode = input.readUInt32();
bitField0_ |= 0x00000001;
tag = input.readTag();
if (tag != 58) {
if (tag != 106) {
break;
}
}
case 58: {
case 106: {
// friendUidList [packed=true]
input.readPackedUInt32(friendUidList, tag);
bitField0_ |= 0x00000002;
@@ -288,7 +268,7 @@ public final class GetFriendLoginInfoScRspOuterClass {
tag = input.readTag();
break;
}
case 56: {
case 104: {
// friendUidList [packed=false]
tag = input.readRepeatedUInt32(friendUidList, tag);
bitField0_ |= 0x00000002;

View File

@@ -24,10 +24,6 @@ public final class SceneEntityInfoOuterClass {
private int instId;
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
*/
private int groupId;
@@ -115,10 +111,6 @@ public final class SceneEntityInfoOuterClass {
}
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
* @return whether the groupId field is set
*/
@@ -127,10 +119,6 @@ public final class SceneEntityInfoOuterClass {
}
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
* @return this
*/
@@ -141,10 +129,6 @@ public final class SceneEntityInfoOuterClass {
}
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
* @return the groupId
*/
@@ -153,10 +137,6 @@ public final class SceneEntityInfoOuterClass {
}
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
* @param value the groupId to set
* @return this

View File

@@ -29,10 +29,6 @@ public final class SetGroupCustomSaveDataCsReqOuterClass {
private int entryId;
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
*/
private int groupId;
@@ -106,10 +102,6 @@ public final class SetGroupCustomSaveDataCsReqOuterClass {
}
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
* @return whether the groupId field is set
*/
@@ -118,10 +110,6 @@ public final class SetGroupCustomSaveDataCsReqOuterClass {
}
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
* @return this
*/
@@ -132,10 +120,6 @@ public final class SetGroupCustomSaveDataCsReqOuterClass {
}
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
* @return the groupId
*/
@@ -144,10 +128,6 @@ public final class SetGroupCustomSaveDataCsReqOuterClass {
}
/**
* <pre>
* FJNHDHOHBCL
* </pre>
*
* <code>optional uint32 group_id = 13;</code>
* @param value the groupId to set
* @return this

View File

@@ -23,28 +23,16 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
private static final long serialVersionUID = 0L;
/**
* <pre>
* JODPMEDMPJK
* </pre>
*
* <code>optional uint32 entry_id = 4;</code>
*/
private int entryId;
/**
* <pre>
* HEDLHGFPCGG
* </pre>
*
* <code>optional uint32 group_id = 11;</code>
*/
private int groupId;
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 15;</code>
*/
private int retcode;
@@ -64,10 +52,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* JODPMEDMPJK
* </pre>
*
* <code>optional uint32 entry_id = 4;</code>
* @return whether the entryId field is set
*/
@@ -76,10 +60,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* JODPMEDMPJK
* </pre>
*
* <code>optional uint32 entry_id = 4;</code>
* @return this
*/
@@ -90,10 +70,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* JODPMEDMPJK
* </pre>
*
* <code>optional uint32 entry_id = 4;</code>
* @return the entryId
*/
@@ -102,10 +78,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* JODPMEDMPJK
* </pre>
*
* <code>optional uint32 entry_id = 4;</code>
* @param value the entryId to set
* @return this
@@ -117,10 +89,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* HEDLHGFPCGG
* </pre>
*
* <code>optional uint32 group_id = 11;</code>
* @return whether the groupId field is set
*/
@@ -129,10 +97,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* HEDLHGFPCGG
* </pre>
*
* <code>optional uint32 group_id = 11;</code>
* @return this
*/
@@ -143,10 +107,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* HEDLHGFPCGG
* </pre>
*
* <code>optional uint32 group_id = 11;</code>
* @return the groupId
*/
@@ -155,10 +115,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* HEDLHGFPCGG
* </pre>
*
* <code>optional uint32 group_id = 11;</code>
* @param value the groupId to set
* @return this
@@ -170,10 +126,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 15;</code>
* @return whether the retcode field is set
*/
@@ -182,10 +134,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 15;</code>
* @return this
*/
@@ -196,10 +144,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 15;</code>
* @return the retcode
*/
@@ -208,10 +152,6 @@ public final class SetGroupCustomSaveDataScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 15;</code>
* @param value the retcode to set
* @return this

View File

@@ -24,6 +24,11 @@ public final class StartChallengePeakCsReqOuterClass {
*/
private int challengePeakId;
/**
* <code>optional uint32 challenge_peak_buff_id = 6;</code>
*/
private int challengePeakBuffId;
/**
* <code>repeated uint32 challenge_avatar_id_list = 15;</code>
*/
@@ -76,12 +81,49 @@ public final class StartChallengePeakCsReqOuterClass {
return this;
}
/**
* <code>optional uint32 challenge_peak_buff_id = 6;</code>
* @return whether the challengePeakBuffId field is set
*/
public boolean hasChallengePeakBuffId() {
return (bitField0_ & 0x00000002) != 0;
}
/**
* <code>optional uint32 challenge_peak_buff_id = 6;</code>
* @return this
*/
public StartChallengePeakCsReq clearChallengePeakBuffId() {
bitField0_ &= ~0x00000002;
challengePeakBuffId = 0;
return this;
}
/**
* <code>optional uint32 challenge_peak_buff_id = 6;</code>
* @return the challengePeakBuffId
*/
public int getChallengePeakBuffId() {
return challengePeakBuffId;
}
/**
* <code>optional uint32 challenge_peak_buff_id = 6;</code>
* @param value the challengePeakBuffId to set
* @return this
*/
public StartChallengePeakCsReq setChallengePeakBuffId(final int value) {
bitField0_ |= 0x00000002;
challengePeakBuffId = value;
return this;
}
/**
* <code>repeated uint32 challenge_avatar_id_list = 15;</code>
* @return whether the challengeAvatarIdList field is set
*/
public boolean hasChallengeAvatarIdList() {
return (bitField0_ & 0x00000002) != 0;
return (bitField0_ & 0x00000004) != 0;
}
/**
@@ -89,7 +131,7 @@ public final class StartChallengePeakCsReqOuterClass {
* @return this
*/
public StartChallengePeakCsReq clearChallengeAvatarIdList() {
bitField0_ &= ~0x00000002;
bitField0_ &= ~0x00000004;
challengeAvatarIdList.clear();
return this;
}
@@ -118,7 +160,7 @@ public final class StartChallengePeakCsReqOuterClass {
* @return internal storage object for modifications
*/
public RepeatedInt getMutableChallengeAvatarIdList() {
bitField0_ |= 0x00000002;
bitField0_ |= 0x00000004;
return challengeAvatarIdList;
}
@@ -128,7 +170,7 @@ public final class StartChallengePeakCsReqOuterClass {
* @return this
*/
public StartChallengePeakCsReq addChallengeAvatarIdList(final int value) {
bitField0_ |= 0x00000002;
bitField0_ |= 0x00000004;
challengeAvatarIdList.add(value);
return this;
}
@@ -139,7 +181,7 @@ public final class StartChallengePeakCsReqOuterClass {
* @return this
*/
public StartChallengePeakCsReq addAllChallengeAvatarIdList(final int... values) {
bitField0_ |= 0x00000002;
bitField0_ |= 0x00000004;
challengeAvatarIdList.addAll(values);
return this;
}
@@ -150,6 +192,7 @@ public final class StartChallengePeakCsReqOuterClass {
if ((bitField0_ | other.bitField0_) != 0) {
bitField0_ = other.bitField0_;
challengePeakId = other.challengePeakId;
challengePeakBuffId = other.challengePeakBuffId;
challengeAvatarIdList.copyFrom(other.challengeAvatarIdList);
}
return this;
@@ -164,6 +207,9 @@ public final class StartChallengePeakCsReqOuterClass {
if (other.hasChallengePeakId()) {
setChallengePeakId(other.challengePeakId);
}
if (other.hasChallengePeakBuffId()) {
setChallengePeakBuffId(other.challengePeakBuffId);
}
if (other.hasChallengeAvatarIdList()) {
getMutableChallengeAvatarIdList().addAll(other.challengeAvatarIdList);
}
@@ -178,6 +224,7 @@ public final class StartChallengePeakCsReqOuterClass {
cachedSize = -1;
bitField0_ = 0;
challengePeakId = 0;
challengePeakBuffId = 0;
challengeAvatarIdList.clear();
return this;
}
@@ -204,6 +251,7 @@ public final class StartChallengePeakCsReqOuterClass {
StartChallengePeakCsReq other = (StartChallengePeakCsReq) o;
return bitField0_ == other.bitField0_
&& (!hasChallengePeakId() || challengePeakId == other.challengePeakId)
&& (!hasChallengePeakBuffId() || challengePeakBuffId == other.challengePeakBuffId)
&& (!hasChallengeAvatarIdList() || challengeAvatarIdList.equals(other.challengeAvatarIdList));
}
@@ -214,6 +262,10 @@ public final class StartChallengePeakCsReqOuterClass {
output.writeUInt32NoTag(challengePeakId);
}
if ((bitField0_ & 0x00000002) != 0) {
output.writeRawByte((byte) 48);
output.writeUInt32NoTag(challengePeakBuffId);
}
if ((bitField0_ & 0x00000004) != 0) {
for (int i = 0; i < challengeAvatarIdList.length(); i++) {
output.writeRawByte((byte) 120);
output.writeUInt32NoTag(challengeAvatarIdList.array()[i]);
@@ -228,6 +280,9 @@ public final class StartChallengePeakCsReqOuterClass {
size += 1 + ProtoSink.computeUInt32SizeNoTag(challengePeakId);
}
if ((bitField0_ & 0x00000002) != 0) {
size += 1 + ProtoSink.computeUInt32SizeNoTag(challengePeakBuffId);
}
if ((bitField0_ & 0x00000004) != 0) {
size += (1 * challengeAvatarIdList.length()) + ProtoSink.computeRepeatedUInt32SizeNoTag(challengeAvatarIdList);
}
return size;
@@ -245,6 +300,15 @@ public final class StartChallengePeakCsReqOuterClass {
challengePeakId = input.readUInt32();
bitField0_ |= 0x00000001;
tag = input.readTag();
if (tag != 48) {
break;
}
}
case 48: {
// challengePeakBuffId
challengePeakBuffId = input.readUInt32();
bitField0_ |= 0x00000002;
tag = input.readTag();
if (tag != 122) {
break;
}
@@ -252,7 +316,7 @@ public final class StartChallengePeakCsReqOuterClass {
case 122: {
// challengeAvatarIdList [packed=true]
input.readPackedUInt32(challengeAvatarIdList, tag);
bitField0_ |= 0x00000002;
bitField0_ |= 0x00000004;
tag = input.readTag();
if (tag != 0) {
break;
@@ -271,7 +335,7 @@ public final class StartChallengePeakCsReqOuterClass {
case 120: {
// challengeAvatarIdList [packed=false]
tag = input.readRepeatedUInt32(challengeAvatarIdList, tag);
bitField0_ |= 0x00000002;
bitField0_ |= 0x00000004;
break;
}
}
@@ -285,6 +349,9 @@ public final class StartChallengePeakCsReqOuterClass {
output.writeUInt32(FieldNames.challengePeakId, challengePeakId);
}
if ((bitField0_ & 0x00000002) != 0) {
output.writeUInt32(FieldNames.challengePeakBuffId, challengePeakBuffId);
}
if ((bitField0_ & 0x00000004) != 0) {
output.writeRepeatedUInt32(FieldNames.challengeAvatarIdList, challengeAvatarIdList);
}
output.endObject();
@@ -309,12 +376,24 @@ public final class StartChallengePeakCsReqOuterClass {
}
break;
}
case 1004602192:
case 1580927875: {
if (input.isAtField(FieldNames.challengePeakBuffId)) {
if (!input.trySkipNullValue()) {
challengePeakBuffId = input.readUInt32();
bitField0_ |= 0x00000002;
}
} else {
input.skipUnknownField();
}
break;
}
case 836175637:
case 1831834552: {
if (input.isAtField(FieldNames.challengeAvatarIdList)) {
if (!input.trySkipNullValue()) {
input.readRepeatedUInt32(challengeAvatarIdList);
bitField0_ |= 0x00000002;
bitField0_ |= 0x00000004;
}
} else {
input.skipUnknownField();
@@ -376,6 +455,8 @@ public final class StartChallengePeakCsReqOuterClass {
static class FieldNames {
static final FieldName challengePeakId = FieldName.forField("challengePeakId", "challenge_peak_id");
static final FieldName challengePeakBuffId = FieldName.forField("challengePeakBuffId", "challenge_peak_buff_id");
static final FieldName challengeAvatarIdList = FieldName.forField("challengeAvatarIdList", "challenge_avatar_id_list");
}
}

View File

@@ -23,6 +23,10 @@ public final class SwitchHandUpdateScRspOuterClass {
private static final long serialVersionUID = 0L;
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
*/
private int retcode;
@@ -60,6 +64,10 @@ public final class SwitchHandUpdateScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return whether the retcode field is set
*/
@@ -68,6 +76,10 @@ public final class SwitchHandUpdateScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return this
*/
@@ -78,6 +90,10 @@ public final class SwitchHandUpdateScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return the retcode
*/
@@ -86,6 +102,10 @@ public final class SwitchHandUpdateScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @param value the retcode to set
* @return this

View File

@@ -20,6 +20,10 @@ public final class TakeMailAttachmentScRspOuterClass {
private static final long serialVersionUID = 0L;
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
*/
private int retcode;
@@ -45,6 +49,10 @@ public final class TakeMailAttachmentScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return whether the retcode field is set
*/
@@ -53,6 +61,10 @@ public final class TakeMailAttachmentScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return this
*/
@@ -63,6 +75,10 @@ public final class TakeMailAttachmentScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return the retcode
*/
@@ -71,6 +87,10 @@ public final class TakeMailAttachmentScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @param value the retcode to set
* @return this

View File

@@ -24,6 +24,10 @@ public final class TextJoinQueryScRspOuterClass {
private static final long serialVersionUID = 0L;
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
*/
private int retcode;
@@ -52,6 +56,10 @@ public final class TextJoinQueryScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
* @return whether the retcode field is set
*/
@@ -60,6 +68,10 @@ public final class TextJoinQueryScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
* @return this
*/
@@ -70,6 +82,10 @@ public final class TextJoinQueryScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
* @return the retcode
*/
@@ -78,6 +94,10 @@ public final class TextJoinQueryScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
* @param value the retcode to set
* @return this

View File

@@ -20,6 +20,10 @@ public final class UnlockAvatarPathScRspOuterClass {
private static final long serialVersionUID = 0L;
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
*/
private int retcode;
@@ -50,6 +54,10 @@ public final class UnlockAvatarPathScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
* @return whether the retcode field is set
*/
@@ -58,6 +66,10 @@ public final class UnlockAvatarPathScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
* @return this
*/
@@ -68,6 +80,10 @@ public final class UnlockAvatarPathScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
* @return the retcode
*/
@@ -76,6 +92,10 @@ public final class UnlockAvatarPathScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 12;</code>
* @param value the retcode to set
* @return this

View File

@@ -19,6 +19,10 @@ public final class UnlockTutorialScRspOuterClass {
private static final long serialVersionUID = 0L;
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
*/
private int retcode;
@@ -39,6 +43,10 @@ public final class UnlockTutorialScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return whether the retcode field is set
*/
@@ -47,6 +55,10 @@ public final class UnlockTutorialScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return this
*/
@@ -57,6 +69,10 @@ public final class UnlockTutorialScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return the retcode
*/
@@ -65,6 +81,10 @@ public final class UnlockTutorialScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @param value the retcode to set
* @return this

View File

@@ -20,6 +20,10 @@ public final class UpdateMarkChestScRspOuterClass {
private static final long serialVersionUID = 0L;
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
*/
private int retcode;
@@ -50,6 +54,10 @@ public final class UpdateMarkChestScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return whether the retcode field is set
*/
@@ -58,6 +66,10 @@ public final class UpdateMarkChestScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return this
*/
@@ -68,6 +80,10 @@ public final class UpdateMarkChestScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @return the retcode
*/
@@ -76,6 +92,10 @@ public final class UpdateMarkChestScRspOuterClass {
}
/**
* <pre>
* JDLHKMNFDBD
* </pre>
*
* <code>optional uint32 retcode = 1;</code>
* @param value the retcode to set
* @return this

View File

@@ -2,6 +2,7 @@ package emu.lunarcore;
public class HotfixData {
public String assetBundleUrl = "";
public String baseAssetBundleUrl = "";
public String exResourceUrl = "";
public String luaUrl = "";
public String ifixUrl = "";

View File

@@ -147,6 +147,14 @@ public class GiveAllCommand implements CommandHandler {
// Send message
args.sendMessage("Giving " + target.getName() + " all avatars");
}
case "skins" -> {
for (var excel : GameData.getAvatarSkinExcelMap().values()) {
target.getUnlocks().addAvatarSkin(excel.getId());
}
// Send message
args.sendMessage("Giving " + target.getName() + " all avatar skins");
}
case "unlocks", "usables", "icons" -> {
// Add head icons - Duplicates are handled automatically
for (var excel : GameData.getPlayerIconExcelMap().values()) {

View File

@@ -52,6 +52,7 @@ public class GameData {
@Getter private static ExcelMap<TextJoinExcel> textJoinExcelMap = new ExcelMap<>();
@Getter private static ExcelMap<ChatBubbleExcel> chatBubbleExcelMap = new ExcelMap<>();
@Getter private static ExcelMap<PhoneThemeExcel> phoneThemeExcelMap = new ExcelMap<>();
@Getter private static ExcelMap<PlayerOutfitBaseExcel> playerOutfitBaseExcelMap = new ExcelMap<>();
@Getter private static ExcelMap<PetExcel> petExcelMap = new ExcelMap<>();
@Getter private static ExcelMap<ContentPackageExcel> contentPackageExcelMap = new ExcelMap<>();
@Getter private static ExcelMap<OfferingTypeExcel> offeringTypeExcelMap = new ExcelMap<>();

View File

@@ -52,9 +52,6 @@ public class ResourceLoader {
// Load maze abilities
loadMazeAbilities();
// Load mission infos
loadMissionInfo();
// Done
loaded = true;
LunarCore.getLogger().info("Resource loading complete");
@@ -414,33 +411,5 @@ public class ResourceLoader {
// Done
LunarCore.getLogger().info("Loaded " + count + " maze abilities for avatars.");
}
private static void loadMissionInfo() {
int count = 0;
int countTask = 0;
for (Integer mMissionId : GameData.getMainMissionIds()) {
File file = new File(LunarCore.getConfig().getResourceDir() + "/Config/Level/Mission/" + mMissionId + "/" + "MissionInfo_" + mMissionId + ".json");
if (!file.exists()) continue;
try (FileReader reader = new FileReader(file)) {
MissionInfo info = gson.fromJson(reader, MissionInfo.class);
for (MissionInfo.SubMissionInfo setme : info.getSubMissionList()) {
File taskFile = new File(LunarCore.getConfig().getResourceDir() + "/Config/Level/Mission/" + setme.getMainMissionID() + "/" + "Mission_" + setme.getId() + ".json");
if (!taskFile.exists()) continue;
try (FileReader readerTask = new FileReader(taskFile)) {
MissionTaskInfo infoTask = gson.fromJson(readerTask, MissionTaskInfo.class);
setme.setTask(infoTask);
countTask++;
} catch (Exception ex) {
LunarCore.getLogger().warn("Failed to load task mission info: " + taskFile.getName(), ex);
}
}
// Update GameData with the modified MissionInfo object
GameData.getMissionInfos().put(info.getMainMissionID(), info);
count++;
} catch (Exception e) {
LunarCore.getLogger().warn("Failed to load mission info: " + file.getName(), e);
}
}
LunarCore.getLogger().info("Loaded " + count + " mission infos (task " + countTask + ").");
}
}

View File

@@ -0,0 +1,18 @@
package emu.lunarcore.data.excel;
import emu.lunarcore.data.resource.GameResource;
import emu.lunarcore.data.resource.ResourceType;
import lombok.Getter;
@Getter
@ResourceType(name = {"PlayerOutfitBase.json"})
public class PlayerOutfitBaseExcel extends GameResource {
private int OutfitID;
private String[] SlotTypeList;
private int ItemID;
@Override
public int getId() {
return OutfitID;
}
}

View File

@@ -25,6 +25,11 @@ public enum ItemSubType {
RogueMedal (513),
PamSkin (514),
FindChest (515),
PersonalCard (516),
PhoneCase (517),
PlayerOutfit (518),
HeadIconFrame (519),
PlatformBoundGift (520),
Material (601),
Eidolon (602),
MuseumExhibit (603),
@@ -33,6 +38,21 @@ public enum ItemSubType {
AetherSpirit (606),
FightFestSkill (607),
TrainPartyDiyMaterial (608),
PlanetFesItem (609),
ElfRestaurantItem (610),
MatchThreeV2 (611),
HipplenOutfit (612),
DiceCombatAvatar (613),
DiceCombatDice (614),
IdleLiveItem (616),
AvatarExp (651),
AvatarRank (652),
TracePath (653),
WeeklyMonsterDrop (654),
EquipmentExp (655),
RelicExp (656),
CommonMonsterDrop (657),
ComposeMaterial (658),
Mission (701),
RelicSetShowOnly (801),
RelicRarityShowOnly (802),

View File

@@ -256,6 +256,10 @@ public class Inventory extends BasePlayerManager {
getPlayer().getUnlocks().addHeadIcon(item.getItemId());
return item;
}
case HeadIconFrame -> {
getPlayer().getUnlocks().addHeadIconFrame(item.getItemId());
return item;
}
case ChatBubble -> {
getPlayer().getUnlocks().addChatBubble(item.getItemId());
return item;
@@ -264,6 +268,10 @@ public class Inventory extends BasePlayerManager {
getPlayer().getUnlocks().addPhoneTheme(item.getItemId());
return item;
}
case AvatarSkin -> {
getPlayer().getUnlocks().addAvatarSkin(item.getItemId());
return item;
}
default -> {
// Skip
}

View File

@@ -47,6 +47,9 @@ public class QueryGatewayHandler implements Handler {
if (data.assetBundleUrl != null && !data.assetBundleUrl.isBlank()) {
gateserver.setAssetBundleUrl(data.assetBundleUrl);
}
if (data.baseAssetBundleUrl != null && !data.baseAssetBundleUrl.isBlank()) {
gateserver.setBaseAssetBundleUrl(data.baseAssetBundleUrl);
}
if (data.exResourceUrl != null && !data.exResourceUrl.isBlank()) {
gateserver.setExResourceUrl(data.exResourceUrl);
}