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_extraction_admin.go

109 lines
5.6 KiB
Go
Raw Permalink 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
//
// 搜打撤的 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
}