Unverified Commit 610a364b authored by hamusuke's avatar hamusuke Committed by GitHub
Browse files

feat: set friend enter home option (#1860)

parent a4747abf
...@@ -38,6 +38,7 @@ public class GameHome { ...@@ -38,6 +38,7 @@ public class GameHome {
List<FurnitureMakeSlotItem> furnitureMakeSlotItemList; List<FurnitureMakeSlotItem> furnitureMakeSlotItemList;
ConcurrentHashMap<Integer, HomeSceneItem> sceneMap; ConcurrentHashMap<Integer, HomeSceneItem> sceneMap;
Set<Integer> unlockedHomeBgmList; Set<Integer> unlockedHomeBgmList;
int enterHomeOption;
public void save() { public void save() {
DatabaseHelper.saveHome(this); DatabaseHelper.saveHome(this);
......
...@@ -939,7 +939,8 @@ public class Player { ...@@ -939,7 +939,8 @@ public class Player {
.setIsShowAvatar(this.isShowAvatars()) .setIsShowAvatar(this.isShowAvatars())
.addAllShowAvatarInfoList(socialShowAvatarInfoList) .addAllShowAvatarInfoList(socialShowAvatarInfoList)
.addAllShowNameCardIdList(this.getShowNameCardInfoList()) .addAllShowNameCardIdList(this.getShowNameCardInfoList())
.setFinishAchievementNum(0); .setFinishAchievementNum(0)
.setFriendEnterHomeOptionValue(this.getHome() == null ? 0 : this.getHome().getEnterHomeOption());
return social; return social;
} }
......
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());
}
}
package emu.grasscutter.server.packet.recv; package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.home.GameHome;
import emu.grasscutter.game.world.Scene; import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.packet.Opcodes; import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes; 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.net.proto.TryEnterHomeReqOuterClass;
import emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportType; import emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportType;
import emu.grasscutter.server.game.GameSession; import emu.grasscutter.server.game.GameSession;
...@@ -15,11 +18,26 @@ public class HandlerTryEnterHomeReq extends PacketHandler { ...@@ -15,11 +18,26 @@ public class HandlerTryEnterHomeReq extends PacketHandler {
@Override @Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
TryEnterHomeReqOuterClass.TryEnterHomeReq req = var req = TryEnterHomeReqOuterClass.TryEnterHomeReq.parseFrom(payload);
TryEnterHomeReqOuterClass.TryEnterHomeReq.parseFrom(payload); var targetPlayer = session.getServer().getPlayerByUid(req.getTargetUid(), true);
if (req.getTargetUid() != session.getPlayer().getUid()) { 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 // 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()); session.send(new PacketTryEnterHomeRsp());
return; return;
} }
......
...@@ -23,6 +23,7 @@ public class PacketPlayerHomeCompInfoNotify extends BasePacket { ...@@ -23,6 +23,7 @@ public class PacketPlayerHomeCompInfoNotify extends BasePacket {
PlayerHomeCompInfoOuterClass.PlayerHomeCompInfo.newBuilder() PlayerHomeCompInfoOuterClass.PlayerHomeCompInfo.newBuilder()
.addAllUnlockedModuleIdList(player.getRealmList()) .addAllUnlockedModuleIdList(player.getRealmList())
.addAllLevelupRewardGotLevelList(List.of(1)) // Hardcoded .addAllLevelupRewardGotLevelList(List.of(1)) // Hardcoded
.setFriendEnterHomeOptionValue(player.getHome().getEnterHomeOption())
.build() .build()
) )
.build(); .build();
......
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 { ...@@ -27,4 +27,15 @@ public class PacketTryEnterHomeRsp extends BasePacket {
this.setData(proto); 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);
}
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment