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

@@ -49,7 +49,7 @@ public class Scene {
@Getter @Setter private boolean dontDestroyWhenEmpty;
@Getter @Setter private int autoCloseTime;
@Getter private int time;
@Getter @Setter private int time;
private long startTime;
@Getter private SceneScriptManager scriptManager;

View File

@@ -1,7 +1,5 @@
package emu.grasscutter.net.packet;
import java.util.HashSet;
public class PacketOpcodes {
public static final int NONE = 0;
@@ -414,7 +412,6 @@ public class PacketOpcodes {
public static final int DigActivityChangeGadgetStateRsp = 8810;
public static final int DigActivityMarkPointChangeNotify = 8508;
public static final int DisableRoguelikeTrapNotify = 8726;
public static final int DKMDNEAEGDF = 166;
public static final int DoGachaReq = 1587;
public static final int DoGachaRsp = 1598;
public static final int DoRoguelikeDungeonCardGachaReq = 8752;
@@ -1456,7 +1453,6 @@ public class PacketOpcodes {
public static final int PlayerInvestigationAllInfoNotify = 1917;
public static final int PlayerInvestigationNotify = 1911;
public static final int PlayerInvestigationTargetNotify = 1930;
public static final int PlayerIpRegionNotify = 108;
public static final int PlayerLevelRewardUpdateNotify = 154;
public static final int PlayerLoginReq = 187;
public static final int PlayerLoginRsp = 198;
@@ -1835,6 +1831,8 @@ public class PacketOpcodes {
public static final int SingleRestartBrickBreakerRsp = 22641;
public static final int SingleStartBrickBreakerReq = 23861;
public static final int SingleStartBrickBreakerRsp = 23349;
public static final int SkipPlayerGameTimeReq = 108;
public static final int SkipPlayerGameTimeRsp = 166;
public static final int SkyCrystalDetectorDataUpdateNotify = 4265;
public static final int SocialDataNotify = 4050;
public static final int SpiceActivityFinishMakeSpiceReq = 8744;

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);
}
}