Commit Graph
100 Commits
Author SHA1 Message Date
TermiNexus 87539a9645 feat(session): 生成下行动作映射表并接入会话路由 2026-10-24 22:58:04 +08:00
TermiNexus 780373180d feat(session): S3 连接层起步,上行编码 golden + 会话解码自检 2026-10-24 22:43:35 +08:00
TermiNexus b04f0f390d feat(state): 迁移 battleCreateState,状态层 89/89 全部完成 2026-10-24 22:24:08 +08:00
TermiNexus 8b124388ec feat(state): 迁移 matchmakingGroup 2026-10-24 22:18:57 +08:00
TermiNexus 6f68afa678 feat(state): 迁移 itemNotifications(复用 ItemNotificationData) 2026-10-24 22:14:50 +08:00
TermiNexus bb544643b5 feat(state): 迁移 chatState(复用 ChatMessage 模型) 2026-10-24 22:09:49 +08:00
TermiNexus 2f38609a98 feat(state): 迁移 clan(36 字段 / 43 动作) 2026-10-24 22:05:19 +08:00
TermiNexus ad5686241d feat(state): 迁移 clansStorage(复用 ClanInfo 模型) 2026-10-24 21:58:43 +08:00
TermiNexus 25f8cd431e feat(state): 迁移 challenges(复用 Challenge 模型) 2026-10-24 21:26:43 +08:00
TermiNexus 7d1c808af9 feat(state): 迁移 battleUsers(复用 RemoteUserData/UserStat/TankInfoCC) 2026-10-24 21:21:36 +08:00
TermiNexus cd597b4693 feat(state): 迁移 battlesSelect(复用 BattleParams/BattleInfoUser) 2026-10-24 21:03:47 +08:00
TermiNexus 71aa9a5256 feat(state): 迁移 matchmaking 2026-10-24 20:42:01 +08:00
TermiNexus 9e51b695aa feat(state): 迁移 remoteUserDataStorage(复用 RemoteUserData 协议模型) 2026-10-24 20:23:50 +08:00
TermiNexus 5327312b13 feat(state): 迁移 battleChat(复用 ChatMessage 协议模型) 2026-10-24 20:08:24 +08:00
TermiNexus 8dac8d96e8 feat(state): 迁移 maps 并补地图描述协议模型 2026-10-24 19:56:41 +08:00
TermiNexus 9cf760b354 feat(state): 迁移 battleMessage 并补战斗消息协议模型 2026-10-24 19:46:20 +08:00
TermiNexus 0cd2a23c9e feat(state): 迁移 tankBuilderState 2026-10-24 17:42:50 +08:00
TermiNexus 6a1c8b4306 feat(state): 迁移 contractState 2026-10-24 17:30:56 +08:00
TermiNexus 0d1e2d00c5 feat(state): 迁移 graphicsSettings/controlSettings/battleSettings 2026-10-24 17:24:01 +08:00
TermiNexus cade4020a5 feat(state): 迁移 soundSettings/gameSettings/keyboardSettings/touchscreenHudSettings 2026-10-24 17:13:24 +08:00
TermiNexus 86979eb168 feat(state): 迁移 battleStatistics 2026-10-24 16:55:21 +08:00
TermiNexus 4aec83f684 feat(state): 迁移 clanChatState/battleSearchState 2026-10-24 16:45:20 +08:00
TermiNexus 38ec7fa28e feat(state): 迁移 battlePauseState/battleViewState/tankActionsLogState/suppliesTutorial 2026-10-24 16:33:38 +08:00
TermiNexus 0183f191d3 feat(state): 迁移 friends/suppliesState/clanUserInfo/battleInviteState/partner/userRenameState 2026-10-24 16:00:39 +08:00
TermiNexus af005ab019 feat(state): 迁移 system/contextTutorial/battleTutorial/spectator/twoStepVerificationState/antiAddiction/moderation/migrationState/register/userReportsState 2026-10-24 15:32:47 +08:00
TermiNexus 8633fc91c1 feat(state): 迁移 tipsState/rankUpDialogState/battleResult/captchaState/modalScreen/droppableGold/eventGoods/creatorTagState/rewardedVideosState/passwordChangeState 2026-10-24 14:43:51 +08:00
TermiNexus 6d2487d9ea feat(state): 迁移 icons/questCategories/mainQuest/securitySettings/referralEvent 2026-10-24 14:12:19 +08:00
TermiNexus 49e8c1efc4 feat(state): 迁移 lobbyLoader/purchaseDialogState/promoCode/supportUrl/rulesUpdated/notificationByCountry/availabilityByRank 2026-10-24 13:29:41 +08:00
TermiNexus df179dea51 fix(state): quests 的 SetNotCompletedQuests 实际是 no-op(动作字段与 cd 同为 undefined) 2026-10-24 13:14:28 +08:00
TermiNexus 81668b0a2e feat(state): 迁移 news/notifications/quests 切片 2026-10-24 13:05:13 +08:00
TermiNexus 006e6a7ebd feat(state): 批量迁移 accountSettings/proBattle/language/announcement 切片 2026-10-24 12:19:13 +08:00
TermiNexus 6947fcb567 feat(state): 迁移 settings 切片(2 字段 / 2 臂) 2026-10-23 17:20:56 +08:00
TermiNexus 9b3e76d42d feat(state): 迁移 user 切片(32 字段 / 28 臂) 2026-10-23 16:36:23 +08:00
TermiNexus 77a90fdfff feat(state): 迁移 entrance 切片(8 字段 / 7 臂) 2026-10-23 15:47:18 +08:00
TermiNexus 435cd3191e feat(state): 收口 launchParams 切片为强类型透传(11/89) 2026-10-23 15:29:05 +08:00
TermiNexus 1194c395b4 feat(state): 迁移 garagePreview 切片(22 字段 / 25 分支) 2026-10-23 15:12:10 +08:00
TermiNexus 3c0ed0a998 feat(state): 迁移 garage 切片(31 字段 / 60 分支) 2026-10-23 13:58:47 +08:00
TermiNexus f66f431670 feat(state): 迁移补给箱切片(18 个动作 + ContainerType) 2026-10-23 12:25:43 +08:00
TermiNexus 974a9f49ad feat(state): 迁移屏幕导航切片(13 个动作 + ScreenId) 2026-10-23 03:28:57 +08:00
TermiNexus b7afe07894 test(state): 用真实派发样例回放商店切片 2026-10-23 02:38:36 +08:00
TermiNexus 94374d2f36 feat(state): 全量迁移商店切片(69 个动作 + U7/w3 子状态) 2026-10-23 02:13:31 +08:00
TermiNexus 86d79eddad feat(state): 迁移 home 与 localBattleUserState 两个内联切片 2026-10-23 01:24:21 +08:00
TermiNexus f373c2053e feat(state): 按效果为无 toString 的 o1 定名 ShowShopDiscountNotification 2026-10-23 01:19:35 +08:00
TermiNexus d5098cc782 feat(state): 4 个内联 IIFE 切片按字段具名并补动作名 2026-10-23 00:56:50 +08:00
TermiNexus fdc516b7f3 feat(state): 迁密码登录与 Twitch 切片,拼出 89 槽位根 reducer 2026-10-23 00:38:10 +08:00
TermiNexus c280f2a2a1 feat(state): 迁移登录邀请切片 reducer(InviteState)
1) 动作在 Kotlin 侧不再要求公共基类:原包动作也没有基类,Store/Gateway 改用 Any,817 个生成类无需实现接口。

