Files
bd2/go/internal/server/gamedata/mini_content.go
T
Flechazo 924a42c32e fix(all): complete activity calendars, shop purchases and reward dispatch
Restore event and mini hubs, current shop and hunt calendars, and regular seasons; preserve all published windows. Implement story/quiz routes, native shop purchases, avatar sets, currencies, rank-change items and permanent buffs with rollback and reward coverage tests. Refresh client buff stats and update Cash Shop to 0.1.1.
2026-10-05 15:49:50 +08:00

88 lines
1.8 KiB
Go

package gamedata
import "fmt"
type MiniContentRoute struct {
UID, ContentType, ContentID uint64
Start, End int64
}
type MiniContentDesign struct {
Stories map[uint64]Reward
Groups map[uint64][]uint64
}
func LoadMiniContentDesign(root, version string) (*MiniContentDesign, error) {
db, done, err := openStatDatabase(root, version)
if err != nil {
return nil, err
}
defer done()
d := &MiniContentDesign{Stories: map[uint64]Reward{}, Groups: map[uint64][]uint64{}}
rows, err := db.Query("SELECT ProtoBuf FROM DailyStoryTable")
if err != nil {
return nil, err
}
for rows.Next() {
var raw []byte
if err = rows.Scan(&raw); err != nil {
rows.Close()
return nil, err
}
id, e := optionalScalar(raw, 2)
if e != nil {
rows.Close()
return nil, e
}
var r Reward
for field, target := range map[int]*uint64{10: &r.Type, 9: &r.ID, 8: &r.Count} {
v, e := optionalScalar(raw, field)
if e != nil {
rows.Close()
return nil, e
}
*target = v
}
d.Stories[id] = r
}
err = rows.Err()
rows.Close()
if err != nil {
return nil, err
}
rows, err = db.Query("SELECT ProtoBuf FROM MiniEventStoryTable")
if err != nil {
return nil, err
}
for rows.Next() {
var raw []byte
if err = rows.Scan(&raw); err != nil {
rows.Close()
return nil, err
}
id, e := optionalScalar(raw, 1)
if e != nil {
rows.Close()
return nil, e
}
group, e := optionalScalar(raw, 2)
if e != nil {
rows.Close()
return nil, e
}
d.Groups[group] = append(d.Groups[group], id)
}
err = rows.Err()
rows.Close()
if err == nil {
for group, ids := range d.Groups {
for _, id := range ids {
if _, exists := d.Stories[id]; !exists {
return nil, fmt.Errorf("gamedata: mini story group %d references missing daily story %d", group, id)
}
}
}
}
return d, err
}