44 lines
2.2 KiB
Go
44 lines
2.2 KiB
Go
package routers
|
||
|
||
import (
|
||
"context"
|
||
"sync"
|
||
)
|
||
|
||
var _ = sync.Mutex{}
|
||
var _ = context.Background
|
||
|
||
//
|
||
// 里希(Garm) 之外的另一条「可控非角色原型」:科斯机甲(2026-09-26,移植捐赠端 7k-v0.5
|
||
// GameRouter.Kesi.cs)。
|
||
// 根因(客户端配置侧,已在本服 ClientData 上复核):
|
||
// - FightSpiritConfig 15022030 = "特摄战原型-科斯",IsPublish=false / CanJoin=false /
|
||
// Invisible=true ⇒ 它永远不在 Characters() 花名册里,roster 上点了也不会出现。
|
||
// - SceneitemConfig 80003500 = "科斯冲锋枪",WeaponBelong=15022030、
|
||
// FixedFightSkill=39010048,且没有 WheelIcon ⇒ 常规军械库过滤器会把它判掉,
|
||
// 所以它连「随便塞把枪」都做不到,必须走 CombatCatalogRepository 里那份孤立装配。
|
||
// - 客户端 CheckIsKesi 拿 cardId 15022030 认机甲(捐赠端注释)。
|
||
// 供给链三条,缺一不可:
|
||
// 1. SyncPlayerAddNewSpirit(64691088) 增量补 SpiritViewData —— 登录包里没有它,
|
||
// 客户端 SpiritManager.Id_to_Tid 查不到 tid,后面所有和它相关的包都会被静默丢掉;
|
||
// 2. CombatCatalogRepository 里那份科斯 loadout(slot0 科斯冲锋枪 80003500 + 风格 39010048);
|
||
// 3. 走本服已在用的 OnSwitchSpirit 做身份移交 —— 不另发明一套切人。
|
||
// ⛑ 这是需实机验证的实验入口:捐赠端自己也标注"尚需游戏内验证"。
|
||
// 能确认的只有服务端协议侧齐了;模型加载、镜头、机甲技能面板和按键都得进游戏看。
|
||
//
|
||
func GameRouter_Kesi_ControlKesi4229938(ctx context.Context, session *GameSession, enter bool) any {
|
||
// Router implementation for GameRouter_Kesi_ControlKesi4229938
|
||
var zero any; return zero
|
||
}
|
||
|
||
type KesiControlRuntime4229938 struct {
|
||
// 与普通角色切换共用一把锁:GM 切机甲和游戏内主动切人不能互相打断,
|
||
// 否则两份 PlayerInfo/SpiritViewData 会交错下发,客户端 roster 直接错位。
|
||
Gate *sync.Mutex `json:"gate"`
|
||
// 进入机甲前的角色 template;return 时切回它。
|
||
ReturnTemplate uint32 `json:"returnTemplate"`
|
||
// 只有走过 ControlKesi 才允许 OnSwitchSpirit 接受 Kesi 作为目标。
|
||
Unlocked bool `json:"unlocked"`
|
||
}
|
||
|