feat: change game time (#2061)

* feat: change game time

* Update proto names
This commit is contained in:
hamusuke
2023-02-24 13:21:44 +09:00
committed by GitHub
parent a078b5ae28
commit 220c23b960
8 changed files with 1681 additions and 7 deletions

View File

@@ -7,17 +7,22 @@ import emu.grasscutter.net.proto.PlayerSetPauseReqOuterClass.PlayerSetPauseReq;
import emu.grasscutter.net.packet.PacketHandler;
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 {
PacketHead head = PacketHead.parseFrom(header);
PlayerSetPauseReq req = PlayerSetPauseReq.parseFrom(payload);
session.send(new PacketPlayerSetPauseRsp(head.getClientSequenceId()));
session.getPlayer().setPaused(req.getIsPaused());
session.send(new PacketPlayerTimeNotify(session.getPlayer()));
session.send(new PacketSceneTimeNotify(session.getPlayer()));
}
}

View File

@@ -0,0 +1,21 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.SkipPlayerGameTimeReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketPlayerGameTimeNotify;
import emu.grasscutter.server.packet.send.PacketSkipPlayerGameTimeRsp;
@Opcodes(PacketOpcodes.SkipPlayerGameTimeReq)
public class HandlerSkipPlayerGameTimeReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = SkipPlayerGameTimeReqOuterClass.SkipPlayerGameTimeReq.parseFrom(payload);
var player = session.getPlayer();
player.getScene().setTime(req.getGameTime());
player.getScene().broadcastPacket(new PacketPlayerGameTimeNotify(player));
player.sendPacket(new PacketSkipPlayerGameTimeRsp(req));
}
}

View File

@@ -11,6 +11,7 @@ public class PacketSceneTimeNotify extends BasePacket {
super(PacketOpcodes.SceneTimeNotify);
SceneTimeNotify proto = SceneTimeNotify.newBuilder()
.setIsPaused(player.isPaused())
.setSceneId(player.getSceneId())
.setSceneTime(player.getScene().getSceneTime())
.build();

View File

@@ -0,0 +1,19 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.SkipPlayerGameTimeReqOuterClass;
import emu.grasscutter.net.proto.SkipPlayerGameTimeRspOuterClass;
public class PacketSkipPlayerGameTimeRsp extends BasePacket {
public PacketSkipPlayerGameTimeRsp(SkipPlayerGameTimeReqOuterClass.SkipPlayerGameTimeReq req) {
super(PacketOpcodes.SkipPlayerGameTimeRsp);
var proto = SkipPlayerGameTimeRspOuterClass.SkipPlayerGameTimeRsp.newBuilder()
.setClientGameTime(req.getClientGameTime())
.setGameTime(req.getGameTime())
.build();
this.setData(proto);
}
}