Support of Enter Room Scene

This commit is contained in:
Akka 2022-05-05 22:00:11 +08:00
parent b61672e046
commit 32c70cc83f
5 changed files with 103 additions and 1 deletions

View File

@ -0,0 +1,16 @@
syntax = "proto3";
option java_package = "emu.grasscutter.net.proto";
message PersonalSceneJumpReq {
enum CmdId {
option allow_alias = true;
ENET_CHANNEL_ID = 0;
NONE = 0;
ENET_IS_RELIABLE = 1;
IS_ALLOW_CLIENT = 1;
CMD_ID = 260;
}
uint32 point_id = 1;
}

View File

@ -0,0 +1,19 @@
syntax = "proto3";
option java_package = "emu.grasscutter.net.proto";
import "Vector.proto";
message PersonalSceneJumpRsp {
enum CmdId {
option allow_alias = true;
NONE = 0;
ENET_CHANNEL_ID = 0;
ENET_IS_RELIABLE = 1;
CMD_ID = 228;
}
int32 retcode = 1;
uint32 dest_scene_id = 2;
Vector dest_pos = 3;
}

View File

@ -13,7 +13,8 @@ public class PointData {
private Position tranPos;
private int[] dungeonIds;
private int[] dungeonRandomList;
private int tranSceneId;
public int getId() {
return id;
}
@ -38,6 +39,14 @@ public class PointData {
return dungeonRandomList;
}
public int getTranSceneId() {
return tranSceneId;
}
public void setTranSceneId(int tranSceneId) {
this.tranSceneId = tranSceneId;
}
public void updateDailyDungeon() {
if (getDungeonRandomList() == null) {
return;

View File

@ -0,0 +1,38 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.custom.ScenePointEntry;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PersonalSceneJumpReqOuterClass.PersonalSceneJumpReq;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketPersonalSceneJumpRsp;
import emu.grasscutter.utils.Position;
@Opcodes(PacketOpcodes.PersonalSceneJumpReq)
public class HandlerPersonalSceneJumpReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
PersonalSceneJumpReq req = PersonalSceneJumpReq.parseFrom(payload);
// get the scene point
String code = session.getPlayer().getSceneId() + "_" + req.getPointId();
ScenePointEntry scenePointEntry = GameData.getScenePointEntries().get(code);
if (scenePointEntry != null) {
float x = scenePointEntry.getPointData().getTranPos().getX();
float y = scenePointEntry.getPointData().getTranPos().getY();
float z = scenePointEntry.getPointData().getTranPos().getZ();
Position pos = new Position(x, y, z);
int sceneId = scenePointEntry.getPointData().getTranSceneId();
session.getPlayer().getWorld().transferPlayerToScene(session.getPlayer(), sceneId, pos);
session.send(new PacketPersonalSceneJumpRsp(sceneId, pos));
}
}
}

View File

@ -0,0 +1,20 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PersonalSceneJumpRspOuterClass.PersonalSceneJumpRsp;
import emu.grasscutter.utils.Position;
public class PacketPersonalSceneJumpRsp extends BasePacket {
public PacketPersonalSceneJumpRsp(int sceneId, Position pos) {
super(PacketOpcodes.PersonalSceneJumpRsp);
PersonalSceneJumpRsp proto = PersonalSceneJumpRsp.newBuilder()
.setDestSceneId(sceneId)
.setDestPos(pos.toProto())
.build();
this.setData(proto);
}
}