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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user