mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-15 08:25:21 +01:00
feat: set friend enter home option (#1860)
This commit is contained in:
@@ -38,6 +38,7 @@ public class GameHome {
|
||||
List<FurnitureMakeSlotItem> furnitureMakeSlotItemList;
|
||||
ConcurrentHashMap<Integer, HomeSceneItem> sceneMap;
|
||||
Set<Integer> unlockedHomeBgmList;
|
||||
int enterHomeOption;
|
||||
|
||||
public void save() {
|
||||
DatabaseHelper.saveHome(this);
|
||||
|
||||
@@ -939,7 +939,8 @@ public class Player {
|
||||
.setIsShowAvatar(this.isShowAvatars())
|
||||
.addAllShowAvatarInfoList(socialShowAvatarInfoList)
|
||||
.addAllShowNameCardIdList(this.getShowNameCardInfoList())
|
||||
.setFinishAchievementNum(0);
|
||||
.setFinishAchievementNum(0)
|
||||
.setFriendEnterHomeOptionValue(this.getHome() == null ? 0 : this.getHome().getEnterHomeOption());
|
||||
return social;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.SetFriendEnterHomeOptionReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketPlayerHomeCompInfoNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketSetFriendEnterHomeOptionRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.SetFriendEnterHomeOptionReq)
|
||||
public class HandlerSetFriendEnterHomeOptionReq extends PacketHandler {
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = SetFriendEnterHomeOptionReqOuterClass.SetFriendEnterHomeOptionReq.parseFrom(payload);
|
||||
|
||||
session.getPlayer().getHome().setEnterHomeOption(req.getOptionValue());
|
||||
session.getPlayer().getHome().save();
|
||||
|
||||
session.send(new PacketPlayerHomeCompInfoNotify(session.getPlayer()));
|
||||
session.send(new PacketSetFriendEnterHomeOptionRsp());
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,12 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.home.GameHome;
|
||||
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.FriendEnterHomeOptionOuterClass;
|
||||
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||
import emu.grasscutter.net.proto.TryEnterHomeReqOuterClass;
|
||||
import emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportType;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
@@ -15,11 +18,26 @@ public class HandlerTryEnterHomeReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
TryEnterHomeReqOuterClass.TryEnterHomeReq req =
|
||||
TryEnterHomeReqOuterClass.TryEnterHomeReq.parseFrom(payload);
|
||||
var req = TryEnterHomeReqOuterClass.TryEnterHomeReq.parseFrom(payload);
|
||||
var targetPlayer = session.getServer().getPlayerByUid(req.getTargetUid(), true);
|
||||
|
||||
if (req.getTargetUid() != session.getPlayer().getUid()) {
|
||||
// I hope that tomorrow there will be a hero who can support multiplayer mode and write code like a poem
|
||||
var targetHome = GameHome.getByUid(req.getTargetUid());
|
||||
switch (targetHome.getEnterHomeOption()) {
|
||||
case FriendEnterHomeOptionOuterClass.FriendEnterHomeOption.FRIEND_ENTER_HOME_OPTION_NEED_CONFIRM_VALUE:
|
||||
if (!targetPlayer.isOnline()) {
|
||||
session.send(new PacketTryEnterHomeRsp(RetcodeOuterClass.Retcode.RET_HOME_OWNER_OFFLINE_VALUE, req.getTargetUid()));
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case FriendEnterHomeOptionOuterClass.FriendEnterHomeOption.FRIEND_ENTER_HOME_OPTION_REFUSE_VALUE:
|
||||
session.send(new PacketTryEnterHomeRsp(RetcodeOuterClass.Retcode.RET_HOME_HOME_REFUSE_GUEST_ENTER_VALUE, req.getTargetUid()));
|
||||
return;
|
||||
case FriendEnterHomeOptionOuterClass.FriendEnterHomeOption.FRIEND_ENTER_HOME_OPTION_DIRECT_VALUE:
|
||||
break;
|
||||
}
|
||||
|
||||
session.send(new PacketTryEnterHomeRsp());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ public class PacketPlayerHomeCompInfoNotify extends BasePacket {
|
||||
PlayerHomeCompInfoOuterClass.PlayerHomeCompInfo.newBuilder()
|
||||
.addAllUnlockedModuleIdList(player.getRealmList())
|
||||
.addAllLevelupRewardGotLevelList(List.of(1)) // Hardcoded
|
||||
.setFriendEnterHomeOptionValue(player.getHome().getEnterHomeOption())
|
||||
.build()
|
||||
)
|
||||
.build();
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
|
||||
public class PacketSetFriendEnterHomeOptionRsp extends BasePacket {
|
||||
public PacketSetFriendEnterHomeOptionRsp() {
|
||||
super(PacketOpcodes.SetFriendEnterHomeOptionRsp);
|
||||
}
|
||||
}
|
||||
@@ -27,4 +27,15 @@ public class PacketTryEnterHomeRsp extends BasePacket {
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
public PacketTryEnterHomeRsp(int retCode, int uid) {
|
||||
super(PacketOpcodes.TryEnterHomeRsp);
|
||||
|
||||
TryEnterHomeRspOuterClass.TryEnterHomeRsp proto = TryEnterHomeRspOuterClass.TryEnterHomeRsp.newBuilder()
|
||||
.setRetcode(retCode)
|
||||
.setTargetUid(uid)
|
||||
.build();
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user