Repository navigation
Releases
SFS-Agent v0.6.8
修复:点火点了却飞不起来
- ignite 改为直接 EnableEngine + 写入 �ngine.throttle_Out,不再注入回车。
回车在 SFS 里是「分级控制程序」,会先分离当前级再点燃下一级,
实测点着之后 �ngines_on 又变回 0。 - 关键缺失:旧代码只置 �ngineOn,没写 hrottle_Out。
游戏 HUD 上推力显示 120t、推重比 1.4,飞船却纹丝不动 —— 就是引擎有「点燃」
标志但油门输出为 0。现在点火后同步写入油门并 RecalculateEngineThrottle。 - propulsion.thrust 按油门折算,推重比随之真实
(50% 油门时 HUD 显示 60t,旧版会误报 120t / 推重比 1.39)。 - /ping 的 version 改读 Main.Semver,不再硬编码。
- README(中/英)同步按键语义:回车 = 分级(分离当前级),点火用 ignite。
实测
8 件 / 3 级「基础火箭」:set_throttle 1.0 + ignite → hrust 1176.8 kN、
wr 1.408、�ngines_on 1/1,火箭从 67 m 爬升到 565 m、64.8 m/s,
与 HUD 的 Thrust 120t / TWR 1.48 一致。
v0.6.4
??
- ????:stack=auto/top/bottom ???????????,?????????????(???????,??????????)?
- ????:/build ? stage_count ???? 0(? List ? Array ??),???????
- ???:/build ?? �odies / loose_parts,???????????,????????????
- ???:? PartSave.name ??? SFS.* ???,???? TranslationVariable ???????
- ????:partHolder.modules ???,????????? key ?,??????(150 ??? 25 ?)?
- ????:?? Rocket.resources ?,???? null?
- ????:EngineModule.thrust ???,?????? kN;????????? g?
??
- POST /command ?? engine_on:????????,???????
????????????????,ignite(??)?????,????
??
- ????:??? Mods/SFS-Agent/SFS-Agent.dll?
SFS-Agent v0.6.3
修好了「分级读不到 / 发动机读不到 / 点火没反应」
这次的问题一半在模组、一半在老的接口约定,逐条说:
1. 分级列表是空的(最要命)
模组加载蓝图时只把零件 spawn 出来,没把蓝图里的 StageSave[] 应用给新火箭 —— 火箭的 Staging.stages 是空列表,游戏不知道哪台引擎属于哪一级,于是一台引擎都不点火、推力恒 0、油门拉满也没用。
现在 Spawn() 之后会调 ApplyStages():优先 Staging.Load(StageSave[], Part[], bool),失败退 CreateStages(StageSave[], Part[])。
2. /build 的 stage_count 恒为 0
原判定写的是 stages is Array,而 Staging.stages 是 List<Stage>。改成按 ICollection.Count 计数,建造场景改读 StagingDrawer.main.staging。
3. /state 顶层 stage 永远是 -1
它取自 Staging.stageId,而 SFS.World.Staging 上根本没有这个成员。已废弃,请改用 stages 对象(count / current_index / current_parts / summary)。
4. 引擎数虚高、燃料读不到
engines_total:partHolder.modules是Dictionary,同一EngineModule挂在多个 key 下被重复计数(24 件报 30、182 件报 150)。改用引用去重。fuel_percent:之前只读BoosterModule(固体助推器),液体燃料在Rocket.resources的globalGroups里,新增ReadLiquidFuel()。
5. 点火指令错得最离谱:空格不是点火,回车才是
实测 SFS 1.6.00.16 里 空格只切换油门闸门,回车才执行分级程序(点火、分离、点燃下一级)。所以过去「油门 79%、引擎一台没醒」不是错觉。
stage/ignite/staging_program→ 回车- 新增
throttle_toggle→ 空格,保留原语义
验证
实机 蓝星1号:分级 11 级(此前恒 0)、25 台引擎(此前 150)、燃料 99.4%(此前 null)。基础火箭 执行 ignite 后 engines_on 1/1、thrust 120 kN。
安装
把 zip 解压到 Mods,或用 SFS-Agent.dll 覆盖 Mods/SFS-Agent/ 下同名文件。配置文件 sfs-agent.ini 首次运行自动生成,已有配置不会被覆盖(想保留就只换 dll)。
SFS-Agent v0.6.2
SFS-Agent v0.6.2
预设蓝图改为模组内置,不再写进玩家的蓝图目录。
变更
预设不再污染玩家的蓝图列表
v0.6.0 / v0.6.1 会把内置蓝图写进 Saving/Blueprints/,
于是玩家自己的蓝图列表里会莫名多出一条,删除后下次启动又冒出来。
现在预设放在模组自己的目录:
Mods/SFS-Agent/presets/基础火箭/Blueprint.txt
Mods/SFS-Agent/presets/二级火箭/Blueprint.txt
Mods/SFS-Agent/presets/三级火箭/Blueprint.txt
用 DefaultFolder 包成 IFolder 交给游戏自己的 Blueprint.TryLoad 解析,
完全不碰玩家的蓝图文件夹。升级时会自动清理旧版本投放的那份
(只在内容与内嵌预设逐字节一致时才删,玩家改过就不动)。
内置三枚递进预设
| 预设 | 零件 | 说明 |
|---|---|---|
| 基础火箭 | 8 | 单级,最适合新手 |
| 二级火箭 | 11 | 两级分离 |
| 三级火箭 | 24 | 三级,含整流罩 |
接口:
GET /presets—— 列出预设POST /preset_load {"name":"基础火箭"}—— 直接加载到建造页面
修复:加载预设会让游戏崩溃
BuildState.SpawnBlueprint 内部会创建 Unity Mesh
(PartsLoader -> PipeMesh -> new Mesh()),
在 HTTP 后台线程调用会直接崩掉游戏。
现在改为入队 + 帧循环主线程执行(和模组里其他 Unity 操作一致)。
配套插件 v0.5.0 新增 list_sfs_presets / load_sfs_preset 两个工具。
安装
Mods\SFS-Agent\SFS-Agent.dll,然后重启游戏。
GPL-3.0 · 星河拓航Studio
SFS-Agent v0.6.1
SFS-Agent v0.6.1
调整内置示例蓝图。
变更
内置蓝图换成入门级基础火箭(8 个零件、3 级):
Fuel Tank x4 + Stage Separator + Hawk Engine
+ CapsuleNew + Parachute
命名为 示例火箭-基础火箭,会出现在蓝图列表里,
新手直接加载即可起飞 —— 比之前那枚 31 零件的多级火箭好上手得多。
原先内嵌的复杂示例已移除。
回顾 v0.6.0
内置蓝图自动投放
新装用户常常一枚蓝图都没有。模组自带一枚示例火箭,
首次列出蓝图时自动投放到:
Saving/Blueprints/示例火箭-基础火箭/Blueprint.txt
只在文件不存在时写入,绝不覆盖你自己的蓝图。
修复:中文蓝图名全部失效
请求解析器以前不处理 \uXXXX 转义,而 Python 的 json.dumps
与 httpx 的 json= 参数默认就会把中文写成 \uXXXX ——
于是「示例」变成字面的 \u793a\u4f8b,所有中文名蓝图都加载不了。
现已正确解析转义。
修复:加载蓝图会叠加而非替换
BuildState.SpawnBlueprint 是追加语义,连续加载两次零件数会翻倍。
现在加载前先 BuildState.Clear,实测连续加载结果稳定。
安装
Mods\SFS-Agent\SFS-Agent.dll,然后重启游戏。
GPL-3.0 · 星河拓航Studio
SFS-Agent v0.6.0
SFS-Agent v0.6.0
这一版让「造火箭」终于有可靠起点。
新增:内置示例蓝图
新装的用户常常一枚蓝图都没有,此时「让猫娘造个火箭」无从下手。
模组现在自带一枚官方结构的示例火箭(31 个零件、9 级),
首次列出蓝图时自动投放到:
Saving/Blueprints/SFS-Agent 示例/Blueprint.txt
它会自然出现在游戏和接口的蓝图列表里,直接加载即可。
只在文件不存在时写入,绝不覆盖你自己的蓝图 —— 删掉了下次还会补回来。
修复:中文蓝图名全部失效
模组的请求解析器以前只做字符串切片,不处理 \uXXXX 转义。
而 Python 的 json.dumps 以及 httpx 的 json= 参数默认就会把中文写成
\uXXXX —— 于是「示例」变成了字面的 \u793a\u4f8b,
所有中文名的蓝图都加载不了(静默回退到 DefaultFolder)。
现在解析器正确处理 \uXXXX 与常规转义,中文名和英文名一样可靠。
修复:加载蓝图会叠加而非替换
BuildState.SpawnBlueprint 是追加语义。连续加载两次,
零件数从 172 涨到 203 —— 火箭上多出一整枚。
现在加载前会先调用 BuildState.Clear,连续加载结果稳定(实测两次都是 31 个零件)。
说明
- 示例蓝图仅供参考,可在游戏里自由修改另存
- 手拼任意火箭仍不推荐,蓝图里很多零件(引擎 / 舱体 / 降落伞)不带尺寸参数,
无法凭空推算贴合位置 - 配置走 http://127.0.0.1:21578/
安装
Mods\SFS-Agent\SFS-Agent.dll,然后重启游戏。
GPL-3.0 · 星河拓航Studio
SFS-Agent v0.5.1
SFS-Agent v0.5.1
根据终端用户反馈修正三处问题。
修正
蓝图列表可能为空
GetBlueprintsList 依赖游戏内部缓存,未打开过 Load 对话框时返回空列表,
用户会看到「一个蓝图都没有」。现在加了磁盘兜底:直接从
<游戏目录>/Saving/Blueprints/<名字>/
扫描。若仍然为空,错误信息里会带上具体路径,便于排查。
遥测开销影响帧率
v0.5.0 新增的分级 / 燃料 / 目标遥测每帧都遍历全部零件模块,用户反馈帧率下降。
现在降频到每 15 帧一次(约 4Hz)—— 这些量变化慢,够用。
已知限制
- 从零手拼火箭仍不推荐,请优先用「加载蓝图」
- 游戏内没有设置界面,配置走 http://127.0.0.1:21578/
安装
Mods\SFS-Agent\SFS-Agent.dll,然后重启游戏。
GPL-3.0 · 星河拓航Studio
SFS-Agent v0.5.0
SFS-Agent v0.5.0
补上此前读不到的三组遥测。
新增
分级状态
stageId 此前死钉在 -1 —— 原因是读的是 Staging 上的字段,
而真正的分级在 Staging.stages(List)里。现在 /state 返回:
"stages": {
"count": 3,
"current_index": 0,
"current_parts": 42,
"summary": "#0(42件) / #1(8件) / #2(3件)"
}推进系统
Thrust / TWR 此前恒为 0。现在从 EngineModule 与 BoosterModule 读取:
"propulsion": {
"thrust": 356.2, "twr": 1.45,
"engines_on": 5, "engines_total": 5,
"fuel_percent": 0.87, "rcs_fuel_percent": 1.0, "isp": 220
}fuel_percent—— 当前级剩余燃料rcs_fuel_percent—— RCS 推进剂余量engines_on/engines_total—— 活跃发动机数
导航目标(对接用)
选中目标后返回距离与相对速度:
"target": {
"name": "Station Core",
"distance": 1240.5,
"relative_speed": 32.1,
"closing_speed": -4.2
}closing_speed 为正表示正在接近。
已知限制
- 各字段的实际数值随游戏版本可能不同,若某项恒为 null 说明该版本结构有变化
- 从零手拼火箭仍不推荐,请优先用「加载蓝图」
- 游戏内没有设置界面,配置走 http://127.0.0.1:21578/
安装
Mods\SFS-Agent\SFS-Agent.dll,然后重启游戏。
GPL-3.0 · 星河拓航Studio
SFS-Agent v0.4.7
SFS-Agent v0.4.7
这一版解决持续推力与采样不可比两个实操痛点。
新增
按键长按 / 松开
此前只有「按下并保持固定时长后自动抬起」—— 对转向、油门这类持续推力操作,
脉冲式按一下在高速飞行时几乎推不出位移,也算不准该转多少度。
现在拆成三个接口:
| 接口 | 作用 |
|---|---|
POST /key_down |
按下并一直按住,不自动松开 |
POST /key_up |
松开指定的键 |
POST /release_all |
松开全部(急停) |
curl -X POST -H "Content-Type: application/json" \
-d '{"vk":87}' http://127.0.0.1:21578/key_down # 按住 W
curl http://127.0.0.1:21578/state # 看数据
curl -X POST -H "Content-Type: application/json" \
-d '{"vk":87}' http://127.0.0.1:21578/key_up # 松开
返回值会说明当前状态:already_held(本来就在按)、was_held(松开时确实按着)、
held(当前全部按住的键)。
游戏内时间戳
/state 新增两个字段:
"game_time": 1351,
"held_keys": ["W"]game_time—— 游戏内时间。两次读数一减就知道中间游戏跑了多久,
不会再拿跨越很久的两次采样直接对比,得出「速度方向瞬移 80 度」这类荒谬结论。held_keys—— 当前按住的键,操作有没有真的生效一眼可见。
已知限制
- 从零手拼一枚能飞的火箭仍不完整 —— 蓝图里零件坐标是贴合点,间距由零件自身
高度决定,而高度变量名并不统一。请优先使用「加载蓝图」。 - 部分遥测字段尚不可靠:
stage常为 -1、推重比在速度上升时报 0。
这些字段来自游戏内部,含义与刷新时机还在排查中,暂不建议作为判断依据。 - 游戏内没有设置界面。配置请走 http://127.0.0.1:21578/。
安装
<Steam>\steamapps\common\Spaceflight Simulator\Spaceflight Simulator Game\Mods\SFS-Agent\SFS-Agent.dll
必须放在 Mods\SFS-Agent\ 子目录里,然后重启游戏。
配套 N.E.K.O. 插件:https://github.com/LShangPiao/n.e.k.o_plugin_sfs_bridge(v0.2.0)
GPL-3.0 · 星河拓航Studio (Galaxy Exploration Studio)
SFS-Agent v0.4.6
SFS-Agent v0.4.6
这一版把两处写死的时长改成可配置,并清理了不准确的展示项。
新增
刷新间隔可配置
配置页的刷新间隔现在可以在 sfs-agent.ini 里调整:
# 配置页的刷新间隔(毫秒),范围 30-600000,默认 1500
# 调小可以做实时性能展示(30ms 约合 33fps);调大能省 CPU
poll_interval_ms=1500- 范围 30ms ~ 10 分钟
- 保存后立即生效,不用刷新页面
- 轮询改用
setTimeout自排:请求慢时自动退让,不会堆积 - 页面切到后台时自动暂停高频轮询
改进
界面文案里的 <code> 正常渲染
「如何接入」一节里的 <code>GET /ui</code> 此前会直接显示成文本,
现在正确渲染为代码样式。
移除
浏览器页不再显示「分级」
分级 与 分级数 两项已从页面移除 —— 游戏返回的 stageId 不可靠,
显示出来反而误导。相关数据仍可通过 GET /state 获取。
修复
- 页面配置卡与游戏设置卡可能不渲染的问题(初始化调用缺失)
- 页面脚本括号不匹配导致整个界面空白
已知限制
- 从零手拼一枚能飞的火箭仍不完整 —— 蓝图里零件坐标是贴合点,间距由零件自身
高度决定,而高度变量名并不统一。请优先使用「加载蓝图」。 - 游戏内没有设置界面。配置请走 http://127.0.0.1:21578/。
安装
<Steam>\steamapps\common\Spaceflight Simulator\Spaceflight Simulator Game\Mods\SFS-Agent\SFS-Agent.dll
必须放在 Mods\SFS-Agent\ 子目录里,然后重启游戏。
配套 N.E.K.O. 插件:https://github.com/LShangPiao/n.e.k.o_plugin_sfs_bridge(v0.1.1)
GPL-3.0 · 星河拓航Studio (Galaxy Exploration Studio)