2) 新增 App/State/Reducers/InviteReducer.kt,逐条对照 module_10032:状态 aD=InviteState(isInviteNeed, invite, status, existsUid, inviteAccepted)、枚举 lD=InviteStatus(UNKNOWN/FREE/NOT_FOUND/ALREADY_ACTIVATED)、reducer pD.er5 的三条分支。默认值取自构造函数(isInviteNeed 默认 true、invite 默认空串、status 默认 UNKNOWN、inviteAccepted 默认 false)。

3) 自检 19 增到 26 项:默认值、三条动作分支(含 FREE 推导 inviteAccepted、ApplyInvite 重置 status/existsUid)、无关动作不动、接 Store 派发后归约。

结果:TANKIOFFLINE_STATE_TEST=1 全通过。
2026-10-23 00:05:58 +08:00
TermiNexus b7dea52f03 feat(state): 用 138 条真实 dispatch 样例回放校验动作目录
1) analyze_action_trace 保留每个动作的第一行原始 toString(Samples),并新增两条类型规则:见过 [object Object] 记为 Opaque(运行时说不出类型,但不能再让调用点猜);字段只要出现过 null 就补可空后缀(Long?/List<String>?)。

2) gen_action_kt 产出 ActionSamples.kt;可选类的判定改用「样例那一行的字段集」,修掉 Configure 选错行(1 字段的 config 版 vs 12 字段的真实版)。

