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/pkg/protocol/methods/garage_methods4229938.go
T

85 lines
5.6 KiB
Go
Raw Normal View History

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&lt;HouseParkingInfo&gt;。
// AskHouseMoveParkingSpace(63780060):List&lt;HouseMoveParkingSpaceInfo&gt;。
// AskHouseCancelParking(63495236):List&lt;uint&gt;。
// 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&lt;uint&gt; houseIdList, List&lt;uint&gt; vehicleIdList。
// GmHouseCancelParking(65601170):List&lt;uint&gt; vehicleIdList。