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/house_furniture_gadget_catalog4229938.go

144 lines
5.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"`
}