From b266854c72276735cadf702af9ec71bddfda2d27 Mon Sep 17 00:00:00 2001 From: GanyusLeftHorn <1244229+GanyusLeftHorn@users.noreply.github.com> Date: Mon, 18 Jul 2022 20:58:35 -0700 Subject: [PATCH] Handle existing players who might already have passed a level. --- src/main/java/emu/grasscutter/game/player/Player.java | 6 +++++- .../grasscutter/game/player/PlayerOpenStateManager.java | 8 +++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/emu/grasscutter/game/player/Player.java b/src/main/java/emu/grasscutter/game/player/Player.java index 8f1d2ceb..d4be0f3a 100644 --- a/src/main/java/emu/grasscutter/game/player/Player.java +++ b/src/main/java/emu/grasscutter/game/player/Player.java @@ -463,7 +463,7 @@ public class Player { this.updateProfile(); // Handle OpenState unlocks from level-up. - this.getOpenStateManager().onPlayerLevelUp(); + this.getOpenStateManager().unlockLevelDependentStates(); return true; } @@ -1535,7 +1535,11 @@ public class Player { this.forgingManager.sendForgeDataNotify(); this.resinManager.onPlayerLogin(); this.cookingManager.sendCookDataNofity(); + + // Unlock in case this is an existing user that reached a level before we implemented unlocking. + this.openStateManager.unlockLevelDependentStates(); this.openStateManager.onPlayerLogin(); + getTodayMoonCard(); // The timer works at 0:0, some users log in after that, use this method to check if they have received a reward today or not. If not, send the reward. // Battle Pass trigger diff --git a/src/main/java/emu/grasscutter/game/player/PlayerOpenStateManager.java b/src/main/java/emu/grasscutter/game/player/PlayerOpenStateManager.java index ae569106..7d18f059 100644 --- a/src/main/java/emu/grasscutter/game/player/PlayerOpenStateManager.java +++ b/src/main/java/emu/grasscutter/game/player/PlayerOpenStateManager.java @@ -55,11 +55,9 @@ public class PlayerOpenStateManager { public void setOpenState(OpenState openState, Integer value) { Integer previousValue = this.map.getOrDefault(openState.getValue(),0); - if(!(value == previousValue)) { + if(value != previousValue) { this.map.put(openState.getValue(), value); player.getSession().send(new PacketOpenStateChangeNotify(openState.getValue(),value)); - } else { - Grasscutter.getLogger().debug("Warning: OpenState {} is already set to {}!", openState, value); } } @@ -73,9 +71,9 @@ public class PlayerOpenStateManager { player.getSession().send(new PacketOpenStateUpdateNotify(this)); } - public void onPlayerLevelUp() { + public void unlockLevelDependentStates() { Stream.of(OpenState.values()) - .filter(s -> s.getUnlockLevel() == this.player.getLevel()) + .filter(s -> s.getUnlockLevel() > 1 && s.getUnlockLevel() <= this.player.getLevel()) .forEach(s -> this.setOpenState(s, 1)); } } \ No newline at end of file -- GitLab