58 lines
2.5 KiB
Go
58 lines
2.5 KiB
Go
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"`
|
|
}
|
|
|