3) 自检加两组:回放对照(138 个动作 × 真实字段值,缺类/缺字段/类型不符三项必须为 0)+ 全目录 817 个动作类注册并验证只路由命中项。

结果:19 项全通过;缺类 0 / 缺字段 0 / 类型不符 0。过程中修出 8 处错型:6 个 Opaque 字段曾被误判成 Long,4 个字段缺少可空性。
2026-10-22 14:36:33 +08:00
TermiNexus 74bf01c0f8 feat(state): 生成动作目录 ActionCatalog,把 817 个类与实际 dispatch 名对上
1) gen_action_kt 现在额外产出 App/State/ActionCatalog.kt:817 条(816 个 module_10032 数据类 + module_10849 的 InitState),每条带类引用与字段类型。

2) State 模块补 InitState(type, action):原 module_10849 的 ct,toString 证据为 InitState(type=…, action=…)。

3) 自检从 10 项扩到 15 项:目录非空、名字唯一、每个条目能拿到 KClass、运行时打点过的 135 个动作名 0 缺口、ByName 与 All 对齐。

结果:TANKIOFFLINE_STATE_TEST=1 全通过(目录 817 条;打点动作名 135 个;缺口 0)。
2026-10-22 12:52:18 +08:00
TermiNexus a64530761b feat(state): 移植 Redux 内核(Store/中间件/网关)并加 10 项自检
对照 module_10849 的 toString 证据实现:vt=ReduxStore(归约+监听器+中间件链)、yt=ReduxToModelGateway(按动作类先通知、再交给 Store;模型/键/游戏对象三级订阅,重复订阅 fail-fast)。

自检 TANKIOFFLINE_STATE_TEST=1:归约累加、通知次数与新状态可见性、中间件由外向内顺序、动作监听器先于归约、模型订阅/退订、重复订阅抛错、派发经过调度器,共 10 项全通过。

state 模块补 js(IR){browser();nodejs()} 使 :app 可依赖;新增 tools/RunStateTest.ps1。
2026-10-22 12:47:51 +08:00
TermiNexus 7d8ceedee2 fix(state): 布尔判定只在顶层生效,清掉 223 个假 Boolean
1) 旧规则只要表达式里出现 ===/>= 之类就判 Boolean,导致 (i = i === cd ? null : i) 这类『赋值+三元』被当成布尔,realName/battleId/mapName 都被误判成 Boolean。新增 Booleanish:去外层括号、剥离顶层赋值取右值、遇三元直接放弃、只认顶层比较/取反/equals。

2) 运行时类型若为 Any?/List<Any?>/Map<String, Any?>(本身没信息,例如值全是空列表),不再挡住调用点推断。

3) analyze_action_trace 支持 Kotlin 默认 toString 形态 Name [a = 1 b = X],从抽样里多解析出 40 个模型类(TankResistance/Range/TemporaryItemCC/UserPropertiesCC…),并让空容器的『元素未知』不参与冲突判定(List<Any?> + List<Long> → List<Long>)。

4) 新增 --why <类.字段> 排查错型:打印每个调用点的实参与推断结果。

