Merge changes from hamusuke (#1)

This commit is contained in:
KingRainbow44
2023-08-26 17:57:46 -04:00
Unverified
parent 7dd63e9816
commit 396f302eac
14 changed files with 195 additions and 89 deletions
@@ -1,20 +1,17 @@
package emu.grasscutter.server.http.dispatch;
import static emu.grasscutter.utils.lang.Language.translate;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.auth.AuthenticationSystem;
import emu.grasscutter.auth.OAuthAuthenticator.ClientType;
import emu.grasscutter.server.http.Router;
import emu.grasscutter.server.http.objects.ComboTokenReqJson;
import emu.grasscutter.server.http.objects.*;
import emu.grasscutter.server.http.objects.ComboTokenReqJson.LoginTokenData;
import emu.grasscutter.server.http.objects.LoginAccountRequestJson;
import emu.grasscutter.server.http.objects.LoginTokenRequestJson;
import emu.grasscutter.utils.JsonUtils;
import emu.grasscutter.utils.Utils;
import emu.grasscutter.utils.*;
import io.javalin.Javalin;
import io.javalin.http.Context;
import static emu.grasscutter.utils.lang.Language.translate;
/** Handles requests related to authentication. */
public final class AuthenticationHandler implements Router {
/**
@@ -38,7 +35,7 @@ public final class AuthenticationHandler implements Router {
// Log to console.
Grasscutter.getLogger()
.info(translate("messages.dispatch.account.login_attempt", Utils.address(ctx)));
.debug(translate("messages.dispatch.account.login_attempt", Utils.address(ctx)));
}
/**
@@ -62,7 +59,7 @@ public final class AuthenticationHandler implements Router {
// Log to console.
Grasscutter.getLogger()
.info(translate("messages.dispatch.account.login_attempt", Utils.address(ctx)));
.debug(translate("messages.dispatch.account.login_attempt", Utils.address(ctx)));
}
/**
@@ -89,7 +86,7 @@ public final class AuthenticationHandler implements Router {
// Log to console.
Grasscutter.getLogger()
.info(translate("messages.dispatch.account.login_attempt", Utils.address(ctx)));
.debug(translate("messages.dispatch.account.login_attempt", Utils.address(ctx)));
}
@Override
@@ -235,15 +235,15 @@ public final class RegionHandler implements Router {
// Get region data.
String regionData = "CAESGE5vdCBGb3VuZCB2ZXJzaW9uIGNvbmZpZw==";
if (ctx.queryParamMap().values().size() > 0) {
if (!ctx.queryParamMap().values().isEmpty()) {
if (region != null) regionData = region.getBase64();
}
String clientVersion = versionName.replaceAll(Pattern.compile("[a-zA-Z]").pattern(), "");
String[] versionCode = clientVersion.split("\\.");
int versionMajor = Integer.parseInt(versionCode[0]);
int versionMinor = Integer.parseInt(versionCode[1]);
int versionFix = Integer.parseInt(versionCode[2]);
var clientVersion = versionName.replaceAll(Pattern.compile("[a-zA-Z]").pattern(), "");
var versionCode = clientVersion.split("\\.");
var versionMajor = Integer.parseInt(versionCode[0]);
var versionMinor = Integer.parseInt(versionCode[1]);
var versionFix = Integer.parseInt(versionCode[2]);
if (versionMajor >= 3
|| (versionMajor == 2 && versionMinor == 7 && versionFix >= 50)
@@ -254,8 +254,12 @@ public final class RegionHandler implements Router {
String key_id = ctx.queryParam("key_id");
if (!clientVersion.equals(
GameConstants.VERSION)) { // Reject clients when there is a version mismatch
if (
versionMajor != GameConstants.VERSION_PARTS[0] ||
versionMinor != GameConstants.VERSION_PARTS[1]
// The 'fix' or 'patch' version is not checked because it is only used
// when miHoYo is desperate and fucks up big time.
) { // Reject clients when there is a version mismatch
boolean updateClient = GameConstants.VERSION.compareTo(clientVersion) > 0;
@@ -268,7 +272,7 @@ public final class RegionHandler implements Router {
StopServerInfo.newBuilder()
.setUrl("https://discord.gg/grasscutters")
.setStopBeginTime((int) Instant.now().getEpochSecond())
.setStopEndTime((int) Instant.now().getEpochSecond() * 2)
.setStopEndTime((int) Instant.now().getEpochSecond() + 1)
.setContentMsg(
updateClient
? "\nVersion mismatch outdated client! \n\nServer version: %s\nClient version: %s"
@@ -279,7 +283,7 @@ public final class RegionHandler implements Router {
.buildPartial();
Grasscutter.getLogger()
.info(
.debug(
String.format(
"Connection denied for %s due to %s.",
Utils.address(ctx), updateClient ? "outdated client!" : "outdated server!"));
@@ -4,7 +4,7 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.CommandMap;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.ItemData;
import emu.grasscutter.data.excels.SceneData;
import emu.grasscutter.data.excels.scene.SceneData;
import emu.grasscutter.data.excels.avatar.AvatarData;
import emu.grasscutter.data.excels.monster.MonsterData;
import emu.grasscutter.utils.FileUtils;
@@ -14,11 +14,13 @@ public class PacketGetSceneAreaRsp extends BasePacket {
GetSceneAreaRsp p =
GetSceneAreaRsp.newBuilder()
.setSceneId(sceneId)
.addAllAreaIdList(player.getUnlockedSceneAreas(sceneId))
.addCityInfoList(player.getSotsManager().getCityInfo(1).toProto())
.addCityInfoList(player.getSotsManager().getCityInfo(2).toProto())
.addCityInfoList(player.getSotsManager().getCityInfo(3).toProto())
.setSceneId(sceneId)
.addAllAreaIdList(player.getUnlockedSceneAreas(sceneId))
.addCityInfoList(player.getSotsManager().getCityInfo(1).toProto())
.addCityInfoList(player.getSotsManager().getCityInfo(2).toProto())
.addCityInfoList(player.getSotsManager().getCityInfo(3).toProto())
.addCityInfoList(player.getSotsManager().getCityInfo(4).toProto())
.addCityInfoList(player.getSotsManager().getCityInfo(5).toProto())
.build();
this.setData(p);
@@ -1,9 +1,12 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.scene.SceneTagData;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PlayerWorldSceneInfoListNotifyOuterClass.PlayerWorldSceneInfoListNotify;
import emu.grasscutter.net.proto.PlayerWorldSceneInfoOuterClass.PlayerWorldSceneInfo;
import java.util.stream.IntStream;
public class PacketPlayerWorldSceneInfoListNotify extends BasePacket {
@@ -12,50 +15,44 @@ public class PacketPlayerWorldSceneInfoListNotify extends BasePacket {
super(PacketOpcodes.PlayerWorldSceneInfoListNotify); // Rename opcode later
PlayerWorldSceneInfoListNotify.Builder proto =
PlayerWorldSceneInfoListNotify.newBuilder()
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(1).setIsLocked(false).build())
.addInfoList(
PlayerWorldSceneInfo.newBuilder()
.setSceneId(3)
.setIsLocked(false)
.addSceneTagIdList(102) // Jade chamber
.addSceneTagIdList(113)
.addSceneTagIdList(117)
// Vanarana (Sumeru tree)
.addSceneTagIdList(1093) // Vana_real
// .addSceneTagIdList(1094) // Vana_dream
// .addSceneTagIdList(1095) // Vana_first
// .addSceneTagIdList(1096) // Vana_festival
// 3.1 event
.addSceneTagIdList(152)
.addSceneTagIdList(153)
// Pyramid
.addSceneTagIdList(1164) // Arena (XMSM_CWLTop)
.addSceneTagIdList(1166) // Pyramid (CWL_Trans_02)
// Brute force
// .addAllSceneTagIdList(IntStream.range(1150, 1250).boxed().toList())
.build())
.addInfoList(
PlayerWorldSceneInfo.newBuilder()
.setSceneId(4)
.setIsLocked(false)
.addSceneTagIdList(106)
.addSceneTagIdList(109)
.addSceneTagIdList(117)
.build())
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(5).setIsLocked(false).build())
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(6).setIsLocked(false).build())
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(7).setIsLocked(false).build())
.addInfoList(
PlayerWorldSceneInfo.newBuilder()
.setSceneId(9)
.setIsLocked(false)
.addAllSceneTagIdList(IntStream.range(0, 3000).boxed().toList())
.build());
PlayerWorldSceneInfoListNotify.newBuilder()
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(1).setIsLocked(false).build())
.addInfoList(PlayerWorldSceneInfo.newBuilder()
.setSceneId(3)
.setIsLocked(false)
.addAllSceneTagIdList(GameData.getSceneTagDataMap().values().stream()
.filter(sceneTag -> sceneTag.getSceneId() == 3)
.filter(sceneTag -> sceneTag.isDefaultValid() || sceneTag.getCond().get(0).getCondType() != null)
.map(SceneTagData::getId)
.toList())
//.addSceneTagIdList(102) // Jade chamber (alr added)
//.addSceneTagIdList(113)
//.addSceneTagIdList(117)
//.addSceneTagIdList(1093) // 3.0 Vana_real
.addSceneTagIdList(1094) // 3.0 Vana_dream
//.addSceneTagIdList(1095) // 3.0 Vana_first
//.addSceneTagIdList(1096) // 3.0 Vana_festival
.addSceneTagIdList(152) // 3.1 event
.addSceneTagIdList(153) // 3.1 event
.addSceneTagIdList(1164) // Desert Arena (XMSM_CWLTop)
.addSceneTagIdList(1166) // Desert Pyramid (CWL_Trans_02)
.build())
.addInfoList(PlayerWorldSceneInfo.newBuilder()
.setSceneId(4)
.setIsLocked(false)
.addSceneTagIdList(106)
.addSceneTagIdList(109)
.addSceneTagIdList(117)
.build())
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(5).setIsLocked(false).build())
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(6).setIsLocked(false).build())
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(7).setIsLocked(false).build())
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(9).setIsLocked(false)
.addAllSceneTagIdList(IntStream.range(0, 3000).boxed().toList())
.build())
.addInfoList(PlayerWorldSceneInfo.newBuilder().setSceneId(10).setIsLocked(false)
.addAllSceneTagIdList(IntStream.range(0, 3000).boxed().toList())
.build()); //3.8
this.setData(proto);
}