44 lines
1.9 KiB
Go
44 lines
1.9 KiB
Go
package routers
|
||
|
||
import (
|
||
"context"
|
||
"sync"
|
||
)
|
||
|
||
var _ = sync.Mutex{}
|
||
var _ = context.Background
|
||
|
||
//
|
||
// 把一个已经在场的单位接进客户端原生的随从 AI。
|
||
// ⛑⛑ 2026-10-01 取证:这套协议主线服务端一行都没实现过,但客户端侧是全的 ——
|
||
// 随从的跟随、协战、UI 全由客户端 C# 状态机负责,服务端只需要把两个包推下去。
|
||
// 在此之前主线只能把随从当成「不打人的敌人」生成,表现就是挂着血条、打不死、能被玩家锁定。
|
||
// 两个包(签名都取自官方 dump.cs 的 IGameSceneToClient 抽象声明,不是猜的):
|
||
// SyncAgentCompanionAI(ulong pid, bool isCompanionAI) = 68277327 (dump.cs:1900945)
|
||
// SyncCompanionMaster(ulong companionId, ulong masterId) = 68813982 (dump.cs:1901368)
|
||
// 为什么不自己写跟随:客户端 lua 里找不到这两个方法名以外的任何实现
|
||
// (lua.zip 只有 RPCMethodIdToName 里有名字,实现在 C# 侧),自己驱动等于重新实现一遍
|
||
// 官方的行为树 —— 性价比远低于把原生开关打开。
|
||
//
|
||
//
|
||
// 收起随从头顶的血条:SyncAddUnitState(68026128) + HideHp。
|
||
// 与 GameRouter.EnemyHpBar.cs:55 逐字段对齐(Id / State / EffectFreezeState)。
|
||
//
|
||
func GameRouter_CompanionBind_NotifyCompanionHideHpAsync(ctx context.Context, session *GameSession, uid uint64) any {
|
||
// Router implementation for GameRouter_CompanionBind_NotifyCompanionHideHpAsync
|
||
var zero any; return zero
|
||
}
|
||
|
||
//
|
||
// 把 绑给当前操控的角色。
|
||
//
|
||
//
|
||
// 由 SpawnAgentAsync 返回的单位 uid。必须已经 spawn 完 —— 客户端消费方会用
|
||
// masterId / agentId 去 SceneDataMgr 里查单位,spawn 包没落地就查不到。
|
||
//
|
||
func GameRouter_CompanionBind_BindCompanionAsync(ctx context.Context, companionUid uint64) any {
|
||
// Router implementation for GameRouter_CompanionBind_BindCompanionAsync
|
||
var zero any; return zero
|
||
}
|
||
|