Files
Grasscutter/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerEnterSceneNotify.java
T

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