143 lines
5.8 KiB
Go
143 lines
5.8 KiB
Go
package catalogs
|
||||
|
|
|
|||
|
|
import (
|
|||
|
|
"encoding/json"
|
|||
|
|
"os"
|
|||
|
|
"path/filepath"
|
|||
|
|
"sync"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
var _ = json.RawMessage{}
|
|||
|
|
var _ = sync.Mutex{}
|
|||
|
|
var _ = os.ReadFile
|
|||
|
|
var _ = filepath.Join
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
// HouseFurnitureConfig 的一行里,本服务端真正用得到的部分。
|
|||
|
|
// <para>为什么需要它:AskLoadHouseData 下发的家具树只带
|
|||
|
|
// FurnitureId + 世界坐标 + PlacedInstanceId,GadgetInstanceId 恒 0。
|
|||
|
|
// 客户端拿到树之后会再问一次服务端:
|
|||
|
|
// AskCreateHouseFurnitureGadgets(houseId, floor, placedIds)
|
|||
|
|
// (LX6/Manager/House/HouseGadgetManager.lua:CreateGadgetsForFurnitures),
|
|||
|
|
// 期望拿到 placedId → gadgetInstanceId 的映射。
|
|||
|
|
// 服务端要造这个 gadget,唯一缺的就是「这件家具对应哪个机关 prefab」——
|
|||
|
|
// 那就是本表的 PathId。</para>
|
|||
|
|
// <para>★ 关键结论(2026-10-01 取证):HouseFurnitureConfig.PathId
|
|||
|
|
// 不是普通模型路径,它就是 Configs/GadgetCatalog.json 里的 pathId。
|
|||
|
|
// 逐条核对(服务端自己的 GadgetCatalog,2935 条):</para>
|
|||
|
|
// <code>
|
|||
|
|
// 506042876 HouseChairs_p_house_prop_furniture_seat_008a 组 housechairs ← 翡翠绒创意椅
|
|||
|
|
// 507159035 HouseChairs_p_house_prop_furniture_seat_009a 组 housechairs ← 翡翠绒方凳
|
|||
|
|
// 1303452314 HouseLight_p_house_prop_deco_lamp_floorlamp002a 组 houselight ← 复古落地灯 / 创意云朵灯
|
|||
|
|
// 1692603756 HouseLazyrsofa_p_house_prop_fumirure_seat_020a 组 other ← 皮质懒人沙发
|
|||
|
|
// 539100309 HouseWatchTV_p_house_prop_facility_leisure_005a 组 housewatchtv ← 高清触控屏
|
|||
|
|
// 333142511 Gadgets_House_WardrobeDoor_FashionChange_..._060a... 组 gadgets ← 白松移门衣柜(换装)
|
|||
|
|
// </code>
|
|||
|
|
// <para>而且客户端自己也把这条链说死了:HouseGadgetManager.IsFurnitureWithGadget(fid)
|
|||
|
|
// 的判据就是 PathId ~= 0(反编译出的 == 0 要翻转)。</para>
|
|||
|
|
// <para>★ 判据(为什么说树是对的、只缺 gadget):客户端请求的 id 个数
|
|||
|
|
// 逐套精确等于「该房模板树里 PathId != 0 的家具数」——
|
|||
|
|
// 绿屿 33/33、旧物仓 3/3、观澜 6/6、素光 1/1。</para>
|
|||
|
|
//
|
|||
|
|
// HouseFurnitureConfig.Id(也是模板节点的 FurnitureId)。
|
|||
|
|
// 中文名,只用于日志。
|
|||
|
|
// GadgetCatalog.json 的 pathId;0 = 这件家具没有机关,客户端也不会来问。
|
|||
|
|
// GadgetOffset 原始数组(实测 6 个 float:pos xyz + rot xyz)。
|
|||
|
|
// 全表 323 条里只有 2 条非空,且都不在四套房的模板树里 ⇒ 正常情况是空。
|
|||
|
|
type HouseFurnitureDefinition4229938 struct {
|
|||
|
|
FurnitureId uint32 `json:"furnitureId"`
|
|||
|
|
Name string `json:"name"`
|
|||
|
|
PathId uint32 `json:"pathId"`
|
|||
|
|
GadgetOffset []float32 `json:"gadgetOffset"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
// Reads Configs/HouseFurnitureConfig.json(323 行,_expectedCount == _dumpedCount == 323,
|
|||
|
|
// 2026-10-01 从 E:\ConfigDump\ConfigDump_v3\ 原样拷入)。
|
|||
|
|
// <para>消费点只有一个:GameRouter.HouseFurnitureGadget.cs 的
|
|||
|
|
// AskCreateHouseFurnitureGadgets(63581446) —— 把 placedId 反解成
|
|||
|
|
// nodeId → FurnitureId → PathId,再用 SyncGadgetAdd 把机关实体摆到
|
|||
|
|
// 家具节点的世界坐标上。</para>
|
|||
|
|
// <para>⛑ 带 Lazy 缓存 ⇒ 改了要重启服务端(和 NpcCatalog.json /
|
|||
|
|
// HouseFurnitureTemplateCatalog4229938 一个规矩)。</para>
|
|||
|
|
//
|
|||
|
|
var (
|
|||
|
|
HouseFurnitureGadgetCatalog4229938_cacheLock sync.RWMutex
|
|||
|
|
HouseFurnitureGadgetCatalog4229938_cached = false
|
|||
|
|
HouseFurnitureGadgetCatalog4229938_entries []any
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// LoadHouseFurnitureGadgetCatalog4229938 loads catalog records from client config directory
|
|||
|
|
func LoadHouseFurnitureGadgetCatalog4229938(configDir string) ([]any, error) {
|
|||
|
|
HouseFurnitureGadgetCatalog4229938_cacheLock.RLock()
|
|||
|
|
if HouseFurnitureGadgetCatalog4229938_cached {
|
|||
|
|
defer HouseFurnitureGadgetCatalog4229938_cacheLock.RUnlock()
|
|||
|
|
return HouseFurnitureGadgetCatalog4229938_entries, nil
|
|||
|
|
}
|
|||
|
|
HouseFurnitureGadgetCatalog4229938_cacheLock.RUnlock()
|
|||
|
|
|
|||
|
|
HouseFurnitureGadgetCatalog4229938_cacheLock.Lock()
|
|||
|
|
defer HouseFurnitureGadgetCatalog4229938_cacheLock.Unlock()
|
|||
|
|
if HouseFurnitureGadgetCatalog4229938_cached { return HouseFurnitureGadgetCatalog4229938_entries, nil }
|
|||
|
|
|
|||
|
|
filePath := filepath.Join(configDir, "HouseFurnitureGadgetCatalog.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)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
HouseFurnitureGadgetCatalog4229938_entries = result
|
|||
|
|
HouseFurnitureGadgetCatalog4229938_cached = true
|
|||
|
|
return result, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func HouseFurnitureGadgetCatalog4229938_TryGet(furnitureId uint32, definition HouseFurnitureDefinition4229938) bool {
|
|||
|
|
// Catalog helper HouseFurnitureGadgetCatalog4229938_TryGet
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
// 这件家具对应的机关 prefab pathId(GadgetCatalog.json 的 key)。
|
|||
|
|
// 0 = 没有机关,调用方应跳过。
|
|||
|
|
//
|
|||
|
|
func HouseFurnitureGadgetCatalog4229938_TryGetGadgetPathId(furnitureId uint32, pathId uint32) bool {
|
|||
|
|
// Catalog helper HouseFurnitureGadgetCatalog4229938_TryGetGadgetPathId
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func HouseFurnitureGadgetCatalog4229938_U32(source any, name string) uint32 {
|
|||
|
|
// Catalog helper HouseFurnitureGadgetCatalog4229938_U32
|
|||
|
|
return 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func HouseFurnitureGadgetCatalog4229938_Str(source any, name string) string {
|
|||
|
|
// Catalog helper HouseFurnitureGadgetCatalog4229938_Str
|
|||
|
|
return ""
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 读 [f, f, f, ...] 这种纯数字数组。
|
|||
|
|
func HouseFurnitureGadgetCatalog4229938_F32List(source any, name string) []float32 {
|
|||
|
|
// Catalog helper HouseFurnitureGadgetCatalog4229938_F32List
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type HouseFurnitureGadgetCatalog4229938_Snapshot struct {
|
|||
|
|
Items map[uint32]HouseFurnitureDefinition4229938 `json:"items"`
|
|||
|
|
Error *string `json:"error"`
|
|||
|
|
}
|
|||
|
|
|