npc/animals arrangement & support enter room scene

This commit is contained in:
Akka
2022-06-15 17:20:08 +08:00
committed by Melledy
parent e16633e34b
commit 7a247e70e0
9 changed files with 145 additions and 21 deletions

View File

@@ -1,11 +1,13 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeSceneJumpReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketHomeSceneJumpRsp;
import emu.grasscutter.utils.Position;
@Opcodes(PacketOpcodes.HomeSceneJumpReq)
public class HandlerHomeSceneJumpReq extends PacketHandler {
@@ -20,21 +22,14 @@ public class HandlerHomeSceneJumpReq extends PacketHandler {
var homeScene = home.getHomeSceneItem(realmId);
home.save();
if(req.getIsEnterRoomScene()){
var roomScene = home.getHomeSceneItem(homeScene.getRoomSceneId());
session.getPlayer().getWorld().transferPlayerToScene(
session.getPlayer(),
homeScene.getRoomSceneId(),
roomScene.getBornPos()
);
}else{
session.getPlayer().getWorld().transferPlayerToScene(
session.getPlayer(),
realmId,
homeScene.getBornPos()
);
}
Scene scene = session.getPlayer().getWorld().getSceneById(req.getIsEnterRoomScene() ? homeScene.getRoomSceneId() : realmId);
Position pos = scene.getScriptManager().getConfig().born_pos;
session.getPlayer().getWorld().transferPlayerToScene(
session.getPlayer(),
req.getIsEnterRoomScene() ? homeScene.getRoomSceneId() : realmId,
pos
);
session.send(new PacketHomeSceneJumpRsp(req.getIsEnterRoomScene()));
}

View File

@@ -30,13 +30,18 @@ public class HandlerTryEnterHomeReq extends PacketHandler {
int realmId = 2000 + session.getPlayer().getCurrentRealmId();
var home = session.getPlayer().getHome();
// prepare the default arrangement for first come in
var homeScene = home.getHomeSceneItem(realmId);
home.save();
Scene scene = session.getPlayer().getWorld().getSceneById(realmId);
Position pos = scene.getScriptManager().getConfig().born_pos;
session.getPlayer().getWorld().transferPlayerToScene(
session.getPlayer(),
realmId,
homeScene.getBornPos()
pos
);

View File

@@ -1,10 +1,14 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.home.GameHome;
import emu.grasscutter.game.home.HomeBlockItem;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeMarkPointNotifyOuterClass;
import emu.grasscutter.net.proto.HomeMarkPointSceneDataOuterClass;
import java.util.Collection;
public class PacketHomeMarkPointNotify extends BasePacket {
@@ -13,6 +17,26 @@ public class PacketHomeMarkPointNotify extends BasePacket {
var proto = HomeMarkPointNotifyOuterClass.HomeMarkPointNotify.newBuilder();
for(var moduleId : player.getRealmList()){
var homeScene = home.getHomeSceneItem(moduleId + 2000);
var markPointData = HomeMarkPointSceneDataOuterClass.HomeMarkPointSceneData.newBuilder()
.setModuleId(moduleId)
.setSceneId(moduleId + 2000)
.setTeapotSpiritPos(homeScene.getDjinnPos().toProto());
// Now it only supports the teleport point
// TODO add more types
var marks = homeScene.getBlockItems().values().stream()
.map(HomeBlockItem::getDeployFurnitureList)
.flatMap(Collection::stream)
.filter(i -> i.getFurnitureId() == 373501)
.map(x -> x.toMarkPointProto(3))
.toList();
markPointData.addAllFurnitureList(marks);
proto.addMarkPointDataList(markPointData);
}
this.setData(proto);
}