package routers import ( "context" "sync" ) var _ = sync.Mutex{} var _ = context.Background // // Gym equipment the server places itself — the server-side half of what AnantaGymLoader.exe does // by frida injection. // Why it is needed: the wodegym_* prefabs (treadmill 1371296286, bench press 1443522735, squat // rack 434521152, sit-up board 344334257, bench 684457731 — verified 2026-09-23 by uid-pairing // spawned instance names against blob records; the loader's own hard-coded 79302023/22/21 and // 79000586 are WRONG for this build) are absent from GadgetCatalog.json and from // SceneitemConfig.json. Their only home is the client's own LX6.Item.GadgetBlob, which is // populated by a pipeline our grid-AOI push (68956797) never drives: // GadgetBlob.OnEnterScene("WorldMap_Release") → ReadHeadInfo → InitSimpleGrid → // OnAoiAddBlobCfgByGridIndex(x, z) per cell. // The loader injects those calls, then reads the blob dictionary // (uniqueIdToSceneGridSeekId → GetGadgetBlobData → PackedGadgetInfo) and finishes // with SyncGadgetAddList(List<GadgetEntityInfo>). The minigames themselves are client // lua, so the server only owes the placement — which is exactly what this file does with the // coordinates captured into Configs/GymEquipment.json. // Rollback: world.content.gymEquipment.enabled = false. // func GameRouter_GymEquipment_GymStateOf(ctx context.Context, session *GameSession) any { // Router implementation for GameRouter_GymEquipment_GymStateOf var zero any; return zero } // Reconnect / scene switch: forget what was stocked so the next visit re-places it. func GameRouter_GymEquipment_ResetGymEquipment(ctx context.Context, session *GameSession) any { // Router implementation for GameRouter_GymEquipment_ResetGymEquipment var zero any; return zero } // // Called from the grid-AOI tick (which already knows the player position). Places the // equipment of every venue the player has walked into, once per venue per session. // func GameRouter_GymEquipment_TickGymEquipmentAsync(ctx context.Context, session *GameSession, state any, px float32, pz float32) any { // Router implementation for GameRouter_GymEquipment_TickGymEquipmentAsync var zero any; return zero } type GymEquipmentSessionState struct { SyncRoot any `json:"syncRoot"` // Venues already stocked this session. One shot per venue, like the loader. Placed []string `json:"placed"` PlacedCount int32 `json:"placedCount"` // 「切室内 / 传送中,本次跳过」只打一次日志,避免每 tick 刷屏。 WarnedBusy bool `json:"warnedBusy"` }