129 lines
5.6 KiB
Go
129 lines
5.6 KiB
Go
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<int,ulong> GadgetDic / DestructibleDic / DynamicAgentDic / DynamicVehicleDic;
|
||
// Dictionary<int,int> 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
|
||
}
|
||
|