fix: home transfer (#2327)

* fix: home transfer

* Update HomeSceneItem.java
This commit is contained in:
hamusuke
2023-09-03 08:04:02 +09:00
committed by GitHub
Unverified
parent f8fb6732de
commit 1894296ed4
6 changed files with 150 additions and 137 deletions
@@ -1,11 +1,11 @@
package emu.grasscutter.server.packet.recv;
import com.github.davidmoten.guavamini.Lists;
import emu.grasscutter.game.home.HomeFurnitureItem;
import emu.grasscutter.net.packet.*;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeTransferReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import java.util.List;
@Opcodes(PacketOpcodes.HomeTransferReq)
public class HandlerHomeTransferReq extends PacketHandler {
@@ -16,28 +16,15 @@ public class HandlerHomeTransferReq extends PacketHandler {
var home = player.getCurHomeWorld().getHome();
var item = home.getHomeSceneItem(player.getSceneId());
if (req.getIsTransferToSafePoint()) {
player
.getCurHomeWorld()
.transferPlayerToScene(player, player.getSceneId(), item.getBornPos());
} else {
for (var homeBlockItem : item.getBlockItems().values()) {
List<HomeFurnitureItem> items = Lists.newArrayList();
items.addAll(homeBlockItem.getDeployFurnitureList());
items.addAll(homeBlockItem.getPersistentFurnitureList());
items.stream()
.filter(homeFurnitureItem -> homeFurnitureItem.getGuid() == req.getGuid())
.findFirst()
.ifPresent(
homeFurnitureItem -> {
player
.getCurHomeWorld()
.transferPlayerToScene(
player, player.getSceneId(), homeFurnitureItem.getSpawnPos());
});
var pos = req.getIsTransferToMainHousePoint() ? item.getBornPos() : player.getCurHomeWorld().getSceneById(player.getSceneId()).getScriptManager().getConfig().born_pos;
if (req.getGuid() != 0) {
var target = item.getTeleportPointPos(req.getGuid());
if (target != null) {
pos = target;
}
}
player.getCurHomeWorld().transferPlayerToScene(player, player.getSceneId(), pos);
session.send(new BasePacket(PacketOpcodes.HomeTransferRsp));
}
}
@@ -1,8 +1,12 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.home.GameHome;
import emu.grasscutter.net.packet.*;
import emu.grasscutter.net.proto.*;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.FriendEnterHomeOptionOuterClass;
import emu.grasscutter.net.proto.RetcodeOuterClass;
import emu.grasscutter.net.proto.TryEnterHomeReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketTryEnterHomeRsp;
@@ -45,15 +49,16 @@ public class HandlerTryEnterHomeReq extends PacketHandler {
RetcodeOuterClass.Retcode.RET_HOME_HOME_REFUSE_GUEST_ENTER_VALUE,
req.getTargetUid()));
}
case FriendEnterHomeOptionOuterClass.FriendEnterHomeOption
.FRIEND_ENTER_HOME_OPTION_DIRECT_VALUE -> {
session.getServer().getHomeWorldMPSystem().enterHome(session.getPlayer(), targetPlayer);
case FriendEnterHomeOptionOuterClass.FriendEnterHomeOption.FRIEND_ENTER_HOME_OPTION_DIRECT_VALUE -> {
session.getServer().getHomeWorldMPSystem().enterHome(session.getPlayer(), targetPlayer, req.getTargetPoint(), req.getIsTransferToSafePoint());
}
}
return;
}
session.getServer().getHomeWorldMPSystem().enterHome(session.getPlayer(), targetPlayer);
session.getServer().getHomeWorldMPSystem().enterHome(session.getPlayer(), targetPlayer, req.getTargetPoint(), req.getIsTransferToSafePoint());
}
}