Update to REL3.7

This commit is contained in:
KingRainbow44
2023-05-27 00:34:42 -04:00
1385 changed files with 1218590 additions and 1287235 deletions

View File

@@ -6,7 +6,7 @@ import emu.grasscutter.utils.Utils;
import java.util.Arrays;
public final class GameConstants {
public static String VERSION = "3.6.0";
public static String VERSION = "3.7.0";
public static final boolean DEBUG = true;
public static final int DEFAULT_TEAMS = 4;

File diff suppressed because it is too large Load Diff

View File

@@ -152,7 +152,10 @@ public class GameSession implements GameSessionManager.KcpChannel {
@Override
public void handleReceive(byte[] bytes) {
// Decrypt and turn back into a packet
Crypto.xor(bytes, useSecretKey() ? Crypto.ENCRYPT_KEY : Crypto.DISPATCH_KEY);
if (this.getState() != SessionState.WAITING_FOR_TOKEN)
Crypto.xor(bytes, useSecretKey() ?
Crypto.ENCRYPT_KEY :
Crypto.DISPATCH_KEY);
ByteBuf packet = Unpooled.wrappedBuffer(bytes);
// Log

View File

@@ -64,11 +64,11 @@ public class GameSessionManager {
@Override
public void handleReceive(ByteBuf buf, Ukcp kcp) {
byte[] byteData = Utils.byteBufToArray(buf);
var byteData = Utils.byteBufToArray(buf);
logicThread.execute(
() -> {
try {
GameSession conversation = sessions.get(kcp);
var conversation = sessions.get(kcp);
if (conversation != null) {
conversation.handleReceive(byteData);
}

View File

@@ -6,19 +6,18 @@ import emu.grasscutter.net.proto.GachaWishRspOuterClass.GachaWishRsp;
public class PacketGachaWishRsp extends BasePacket {
public PacketGachaWishRsp(
int gachaType, int scheduleId, int itemId, int progress, int maxProgress) {
public PacketGachaWishRsp(int gachaType, int scheduleId, int itemId, int progress, int maxProgress) {
super(PacketOpcodes.GachaWishRsp);
GachaWishRsp proto =
GachaWishRsp.newBuilder()
.setGachaType(gachaType)
.setGachaScheduleId(scheduleId)
.setWishItemId(itemId)
.setWishProgress(progress)
.setWishMaxProgress(maxProgress)
.build();
GachaWishRsp proto = GachaWishRsp.newBuilder()
.setGachaType(gachaType)
.setGachaScheduleId(scheduleId)
.setTenCostItemId(itemId)
.setWishProgress(progress)
.setWishMaxProgress(maxProgress)
.build();
this.setData(proto);
}
}

View File

@@ -13,6 +13,7 @@ public class PacketGetPlayerTokenRsp extends BasePacket {
super(PacketOpcodes.GetPlayerTokenRsp, true);
this.setUseDispatchKey(true);
this.shouldEncrypt = false;
GetPlayerTokenRsp p =
GetPlayerTokenRsp.newBuilder()
@@ -38,6 +39,7 @@ public class PacketGetPlayerTokenRsp extends BasePacket {
super(PacketOpcodes.GetPlayerTokenRsp, true);
this.setUseDispatchKey(true);
this.shouldEncrypt = false;
GetPlayerTokenRsp p =
GetPlayerTokenRsp.newBuilder()
@@ -59,6 +61,7 @@ public class PacketGetPlayerTokenRsp extends BasePacket {
super(PacketOpcodes.GetPlayerTokenRsp, true);
this.setUseDispatchKey(true);
this.shouldEncrypt = false;
GetPlayerTokenRsp p =
GetPlayerTokenRsp.newBuilder()

View File

@@ -12,6 +12,7 @@ import emu.grasscutter.net.proto.ItemParamOuterClass;
import emu.grasscutter.net.proto.ShopGoodsOuterClass.ShopGoods;
import emu.grasscutter.net.proto.ShopOuterClass.Shop;
import emu.grasscutter.utils.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -21,46 +22,33 @@ public class PacketGetShopRsp extends BasePacket {
super(PacketOpcodes.GetShopRsp);
// TODO: CityReputationLevel
Shop.Builder shop =
Shop.newBuilder()
.setShopType(shopType)
.setCityId(1) // mock
.setCityReputationLevel(10); // mock
Shop.Builder shop = Shop.newBuilder()
.setShopType(shopType)
.setCityId(1) //mock
.setCityReputationLevel(10); //mock
ShopSystem manager = Grasscutter.getGameServer().getShopSystem();
if (manager.getShopData().get(shopType) != null) {
List<ShopInfo> list = manager.getShopData().get(shopType);
List<ShopGoods> goodsList = new ArrayList<>();
for (ShopInfo info : list) {
ShopGoods.Builder goods =
ShopGoods.newBuilder()
.setGoodsId(info.getGoodsId())
.setGoodsItem(
ItemParamOuterClass.ItemParam.newBuilder()
.setItemId(info.getGoodsItem().getId())
.setCount(info.getGoodsItem().getCount())
.build())
.setScoin(info.getScoin())
.setHcoin(info.getHcoin())
.setBuyLimit(info.getBuyLimit())
.setBeginTime(info.getBeginTime())
.setEndTime(info.getEndTime())
.setMinLevel(info.getMinLevel())
.setMaxLevel(info.getMaxLevel())
.setMcoin(info.getMcoin());
// These fields are DEPRECATED.
// .setDisableType(info.getDisableType())
// .setSecondarySheetId(info.getSecondarySheetId());
ShopGoods.Builder goods = ShopGoods.newBuilder()
.setGoodsId(info.getGoodsId())
.setGoodsItem(ItemParamOuterClass.ItemParam.newBuilder().setItemId(info.getGoodsItem().getId()).setCount(info.getGoodsItem().getCount()).build())
.setScoin(info.getScoin())
.setHcoin(info.getHcoin())
.setBuyLimit(info.getBuyLimit())
.setBeginTime(info.getBeginTime())
.setEndTime(info.getEndTime())
.setMinLevel(info.getMinLevel())
.setMaxLevel(info.getMaxLevel())
.setMcoin(info.getMcoin());
// These fields are deprecated as of REL3.7
// .setDisableType(info.getDisableType())
// .setSecondarySheetId(info.getSecondarySheetId());
if (info.getCostItemList() != null) {
goods.addAllCostItemList(
info.getCostItemList().stream()
.map(
x ->
ItemParamOuterClass.ItemParam.newBuilder()
.setItemId(x.getId())
.setCount(x.getCount())
.build())
.collect(Collectors.toList()));
goods.addAllCostItemList(info.getCostItemList().stream().map(x -> ItemParamOuterClass.ItemParam.newBuilder().setItemId(x.getId()).setCount(x.getCount()).build()).collect(Collectors.toList()));
}
if (info.getPreGoodsIdList() != null) {
goods.addAllPreGoodsIdList(info.getPreGoodsIdList());