package methods // // 车库 / 停车(House Parking)契约 —— 2026-09-30 新增。 // 为什么之前什么都没有:这一族 9 条 RPC 在服务端一直是 // DefaultReturnCatalog4229938 的 shape="void" 兜底(空 body), // 且 SyncHouseParking(64277819) / SyncHouseParkingEntityBinding(64060781) // 两个 S2C 服务端从来不发。客户端 GarageManager.lua 的 // LeaveGarage 第一步就读 currentParkingInfo.ParkingVehicleUid, // 而它只能由 SyncHouseParkingEntityBinding 填 —— 服务端不发 ⇒ 为空 ⇒ // FatalLog + return ⇒ 连 AskTeleportFromHouseGarage 都发不出去。 // 这就是用户报的「按 F 驶离车库没有后续 + 车不在车位出现 + 大门不开」。 // 线格式来源(逐条取证,2026-09-30): // // 字段名 / 顺序 / 类型:dump.cs 的 UX.Game.HouseVehicleParkingInfo(TypeDef 32690) // / HouseParkingInfo(32691) / HouseMoveParkingSpaceInfo(32692) / // HouseParkingEntityBinding(32693),与 RPCSerializeAuto.lua 的 // Auto.WriteHouseVehicleParkingInfo / WriteHouseParkingInfo / // WriteHouseMoveParkingSpaceInfo / WriteHouseParkingEntityBinding 交叉核对一致。 // 列表计数编码:Int7(biased 7-bit varint,线上写 count+1),即 // UxSerializer 对 list 的默认值。⚠️ 2026-09-30 更正:先前误判为 Int32, // 依据是「房产族全用 Int32」—— 那是 C# 侧契约(Auto.cs 的 // HousesInfo.HouseInfoList 等)。车库这一族在两侧都是 Int7: // // S2C:RPCDeserializeAuto.lua 的 midToReader[64277819] / // midToReader[64060781] 都用 Base.ReadList7Bit, // 而 RPCDeserializeBase.lua 里 ReadList7Bit 读 ReadInt7Bit、 // ReadList 读 ReadInt32 —— 两者确实不同。 // C2S:ClientToGameDelegate.lua 的 AskHouseParking_Serializer / // AskHouseMoveParkingSpace_Serializer / AskHouseCancelParking_Serializer // 全部用 SerializeBase.WriteList7Bit;RPCSerializeBase.lua 里它写 // Write7BitEncodedInt(num)(该 UX 版方法即 biased 写法,空表 = 01)。 // // 列表元素编码:对象列表 = Complex(每个元素前一个 0xFF), // 与 Base.ReadComplex(r, Auto.Reader[336]) / WriteComplexWrap(..., nullable:false) 一致。 // 参数外壳:args 一律 [UxContract(Inline = true)](不写 0xFF 头)—— // 两侧的生成代码都是「裸着按顺序写各参数」,没有外层对象标记。 // // ⚠️ 更正:SyncHouseParking / SyncHouseParkingEntityBinding // 不是 CSharpOnly —— 它们在 RPCDeserializeAuto.lua 里都有 Lua reader // (编号 64277819 / 64060781),所以 Lua 侧就是权威,线格式以 Lua 为准。 // // --------------------------------------------------------------------------------------------- // 数据元素(Complex,列表里每个元素前写一个 0xFF) // --------------------------------------------------------------------------------------------- // SyncHouseParking 的 addInfoList / cancelInfoList 元素。 // dump.cs 32690 / RPCSerializeAuto.lua WriteHouseVehicleParkingInfo: // HouseId(u32) + VehicleId(u32) + ParkingSpaceIndex(i32)。 // 客户端 Auto.Reader[336] 同序。 // SyncHouseParkingEntityBinding 的 bindingList 元素。 // dump.cs 32693 / WriteHouseParkingEntityBinding: // VehicleId(u32) + EntityId(u64) + ParkingSpaceIndex(i32)。客户端 Auto.Reader[290] 同序。 // AskHouseParking 的 parkingInfoList 元素。 // dump.cs 32691 / WriteHouseParkingInfo:HouseId(u32) + VehicleId(u32)。 // AskHouseMoveParkingSpace 的 moveParkingSpaceInfoList 元素。 // dump.cs 32692 / WriteHouseMoveParkingSpaceInfo: // VehicleId(u32) + HouseId(u32) + ParkingSpaceIndex(i32)。客户端 Auto.Reader[1141] 同序。 // --------------------------------------------------------------------------------------------- // S2C(服务端 → 客户端) // --------------------------------------------------------------------------------------------- // // SyncHouseParking(64277819) —— 进车库后「哪个车位停着哪辆车」。 // 客户端 GarageManager.SyncHouseParking(cancelInfoList, addInfoList) 消费: // addInfoList 会填 currentParkingInfo.ParkingInfo[ParkingSpaceIndex+1] = VehicleId // 并触发「进车库演出」→ 演出结束自己发 AskCreateHouseParkingVehicles。 // 服务端在玩家「调取载具 / 入库」时推这一条。 // // // SyncHouseParkingEntityBinding(64060781) —— 每辆车 spawn 之后的 EntityId 回填。 // 这是「按 F 驶离车库」能不能走下去的命门:客户端 // currentParkingInfo.ParkingVehicleUid[ParkingSpaceIndex+1] = EntityId, // 而 LeaveGarage 第一行就查它。 // // --------------------------------------------------------------------------------------------- // C2S(客户端 → 服务端)—— 都是 Inline 外壳(与门族一致:无 0xFF 头) // --------------------------------------------------------------------------------------------- // AskHouseParking(63154177):List<HouseParkingInfo>。 // AskHouseMoveParkingSpace(63780060):List<HouseMoveParkingSpaceInfo>。 // AskHouseCancelParking(63495236):List<uint>。 // AskTeleportToHouseGarage(63099218):uint houseId, int parkingSpaceIndex。 // AskTeleportFromHouseGarage(63203581):uint houseId, int parkingSpaceIndex, uint vehicleConfigId。 // AskCreateHouseParkingVehicles(63479109):uint houseId。 // AskDestroyHouseParkingVehicles(63266373):uint houseId。 // GmHouseParking(65027125):List<uint> houseIdList, List<uint> vehicleIdList。 // GmHouseCancelParking(65601170):List<uint> vehicleIdList。