mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-13 21:32:34 +08:00
148 lines
6.7 KiB
Java
148 lines
6.7 KiB
Java
package emu.grasscutter.server.packet.send;
|
|
|
|
import emu.grasscutter.game.player.Player;
|
|
import emu.grasscutter.game.player.Player.SceneLoadState;
|
|
import emu.grasscutter.game.props.EnterReason;
|
|
import emu.grasscutter.game.world.Position;
|
|
import emu.grasscutter.game.world.data.TeleportProperties;
|
|
import emu.grasscutter.net.packet.*;
|
|
import io.grasscutter.net.proto.scene.EnterType;
|
|
import io.grasscutter.net.proto.scene.PlayerEnterSceneNotify;
|
|
import emu.grasscutter.utils.Utils;
|
|
|
|
public class PacketPlayerEnterSceneNotify extends BasePacket {
|
|
|
|
// Login
|
|
public PacketPlayerEnterSceneNotify(Player player) {
|
|
super(PacketOpcodes.PlayerEnterSceneNotify);
|
|
|
|
player.setSceneLoadState(SceneLoadState.LOADING);
|
|
player.setEnterSceneToken(Utils.randomRange(1000, 99999));
|
|
|
|
var proto =
|
|
PlayerEnterSceneNotify.newBuilder()
|
|
.setSceneId(player.getSceneId())
|
|
.setPos(player.getPosition().toProto())
|
|
.setSceneBeginTime(System.currentTimeMillis())
|
|
.setType(EnterType.ENTER_TYPE_SELF)
|
|
.setTargetUid(player.getUid())
|
|
.setEnterSceneToken(player.getEnterSceneToken())
|
|
.setWorldLevel(player.getWorldLevel())
|
|
// .setEnterReason(EnterReason.Login.getValue()) // Removed in 5.0; we don't know what
|
|
// it is
|
|
// .setIsFirstLoginEnterScene(player.isFirstLoginEnterScene()) // Removed in 5.0; we
|
|
// don't know what it is
|
|
// .setWorldType(1) // Removed in 5.0; we don't know what it is
|
|
.setSceneTransaction(
|
|
"3-"
|
|
+ player.getUid()
|
|
+ "-"
|
|
+ (int) (System.currentTimeMillis() / 1000)
|
|
+ "-"
|
|
+ 18402);
|
|
|
|
this.setData(proto);
|
|
}
|
|
|
|
public PacketPlayerEnterSceneNotify(
|
|
Player player, EnterType type, EnterReason reason, int newScene, Position newPos) {
|
|
this(player, player, type, reason, newScene, newPos);
|
|
}
|
|
|
|
public PacketPlayerEnterSceneNotify(Player player, TeleportProperties teleportProperties) {
|
|
this(player, player, teleportProperties);
|
|
}
|
|
|
|
public PacketPlayerEnterSceneNotify(
|
|
Player player,
|
|
Player target,
|
|
EnterType type,
|
|
EnterReason reason,
|
|
int newScene,
|
|
Position newPos) {
|
|
this(
|
|
player,
|
|
target,
|
|
TeleportProperties.builder()
|
|
.enterType(type)
|
|
.enterReason(reason)
|
|
.sceneId(newScene)
|
|
.teleportTo(newPos)
|
|
.build());
|
|
}
|
|
|
|
// Teleport or go somewhere
|
|
public PacketPlayerEnterSceneNotify(
|
|
Player player, Player target, TeleportProperties teleportProperties) {
|
|
super(PacketOpcodes.PlayerEnterSceneNotify);
|
|
|
|
player.setSceneLoadState(SceneLoadState.LOADING);
|
|
player.setEnterSceneToken(Utils.randomRange(1000, 99999));
|
|
|
|
var proto =
|
|
PlayerEnterSceneNotify.newBuilder()
|
|
// .setPrevSceneId(player.getSceneId()) // Removed in 5.0; we don't know what it is
|
|
// .setPrevPos(player.getPosition().toProto()) // Removed in 5.0; we don't know what it
|
|
// is
|
|
.setSceneId(teleportProperties.getSceneId())
|
|
.setPos(teleportProperties.getTeleportTo().toProto())
|
|
.setSceneBeginTime(System.currentTimeMillis())
|
|
.setType(teleportProperties.getEnterType())
|
|
.setTargetUid(target.getUid())
|
|
.setEnterSceneToken(player.getEnterSceneToken())
|
|
.setWorldLevel(target.getWorld().getWorldLevel())
|
|
// .setEnterReason(teleportProperties.getEnterReason().getValue()) // Removed in 5.0; we
|
|
// don't know what it is
|
|
// .setWorldType(1) // Removed in 5.0; we don't know what it is
|
|
.setSceneTransaction(
|
|
teleportProperties.getSceneId()
|
|
+ "-"
|
|
+ target.getUid()
|
|
+ "-"
|
|
+ (int) (System.currentTimeMillis() / 1000)
|
|
+ "-"
|
|
+ 18402);
|
|
|
|
// Apply the dungeon ID to the packet if it's a dungeon.
|
|
if (teleportProperties.getDungeonId() != 0) {
|
|
proto.setDungeonId(teleportProperties.getDungeonId());
|
|
}
|
|
|
|
this.setData(proto);
|
|
}
|
|
|
|
// Go home
|
|
public PacketPlayerEnterSceneNotify(
|
|
Player player, int targetUid, TeleportProperties teleportProperties, boolean other) {
|
|
super(PacketOpcodes.PlayerEnterSceneNotify);
|
|
|
|
player.setSceneLoadState(SceneLoadState.LOADING);
|
|
player.setEnterSceneToken(Utils.randomRange(1000, 99999));
|
|
|
|
var proto =
|
|
PlayerEnterSceneNotify.newBuilder()
|
|
// .setPrevSceneId(player.getSceneId()) // Removed in 5.0; we don't know what it is
|
|
// .setPrevPos(player.getPosition().toProto()) // Removed in 5.0; we don't know what it
|
|
// is
|
|
.setSceneId(teleportProperties.getSceneId())
|
|
.setPos(teleportProperties.getTeleportTo().toProto())
|
|
.setSceneBeginTime(System.currentTimeMillis())
|
|
.setType(other ? EnterType.ENTER_TYPE_OTHER_HOME : EnterType.ENTER_TYPE_SELF_HOME)
|
|
.setTargetUid(targetUid)
|
|
.setEnterSceneToken(player.getEnterSceneToken())
|
|
// .setEnterReason(teleportProperties.getEnterReason().getValue()) // Removed in 5.0; we
|
|
// don't know what it is
|
|
// .setWorldType(64) // Removed in 5.0; we don't know what it is
|
|
.setSceneTransaction(
|
|
teleportProperties.getSceneId()
|
|
+ "-"
|
|
+ targetUid
|
|
+ "-"
|
|
+ (int) (System.currentTimeMillis() / 1000)
|
|
+ "-"
|
|
+ 27573);
|
|
|
|
this.setData(proto);
|
|
}
|
|
}
|