109 lines
5.6 KiB
Go
109 lines
5.6 KiB
Go
package routers
|
||
|
||
import (
|
||
"context"
|
||
"sync"
|
||
)
|
||
|
||
var _ = sync.Mutex{}
|
||
var _ = context.Background
|
||
|
||
//
|
||
// 搜打撤的 GM / 面板面 —— 手动进出图、出场结算、状态输出、轮盘内容列举。
|
||
// 玩法逻辑本身在 GameRouter.Extraction.cs(背包/容器/搜索)与
|
||
// GameRouter.ExtractionWeapons.cs(轮盘实体化);这里只放「人要看 / 人要点」的那一层。
|
||
// ⛑ 三条排障常识(面板帮不上忙的那些):
|
||
// 1. 改了没生效 → 先比对源码 mtime 与 logs/console-latest.log 里的服务端启动时间,
|
||
// 确认这一版真的被跑过(同一天里踩过两次:跑的是改之前的 dll)。
|
||
// 2. [Handler] ≠ 已注册 → 还要进 GameRouter.cs 的 Enabled4229938MethodIds,
|
||
// 漏了的判据是日志那行 unimplemented … typed-default void 0b。
|
||
// 3. 某一片 UI 整体空 → 客户端日志搜 attempt to perform arithmetic /
|
||
// BindingWidgetShow failing,一个 nil 算术会崩掉整棵 store 树,不是只坏一个面板。
|
||
//
|
||
// ------------------------------------------------------------------ enter / exit
|
||
//
|
||
// 把人切进一张搜打撤图(面板「进图」按钮与伪造匹配共用这一条)。
|
||
// 为什么不能直接改 state.ActiveRaidId:只有 SwitchSceneAsync 会重新起一次
|
||
// 进图事务(推新的 world-entry generation、重推 SyncEnterScene、重建角色控制),
|
||
// 手动改字段的结果是「服务端认为进图了、客户端还站在老图上」。
|
||
// 进图之后的搜打撤专属包(SyncPlayerEnterExtractionShooter 空体 + 各包容量)由
|
||
// GameRouter.World.cs 在事务收尾时调 PushExtractionEnterAsync 补,
|
||
// 和真实客户端自己走 EnterRaid 那条路完全同路径 —— 这里不再重复推一次。
|
||
//
|
||
func GameRouter_ExtractionAdmin_EnterExtractionRaidAsync(ctx context.Context, session *GameSession, state any, raidId uint32) any {
|
||
// Router implementation for GameRouter_ExtractionAdmin_EnterExtractionRaidAsync
|
||
var zero any; return zero
|
||
}
|
||
|
||
//
|
||
// 出场结算 SyncRaidSettlement(68995324):退图之前推,让客户端走完整的结算流程。
|
||
// ⛑ 线格式见 SceneMethods.SyncRaidSettlementArgs4229938 的注释 ——
|
||
// 零战斗数据恒 32 字节,这是唯一能肉眼核对的东西;字节数一变,说明 complex 被写成 Inline 了。
|
||
// 我们不填战斗数据(SpiritBattleDatas 恒空):既没抓到过样本,
|
||
// 也不值得为一段 UI 动画去碰 Auto.Reader[1334] 那套未知布局。
|
||
//
|
||
func GameRouter_ExtractionAdmin_PushExtractionSettlementAsync(ctx context.Context, session *GameSession, isWin bool) any {
|
||
// Router implementation for GameRouter_ExtractionAdmin_PushExtractionSettlementAsync
|
||
var zero any; return zero
|
||
}
|
||
|
||
// ------------------------------------------------------------------ panel state
|
||
//
|
||
// GET /api/extraction/status 的返回体。
|
||
// 字段命名用小写驼峰 ⇒ 与前端 JS 一一对应;这里的形状改动时记得同步
|
||
// AdminWebServer.cs 里 exStatus() 那段,它是唯一消费者。
|
||
//
|
||
func GameRouter_ExtractionAdmin_ExtractionStateForPanel(ctx context.Context, ) any {
|
||
// Router implementation for GameRouter_ExtractionAdmin_ExtractionStateForPanel
|
||
var zero any; return zero
|
||
}
|
||
|
||
// 每个包一行:id + 当前格数 + 物品数(面板用来确认「到底有没有东西」)。
|
||
func GameRouter_ExtractionAdmin_BagRows(ctx context.Context, owner any) []any {
|
||
// Router implementation for GameRouter_ExtractionAdmin_BagRows
|
||
return nil
|
||
}
|
||
|
||
//
|
||
// 轮盘里会被实体化的那些武器(index = CellX + 2)。
|
||
//
|
||
func GameRouter_ExtractionAdmin_ExtractionWheelContent(ctx context.Context, owner any) []any {
|
||
// Router implementation for GameRouter_ExtractionAdmin_ExtractionWheelContent
|
||
return nil
|
||
}
|
||
|
||
//
|
||
// 轮盘上但不参与 Tab 切枪的物品(牛奶 / 药剂这类 —— 有格子、没有军械实例)。
|
||
//
|
||
func GameRouter_ExtractionAdmin_ExtractionWheelInertItems(ctx context.Context, owner any) []any {
|
||
// Router implementation for GameRouter_ExtractionAdmin_ExtractionWheelInertItems
|
||
return nil
|
||
}
|
||
|
||
//
|
||
// 面板「重推登录帧」:SyncPlayerInfo(64682159) 再发一次。
|
||
// 登录帧里的 InfoMinor.PlayerExtractionShooterInfo 是唯一把包柜塞给客户端的通道
|
||
// (ExtractionShooterRuntime4229938.FillLoginInfo),后期再改那些 bag 状态
|
||
// 客户端不会自己来问 ⇒ 排障时想"把整套包结构重来一遍",按这个按钮比重新登录快得多。
|
||
//
|
||
func GameRouter_ExtractionAdmin_RepublishExtractionLoginFrameAsync(ctx context.Context, ) any {
|
||
// Router implementation for GameRouter_ExtractionAdmin_RepublishExtractionLoginFrameAsync
|
||
var zero any; return zero
|
||
}
|
||
|
||
//
|
||
// 面板「任意 notify 探针」:把一条裸包按指定 methodId 直接推给客户端。
|
||
// 用途:搜打撤还剩的最大空白是撤离点 SyncExtractionShooterEvacuationRooms 这类
|
||
// 「不知道客户端到底认什么形状」的包。靠猜契约再编译再进游戏太慢,用这个探针可以直接
|
||
// 往客户端打任意 methodId + 任意 hex,从 Player.log 的
|
||
// deserialize failed / attempt to perform arithmetic 反推它要什么(硬规则 15)。
|
||
// ⛑️ 纯调试通道,不写任何状态、不进白名单(S2C 方向本就不需要)。
|
||
// ⛑️ hex 为空 = 推空体,用来试探「客户端有没有这一条的 impl」(空体最不容易崩)。
|
||
// 移植自捐赠端 v1.7(GameRouter.PushExtractionNotifyAsync)。
|
||
//
|
||
func GameRouter_ExtractionAdmin_PushExtractionNotifyAsync(ctx context.Context, methodId uint32, hex any) any {
|
||
// Router implementation for GameRouter_ExtractionAdmin_PushExtractionNotifyAsync
|
||
var zero any; return zero
|
||
}
|
||
|