结果:已定类型 707 → 493(真实原因是那 223 个是错型);嵌套对象类 3 → 43(235 个字段已定类型);与运行时真值冲突 6 → 2。
2026-10-21 22:10:09 +08:00
TermiNexus c957f742b1 feat(state): 按运行时 toString 样例生成嵌套对象类
1) analyze_action_trace 现在会递归解析动作 toString 里的对象值(Name(a=1, b=Xxx(...))),输出 Models 表:12 个对象类、92 个字段,字段名与类型都来自真实 dispatch 样例。

2) gen_action_kt 据此处理三类情况:①已有同名数据类且字段覆盖运行时字段 → 直接复用(并把它选为该名字的代表行,修复 Challenge 误选 1 字段版的问题);②同名但字段对不上 → 放弃;③无同名类 → 现生成 data class(Coloring / EmissionColors / TextureFrameAnimation)。

3) 动作字段遇到已确认的对象类时按类名定型,不再退化成 Any?;Kotlin 关键字做属性名时加反引号。
2026-10-21 22:05:51 +08:00
TermiNexus 5e93ba6f47 feat(state): 数据流覆盖匿名函数/IIFE/原型方法,剔除 copy 转发噪声
1) 作用域索引从「具名 function」扩到三类:具名函数、赋值到原型的方法(ld(Cls).m = function)、IIFE((function(t){...})(a,b));形参解析按由内向外逐层尝试。

2) 关键修正:Kotlin 给 data class 生成的 copy/with(原型方法里 return new Cls(同名形参…))是循环证据,不能当类型依据。剔除后覆盖率从虚高的 1185(55.7%) 回落到 689(32.4%),被剔除的 497 个字段标注为「仅 copy 转发(无类型信息)」。

3) 新增 --stats:输出仍认不出的实参形态分布,便于决定下一条规则。

4) 与 158 个运行时真值对比仍无新增冲突(保持 3 处真实分歧:AddBattle.suspicionLevel / UpdateEventPass.eventPassEndTime / SetDrone.resource)。
2026-10-21 21:42:17 +08:00
TermiNexus b77e11ad30 feat(state): 静态数据流补类型,调用点按「动作名|局部类名」分桶
1) gen_action_kt 加纯静态局部数据流:实参是变量时,按「形参 → 调用点」和「函数体内最近一次赋值」回溯,深度 2、多来源冲突即放弃;新增 --audit 用运行时真值反向校验推断规则。

2) 调用点改为按「动作名|局部类名」索引。此前按名字索引,同名不同类(Init 有 1 字段版与 18 字段版)互相串味,导致推断出与运行时真值冲突 13 处;分桶后冲突降到 6 处(其中 3 处是运行时未定类型)。

3) analyze_action_trace 修 [object Object] 被当成 List<String> 的误判;客户端每次上报的是本页累计缓冲,页面刷新会覆盖成小文件,改为并入 action_trace_merged.json,只增不减。

结果:已定类型字段 361 → 722(runtime 158 / callsite 196 / dataflow 368),无调用点字段 12,未收录模型类型 37,compileKotlinJs 通过。
2026-10-21 20:33:53 +08:00
TermiNexus a0466b6544 feat(state): 调用点扫描补上 module_10032 内部构造
此前只扫跨模块的「别名 = dep.\\$.导出键」再 new,10032 内部动作互相 new 的 666 处全漏(215 个类里 212 个因此被判成无调用点)。改为先按局部类名直扫 10032,再扫其它模块。

结果:有调用点的类 639 → 861/864,调用点 1515 → 2181,已定类型字段 306 → 361(runtime 162 / callsite 199),无调用点字段 983 → 12,compileKotlinJs 通过。
2026-10-21 20:23:58 +08:00
TermiNexus 37be0e2418 chore(trace): 在 ReduxToModelGateway.dispatch 打点动作 toString
yt.uar 是全包唯一的真实 dispatch 入口;动作类 toString 形如 SetFragsCount(fragsCount=3),据此反推动作名/字段名/字段值类型(action_trace.json)。打点只在镜像副本里,落地走 /__dump__/action_trace.json。
2026-10-21 20:20:08 +08:00
TermiNexus 85f180f331 feat(state): 生成 10032 动作/状态层 Inventory.kt(运行时类型优先)
- 新增 extract_action_inventory / infer_action_types / analyze_action_trace / gen_action_kt 四个工具

