Skip to content

Commit

Permalink
Fixes #243
Browse files Browse the repository at this point in the history
Challenges level status for unlocking should look on previous level waiver amount, not on its value.
Also, if second level is marked as locked, then all next levels should also be marked as locked.
  • Loading branch information
BONNe committed Jun 17, 2020
1 parent 679fe48 commit dd8834f
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/main/java/world/bentobox/challenges/ChallengesManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -1107,6 +1107,7 @@ private List<LevelStatus> getAllChallengeLevelStatus(String storageDataID, Strin
// The first level is always unlocked and previous for it is null.
ChallengeLevel previousLevel = null;
int doneChallengeCount = 0;
boolean previousUnlocked = true;

// For each challenge level, check how many the storageDataID has done
for (ChallengeLevel level : challengeLevelList)
Expand All @@ -1116,20 +1117,25 @@ private List<LevelStatus> getAllChallengeLevelStatus(String storageDataID, Strin
// remove waiver amount to get count of challenges that still necessary to do.

int challengesToDo = previousLevel == null ? 0 :
(previousLevel.getChallenges().size() - doneChallengeCount - level.getWaiverAmount());
(previousLevel.getChallenges().size() - doneChallengeCount - previousLevel.getWaiverAmount());

// As level already contains unique ids of challenges, just iterate through them.
doneChallengeCount = (int) level.getChallenges().stream().filter(playerData::isChallengeDone).count();

// Mark if level is unlocked
boolean unlocked = previousUnlocked && challengesToDo <= 0;

result.add(new LevelStatus(
level,
previousLevel,
challengesToDo,
level.getChallenges().size() == doneChallengeCount,
challengesToDo <= 0));
unlocked));

previousLevel = level;
previousUnlocked = unlocked;
}

return result;
}

Expand Down Expand Up @@ -1160,7 +1166,7 @@ private LevelStatus getChallengeLevelStatus(@NonNull String storageDataID, World
ChallengeLevel previousLevel = levelIndex < 1 ? null : challengeLevelList.get(levelIndex - 1);

int challengesToDo = previousLevel == null ? 0 :
(previousLevel.getChallenges().size() - level.getWaiverAmount()) -
(previousLevel.getChallenges().size() - previousLevel.getWaiverAmount()) -
(int) previousLevel.getChallenges().stream().filter(playerData::isChallengeDone).count();

// As level already contains unique ids of challenges, just iterate through them.
Expand Down

0 comments on commit dd8834f

Please sign in to comment.