From 557197ef62b96a3e1930db4e5d5da580572a3545 Mon Sep 17 00:00:00 2001 From: Flechazo <2558755403@qq.com> Date: Sun, 4 Oct 2026 14:59:58 +0800 Subject: [PATCH] fix: ignore disabled zero-count pack purchase rewards --- go/internal/server/gamedata/story_catalog.go | 7 ++++++- go/internal/server/gamedata/story_catalog_test.go | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/go/internal/server/gamedata/story_catalog.go b/go/internal/server/gamedata/story_catalog.go index d809f97..1a7411a 100644 --- a/go/internal/server/gamedata/story_catalog.go +++ b/go/internal/server/gamedata/story_catalog.go @@ -111,7 +111,12 @@ func loadStoryCatalog(db *sql.DB) (*StoryCatalog, error) { return nil, fmt.Errorf("gamedata: invalid story pack%d buy rewards", id) } for i, count := range counts { - if count == 0 || types[i] == 0 { + // PackTable may retain a disabled reward slot with a real type/ID + // and zero count. It contributes no granted reward. + if count == 0 { + continue + } + if types[i] == 0 || count > math.MaxInt32 || types[i] > math.MaxInt32 || ids[i] > math.MaxInt32 { rows.Close() return nil, fmt.Errorf("gamedata: invalid story pack%d buy reward", id) } diff --git a/go/internal/server/gamedata/story_catalog_test.go b/go/internal/server/gamedata/story_catalog_test.go index 84799ff..0849fd1 100644 --- a/go/internal/server/gamedata/story_catalog_test.go +++ b/go/internal/server/gamedata/story_catalog_test.go @@ -26,6 +26,11 @@ func TestStoryCatalogEnumeratesSeparateChainsAndContentTicketRules(t *testing.T) raw = wire.AppendVarint(raw, 8, 1) raw = wire.AppendVarint(raw, 9, 100) raw = wire.AppendVarint(raw, 10, 19) + // An official-shaped disabled costume slot must be equivalent + // to omitting that slot; type and ID remain populated. + raw = wire.AppendVarint(raw, 8, 0) + raw = wire.AppendVarint(raw, 9, 200) + raw = wire.AppendVarint(raw, 10, 11) } if _, err = db.Exec("INSERT INTO PackTable VALUES(?,?)", pack.id, raw); err != nil { t.Fatal(err)