package routers import ( "context" "sync" ) var _ = sync.Mutex{} var _ = context.Background // // Batch implementation of top unhandled methods from unknown-methods.log: // camera telemetry (silent no-ops), vehicle driving/radio/horn/top-speed/nitro set, // indoor/building/safe-area transitions, and a second neutral UI/economy batch. // // --- Camera telemetry: pure client-side state, zero server value. Silent accept. --- func GameRouter_UnhandledBatch_CamMove(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_CamMove var zero any; return zero } func GameRouter_UnhandledBatch_CamRot(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_CamRot var zero any; return zero } func GameRouter_UnhandledBatch_CamFov(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_CamFov var zero any; return zero } func GameRouter_UnhandledBatch_CamAspect(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_CamAspect var zero any; return zero } // --- Vehicle driving telemetry --- func GameRouter_UnhandledBatch_ReportDrivingVehicle(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_ReportDrivingVehicle var zero any; return zero } func GameRouter_UnhandledBatch_AskVehicleNitroValue(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskVehicleNitroValue var zero any; return zero } func GameRouter_UnhandledBatch_AskVehicleNitro(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskVehicleNitro var zero any; return zero } func GameRouter_UnhandledBatch_AskModifyVehicleTopSpeed(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskModifyVehicleTopSpeed var zero any; return zero } func GameRouter_UnhandledBatch_AskVehicleHorn(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskVehicleHorn var zero any; return zero } func GameRouter_UnhandledBatch_AskVehicleContactDamage(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskVehicleContactDamage var zero any; return zero } func GameRouter_UnhandledBatch_AskVehicleInteractConfig(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskVehicleInteractConfig var zero any; return zero } func GameRouter_UnhandledBatch_AskUpdateVehicleDestructibleParts(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskUpdateVehicleDestructibleParts var zero any; return zero } // AskGetVehicleRadioContent (67725622) 与 AskSwitchVehicleRadio (67959772) 以前在这里占位 // (只打日志 + 回全零 typed-default)。2026-09-27 搬到 GameRouter.VehicleRadio.cs: // 现在会真的按 RadioContentCatalog 下发 DJ 口播 / 广告 / 新闻的 id。 // ⛑ 不要在别处再挂同名 handler —— 同一 methodId 两个 invoke handler 会 // "Duplicate invoke handler at startup"。 // --- Indoor / building / safe-area transitions (logged accepts; sector control later) --- func GameRouter_UnhandledBatch_SyncChangeSafeArea(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_SyncChangeSafeArea var zero any; return zero } func GameRouter_UnhandledBatch_SyncChangeBuilding(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_SyncChangeBuilding var zero any; return zero } func GameRouter_UnhandledBatch_SyncChangeIndoor(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_SyncChangeIndoor var zero any; return zero } // --- Neutral UI/economy batch 2: exact typed-default replies, info-level logging --- // AskGetAllMetroInfos used to be answered here with the generic empty list. It now has a real // scheduler in GameRouter.Metro.cs (round 54/55): keep the attribute off so the router does not see // two invoke handlers for the same method id (Duplicate invoke handler at startup). func GameRouter_UnhandledBatch_KnownNeutralInvokeBatch2(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_KnownNeutralInvokeBatch2 var zero any; return zero } // --- Skill/combat accepts: logged, protocol-correct empty replies (authoritative later) --- func GameRouter_UnhandledBatch_SkillNeutralAccepts(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_SkillNeutralAccepts var zero any; return zero } // ----------------------------------------------------------------------------------------- // ⛑⛑ 2026-09-29 修正:这两条**不是 void**。 // 客户端 `midToReturnMessageReader` 里两者都是 `reader.ReadUInt64(reader)`(裸 u64,无 presence), // 而原来挂在 SkillNeutralAccepts 上走 `ReturnEmptyOkAsync` —— 那个是 **0 字节载荷** // (`Connection.cs:30` `ReturnEmptyAsync(..., Array.Empty())`)⇒ 客户端 reader 读空 buffer。 // 实测触发频率:**[COMBAT] 三个会话共 29 次**,是本轮回归检查里最高频的一条。 // 修法照抄同类已有实现 `AskItemDestructibleCreate`(GameRouter.MiscAcks.cs:200)—— // 用硬规则 104 的落盘号段发型实例 id(只回号不建实体,目的是让客户端 await 落地 + 拿得到 uid)。 // ⛑ 回滚:把这两行属性挪回上面的 SkillNeutralAccepts 即可(handler 不注册走 typed-default)。 // ----------------------------------------------------------------------------------------- func GameRouter_UnhandledBatch_AskSkillDestructibleCreate(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskSkillDestructibleCreate var zero any; return zero } // --- Destructibles / weapon red dots / discards / hangup (fresh log batch) --- func GameRouter_UnhandledBatch_AskNotifyDestructibleHits(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskNotifyDestructibleHits var zero any; return zero } func GameRouter_UnhandledBatch_AskOperateDestructibleObject(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskOperateDestructibleObject var zero any; return zero } func GameRouter_UnhandledBatch_AskMoveDestructibleObjects(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskMoveDestructibleObjects var zero any; return zero } func GameRouter_UnhandledBatch_AskBreakDestructibleObjects(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskBreakDestructibleObjects var zero any; return zero } func GameRouter_UnhandledBatch_AskReadWeaponRedDots(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskReadWeaponRedDots var zero any; return zero } func GameRouter_UnhandledBatch_AskDiscardWeaponByInstanceId(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskDiscardWeaponByInstanceId var zero any; return zero } func GameRouter_UnhandledBatch_AskDiscardWeapon(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskDiscardWeapon var zero any; return zero } func GameRouter_UnhandledBatch_RequestPlayerStartHangup(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_RequestPlayerStartHangup var zero any; return zero } func GameRouter_UnhandledBatch_RequestPlayerStopHangup(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_RequestPlayerStopHangup var zero any; return zero } func GameRouter_UnhandledBatch_AskBreakSkillTimeCurve(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_UnhandledBatch_AskBreakSkillTimeCurve var zero any; return zero }