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_plate.go
T

129 lines
5.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}