mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 01:15:52 +01:00
Merge branch 'development' of https://github.com/Melledy/Grasscutter into development
This commit is contained in:
@@ -456,7 +456,7 @@ public final class DispatchServer {
|
||||
Grasscutter.getLogger().info("Dispatch server started on port " + getAddress().getPort());
|
||||
|
||||
// Logging servers
|
||||
HttpServer overseaLogServer = HttpServer.create(new InetSocketAddress(Grasscutter.getConfig().getDispatchOptions().Ip, 8888), 0);
|
||||
HttpServer overseaLogServer = HttpServer.create(new InetSocketAddress(Grasscutter.getConfig().getDispatchOptions().Ip, Grasscutter.getConfig().getDispatchOptions().OverseaLogPort), 0);
|
||||
overseaLogServer.createContext( // overseauspider.yuanshen.com
|
||||
"/log",
|
||||
new DispatchHttpJsonHandler("{\"code\":0}")
|
||||
|
||||
@@ -31,8 +31,11 @@ public class HandlerEnterSceneDoneReq extends PacketHandler {
|
||||
|
||||
// Locations
|
||||
session.send(new PacketWorldPlayerLocationNotify(session.getPlayer().getWorld()));
|
||||
session.send(new PacketScenePlayerLocationNotify(session.getPlayer()));
|
||||
session.send(new PacketScenePlayerLocationNotify(session.getPlayer().getScene()));
|
||||
session.send(new PacketWorldPlayerRTTNotify(session.getPlayer().getWorld()));
|
||||
|
||||
// Reset timer for sending player locations
|
||||
session.getPlayer().resetSendPlayerLocTime();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -35,15 +35,15 @@ public class HandlerGetPlayerTokenReq extends PacketHandler {
|
||||
|
||||
// Has character
|
||||
boolean doesPlayerExist = false;
|
||||
if (account.getPlayerId() > 0) {
|
||||
if (account.getPlayerUid() > 0) {
|
||||
// Set flag for player existing
|
||||
doesPlayerExist = DatabaseHelper.checkPlayerExists(account.getPlayerId());
|
||||
doesPlayerExist = DatabaseHelper.checkPlayerExists(account.getPlayerUid());
|
||||
}
|
||||
|
||||
// Set reserve player id if account doesnt exist
|
||||
if (!doesPlayerExist) {
|
||||
int id = DatabaseHelper.getNextPlayerId(session.getAccount().getPlayerId());
|
||||
if (id != session.getAccount().getPlayerId()) {
|
||||
int id = DatabaseHelper.getNextPlayerId(session.getAccount().getPlayerUid());
|
||||
if (id != session.getAccount().getPlayerUid()) {
|
||||
session.getAccount().setPlayerId(id);
|
||||
session.getAccount().save();
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class HandlerPlayerLoginReq extends PacketHandler {
|
||||
}
|
||||
|
||||
// Load character from db
|
||||
GenshinPlayer player = DatabaseHelper.getPlayerById(session.getAccount().getPlayerId());
|
||||
GenshinPlayer player = DatabaseHelper.getPlayerById(session.getAccount().getPlayerUid());
|
||||
|
||||
if (player == null) {
|
||||
// Send packets
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.data.GenshinData;
|
||||
import emu.grasscutter.data.custom.ScenePointEntry;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.SceneTransToPointReqOuterClass.SceneTransToPointReq;
|
||||
import emu.grasscutter.net.proto.SceneTransToPointRspOuterClass.SceneTransToPointRsp;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketSceneTransToPointRsp;
|
||||
import emu.grasscutter.utils.Position;
|
||||
|
||||
@Opcodes(PacketOpcodes.SceneTransToPointReq)
|
||||
public class HandlerSceneTransToPointReq extends PacketHandler {
|
||||
@@ -13,7 +17,20 @@ public class HandlerSceneTransToPointReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
SceneTransToPointReq req = SceneTransToPointReq.parseFrom(payload);
|
||||
session.send(new PacketSceneTransToPointRsp(session.getPlayer(), req.getPointId(), req.getSceneId()));
|
||||
|
||||
String code = req.getSceneId() + "_" + req.getPointId();
|
||||
ScenePointEntry scenePointEntry = GenshinData.getScenePointEntries().get(code);
|
||||
|
||||
if (scenePointEntry != null) {
|
||||
float x = scenePointEntry.getPointData().getTranPos().getX();
|
||||
float y = scenePointEntry.getPointData().getTranPos().getY();
|
||||
float z = scenePointEntry.getPointData().getTranPos().getZ();
|
||||
|
||||
session.getPlayer().getWorld().transferPlayerToScene(session.getPlayer(), req.getSceneId(), new Position(x, y, z));
|
||||
session.send(new PacketSceneTransToPointRsp(session.getPlayer(), req.getPointId(), req.getSceneId()));
|
||||
} else {
|
||||
session.send(new PacketSceneTransToPointRsp());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.recv;
|
||||
import emu.grasscutter.net.packet.GenshinPacket;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.SetEntityClientDataNotifyOuterClass.SetEntityClientDataNotify;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
@@ -16,8 +17,11 @@ public class HandlerSetEntityClientDataNotify extends PacketHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
// Make sure packet is a valid proto before replaying it to the other players
|
||||
SetEntityClientDataNotify notif = SetEntityClientDataNotify.parseFrom(payload);
|
||||
|
||||
GenshinPacket packet = new GenshinPacket(PacketOpcodes.SetEntityClientDataNotify, true);
|
||||
packet.setData(payload);
|
||||
packet.setData(notif);
|
||||
|
||||
session.getPlayer().getScene().broadcastPacketToOthers(session.getPlayer(), packet);
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ public class HandlerSetPlayerBornDataReq extends PacketHandler {
|
||||
|
||||
try {
|
||||
// Save to db
|
||||
DatabaseHelper.createPlayer(player, session.getAccount().getPlayerId());
|
||||
DatabaseHelper.createPlayer(player, session.getAccount().getPlayerUid());
|
||||
|
||||
// Create avatar
|
||||
if (player.getAvatars().getAvatarCount() == 0) {
|
||||
|
||||
@@ -8,8 +8,8 @@ import emu.grasscutter.net.proto.AbilityChangeNotifyOuterClass.AbilityChangeNoti
|
||||
public class PacketAbilityChangeNotify extends GenshinPacket {
|
||||
|
||||
public PacketAbilityChangeNotify(EntityAvatar entity) {
|
||||
super(PacketOpcodes.AbilityChangeNotify);
|
||||
|
||||
super(PacketOpcodes.AbilityChangeNotify, true);
|
||||
|
||||
AbilityChangeNotify proto = AbilityChangeNotify.newBuilder()
|
||||
.setEntityId(entity.getId())
|
||||
.setAbilityControlBlock(entity.getAbilityControlBlock())
|
||||
|
||||
@@ -23,7 +23,6 @@ public class PacketGetPlayerFriendListRsp extends GenshinPacket {
|
||||
.setWorldLevel(0)
|
||||
.setSignature("")
|
||||
.setLastActiveTime((int) (System.currentTimeMillis() / 1000f))
|
||||
.setIsMpModeAvailable(true)
|
||||
.setNameCardId(210001)
|
||||
.setOnlineState(FriendOnlineState.FRIEND_ONLINE)
|
||||
.setParam(1)
|
||||
|
||||
@@ -16,7 +16,7 @@ public class PacketGetPlayerTokenRsp extends GenshinPacket {
|
||||
this.setUseDispatchKey(true);
|
||||
|
||||
GetPlayerTokenRsp p = GetPlayerTokenRsp.newBuilder()
|
||||
.setPlayerUid(session.getAccount().getPlayerId())
|
||||
.setPlayerUid(session.getAccount().getPlayerUid())
|
||||
.setAccountToken(session.getAccount().getToken())
|
||||
.setAccountType(1)
|
||||
.setIsProficientPlayer(doesPlayerExist) // Not sure where this goes
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.GenshinPlayer;
|
||||
import emu.grasscutter.game.GenshinScene;
|
||||
import emu.grasscutter.net.packet.GenshinPacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.ScenePlayerLocationNotifyOuterClass.ScenePlayerLocationNotify;
|
||||
|
||||
public class PacketScenePlayerLocationNotify extends GenshinPacket {
|
||||
|
||||
public PacketScenePlayerLocationNotify(GenshinPlayer player) {
|
||||
public PacketScenePlayerLocationNotify(GenshinScene scene) {
|
||||
super(PacketOpcodes.ScenePlayerLocationNotify);
|
||||
|
||||
ScenePlayerLocationNotify.Builder proto = ScenePlayerLocationNotify.newBuilder()
|
||||
.setSceneId(player.getSceneId());
|
||||
.setSceneId(scene.getId());
|
||||
|
||||
for (GenshinPlayer p : player.getWorld().getPlayers()) {
|
||||
for (GenshinPlayer p : scene.getPlayers()) {
|
||||
proto.addPlayerLocList(p.getPlayerLocationInfo());
|
||||
}
|
||||
|
||||
|
||||
@@ -13,23 +13,22 @@ public class PacketSceneTransToPointRsp extends GenshinPacket {
|
||||
public PacketSceneTransToPointRsp(GenshinPlayer player, int pointId, int sceneId) {
|
||||
super(PacketOpcodes.SceneTransToPointRsp);
|
||||
|
||||
String code = sceneId + "_" + pointId;
|
||||
ScenePointEntry scenePointEntry = GenshinData.getScenePointEntries().get(code);
|
||||
|
||||
float x = scenePointEntry.getPointData().getTranPos().getX();
|
||||
float y = scenePointEntry.getPointData().getTranPos().getY();
|
||||
float z = scenePointEntry.getPointData().getTranPos().getZ();
|
||||
|
||||
player.getPos().set(new Position(x, y, z));
|
||||
|
||||
player.getWorld().forceTransferPlayerToScene(player, sceneId, player.getPos());
|
||||
|
||||
SceneTransToPointRsp proto = SceneTransToPointRsp.newBuilder()
|
||||
.setRetcode(0)
|
||||
.setPointId(pointId)
|
||||
.setSceneId(sceneId)
|
||||
.build();
|
||||
.setRetcode(0)
|
||||
.setPointId(pointId)
|
||||
.setSceneId(sceneId)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
public PacketSceneTransToPointRsp() {
|
||||
super(PacketOpcodes.SceneTransToPointRsp);
|
||||
|
||||
SceneTransToPointRsp proto = SceneTransToPointRsp.newBuilder()
|
||||
.setRetcode(1) // Internal server error
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ public class PacketSceneUnlockInfoNotify extends GenshinPacket {
|
||||
SceneUnlockInfoNotify proto = SceneUnlockInfoNotify.newBuilder()
|
||||
.addUnlockInfos(SceneUnlockInfo.newBuilder().setSceneId(1))
|
||||
.addUnlockInfos(SceneUnlockInfo.newBuilder().setSceneId(3))
|
||||
.addUnlockInfos(SceneUnlockInfo.newBuilder().setSceneId(4))
|
||||
.addUnlockInfos(SceneUnlockInfo.newBuilder().setSceneId(4).addSceneTagIdList(106).addSceneTagIdList(109))
|
||||
.addUnlockInfos(SceneUnlockInfo.newBuilder().setSceneId(5))
|
||||
.addUnlockInfos(SceneUnlockInfo.newBuilder().setSceneId(6))
|
||||
.addUnlockInfos(SceneUnlockInfo.newBuilder().setSceneId(7))
|
||||
|
||||
@@ -14,7 +14,7 @@ public class PacketWorldPlayerLocationNotify extends GenshinPacket {
|
||||
WorldPlayerLocationNotify.Builder proto = WorldPlayerLocationNotify.newBuilder();
|
||||
|
||||
for (GenshinPlayer p : world.getPlayers()) {
|
||||
proto.addPlayerLocList(p.getPlayerLocationInfo());
|
||||
proto.addPlayerLocList(p.getWorldPlayerLocationInfo());
|
||||
}
|
||||
|
||||
this.setData(proto);
|
||||
|
||||
Reference in New Issue
Block a user