fix(server): allow restoring the saved arena lobby

This commit is contained in:
2026-10-04 12:09:39 +08:00
parent 39e0a99201
commit c29204dcb0
4 changed files with 81 additions and 30 deletions
@@ -32,6 +32,38 @@ func TestArenaPositionRestoresAcrossRestartWithoutStoryQuestOrRepurchase(t *test
if pack, err := s.LastPlayedPackID(); err != nil || pack != 3001 {
t.Fatalf("restored login pack=%d err=%v", pack, err)
}
s.fieldPacks[3002] = gamedata.FieldPack{ID: 3002, Type: 3, MapIDs: map[int]bool{30021: true}}
accountInfo := s.accountPackInfo()
arenaRows := 0
if err := wire.Walk(accountInfo, func(field wire.Field) error {
if field.Number == 1 {
id, _, _ := wire.Varint(field.Value, 1)
if id == 3002 {
t.Fatal("unvisited arena was exposed as purchased")
}
if id == 3001 {
arenaRows++
buy, _, _ := wire.Varint(field.Value, 8)
if buy != 1 {
t.Fatal("saved arena missing purchased marker")
}
if err := wire.Walk(field.Value, func(inner wire.Field) error {
if inner.Number != 1 && inner.Number != 8 {
t.Fatalf("saved arena fabricated field %d", inner.Number)
}
return nil
}); err != nil {
return err
}
}
}
return nil
}); err != nil {
t.Fatal(err)
}
if arenaRows != 1 {
t.Fatalf("saved arena rows=%d", arenaRows)
}
request = wire.AppendVarint(wire.AppendVarint(nil, 1, 1), 2, 3001)
code, body, handled, err := s.Handle("/PackInGameInfo", request)
if err != nil || !handled || code != 5 {