feat: support multiplayer mode in teapot (#2317)

This commit is contained in:
hamusuke
2023-08-30 10:12:21 +09:00
committed by GitHub
Unverified
parent 667008ecf1
commit 8563d4b574
51 changed files with 1740 additions and 844 deletions
@@ -21,30 +21,30 @@ public class PacketPlayerEnterSceneNotify extends BasePacket {
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())
.setIsFirstLoginEnterScene(player.isFirstLoginEnterScene())
.setWorldType(1)
.setSceneTransaction(
"3-"
+ player.getUid()
+ "-"
+ (int) (System.currentTimeMillis() / 1000)
+ "-"
+ 18402);
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())
.setIsFirstLoginEnterScene(player.isFirstLoginEnterScene())
.setWorldType(1)
.setSceneTransaction(
"3-"
+ player.getUid()
+ "-"
+ (int) (System.currentTimeMillis() / 1000)
+ "-"
+ 18402);
this.setData(proto);
}
public PacketPlayerEnterSceneNotify(
Player player, EnterType type, EnterReason reason, int newScene, Position newPos) {
Player player, EnterType type, EnterReason reason, int newScene, Position newPos) {
this(player, player, type, reason, newScene, newPos);
}
@@ -53,52 +53,52 @@ public class PacketPlayerEnterSceneNotify extends BasePacket {
}
public PacketPlayerEnterSceneNotify(
Player player,
Player target,
EnterType type,
EnterReason reason,
int newScene,
Position newPos) {
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());
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) {
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())
.setPrevPos(player.getPosition().toProto())
.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())
.setWorldType(1)
.setSceneTransaction(
teleportProperties.getSceneId()
+ "-"
+ target.getUid()
+ "-"
+ (int) (System.currentTimeMillis() / 1000)
+ "-"
+ 18402);
PlayerEnterSceneNotify.newBuilder()
.setPrevSceneId(player.getSceneId())
.setPrevPos(player.getPosition().toProto())
.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())
.setWorldType(1)
.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) {
@@ -107,4 +107,36 @@ public class PacketPlayerEnterSceneNotify extends BasePacket {
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())
.setPrevPos(player.getPosition().toProto())
.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())
.setWorldType(64)
.setSceneTransaction(
teleportProperties.getSceneId()
+ "-"
+ targetUid
+ "-"
+ (int) (System.currentTimeMillis() / 1000)
+ "-"
+ 27573);
this.setData(proto);
}
}