Rework how quest/achievement conditions are handled

This commit is contained in:
Melledy
2025-11-30 17:06:08 -08:00
parent a04f3354f7
commit 6f7a92725a
21 changed files with 143 additions and 71 deletions

View File

@@ -45,6 +45,12 @@ public class AchievementManager extends PlayerManager implements GameDatabaseObj
this.save();
}
public synchronized int getCompletedAchievementsCount() {
return (int) this.getAchievements().values().stream()
.filter(GameAchievement::isComplete)
.count();
}
/**
* Returns true if there are any unclaimed achievements
*/
@@ -73,6 +79,9 @@ public class AchievementManager extends PlayerManager implements GameDatabaseObj
}
public synchronized void handleClientEvents(Events events) {
//
boolean hasCompleted = false;
// Parse events
for (var event : events.getList()) {
// Check id
@@ -115,16 +124,31 @@ public class AchievementManager extends PlayerManager implements GameDatabaseObj
// Set save flag
this.queueSave = true;
// Check if achievement was completed
if (achievement.isComplete()) {
hasCompleted = true;
}
}
}
// Trigger update
if (hasCompleted) {
this.getPlayer().trigger(AchievementCondition.AchievementTotal, this.getCompletedAchievementsCount());
}
}
public synchronized void trigger(AchievementCondition condition, int progress, int param1, int param2) {
public synchronized void trigger(int condition, int progress, int param1, int param2) {
// Sanity check
if (progress <= 0) {
return;
}
// Blacklist
if (condition == AchievementCondition.ClientReport.getValue()) {
return;
}
// Get achievements to trigger
var triggerList = AchievementHelper.getAchievementsByCondition(condition);
@@ -133,7 +157,8 @@ public class AchievementManager extends PlayerManager implements GameDatabaseObj
}
// Check what type of achievement condition this is
boolean isTotal = condition.name().endsWith("Total");
boolean isTotal = AchievementHelper.isTotalAchievement(condition);
boolean hasCompleted = false;
// Parse achievements
for (var data : triggerList) {
@@ -150,8 +175,18 @@ public class AchievementManager extends PlayerManager implements GameDatabaseObj
// Set save flag
this.queueSave = true;
// Check if achievement was completed
if (achievement.isComplete()) {
hasCompleted = true;
}
}
}
// Trigger update
if (hasCompleted) {
this.getPlayer().trigger(AchievementCondition.AchievementTotal, this.getCompletedAchievementsCount());
}
}
/**