86 lines
5.6 KiB
Go
86 lines
5.6 KiB
Go
package methods
|
||
|
||
//
|
||
// 车库 / 停车(House Parking)契约 —— 2026-09-30 新增。
|
||
// <para>为什么之前什么都没有:这一族 9 条 RPC 在服务端一直是
|
||
// DefaultReturnCatalog4229938 的 shape="void" 兜底(空 body),
|
||
// 且 SyncHouseParking(64277819) / SyncHouseParkingEntityBinding(64060781)
|
||
// 两个 S2C 服务端从来不发。客户端 GarageManager.lua 的
|
||
// LeaveGarage 第一步就读 currentParkingInfo.ParkingVehicleUid,
|
||
// 而它只能由 SyncHouseParkingEntityBinding 填 —— 服务端不发 ⇒ 为空 ⇒
|
||
// FatalLog + return ⇒ 连 AskTeleportFromHouseGarage 都发不出去。
|
||
// 这就是用户报的「按 F 驶离车库没有后续 + 车不在车位出现 + 大门不开」。</para>
|
||
// <para>线格式来源(逐条取证,2026-09-30):
|
||
// <list type="bullet">
|
||
// <item>字段名 / 顺序 / 类型:dump.cs 的 UX.Game.HouseVehicleParkingInfo(TypeDef 32690)
|
||
// / HouseParkingInfo(32691) / HouseMoveParkingSpaceInfo(32692) /
|
||
// HouseParkingEntityBinding(32693),与 RPCSerializeAuto.lua 的
|
||
// Auto.WriteHouseVehicleParkingInfo / WriteHouseParkingInfo /
|
||
// WriteHouseMoveParkingSpaceInfo / WriteHouseParkingEntityBinding 交叉核对一致。</item>
|
||
// <item>列表计数编码:Int7(biased 7-bit varint,线上写 count+1),即
|
||
// UxSerializer 对 list 的默认值。⚠️ 2026-09-30 更正:先前误判为 Int32,
|
||
// 依据是「房产族全用 Int32」—— 那是 C# 侧契约(Auto.cs 的
|
||
// HousesInfo.HouseInfoList 等)。车库这一族在两侧都是 Int7:
|
||
// <list type="bullet">
|
||
// <item>S2C:RPCDeserializeAuto.lua 的 midToReader[64277819] /
|
||
// midToReader[64060781] 都用 Base.ReadList7Bit,
|
||
// 而 RPCDeserializeBase.lua 里 ReadList7Bit 读 ReadInt7Bit、
|
||
// ReadList 读 ReadInt32 —— 两者确实不同。</item>
|
||
// <item>C2S:ClientToGameDelegate.lua 的 AskHouseParking_Serializer /
|
||
// AskHouseMoveParkingSpace_Serializer / AskHouseCancelParking_Serializer
|
||
// 全部用 SerializeBase.WriteList7Bit;RPCSerializeBase.lua 里它写
|
||
// Write7BitEncodedInt(num)(该 UX 版方法即 biased 写法,空表 = 01)。</item>
|
||
// </list></item>
|
||
// <item>列表元素编码:对象列表 = Complex(每个元素前一个 0xFF),
|
||
// 与 Base.ReadComplex(r, Auto.Reader[336]) / WriteComplexWrap(..., nullable:false) 一致。</item>
|
||
// <item>参数外壳:args 一律 [UxContract(Inline = true)](不写 0xFF 头)——
|
||
// 两侧的生成代码都是「裸着按顺序写各参数」,没有外层对象标记。</item>
|
||
// </list>
|
||
// <para>⚠️ 更正:SyncHouseParking / SyncHouseParkingEntityBinding
|
||
// 不是 CSharpOnly —— 它们在 RPCDeserializeAuto.lua 里都有 Lua reader
|
||
// (编号 64277819 / 64060781),所以 Lua 侧就是权威,线格式以 Lua 为准。</para>
|
||
//
|
||
// ---------------------------------------------------------------------------------------------
|
||
// 数据元素(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。
|