fix(server): restore achievements, progress, claims and experience

Load ordinary achievements and send transactional gameplay progress notifications.
Restore main-story clears and recorded gacha history without duplicate credit.
Validate claim thresholds and prior tiers, credit wallet rewards and persist
achievement experience in login responses.
This commit is contained in:
2026-10-04 19:54:26 +08:00
parent 5b5a219dc2
commit aec053f7d2
23 changed files with 1464 additions and 27 deletions
+21
View File
@@ -685,6 +685,24 @@ func serve(args []string) (serveErr error) {
if err != nil {
return fmt.Errorf("load achievement counter state: %w", err)
}
if err := missionService.AttachAchievementProgress(achievementCounters); err != nil {
return fmt.Errorf("attach achievement completion validation: %w", err)
}
if err := login.AttachAchievementExperience(missionService); err != nil {
return fmt.Errorf("attach persisted achievement experience: %w", err)
}
achievementGrades, err := gamedata.LoadGameplayAchievementGrades(gameData, *gameDataVersion)
if err != nil {
return fmt.Errorf("load achievement gameplay grades: %w", err)
}
achievementObserver, err := world.NewGameplayAchievementObserver(achievementCounters,
worldService.GameplayAchievementProvider(achievementCounterDesign, achievementGrades))
if err != nil {
return fmt.Errorf("initialize achievement gameplay observer: %w", err)
}
if err := achievementObserver.SyncRecordedHistory(); err != nil {
return fmt.Errorf("restore recorded achievement history: %w", err)
}
game, err := session.NewServerWithProgress(login, progressState,
battleService,
worldService,
@@ -715,6 +733,9 @@ func serve(args []string) (serveErr error) {
if err != nil {
return err
}
if err := game.AttachResponseObserver(achievementObserver); err != nil {
return fmt.Errorf("attach achievement progress notifications: %w", err)
}
if authService != nil {
if err := game.AttachLoginAuthenticator(authService); err != nil {
return err