This repository has been archived on 2026-10-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Ananta-ps/internal/catalogs/badge_catalog4229938.go

114 lines
3.8 KiB
Go

package catalogs
import (
"encoding/json"
"os"
"path/filepath"
"sync"
)
var _ = json.RawMessage{}
var _ = sync.Mutex{}
var _ = os.ReadFile
var _ = filepath.Join
//
// One urban badge row, projected from UrbanBadgeConfig.json by _gen_ach_cfg.py.
// Rows flagged OnlyServer are already filtered out at projection time: the client's
// SpiritManager.FilterBadge drops them, so shipping them in the login payload would be pointless
// payload weight. 148 of the authored 207 rows survive that filter.
//
type BadgeEntry4229938 struct {
Id uint32 `json:"id"`
Type uint32 `json:"type"`
JobId uint32 `json:"jobId"`
Name string `json:"name"`
Buffs []uint32 `json:"buffs"`
}
//
// Build-4229938 badge catalog. The source table is UrbanBadgeConfig.json — note it is NOT called
// "BadgeConfig"; the login payload carries BadgeInfo rows whose TemplateId indexes this table.
// It does not ship in the v0.3 Configs folder either; it comes from 补丁和工具\ConfigDump.zip.
// Regenerate with _gen_ach_cfg.py.
// The client reads badges straight out of the login payload:
// lua/LX6/Data/Player/PlayerData/PlayerInfoMinorData.lua:94
// t.Badges = gSpiritManager:FilterBadge(info.InfoMinor.Badges)
// lua/LX6/GUI/Spirit/SpiritManager.lua:200
// if cfg and not cfg.OnlyServer then filterBadge[v.TemplateId] = v end
// Two consequences for how the payload must be built:
// 1. the dictionary key is expected to be the UrbanBadgeConfig id (FilterBadge re-keys by
// TemplateId, and consumers look up badges[cfg.Id]);
// 2. every consumer additionally tests BadgeInfo.Active — UrbanAbilityBadgePanelStore:325,
// UrbanAbilityBadgeV2PanelStore:228, TalentTreeMgr:1528, AkxFuxiExtraArgFuncs:28.
// The badge UI is gated on SystemUnlockConfig id 148 ("徽章"), which the login payload already
// unlocks along with every other authored system.
//
var (
BadgeCatalog4229938_cacheLock sync.RWMutex
BadgeCatalog4229938_cached = false
BadgeCatalog4229938_entries []any
)
// LoadBadgeCatalog4229938 loads catalog records from client config directory
func LoadBadgeCatalog4229938(configDir string) ([]any, error) {
BadgeCatalog4229938_cacheLock.RLock()
if BadgeCatalog4229938_cached {
defer BadgeCatalog4229938_cacheLock.RUnlock()
return BadgeCatalog4229938_entries, nil
}
BadgeCatalog4229938_cacheLock.RUnlock()
BadgeCatalog4229938_cacheLock.Lock()
defer BadgeCatalog4229938_cacheLock.Unlock()
if BadgeCatalog4229938_cached { return BadgeCatalog4229938_entries, nil }
filePath := filepath.Join(configDir, "BadgeCatalog.json.json")
data, err := os.ReadFile(filePath)
if err != nil {
return nil, err
}
var raw struct {
Records []json.RawMessage `json:"records"`
}
if err := json.Unmarshal(data, &raw); err != nil {
return nil, err
}
var result []any
for _, item := range raw.Records {
var m map[string]any
if err := json.Unmarshal(item, &m); err == nil {
result = append(result, m)
}
}
BadgeCatalog4229938_entries = result
BadgeCatalog4229938_cached = true
return result, nil
}
//
// Capability ids granted by the badges that belong to any of , i.e. the
// data-driven answer to "what does having this career actually let me do". UrbanBadgeConfig
// is the only table that links a job to a buff list; rows flagged OnlyServer were dropped
// at projection time, which keeps the two 低声望 negative debuffs (52606230/52606231) out.
// Only jobs 7 / 401 / 501 carry buffs today — 301/302/303 (police) are all OnlyServer or empty.
//
func BadgeCatalog4229938_BuffsForJobs(jobIds []uint32) []uint32 {
// Catalog helper BadgeCatalog4229938_BuffsForJobs
return nil
}
func BadgeCatalog4229938_UInt(row any, name string) uint32 {
// Catalog helper BadgeCatalog4229938_UInt
return 0
}
func BadgeCatalog4229938_ReadUInt32Array(row any, name string) []uint32 {
// Catalog helper BadgeCatalog4229938_ReadUInt32Array
return nil
}