C# CG 跑商实测
本分支适配 Odyssey 2026.10.23.334925,游戏 SHA-256 为 ed5a8f8cd10f9a80d3bda5badd7ba1d4fcfc15996c8c7e018852cb170e264b63。原生插件保持原有 ABI,主要导航、交易和会话逻辑由 C# / NativeAOT 实现;平台边界只负责原生调用、异常边界和钩子。
实际验证范围
- 原始服务器 CG 名单、个人名单与报名已实测。报名必须由新的个人名单确认;贡献字段兼容原始整数、纯数字字符串和未贡献时的 null。
- 原1t验收货物在保护退出和修复后分段完成实际采购、起飞、跃迁、超巡、空管、停靠、出售及站点支持的维护。
- 首批192t Uranium已实际买入、售出,原始CG贡献确认192t;燃油、维修及完整性费用均计入账本,最终原始钱包与所有确认回执核对一致。
- 第二批192t已完成实际出售和维护,累计原始CG贡献384t。中途NPC拦截导致流程停止,摆脱后按原检查点恢复;后半程使用工具箱自主超巡,原始安全脱出、空管、原生降落和钱包均已确认,没有重复买卖。
- 订单 intent 在提交前落盘;恢复使用原检查点和 operation key,未知回执阻止重放。单目录锁阻止同一旅程并行执行。
- 持续独立健康观测与输入保护保留:实际受损后破盾或船体低于50%立即退出,初次无盾不触发受损退出。原始遥测未就绪时禁止输入。
保护失效、修正及恢复条件
0.5.12进一步返程验证仍在脱出后直接请求空管的路径失败:原始输入缓冲已经归零,停靠电脑使用的输入来源仍为.75。随后发现导航清理会同时释放该段的受损监测,实际发生飞船损失。此前通过的单次到站报告不能证明持续跑商安全,不能绕过这个失败继续采购。
故障后使用 ship-loss-hold.json 和停止标记暂停飞行。用户已恢复原船,并在独立保护实际武装后明确要求继续跑商;据此解除人工等待,先进行空载连续交接验证,通过后继续采购和交付。重购成本已取原始Resurrect回执并与原始钱包核对,作为OtherExpense入账,不隐去损失。
0.5.13将保护改为独立常驻C#服务,导航和贸易只检查、复用它,不拥有它的生命周期。导航异常退出不停止该服务,自动流程每次输入前核对观察进程、游戏进程启动身份和500ms内的真实健康凭据;服务失联或数据过期立即禁止输入。实际受损退出由独立服务执行,流程内监测只负责停止输入,避免重复退出。13项生命周期等保护回归后又补充独立服务失联场景,共14项通过,另有重购状态恢复回归通过。
原生采样允许经过原始状态及主船身份核验的Pause状态继续读健康,飞行输入仍只允许原有InGame条件;没有延长健康数据有效期。部署包744次原生自测、原ABI/导出/PE与20状态/3生命周期握手通过。用户本机会话已验证独立保护实际武装并持续读取原始船体和护盾;不通过实机制造伤害测试退出。
Windows读者可能短暂阻止健康凭据文件替换;发布失败现只让凭据过期、禁止输入,真实健康监测继续运行,不因文件共享冲突释放保护。生产离场也已取消验收夹具的强制停车,原始自动起飞结束并确认解除质量锁后直接衔接航线。
重购后的Resurrect会恢复新的保护会话身份,并使旧停靠、旧状态读取及旧钱包重新等待验证。直接空管路径另增加正常空间零油门确认阶段,先让普通输入生效,再请求许可并交接;许可、真正归零、AI接管及原超时要求保持。29项导航回归通过,这项后续控制修正仍需实际空载航程验收,不能把离线通过当作稳定跑商的证明。
Polyakov的直接空管路径仍需修复:用户实际手动归零后原生自动降落立即接管,当前程序的临时输入归零不足以证明停靠电脑读取源也归零。后续按要求在空舱复测,普通测试失败保留客户端并重进;原生返回主菜单路径须先验证。自主超巡已实际完成一批交付,SCO与原始逃逸矢量自动跟踪仍待接入,不以现有普通超巡结果冒充其通过。
连续交接与待确认问题
首批载货到站时,SCA→自动降落交接触发保护退出,随后正常空间恢复完成交付。因此 passed 仅确认货物、维护、CG和钱包已对账,continuousArrivalAccepted=false 保留事实。不得延长保护时限或降低遥测要求以取得成功标记。
0.5.9、0.5.10的空载复测仍在空管授权后触发两秒保护:控制器为零、原始输入已有回执,但实际油门仍为 .75,原生降落 duty 未接管。0.5.10补充持久零油门的提交代次,阻止嵌套临时输入恢复再次写回旧值,且只影响这次原始请求确认过的当前主船油门;玩家后续输入与其余轴不会被恢复覆盖。新增内存边界及嵌套恢复回归通过,但不能据此认定已解决实机故障。
2026-10-24的人工观察航程首次连续完成原始跃迁、SCA、空管授权、原生自动降落接管及Homer实际停靠,最终报告的 passed/arrived/released/cruiseEngaged/dockingGranted/dockingEngaged/finalDocked 全部为true。该轮经用户明确授权使用 manualVisual=true/automaticExitEnabled=false,交接判定、真实遥测及原有超时均未放宽;空管授权至首次AI接管采样约2.03秒。随后用户明确恢复正式顺序跑商。历史载货旅程的 continuousArrivalAccepted=false 不回填为成功。
此次加载0.5.11的新增停靠更新点 dockingZeroUpdateMatched/Applied 均为0,成功不能归因于它。离线发现该更新点误把选择确认的短TTL当成整个飞行目标的寿命;后续0.5.12保留目标身份、代次和控制所有权核验,以当前输入命令自己的有效期约束提交。它已在普通接近路径取得接管,但直接空管路径仍失败;不能认定根因已解决。
恢复正式流程后的0.5.11返程再次出现实际油门.75、空管已授权而AI未接管,随后保护退出;没有新采购。单次人工观察通过不代表持续自动化稳定。0.5.12已包含上述有效期修正,728次原生自测、原ABI/导出及握手通过,已安装,实机复测仍在进行。
CG流程现在明确指定 keepHandoffScene=true:交接超时仍立即停止本程序输入,保留游戏现场用于诊断;与它分开的真实受损退出继续启用。新增回归证明交接保留现场后,后续真实受损仍触发退出;12项保护回归通过。通用保护接口的默认退出行为保持兼容,人工观察模式仍按用户要求同时关闭两类自动退出。
原始返回菜单路径未通过实机;只有插件明确声明 nativeReturnToMenuVerified=true 才允许该路径。从已就绪主菜单进入Solo使用独立入口能力。
后续空载连续航程再次完成起飞、跃迁、SCA和空管,但自动降落仍未接管并触发保护退出。实际飞行油门持续为.75,即便控制器零位及原始输入回执已确认。只读来源诊断确认FSD与自动降落使用同一个原始输入注册表,因此不能把来源差异当作已确认原因。可使用 inspect-docking-input-sources <PID> <新报告> 读取来源与原始零输入待消费/已消费状态;该命令仅使用QUERY_INFORMATION和VM_READ权限。
新会话加载交互观察器时,首个输入样本可能暂未发布。准备流程现在在原有12秒上限内重读已知暂时拒绝;在新鲜输入、正确船舶和物理收起状态全部确认前不发送输入。未知所有权拒绝和取消仍立即停止。
运行与恢复
先通过 scripts/Build-Plugin.ps1 构建原生包,使用游戏插件管理器安装;游戏构建哈希变化后必须重新适配。再构建 research/NativeAcceptance/NativeAcceptance.csproj。研究CLI仅在已授权且身份核对过的游戏会话使用,不模拟键鼠。
auto-cg-trade <PID> <本机跑商工作目录> 启动实际的顺序 C# 跑商进程。它先要求当前插件版本和游戏构建匹配,并以空舱验证完整 SCA、空管、原生降落交接;同一完整报告通过后才允许下一批采购。之后按实际收购价、供货库存、钱包与重购保留金,在四种 CG 商品和 1–192t 数量中比较每趟差价,循环采购、维护、运输、交付、CG贡献及钱包核对。它不创建 Codex 自动化或操作系统计划任务。
automatic-trading/runner.lock 阻止重复控制,state.json 记录实际阶段。写入 automatic-trading/stop 可取消当前工作流;已接受的金钱请求仍按原操作键完成回执核对。中断后复用原工作目录和旅程检查点,未知订单只能核对,不能重放。原始卖出和已确认费用全部入账后才接受新收益。
observe-health-service <PID> <新报告> 是独立C#保护服务,不创建计划任务。active-ship-protection.json 与报告的 .ready.json 提供已绑定进程及真实采样凭据;同目录服务锁阻止重复启动。它自行持有日志与原生血量监测,导航结束不关闭它。显式用户停止时写该报告的 .stop;游戏实例退出时服务也结束。服务日志直接写入自己的文件,交易进程退出不会关闭它的输出管道。
用户需要保留现场做视觉检查时,先暂停正式流程和其自动退出观察器,再使用 prepare-cg-visual <PID> <本机工作目录> 只读核对游戏、会话、主船及空舱并绑定准备记录。只有用户明确“开始”后才执行 run-cg-visual <PID> <同一目录>;该单次空载航程不采购、出售、维护或报名,异常时停止本程序输入并保留游戏。该模式覆盖交接和真实受损均不自动退出,生产默认保护保持启用。用户明确恢复后才能再次启动正式流程。
cg-cargo-journey <PID> <旅程目录> 单独执行或恢复一批 Corsair/5、192t 容量、Duamta/Polyakov→AD Leonis/Homer 的 CG 运输;直接调用时默认 Uranium 192t,已有 plan.json 决定恢复的商品、数量和限价。首次采购前要求本机原1t已完成回执及CG成员证明。执行前仍读原始价格和库存。每站维护与交易均完成才离站,保留实际重购资金;提高后的CG报价不得再乘8。
继续已有货物必须复用原目录。原始回执、钱包、会话身份及日志只存本机,不能提交到仓库。continuousArrivalAccepted 必须来自同一完整到站报告,不能用正常空间重试替代。未领取CG奖励不计入净利润。
空载诊断停靠可使用 service-cg-docked <PID> <独立维护目录>。它仅接受已核对路线站点、空舱及受保护的Corsair/5,不启动贸易或飞行;每笔原始服务费用记入独立账本,结尾必须与原始钱包核对。该路径已在恢复停靠后完成加油与完整性服务实测,诊断费用也应从总收益扣除。
accept-local-docking-keep-scene <PID> <站名> <新报告路径> 用于正常空间恢复停靠,保留真实受损保护,交接失败时停止输入并保留游戏。该报告要求 requireCruise=false,不能作为完整连续超巡交接的证明。