fix(server): persist master profile to restore saved login pack

This commit is contained in:
2026-10-04 12:22:15 +08:00
parent c29204dcb0
commit 857381fad6
6 changed files with 313 additions and 5 deletions
+13
View File
@@ -39,6 +39,7 @@ import (
"bd2server/internal/server/session"
"bd2server/internal/server/transport"
"bd2server/internal/server/versionconfig"
"bd2server/internal/server/wire"
"bd2server/internal/server/world"
)
@@ -570,6 +571,14 @@ func serve(args []string) (serveErr error) {
if err := login.AttachFriendshipAP(friendshipService); err != nil {
return err
}
accountName, found, err := wire.Bytes(login.UserInfo, 2)
if err != nil || !found || len(accountName) == 0 {
return errors.New("account seed requires its existing display name for master title")
}
masterTitleService, err := player.OpenMasterTitleService(stateRepository, string(accountName))
if err != nil {
return fmt.Errorf("load master title: %w", err)
}
battleService := battle.NewService(gameData, *gameDataVersion, ownedItems, worldService.CurrentPackID)
characters := worldService.CharacterService()
battleService.AttachCommittedHealth(func(health map[uint64]uint64) error {
@@ -622,6 +631,7 @@ func serve(args []string) (serveErr error) {
costumePotentialService,
costumeBurstService,
friendshipService,
masterTitleService,
foodService,
starter,
mailService,
@@ -658,6 +668,9 @@ func serve(args []string) (serveErr error) {
return fmt.Errorf("mark account initialization complete: %w", err)
}
}
if err := masterTitleService.EnsurePersisted(); err != nil {
return fmt.Errorf("persist master title: %w", err)
}
problems, err := stateRepository.Validate()
if err != nil {
return fmt.Errorf("validate account state database: %w", err)