- extractor 支持 return ( 换行形式,类数 619 → 864(唯一名 816,字段 2129)

- 生成器按「运行时 dispatch 打点 > 调用点字面量 > 协议字段表」定类型,认不出写 Any? 并留证据

- 修掉两处会生成非法 Kotlin 的问题:逗号落在注释内、运行时 JS 模型名被当成 Kotlin 类型

- 结果:306/2129 字段已定类型(runtime 162 / callsite 144),compileKotlinJs 通过
2026-10-21 20:19:53 +08:00
TermiNexus b083d27165 fix(protocol): TankState 按 23 字节定长 blob(T5)解码,修复 TankCC 后续字节错位
- codec_fields:module_87072::T5 记为单字段 bytes23;pq.tankState 的 TypeCodec 由 85183::jq 改指 87072::T5
- 生成器支持 bytes<N>(ByteArray / R.ReadRaw(N) / W.WriteRaw),重生成 Module87072、Module85183
- 审计链:lib_space_codec 新增 bytes<N>;audit_pt_boundaries / audit_bit_budget 支持 --body/--plain;semantic 暴露 Out.Bits
- 新增工具:audit_bit_budget(nullmap 位预算)、probe_pt_record(pt 项级)、analyze_item_trace(客户端项级打点对照)、dump_codec_src
- wss_server 新增 --dump-plain:把解密+解压后的裸帧体落到 plain/,供离线审计
- 镜像打点:opt 全量位位置、pt 项级字节/位区间、TankCC 逐字段区间;重新打包 unpacked.pack.json
2026-10-21 15:21:10 +08:00
TermiNexus 2ce2fd0363 fix(tools): 审计不再跳过参考实现失败的 pt 记录 2026-10-21 04:26:22 +08:00
TermiNexus 4cccc084be fix(tools): 修正审计位游标少加形态位的一处偏移 2026-10-21 04:21:51 +08:00
TermiNexus b8651b4a8a feat(protocol): 全量 opt 打点按帧分组,定位每个模型消费的位数 2026-10-21 04:03:51 +08:00
TermiNexus d95e35e5c9 feat(tools): 边界审计输出带目录定位 2026-10-21 04:02:33 +08:00
TermiNexus 1c5dc3afb9 feat(protocol): 采集客户端枚举读取打点并加分析脚本 2026-10-21 03:29:56 +08:00
TermiNexus ce8eeec8d6 fix(tools): 审计改用跨记录位游标,修正多记录帧误判 2026-10-21 03:28:52 +08:00
TermiNexus 8444b961c0 feat(tools): 位痕迹分析输出客户端位游标 2026-10-21 03:02:13 +08:00
TermiNexus aaf1554fe9 feat(protocol): 位痕迹记录客户端绝对位游标 2026-10-21 03:02:02 +08:00
TermiNexus e0542b2681 feat(protocol): 位痕迹按 codec 槽位指纹定位字段 2026-10-21 02:55:25 +08:00
TermiNexus 97917478a4 feat(protocol): 采集客户端 opt<list> 位痕迹并加分析脚本 2026-10-21 02:49:44 +08:00
TermiNexus fafdb91a04 feat(tools): 边界审计支持逐字段位游标追踪 2026-10-21 02:48:17 +08:00
TermiNexus ffe633b286 feat(tools): 用源码 u7h/t7h 核对全部 codec 字段表 2026-10-21 02:46:28 +08:00
TermiNexus 71b74b41e0 feat(tools): 新增 pt 边界审计器,并补全参考实现的 vector3 与位推进判据 2026-10-21 02:20:31 +08:00
TermiNexus 7845e5becd fix(protocol): 单帧异常不再中断整轮回放,并记录 enum 宽度实验结论 2026-10-21 02:04:54 +08:00
TermiNexus 3b58a43063 fix(protocol): 修正反查漏掉 \$ 前缀类名的错位,回放错误 12→6 2026-10-21 01:53:51 +08:00
TermiNexus 5721158e6c feat(tools): dump 接口按 modelId 合并,跨会话累积注册表 2026-10-21 01:38:56 +08:00
TermiNexus b64f5cc65c feat(protocol): 采用运行时权威 modelId 绑定重生成协议层 2026-10-21 01:38:07 +08:00
TermiNexus 9975a8662f feat(protocol): 采集运行时 modelId→codec 注册并用源码反查模块归属 2026-10-21 01:32:03 +08:00
TermiNexus ca42614056 feat(protocol): 离线回放支持多目录并补齐 pt 解码失败定位信息 2026-10-21 01:16:21 +08:00
TermiNexus 353eb9b0a9 chore(bundle): 重新构建 bundle(含栅栏局部坐标判定) 2026-10-21 01:06:26 +08:00
TermiNexus ee2cba3273 fix(ignore): 改用局部坐标的竖直跨度判定栅栏,修正世界/局部坐标混用
三角形顶点是刚体局部坐标(诊断里位置恒为 0,0,0),之前拿局部 z 与车体世界 z 比较导致条件恒不成立。现判据:|法线z|<0.6 且本地竖直跨度>100(地面跨度≈0、栅栏≈200+);诊断输出补 解包type/跨度,位置改用刚体世界坐标以便识别近邻节点。
2026-10-21 01:06:20 +08:00
TermiNexus 4ee63a78c9 feat(autotest): 按 zt 回调号自动应答 G.q1wd
- 解码到 LoadDependencies(zt) 后取 X,延迟 300ms 回 G.q1wd(X)(与真实抓包 c2s_0001 逐字节一致)
- 大厅连接保持打开,避免 digest 会话被提前释放
- 实测:链路密钥唯一命中、zt 容器解码、G.q1wd 已被中继识别并转发
2026-10-21 00:50:47 +08:00
TermiNexus b2deca31be fix(ignore): 解包 type 4 克隆形状后再做三角形判定
type 4 是克隆包装(hu.c9w_1 = 原形状.d21()),地图三角形都以它出现,之前按三角形判定永远不命中。现在 IsTriangle/TriangleNormalZ/ShapeMaxZ/ShapePoint 统一先解包 c9w_1,再套「高于车体 1m + |法线z|<0.6」规则;schema 补 Shape.Clone。
2026-10-21 00:49:13 +08:00
TermiNexus d4a260ac92 feat(ignore): 增加 seen 统计与 ResetStat,便于对比栅栏与地面的形状类型
seen = 本车接触到的所有非坦克形状的 cat/type 直方图(不论是否忽略);新增 ResetStat() 清零,便于「平地 1 秒」与「顶住栅栏 1 秒」两次对比定位栅栏的真实形状类型。
2026-10-21 00:45:50 +08:00
TermiNexus f455fe5c35 feat(ignore): x9o 路径改为忽略本车与任意静态形状的相交查询
接触路径(q9q)仍只忽略立面三角形以防掉地;形状相交查询(x9o)对本车与任意静态形状返回 false,覆盖扫掠/查询式阻挡;新增 skippedOverlap 计数。
2026-10-21 00:42:54 +08:00
TermiNexus 0e8af39bfe feat(ignore): 同时接管形状相交查询 x9o(真形状检测)
栅栏判定同时作用于接触配对 q9q 与形状相交查询 x9o:命中时返回 false(不相交),覆盖扫掠/查询路径;新增 skippedOverlap/overlapPatched 统计;schema 补 CollisionWorld.Overlap。
2026-10-21 00:42:28 +08:00
TermiNexus 0ca28ff9b2 feat(autotest): 新增双连接接入测试与链路密钥探测
- AutoTest:大厅 Hash Request → 取 digest/空间 id → 空间连接 EnterSpace → 收空间帧
- StreamDecoder:首条密文即穷举单字节链路密钥(K),之后 s2c 自动解密
- 首条空间帧到达后再加密发送 G.q1wd,服务端才会继续下发容器数据
- RunAutoTest.ps1:自动拉起大厅/空间两条中继,跑完自动回收
- 实测通过:握手成功、K 唯一命中、容器 1 条、回编码一致
2026-10-21 00:38:59 +08:00
TermiNexus 2ba8df0245 fix(ignore): 只忽略立面三角形,type 1/4 静态代理不再跳过(修复掉地)
实测 byType={16/4:26530,16/1:4620} 表明被跳过的是非三角形地形代理,导致穿地。现判定只对 type=8 三角形生效:最高点高于车体中心 1m 且 |法线z|<0.6;非三角形静态一律保留。
2026-10-21 00:36:30 +08:00
TermiNexus 580a456032 fix(ignore): 栅栏判定加入高度门槛,避免把地面一起忽略导致掉出地图
上一版 skippedFence 达 4.6 万,说明地面三角也被忽略。现规则:静态形状最高点必须高于本地坦克中心 1m 才可能是栅栏;三角形再要求 |法线z|<0.6。新增 byType 统计(cat/type → 忽略次数)便于确认命中对象。
2026-10-21 00:32:24 +08:00
TermiNexus bfc3821dc7 fix(ignore): 恢复非三角形静态碰撞的忽略,栅栏恢复可穿过
上一版把判定收窄为仅陡峭三角形,导致非三角形静态代理(栅栏碰撞体)仍会挡住本地坦克。现判定:静态几何中非三角形一律忽略;三角形按 |法线z|<0.5 忽略,地面/缓坡保留。
2026-10-21 00:30:00 +08:00
TermiNexus 69defa85e7 feat(ignore): 栅栏诊断输出重叠物体信息(形状 + 邻近场景节点名)
保持原有几何判定(仅陡峭静态三角形);DebugFence(true) 后,本车与任意非坦克形状配对时按签名去重打印 cat/type/法线/位置/7m 内场景节点名,用于确认栅栏对应哪个物体;schema 补 Body.State/PositionVec。
2026-10-21 00:25:16 +08:00
TermiNexus 63c08ab165 fix(ignore): 放宽栅栏判定并加入静态形状诊断
静态障碍不再只认三角形:非三角形静态碰撞代理直接视为障碍,三角形按法线 |nz|<0.5 判定;新增 __hornetNoClip__.DebugFence(true) 打印静态形状样本(cat/type/三角/nz/是否跳过),用于定位未生效原因。
2026-10-21 00:18:51 +08:00
TermiNexus f3db51cf4b feat(protocol): 补齐容器命令与短命令别名机制
- Containers.kt 实现 lt/pt/zt/alias 四种布局,覆盖 ModelService 4 条容器命令
- 生成 ModelRegistry.ByModelId,供 pt 项按 modelId 展开
- 短命令:_setModelCommandAlias 解码后写入别名表,记录链可按别名继续解
- 下行注册补到 681 条;railgun-battle 400 帧复跑仍为 399/399 回编码一致
2026-10-21 00:13:12 +08:00
TermiNexus 7481dad24e feat(ignore): 面板新增「忽略」区域(坦克按阵营 / 反弹 / 栅栏)
hornet_noclip 改为通用忽略模块:配对过滤支持 关闭/仅敌方/仅友方/全部 的坦克忽略,并新增忽略栅栏(只跳过 |法线z|<0.5 的静态三角形,地面与缓坡保留);面板新增可折叠「忽略」区域,接管忽略坦克下拉、忽略反弹(NoKnockback)、忽略栅栏,各自 localStorage 持久化;schema 补 Shape.Type/Vertex0-2。
2026-10-21 00:04:38 +08:00
TermiNexus 5088524f22 feat(tankioffline): 搭建 Kotlin/JS 多模块工程与 S2 全量协议层
- 新增 TankiOffline 多模块骨架(app/core/net/ecs/physics/render/resource/state/battle/ui)
- core 实现帧边界、nullmap 位流、大端读写、varint、fflate 解压
- GenerateProtocol.py 从 names 表生成 644 个模型、679 条下行、361 条上行 Kotlin codec
- 手写 TankState 的 23 字节位打包 codec(真实注册点是 module_87072 的 T5)
- app 增加 Node golden 自检:抓包解码后立即回编码逐字节比对
- 实测 plain/railgun-battle 400 帧:399 条记录全部回编码一致
2026-10-21 00:03:18 +08:00
TermiNexus 2ef424929b fix(protocol): 适配 e98d0216 版编解码 API 并重生成协议表
- extract_codec_fields:字段工厂 n7f→r7g、读写方法 p7g/o7g→t7h/s7h、槽位初始化 q7g→u7h
- 资源类注册 u83→y84,核心类型按 模块::导出键 解析(Vector3/Long/实体引用)
- mine_downlink:读取器映射按当前 ByteBuffer 修正(t2u=f32、u2u=f64 等),容器槽位泛化
- 重生成 codec_fields/uplink_table/downlink_table:762 下行字段 0 未解,361 上行命令全量有类型
2026-10-21 00:03:07 +08:00
TermiNexus 78c02345c2 revert(local): 运行链路默认改回 unpacked,src 改为 -UseSrc 可选
保持原有行为:默认加载 3dtank.com/play/static/js/unpacked(含 4 个模块的人工补丁),启动时按需打单包,-Build 强制重打;-UseSrc 才切到 3DTank/src,-Split 作为兼容旧参数等同默认。serve.js 的 --src 能力保留但不启用。
2026-10-20 23:06:09 +08:00
TermiNexus a487c28dc1 feat(local): 运行链路默认切到 3DTank/src,启动时按需打单包
serve.js 新增 --src:unpacked/module_*.js、resources.json、index.json 与 unpacked.pack.json 路由到源码目录(加载器与 hornet_bundle 仍走镜像);修复 403 白名单未包含 src 目录。Start-LocalAndRelay 默认跑 src,源码更新或单包缺失时自动打包,-Build 强制重打,-Split 回退切割产物;恢复 ps1 的 UTF-8 BOM 以免 Windows PowerShell 误读中文。
2026-10-20 22:53:34 +08:00
TermiNexus fd952e814c chore(extract): 重建 src 到当前包 main.7cfa4058 并修复证据挖掘
3DTank/src 原为 6469b966(client_version 83fabafa)时代的产物,已按 main.7cfa4058(e98d0216)重新 extract(126 代码模块 + 1221 资源);mine_evidence 的组件 getter 正则补上当前版本的 Z\$ 抛错函数,字段证据从 0 恢复到 1740 条;证据来源包改为读取 index.json.bundle。
2026-10-20 22:43:37 +08:00
TermiNexus 8bbdb40364 docs(kt): 新增 Kotlin 重构计划(工具清单/阶段/验收)
按 dir.file 的 40/21/65 分类修正范围:仅 40 个游戏本体模块需要复刻;补充现有工具用法、S0-S6 阶段、可启动 JS 验收标准、换版漂移处理与风险回退。
2026-10-20 22:31:40 +08:00
TermiNexus 66a74df6e3 refactor(schema): 全部工具改为经字段抽象层取值
hornet_lib / hook_gamemode / radar / 透视 / 后视镜 / 瞄准警告 / 自由视角 / 战争沙盘 全部改为 Fld/Mth 常量取值;schema 补齐渲染器、网格、射线、武器、皮肤槽位等 88 项字段与别名;SelfCheck 改为只校验核心字段,避免别名误报。
2026-10-20 22:04:07 +08:00
TermiNexus 5a3440229e fix(noclip): 改为拦截碰撞配对,修复关闭后拾取物失效
穿坦克不再修改碰撞 mask(坦克 category 与拾取物触发体共用 bit0,清位会导致拾取失败且关闭后需重生才恢复)。改为包装 module_55088 碰撞世界 ki.q9q,仅跳过双方都是坦克物理组件的配对:地形、拾取物触发、地雷、子弹均保持原样,关闭开关无需还原状态。
2026-10-20 20:39:29 +08:00
TermiNexus bea22bb5f9 feat(noknockback): 新增拒绝击退开关,中弹不再被推开
在本地坦克实体的 kz7 事件派发处丢弃外力事件(ODt:作用点/方向/强度),坦克物理收不到就不产生位移与旋转;悬挂与行驶仍走 m9k 直调,不受影响。面板新增「拒绝击退」开关。字段名走 hornet_schema。
2026-10-20 20:35:19 +08:00