package methods // // T3-7 真实车流 —— 车道推进包。 // 契约权威 = IL2CPP dump(`ux_rpc/ux_game_all.dump.cs`)里的 IGameSceneToClient 签名: // public abstract void SyncAetherAIVehicleLaneDatas(List<ClientVehicleLaneData> data, // List<ClientVehicleLaneChangeData> laneChangeData, double timeStamp); // ★ 服务端只推「车道 handle + 沿车道里程」,位置和朝向由客户端按本地 ZoneGraph 曲线插值: // AetherCity.dll → AetherVehicleManager.OnSyncAetherVehicleLaneData // → VehicleDataEntity.ProcessSyncVehicleLaneData // → MassTrafficInterpolationUtils.InterpolatePositionAndOrientationAlongLane // 所以 distance 只要单调推进即可,服务端不需要知道车道的真实形状。 // // ClientVehicleLaneData(TypeDefIndex 32662):u64 Id / i32 LaneHandle / f32 DistanceAlongLane / u8 Status。 // ClientVehicleLaneChangeData(TypeDefIndex 32663):变道专用,T3-7 阶段不下发(列表留空)。 // // SyncAetherAIVehicleLaneDatas = 68771276。三参数 RPC,顶层不带 0xFF Complex 标记, // 所以这里用 Inline(= Struct)契约按声明顺序直接铺三个参数。 // // ⛔ 2026-10-01 删除:这里曾经新加过一个同名的 `SyncVehicleAutonomousDrivingState4229938` // (u64+bool),与 2026-09-27 就有的 `Methods.GameScene.VehicleNavigationMethods4229938.cs:105` // **完全重复**(同为 u64+bool Inline,且那份已过 lua reader + _ux_wire_check 9B 验证)。 // 车流一律用 GameScene 那一份(别名 `SceneMethods`),**别再在这里复制第二份**。 // SyncAetherAIVehicleRemove = 68906718:ulong pid。 // // SyncAetherAIVehicleForceGo = 68832908 —— ulong instanceId + bool forceGo。 // 客户端 handler(真存在,不是我们编的): // LX6.Service.GameSceneToClientImpl.SyncAetherAIVehicleForceGo(ulong instanceId, bool forceGo) // (RVA 0x08656D70,源码见 _downloads/Assembly-CSharp-src/Assembly-CSharp/Lx6/Service/GameSceneToClientImpl.cs:24)。 // 与 SyncVehicleHackableState(63563263+) 一样是 ulong+bool 两参数,故照抄其线格(Inline 顺序铺)。 // ★ 为什么要发它:客户端 AetherVehicleViewManager 有一套**距离驱动的 GO 提升**: // 20m 内进候选(`CANDIDATE_GO_DISTANCE_SQ=400`)、8m 内强制提升(`FORCE_GO_DISTANCE_SQ=64`), // 同屏最多 8 台 GO(`MAX_VEHICLE_COUNT=8`,切场景时随 `[City.UpdateSettings]` 打进 Player.log)。 // 提升成 GO 后车**不再吃 Aether 车道插值**,改由客户端本地(Mass)接管; // 我们的车是服务端模拟的、不在客户端本地车流里 ⇒ **没人开 ⇒ 冻在原地**。 // 这就是用户看到的「我一靠近车,车就停了 / 追上去它又停 / 身边都是车他们又不开」。 // 官方服务端必然会给自己的 Aether 车发这条标记(否则双駆动打架),我们以前没发 ⇒ 客户端自己提了 GO。 // ⛑ 语义待实测确认:`forceGo=false` 我们期望 =「这台不要用 GO」;若客户端只把它当 // 「取消强制」(不影响自动提升),则本包无效,届时只能退回注入器方案 // (hook `AetherVehicleViewManager:CheckShouldNotUseGo` 恒返回 true,RVA 0x0B108F00)。 //