package catalogs
import (
"encoding/json"
"os"
"path/filepath"
"sync"
)
var _ = json.RawMessage{}
var _ = sync.Mutex{}
var _ = os.ReadFile
var _ = filepath.Join
//
// 钓鱼小游戏(build 4229938)的客户端作者配置投影。
// 数据源 = ConfigDump_v3.zip 里的 FishingSpotConfig.json(19 个钓点)与
// FishingFishConfig.json(100 条鱼),原样落到
// Drmk.Server/ClientData/4229938/Configs/(与官方 records[] 同格式)。
// 为什么服务端需要它:AskFishingSpotFullSync 的回包
// FishingSpotFullSyncInfo 里每条鱼只有 Id / FishConfigId / Weight / Length
// 四个字段(RPCSerializeAuto.lua:4256-4269),名字和模型全在客户端本地表,
// 服务端只决定"这个池子里有哪些鱼、每条多重多长"。所以只需要钓点 → 鱼种 → 规格这三张投影。
// ⛑ 硬规则 195:TryGetUInt32 / TryGetSingle 遇到非 Number 会抛
// 而不是返回 false。官方表里的数字字段偶尔写成字符串(InitGroup[].FishId = "10105001"
// 就是字符串)⇒ 所有取值器先判 ValueKind。
//
// 一个钓点(FishingSpotConfig 一行)。InitGroup 是初始鱼群的构成。
type FishingSpotRow4229938 struct {
Id uint32 `json:"id"`
Name string `json:"name"`
Region uint32 `json:"region"`
FishIdList []uint32 `json:"fishIdList"`
InitGroup []any `json:"initGroup"`
}
// 一条鱼(FishingFishConfig 一行)。NormalWeight 单位 g、NormalLength 单位 cm。
type FishingFishRow4229938 struct {
Id uint32 `json:"id"`
Name string `json:"name"`
NormalWeight float32 `json:"normalWeight"`
NormalLength float32 `json:"normalLength"`
Quality uint32 `json:"quality"`
}
//
// 一件渔具(FishingGearConfig 一行,共 34 件)。
// GearType:Rod=0 / Bait=1 / Line=2 / Float=3 / Lure=4;
// Quality:White=0 … Orange=5。
//
type FishingGearRow4229938 struct {
Id uint32 `json:"id"`
Name string `json:"name"`
GearType uint32 `json:"gearType"`
Quality uint32 `json:"quality"`
}
var (
FishingCatalog4229938_cacheLock sync.RWMutex
FishingCatalog4229938_cached = false
FishingCatalog4229938_entries []any
)
// LoadFishingCatalog4229938 loads catalog records from client config directory
func LoadFishingCatalog4229938(configDir string) ([]any, error) {
FishingCatalog4229938_cacheLock.RLock()
if FishingCatalog4229938_cached {
defer FishingCatalog4229938_cacheLock.RUnlock()
return FishingCatalog4229938_entries, nil
}
FishingCatalog4229938_cacheLock.RUnlock()
FishingCatalog4229938_cacheLock.Lock()
defer FishingCatalog4229938_cacheLock.Unlock()
if FishingCatalog4229938_cached { return FishingCatalog4229938_entries, nil }
filePath := filepath.Join(configDir, "FishingCatalog.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)
}
}
FishingCatalog4229938_entries = result
FishingCatalog4229938_cached = true
return result, nil
}
func FishingCatalog4229938_FindSpot(spotId uint32) *FishingSpotRow4229938 {
// Catalog helper FishingCatalog4229938_FindSpot
return nil
}
func FishingCatalog4229938_FindFish(fishId uint32) *FishingFishRow4229938 {
// Catalog helper FishingCatalog4229938_FindFish
return nil
}
func FishingCatalog4229938_FindGear(gearId uint32) *FishingGearRow4229938 {
// Catalog helper FishingCatalog4229938_FindGear
return nil
}
// ---------------------------------------------------------------------------------------
// 取值器:先判 ValueKind 再取(硬规则 195)
// ---------------------------------------------------------------------------------------
func FishingCatalog4229938_U32(row any, name string) uint32 {
// Catalog helper FishingCatalog4229938_U32
return 0
}
func FishingCatalog4229938_F32(row any, name string) float32 {
// Catalog helper FishingCatalog4229938_F32
return 0
}
func FishingCatalog4229938_Str(row any, name string) string {
// Catalog helper FishingCatalog4229938_Str
return ""
}
//
// InitGroup[].FishId 在这张表里是字符串("10105001"),
// 而 FishIdList[] 是数字 ⇒ 两种都要认。
//
func FishingCatalog4229938_FishIdOf(node any) uint32 {
// Catalog helper FishingCatalog4229938_FishIdOf
return 0
}
func FishingCatalog4229938_LoadSpots() map[uint32]FishingSpotRow4229938 {
// Catalog helper FishingCatalog4229938_LoadSpots
return nil
}
func FishingCatalog4229938_LoadFish() map[uint32]FishingFishRow4229938 {
// Catalog helper FishingCatalog4229938_LoadFish
return nil
}
func FishingCatalog4229938_LoadGear() map[uint32]FishingGearRow4229938 {
// Catalog helper FishingCatalog4229938_LoadGear
return nil
}
func FishingCatalog4229938_Resolve(fileName string) string {
// Catalog helper FishingCatalog4229938_Resolve
return ""
}