107 lines
5.0 KiB
Go
107 lines
5.0 KiB
Go
package routers
|
||
|
||
import (
|
||
"context"
|
||
"sync"
|
||
)
|
||
|
||
var _ = sync.Mutex{}
|
||
var _ = context.Background
|
||
|
||
//
|
||
// Task (quest) publication.
|
||
// Two things have to arrive together for anything to appear in the Mission / task panel:
|
||
// 1. The rows. SyncTaskTitleGuideUnlock(64841491) reveals the panel tabs (its Lua impl calls
|
||
// gMapSystem.taskUtils:SetTaskTitleGuide), SyncPlayerAllTask(64260853) carries TaskConfig rows,
|
||
// and SyncPlayerAllTaskDebug(64423039) is the CSharpOnly twin that actually reaches the client's
|
||
// native task manager (64260853 has its own Lua impl which only reads `currentTask`).
|
||
// 2. The event list — eventPanelInfo.EventsInfo, and THIS is what the list renders. The
|
||
// panel rows are TaskEventConfig rows, not TaskConfig rows: the evidence branch's own
|
||
// investigation pinned it down by matching every visible row against both tables (7/7 hits in
|
||
// TaskEventConfig, 0/7 in TaskConfig), and traced it to
|
||
// L18.Spoon.Task.TaskManager.SyncPlayerAllEventPanel filling TaskManager.m_TaskEvents. Map
|
||
// markers are unrelated — those come from the client's own local TaskEventConfig, which is why
|
||
// the map always worked while the panel stayed empty.
|
||
// This is why publishing all 4342 TaskConfig rows changed nothing on its own: without EventsInfo
|
||
// the list has no data source at all. Everything is config-gated under gameplay.taskPanel
|
||
// so any half of it can be switched off without a rebuild.
|
||
// Known limit, not fixable here: accepting a task does not start any in-game flow, because the
|
||
// task graph is a Spoon resource (GameRes/Spoon/HotRaid/*.rcp, GameRes/Spoon/Task/*.tcp) and the
|
||
// local client has no hot-update layer for it. The list can show; the objectives cannot run.
|
||
//
|
||
func GameRouter_Tasks_PublishPlayerTasksAsync(ctx context.Context, rpcCtx *RpcContext) any {
|
||
// Router implementation for GameRouter_Tasks_PublishPlayerTasksAsync
|
||
var zero any; return zero
|
||
}
|
||
|
||
//
|
||
// R238(2026-10-03 随赛车移植)—— 进世界时**只**发布赛车挑战那几条任务行,
|
||
// 让客户端的 task manager 在玩家点「开始挑战」之前就拥有 60000147 的运行时节点。
|
||
// 刻意**不是** PublishTaskListAsync:
|
||
// · 载荷只有赛车那几条(~23 行),不是 4342 行的全量表 —— 全量表会让客户端
|
||
// 挑中一个无关挑战(60029952)并把手机换成「结算挑战」弹窗。
|
||
// · 通道是 SyncPlayerAllTaskDebug(64423039)(CSharpOnly 孪生包)。64260853 有
|
||
// 客户端 Lua 实现会吞掉 taskInfos,而且它正是 R236 的崩因嫌疑包。
|
||
// 状态保持 Accepted:客户端把它读成「可以开始 / 正在追踪的挑战」。
|
||
// 回滚 = gameplay.taskPanel.primeRacingChallengeTasks = false。
|
||
//
|
||
func GameRouter_Tasks_PublishRacingChallengeTasksAsync(ctx context.Context, rpcCtx *RpcContext) any {
|
||
// Router implementation for GameRouter_Tasks_PublishRacingChallengeTasksAsync
|
||
var zero any; return zero
|
||
}
|
||
|
||
//
|
||
// Unlock every TaskTitle (panel tab / chapter group). Ids come from TaskTitleCatalog.json,
|
||
// a projection of TaskTitleConfig.json (21 rows: 1..25 and 99).
|
||
//
|
||
func GameRouter_Tasks_PublishTaskTitleUnlocksAsync(ctx context.Context, session *GameSession) any {
|
||
// Router implementation for GameRouter_Tasks_PublishTaskTitleUnlocksAsync
|
||
var zero any; return zero
|
||
}
|
||
|
||
func GameRouter_Tasks_PublishTaskListAsync(ctx context.Context, session *GameSession) any {
|
||
// Router implementation for GameRouter_Tasks_PublishTaskListAsync
|
||
var zero any; return zero
|
||
}
|
||
|
||
//
|
||
// Which TaskConfig rows to publish. "configured" publishes only the configured ids and is the
|
||
// small shape the reference branch uses (one authored task that maps to one authored event);
|
||
// "catalog" keeps the historical full dump.
|
||
//
|
||
func GameRouter_Tasks_ResolvePublishedEntries(ctx context.Context, panel any) []any {
|
||
// Router implementation for GameRouter_Tasks_ResolvePublishedEntries
|
||
return nil
|
||
}
|
||
|
||
func GameRouter_Tasks_ResolveTaskState(ctx context.Context, panel any) any {
|
||
// Router implementation for GameRouter_Tasks_ResolveTaskState
|
||
var zero any; return zero
|
||
}
|
||
|
||
//
|
||
// eventPanelInfo — the actual list data source. TaskEvents are TaskEventConfig rows;
|
||
// each row needs EventId, a TaskId pointing at a step the client recognises as started,
|
||
// UnlockTime, and the status flags (Visible(1) is mandatory or nothing renders).
|
||
//
|
||
func GameRouter_Tasks_BuildEventPanelInfo(ctx context.Context, panel any, publishedTasks []any) any {
|
||
// Router implementation for GameRouter_Tasks_BuildEventPanelInfo
|
||
var zero any; return zero
|
||
}
|
||
|
||
func GameRouter_Tasks_ResolveEventTaskId(ctx context.Context, panel any, row any, publishedTasks []any) uint32 {
|
||
// Router implementation for GameRouter_Tasks_ResolveEventTaskId
|
||
return 0
|
||
}
|
||
|
||
//
|
||
// One panel row. CounterValues/Counters carry the objective progress: CounterValues[i] is the
|
||
// current value and Counters[i] repeats it alongside the configured target, because the UI
|
||
// renders "value/target" and skips rows that have neither.
|
||
//
|
||
func GameRouter_Tasks_BuildTaskInfo(ctx context.Context, e any) any {
|
||
// Router implementation for GameRouter_Tasks_BuildTaskInfo
|
||
var zero any; return zero
|
||
}
|
||
|