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

128 lines
5.6 KiB
Go
Raw Permalink Normal View History

package routers
import (
"context"
"sync"
)
var _ = sync.Mutex{}
var _ = context.Background
//
// ★★ 第五条管线:**Plate(盘)演出** —— SyncPlateAddList(68554224)。
// 为什么需要它:可玩角色按日程站到跑步机 / 娃娃机 / 床旁边,但**不会真的用它们**
// (只是站着玩手机)。官方的生活 NPC 是场景里 Spoon 图上的一个「盘」——
// SpoonAgentUnit 同时带 AgentDataSetsActivityCfgId /
// ActivityPlateCreator / ActivityEnterPoint,而盘要由服务端推下来客户端才会建
// (硬规则 157)。光在出场包里填活动 id 是不够的。
// 客户端形状(`UX.Game.PlateInfo`,dump 的 06_RUNTIME_CODE/.../Auto.Client/UX/Game/PlateInfo.cs):
// <code>
// ulong UniqueId; int GraphId; UXVector3 Position; UXVector3 Rotation;
// Dictionary&lt;int,ulong&gt; GadgetDic / DestructibleDic / DynamicAgentDic / DynamicVehicleDic;
// Dictionary&lt;int,int&gt; AgentDic / VehicleDic / StaticNpcDic / RoomDic;
// uint FavorNpcActivityId; // 包尾再跟一个 uint taskId
// </code>
// ⛑⛑ 68554224 在 RPCDeserializeAuto.lua 里是 CSharpOnly ⇒ 客户端 reader 是
// C# 生成的,我们拿不到它的线格式。所以这里手写字节,所有「有没有 0xFF 标记 /
// count 用哪种写法」都做成配置开关 —— 试错不用重编译,改配置再推一次即可。
// 判据只有一条:客户端回 AskPlateLoadComplete(67658390) /
// AskPlateResourceReady(67916920),这两个 ack 在 unknown-methods.log 里
// 从来没有出现过(它们是服务端先推盘之后才发的),一旦出现就说明线格式对了。
//
// =================================================================================
// ① C2S ack:只要出现就是通关信号,全部接住并打日志(INVOKE 必须回执,否则客户端 await 卡死)
// =================================================================================
//
// C2S AskPlateLoadComplete(67658390) —— ★ 通关判据 ①:盘的图加载完了。
//
func GameRouter_Plate_OnAskPlateLoadComplete(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Plate_OnAskPlateLoadComplete
var zero any; return zero
}
//
// C2S AskPlateResourceReady(67916920) —— ★ 通关判据 ②:盘要的资源(NPC / 物件)齐了。
//
func GameRouter_Plate_OnAskPlateResourceReady(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Plate_OnAskPlateResourceReady
var zero any; return zero
}
//
// C2S AskPlateAgentCreateConfirmed(67163577) —— 盘上的 agent 造好了。
//
func GameRouter_Plate_OnAskPlateAgentCreateConfirmed(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Plate_OnAskPlateAgentCreateConfirmed
var zero any; return zero
}
//
// C2S AskNotifyPlateGameStallEvent(67733503) —— 盘上的小游戏/摊位事件。
//
func GameRouter_Plate_OnAskNotifyPlateGameStallEvent(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Plate_OnAskNotifyPlateGameStallEvent
var zero any; return zero
}
func GameRouter_Plate_Hex(ctx context.Context, bytes []byte, max int32) string {
// Router implementation for GameRouter_Plate_Hex
return ""
}
// =================================================================================
// ② S2C:推盘
// =================================================================================
// HTTP / 世界就绪 两处共用的入口。返回 0 = 没发(配置关了)。
func GameRouter_Plate_PushPlateAsync(ctx context.Context, session *GameSession, cfg any) int32 {
// Router implementation for GameRouter_Plate_PushPlateAsync
return 0
}
// 世界就绪钩子:配置 pushOnWorldReady=true 才推。
func GameRouter_Plate_EnsurePlateAsync(ctx context.Context, session *GameSession) any {
// Router implementation for GameRouter_Plate_EnsurePlateAsync
var zero any; return zero
}
// =================================================================================
// ③ 手写线格式(旋钮全在配置里)
// =================================================================================
//
// 包体 = [rootMarker] + 列表(1 个 PlateInfo) + taskId。
// ⛑ 顺序照抄 UX.Game.PlateInfo 的字段声明顺序,一个都不能挪。
//
func GameRouter_Plate_BuildPlateAddListBody(ctx context.Context, cfg any, uniqueId uint64, rosterUid uint64, agentId uint32) []byte {
// Router implementation for GameRouter_Plate_BuildPlateAddListBody
return nil
}
func GameRouter_Plate_WriteVec3(ctx context.Context, w any, marker bool, x float32, y float32, z float32) any {
// Router implementation for GameRouter_Plate_WriteVec3
var zero any; return zero
}
func GameRouter_Plate_WriteEmptyDict(ctx context.Context, w any, cfg any) any {
// Router implementation for GameRouter_Plate_WriteEmptyDict
var zero any; return zero
}
func GameRouter_Plate_WriteDictInt32(ctx context.Context, w any, cfg any, fill bool, slot int32, value int32) any {
// Router implementation for GameRouter_Plate_WriteDictInt32
var zero any; return zero
}
func GameRouter_Plate_WriteDictUInt64(ctx context.Context, w any, cfg any, fill bool, slot int32, value uint64) any {
// Router implementation for GameRouter_Plate_WriteDictUInt64
var zero any; return zero
}
func GameRouter_Plate_WriteCount(ctx context.Context, w any, encoding any, count int32) any {
// Router implementation for GameRouter_Plate_WriteCount
var zero any; return zero
}
func GameRouter_Plate_ParseUniqueId(ctx context.Context, raw string) uint64 {
// Router implementation for GameRouter_Plate_ParseUniqueId
return 0
}