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
Ananta-ps/internal/gameserver/routers/game_router_gm_jobs.go
T

93 lines
4.1 KiB
Go
Raw Normal View History

package routers
import (
"context"
"sync"
)
var _ = sync.Mutex{}
var _ = context.Background
//
// GM 控制台(ALT+F1)职业命令族 —— GmJobTake / GmJobStart / GmJobQuit /
// GmJobPromote / GmSetJobLevel / GmJobEnd。
// 移植自捐赠端 DremkaPS(2026-09-24)。他们这一族里 GmTaskRecord4229938 的 TaskState 字节
// 标了 "verified in game",是整份捐赠材料里极少数实机验证过的东西;其余(钱包 / 台词 / 过场 /
// 敌群)捐赠端自己承认"排队做完、都还没实机验证"。
// ⛑ 三条本服的取舍,与捐赠端不同:
// 1. 推送是「合并」不是「替换」。捐赠端把 spiritJobs 整个换成 GM 记录,本服则把它
// 叠加在 RuntimePayloadFactory.SpiritJobInfo4229938 配置驱动的那份之上 ——
// 否则玩家在控制台点一条职业命令,角色原本的职业就整片消失。
// 2. CurrentJob 默认 100(Jobless)不是 0。0 不是合法 UrbanJobConfig id,客户端
// SpiritJobManager 会去解引用一个不存在的配置(本服踩过,见
// RuntimePayloadFactory.DefaultSpiritJobInfo4229938 的注释)。
// 3. 职业记录带天赋。捐赠端因无表而填 TalentInfo = null / RegisterTime = 0;
// 本服统一走 RuntimePayloadFactory.GmJobRecord4229938,与本服 7k 验证过的 wire 一致。
// 捐赠端注释还点明了一件关键事实:客户端自己在本地生成 GM 实体,GM invoke 的调用点根本不看
// 返回值。所以这些 handler 的价值是「服务端认得这条指令、不再掉进 unknown-methods.log,并且
// 能把职业变化真的推给客户端」,而不是「返回一个客户端会用的值」。
//
func GameRouter_GmJobs_GmJobTake(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_GmJobs_GmJobTake
var zero any; return zero
}
func GameRouter_GmJobs_GmJobStart(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_GmJobs_GmJobStart
var zero any; return zero
}
func GameRouter_GmJobs_GmJobQuit(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_GmJobs_GmJobQuit
var zero any; return zero
}
func GameRouter_GmJobs_GmJobPromote(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_GmJobs_GmJobPromote
var zero any; return zero
}
func GameRouter_GmJobs_GmSetJobLevel(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_GmJobs_GmSetJobLevel
var zero any; return zero
}
//
// GmJobEnd(65110787) 是这一族里唯一不带参数的(客户端序列化器为空),
// 结束的是「当前职业」而不是命令里点名的那个。
//
func GameRouter_GmJobs_GmJobEnd(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_GmJobs_GmJobEnd
var zero any; return zero
}
// ------------------------------------------------------------------ shared path
func GameRouter_GmJobs_HandleGmJobAsync(ctx context.Context, conn any, msg any, action any) any {
// Router implementation for GameRouter_GmJobs_HandleGmJobAsync
var zero any; return zero
}
//
// 解参数。契约解码失败时退回裸字节 —— GM 控制台的序列化器是客户端自己生成的,
// 服务端这一侧的契约一旦和它对不齐,最坏情况应该是「还能读出 jobClassId」而不是整条丢弃。
//
func GameRouter_GmJobs_ReadGmJobArgs(ctx context.Context, msg any) any {
// Router implementation for GameRouter_GmJobs_ReadGmJobArgs
var zero any; return zero
}
func GameRouter_GmJobs_ApplyGmJob(ctx context.Context, state any, jobClassId uint32, level byte, action any) any {
// Router implementation for GameRouter_GmJobs_ApplyGmJob
var zero any; return zero
}
//
// 推 SyncSpiritJobInfo(64913222)。
// ⛑ 合并而非替换:以 RuntimePayloadFactory.SpiritJobInfo4229938 的配置结果为底,
// GM 记录覆盖/追加在上面。currentJob 只有在 GM 真的动过职业之后才改用控制台的值。
//
func GameRouter_GmJobs_PushGmJobInfoAsync(ctx context.Context, conn any, state any, trigger string) any {
// Router implementation for GameRouter_GmJobs_PushGmJobInfoAsync
var zero any; return zero
}