package routers import ( "context" "sync" ) var _ = sync.Mutex{} var _ = context.Background // // Profession phone-app DATA handlers (build 4229938) — 清洁工 Washer / 赛车手 Racer. // Ported from the Lyco donor build on 2026-09-26. // Diagnosis (donor, 2026-09-20 — holds for our tree too): these apps are not blocked at the // entry or at the switch gate. `MainPhoneUtils.OnAppItemClick` has a branch for every job and the // fastpatch ClientGameSwitch module already sets EnableJanitor / EnableCatExpress / // EnableDutyTerminal / EnableEonBug, so `SwitchFunctionManager.CheckEnable` passes. What was // missing is the DATA: with no handler the client fell through to the typed-default (all-zero) // body and each panel rendered an empty shell. // ⛑⛑ This is a STATIC SNAPSHOT, not a simulation. There is no server-side mission generation, // no persisted racing result and no WasherConfig table on our side, so: // * 清洁工 shows one in-flight mission and a fixed history — progress never advances by itself; // * 赛车手 reports zero points / zero stars, so only the group whose authored gate is 0/0 // (group 1, C级赛) is unlocked and every league the player has not earned renders 未解锁. // Accepting / finishing a mission is acked and nothing else happens. // ⛑ Do NOT "improve" 赛车手 by returning every group with a synthetic record. The donor measured // that on 2026-09-22: `RacerHistoryPageStore.BuildHistoryList` turns each group's track rows into a // HISTORY entry (so the app claimed "C级赛事 完成" for a player who never raced) and // `RacerCareerPageStore.BuildDisplayLists` treats the KEYS of CompetitionGroupInfos as the unlocked // set, which pushes the frontier to the last league and renders B级赛 进行中 although it is // authored locked. Presence means "unlocked"; the records stay empty until a race is finished. // func GameRouter_JobApps_AskGetWasherMissionInfo(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_JobApps_AskGetWasherMissionInfo var zero any; return zero } // // Accept / finish (63297472 / 63889979). Both return void per DefaultReturnCatalog, so an empty // OK is the whole contract — they are INVOKEs, and leaving them unrouted makes the button await // a reply that never comes. // func GameRouter_JobApps_WasherMissionAction(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_JobApps_WasherMissionAction var zero any; return zero } func GameRouter_JobApps_AskRacingCompetitionGroupInfo(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_JobApps_AskRacingCompetitionGroupInfo var zero any; return zero } // ------------------------------------------------------------------ builders func GameRouter_JobApps_BuildWasherMissionInfo(ctx context.Context, ) any { // Router implementation for GameRouter_JobApps_BuildWasherMissionInfo var zero any; return zero } // // 赛车手 league snapshot, gated by the authored thresholds in // RacingDriverCompetitionGroupConfig: a group opens when it is not hard-locked and the player // has reached both point/star gates. Player progress is zero (nothing is persisted yet), so // only group 1 (C级赛, 0/0) opens and B级赛 renders 未解锁 — which is the truthful state for a // player who has never raced. // func GameRouter_JobApps_BuildRacingCompetitionGroupInfo(ctx context.Context, ) any { // Router implementation for GameRouter_JobApps_BuildRacingCompetitionGroupInfo var zero any; return zero }