From e0c0ed688dec14544dbc3a5d049e47335649f0f1 Mon Sep 17 00:00:00 2001 From: Thoronium <107363768+NotThorny@users.noreply.github.com> Date: Sun, 29 Jan 2023 21:59:39 -0700 Subject: [PATCH] Make 'seen' status persistent --- src/main/java/emu/grasscutter/game/player/Player.java | 11 +++++++++++ .../server/packet/recv/HandlerHomeModuleSeenReq.java | 9 ++++++++- .../packet/send/PacketPlayerHomeCompInfoNotify.java | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/emu/grasscutter/game/player/Player.java b/src/main/java/emu/grasscutter/game/player/Player.java index e6851e6ad..ea7bc46b8 100644 --- a/src/main/java/emu/grasscutter/game/player/Player.java +++ b/src/main/java/emu/grasscutter/game/player/Player.java @@ -119,6 +119,7 @@ public class Player { @Getter @Setter private Set rewardedLevels; @Getter @Setter private Set homeRewardedLevels; @Getter @Setter private Set realmList; + @Getter @Setter private Set seenRealmList; @Getter private Set unlockedForgingBlueprints; @Getter private Set unlockedCombines; @Getter private Set unlockedFurniture; @@ -250,6 +251,7 @@ public class Player { this.birthday = new PlayerBirthday(); this.rewardedLevels = new HashSet<>(); this.homeRewardedLevels = new HashSet<>(); + this.seenRealmList = new HashSet<>(); this.moonCardGetTimes = new HashSet<>(); this.codex = new PlayerCodex(this); this.progressManager = new PlayerProgressManager(this); @@ -398,6 +400,15 @@ public class Player { } } + public void addSeenRealmList(int seenId) { + if (this.seenRealmList == null) { + this.seenRealmList = new HashSet<>(); + } else if (this.seenRealmList.contains(seenId)) { + return; + } + this.seenRealmList.add(seenId); + } + public int getExpeditionLimit() { final int CONST_VALUE_EXPEDITION_INIT_LIMIT = 2; // TODO: pull from ConstValueExcelConfigData.json int expeditionLimit = CONST_VALUE_EXPEDITION_INIT_LIMIT; diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerHomeModuleSeenReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerHomeModuleSeenReq.java index 4f29592db..fa7c92775 100644 --- a/src/main/java/emu/grasscutter/server/packet/recv/HandlerHomeModuleSeenReq.java +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerHomeModuleSeenReq.java @@ -6,6 +6,7 @@ import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.proto.HomeModuleSeenReqOuterClass.HomeModuleSeenReq; import emu.grasscutter.server.game.GameSession; import emu.grasscutter.server.packet.send.PacketHomeModuleSeenRsp; +import emu.grasscutter.server.packet.send.PacketPlayerHomeCompInfoNotify; @Opcodes(PacketOpcodes.HomeModuleSeenReq) public class HandlerHomeModuleSeenReq extends PacketHandler { @@ -13,7 +14,13 @@ public class HandlerHomeModuleSeenReq extends PacketHandler { public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { var req = HomeModuleSeenReq.parseFrom(payload); var seen = req.getSeenModuleIdListList(); - // TODO: Make 'seen' status persist + + // As multiple may be seen at once, add each + for (int i : seen) { + session.getPlayer().addSeenRealmList(i); + } + + session.send(new PacketPlayerHomeCompInfoNotify(session.getPlayer())); session.send(new PacketHomeModuleSeenRsp(seen)); } } diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerHomeCompInfoNotify.java b/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerHomeCompInfoNotify.java index db65f93c5..0560fe062 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerHomeCompInfoNotify.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerHomeCompInfoNotify.java @@ -20,6 +20,7 @@ public class PacketPlayerHomeCompInfoNotify extends BasePacket { .setCompInfo( PlayerHomeCompInfoOuterClass.PlayerHomeCompInfo.newBuilder() .addAllUnlockedModuleIdList(player.getRealmList()) + .addAllSeenModuleIdList(player.getSeenRealmList()) .addAllLevelupRewardGotLevelList(player.getHomeRewardedLevels()) .setFriendEnterHomeOptionValue(player.getHome().getEnterHomeOption()) .build()