mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-02-09 05:52:52 +08:00
Fixed null pointer exception in game only mode
PacketPlayerLoginRsp now creates the required QuerryCurrRegionHttpRsp itself.
This commit is contained in:
parent
1275592747
commit
77fcce6510
@ -1,20 +1,60 @@
|
|||||||
package emu.grasscutter.server.packet.send;
|
package emu.grasscutter.server.packet.send;
|
||||||
|
|
||||||
|
import com.google.protobuf.ByteString;
|
||||||
import emu.grasscutter.Grasscutter;
|
import emu.grasscutter.Grasscutter;
|
||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.PlayerLoginRspOuterClass.PlayerLoginRsp;
|
import emu.grasscutter.net.proto.PlayerLoginRspOuterClass.PlayerLoginRsp;
|
||||||
|
import emu.grasscutter.net.proto.QueryCurrRegionHttpRspOuterClass;
|
||||||
import emu.grasscutter.net.proto.RegionInfoOuterClass.RegionInfo;
|
import emu.grasscutter.net.proto.RegionInfoOuterClass.RegionInfo;
|
||||||
import emu.grasscutter.server.game.GameSession;
|
import emu.grasscutter.server.game.GameSession;
|
||||||
|
import emu.grasscutter.utils.FileUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
public class PacketPlayerLoginRsp extends GenshinPacket {
|
public class PacketPlayerLoginRsp extends GenshinPacket {
|
||||||
|
|
||||||
|
private static QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp regionCache;
|
||||||
|
|
||||||
public PacketPlayerLoginRsp(GameSession session) {
|
public PacketPlayerLoginRsp(GameSession session) {
|
||||||
super(PacketOpcodes.PlayerLoginRsp, 1);
|
super(PacketOpcodes.PlayerLoginRsp, 1);
|
||||||
|
|
||||||
this.setUseDispatchKey(true);
|
this.setUseDispatchKey(true);
|
||||||
|
|
||||||
RegionInfo info = Grasscutter.getDispatchServer().getCurrRegion().getRegionInfo();
|
RegionInfo info;
|
||||||
|
|
||||||
|
if(Grasscutter.getConfig().RunMode.equalsIgnoreCase("GAME_ONLY")) {
|
||||||
|
if (regionCache == null) {
|
||||||
|
try {
|
||||||
|
File file = new File(Grasscutter.getConfig().DATA_FOLDER + "query_cur_region.txt");
|
||||||
|
String query_cur_region = "";
|
||||||
|
if (file.exists()) {
|
||||||
|
query_cur_region = new String(FileUtils.read(file));
|
||||||
|
} else {
|
||||||
|
Grasscutter.getLogger().warn("query_cur_region not found! Using default current region.");
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] decodedCurRegion = Base64.getDecoder().decode(query_cur_region);
|
||||||
|
QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp regionQuery = QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp.parseFrom(decodedCurRegion);
|
||||||
|
|
||||||
|
RegionInfo serverRegion = regionQuery.getRegionInfo().toBuilder()
|
||||||
|
.setIp((Grasscutter.getConfig().getGameServerOptions().PublicIp.isEmpty() ? Grasscutter.getConfig().getGameServerOptions().Ip : Grasscutter.getConfig().getGameServerOptions().PublicIp))
|
||||||
|
.setPort(Grasscutter.getConfig().getGameServerOptions().Port)
|
||||||
|
.setSecretKey(ByteString.copyFrom(FileUtils.read(Grasscutter.getConfig().KEY_FOLDER + "dispatchSeed.bin")))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
regionCache = regionQuery.toBuilder().setRegionInfo(serverRegion).build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Grasscutter.getLogger().error("Error while initializing region cache!", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
info = regionCache.getRegionInfo();
|
||||||
|
} else {
|
||||||
|
info = Grasscutter.getDispatchServer().getCurrRegion().getRegionInfo();
|
||||||
|
}
|
||||||
|
|
||||||
PlayerLoginRsp p = PlayerLoginRsp.newBuilder()
|
PlayerLoginRsp p = PlayerLoginRsp.newBuilder()
|
||||||
.setIsUseAbilityHash(true) // true
|
.setIsUseAbilityHash(true) // true
|
||||||
|
Loading…
Reference in New Issue
Block a user