Fix player pausing

This commit is contained in:
KingRainbow44
2023-05-18 02:54:47 -04:00
parent bb693cd222
commit 8438e94c6e
4 changed files with 43 additions and 18 deletions

View File

@@ -4,22 +4,25 @@ import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PlayerSetPauseReqOuterClass.PlayerSetPauseReq;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketPlayerSetPauseRsp;
import emu.grasscutter.server.packet.send.PacketPlayerTimeNotify;
import emu.grasscutter.server.packet.send.PacketSceneTimeNotify;
@Opcodes(PacketOpcodes.PlayerSetPauseReq)
public class HandlerPlayerSetPauseReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
PlayerSetPauseReq req = PlayerSetPauseReq.parseFrom(payload);
var req = PlayerSetPauseReq.parseFrom(payload);
var player = session.getPlayer();
var world = player.getWorld();
session.send(new PacketPlayerSetPauseRsp());
session.getPlayer().setPaused(req.getIsPaused());
session.send(new PacketPlayerTimeNotify(session.getPlayer()));
session.send(new PacketSceneTimeNotify(session.getPlayer()));
// Check if the player is in a multiplayer world.
if (player.isInMultiplayer()) {
session.send(new PacketPlayerSetPauseRsp(Retcode.RET_FAIL));
} else {
world.setPaused(req.getIsPaused());
session.send(new PacketPlayerSetPauseRsp(Retcode.RET_SUCC));
}
}
}

View File

@@ -7,9 +7,10 @@ import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
public class PacketPlayerSetPauseRsp extends BasePacket {
public PacketPlayerSetPauseRsp() {
public PacketPlayerSetPauseRsp(Retcode retcode) {
super(PacketOpcodes.PlayerSetPauseRsp);
this.setData(PlayerSetPauseRsp.newBuilder().setRetcode(Retcode.RET_SUCC_VALUE));
this.setData(PlayerSetPauseRsp.newBuilder()
.setRetcode(retcode.getNumber()));
}
}