This repository has been archived on 2026-10-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

85 lines
4.2 KiB
Go

package routers
import (
"context"
"sync"
)
var _ = sync.Mutex{}
var _ = context.Background
//
// Talent trees (天赋) for build 4229938 — T1-6.
// The panel is client-driven: it reads the tree layout from its own config tables and only asks the
// server to activate a node. What the server owns is the point balance and the set of activated
// nodes, both published in PlayerClientInfo.GameplayTalentInfos (a dictionary keyed by
// TalentTreeGamePlayConfig id, 1..5 in stock 4229938).
// ⛑️ Why nothing here sends SyncGameplayTalentPoint (64859579) / SyncActiveGameplayTalentLayer
// (64743495): those eight S2Cs have no contract, no lua reader in RPCDeserializeAuto and no client
// reader we can verify, and a hand-built frame with a missing trailing field desynchronises the
// stream — which on this build does not fail loudly, it takes the client process down (see
// GameplaySettings.PolicePayloadMode for the same failure mode). SyncPlayerInfo (64682159) carries
// the very same PlayerClientInfo the client already parses at login, so that is what is re-pushed
// after an activation; gameplay.talents.pushPlayerInfoOnChange turns it off.
// ⛑️ gameplayId must be a real TalentTreeGamePlayConfig id. A donor build invented 1020 and the
// panel then showed no points at all, because the client keys the whole view by that id and never
// falls back. The ids published here come from the imported table, never from the request alone.
//
//
// AskActiveGameplayTalentLayer (63772877) — activate one or more layers of a talent node.
// The request is (gameplayId, talentId, addLayer) and carries no cost, so the cost comes from
// TalentTreeTalentConfig (or flatCost) and the layer cap from the same row.
//
func GameRouter_Talent_AskActiveGameplayTalentLayer(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Talent_AskActiveGameplayTalentLayer
var zero any; return zero
}
//
// AskResetGameplayTalent (63365723) — respec one gameplay tree. Every point spent in the tree is
// refunded, and the refund is recomputed from the node costs instead of being tracked separately,
// so the two can never drift apart.
//
func GameRouter_Talent_AskResetGameplayTalent(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Talent_AskResetGameplayTalent
var zero any; return zero
}
// Career talent trees (职业天赋) are keyed by character + job class rather than by gameplay id and
// ride SpiritJob.TalentInfo — plus SpiritInfo.TalentInfo, which is the view the scene HACK limit
// actually consults. Their nodes are seeded as already-activated from
// TalentTreeTalentConfig (see RuntimePayloadFactory.CareerTalentInfo4229938,
// gameplay.talents.seedCareerTalents), because TalentTreeMgr.CheckTalentIsLocked resolves them at
// registration time and a locked node leaves every hack prompt greyed out. Nothing is persisted
// here yet, so these three stay ack-only: re-logging in re-seeds the same node set.
func GameRouter_Talent_AskActiveSpiritJobTalentLayer(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Talent_AskActiveSpiritJobTalentLayer
var zero any; return zero
}
func GameRouter_Talent_AskResetSpiritJobTalent(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Talent_AskResetSpiritJobTalent
var zero any; return zero
}
func GameRouter_Talent_AskConvertCommonSpiritTalentExp(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Talent_AskConvertCommonSpiritTalentExp
var zero any; return zero
}
//
// Republishes the login frame after a talent change. SyncPlayerInfo is the same payload the
// client already accepted at login, so GameplayTalentInfos arrives through a wire we know is
// correct instead of through one of the unverified talent S2Cs.
//
func GameRouter_Talent_PublishTalentState4229938(ctx context.Context, conn any, state any, settings any) any {
// Router implementation for GameRouter_Talent_PublishTalentState4229938
var zero any; return zero
}
func GameRouter_Talent_TryDecode4229938(ctx context.Context, body []byte) any {
// Router implementation for GameRouter_Talent_TryDecode4229938
var zero any; return zero
}