枫燃的主动技能怎么去升级{:5_127:}
kebiman 发表于 2026-10-31 13:49
枫燃的主动技能怎么去升级
靠使用技能积累熟练度升级
苍白而蔷薇 发表于 2026-10-27 10:08
新更新可以热更新吗(
可以热,有点麻烦,让ai对比新旧版mdo,他会帮你改你的存档,把不符合的数据给你纠正。
PS:
如果你实在不想重新开档的话
本帖最后由 kebiman 于 2026-11-1 21:45 编辑
cjy4312 发表于 2026-10-31 16:23
靠使用技能积累熟练度升级
原来是自动升级啊,感谢大佬高强度活跃维护
大佬们,大型轨道温室这个建筑有什么用啊
感谢制作分享
新版怎么没有残骸提交选项了?
副
cjy4312 发表于 2026-10-29 01:07
无法复现 我这边没出现掉血的情况
已经找到原因,复现方法按Q,模块就掉血,目前三艘无畏舰都这样,AI分析如下
我没有改动任何文件(提权被你拒绝了),下面是完整的检查和修复方案。
## 结论:这是 mod 里遗留的调试代码,按 Q 键就会给模块自己造成 1000 点伤害
`CjyToyBox\src\data\hullmods\CTBMotherModuleHullMod.java` 第 131–138 行:
```java
if (Keyboard.isKeyDown(Keyboard.KEY_Q)) {
if (!p) {
p = true;
Global.getCombatEngine().applyDamage(
child, child.getLocation(), 1000, DamageType.HIGH_EXPLOSIVE, 0, true, false, null);
}
} else {
p = false;
}
```
- `child` 就是「余烬-利刃」这个模块本体,伤害施加在它**自己的坐标**上,1000 点高爆,带护甲减伤。
- `p` 是防连发的边沿检测,所以**每按一次 Q 就固定扣一次**。
- `Keyboard.isKeyDown` 读的是**全局键盘**,跟你在操作哪艘船无关;模块停靠或放飞都会触发。
- 这段代码在模块船插 `CTBMotherModuleHullMod` 的监听器里,每帧执行,而该船插是 `ctb_mother_module.ship` 的 builtInMod,**每个利刃模块都带**。
所以你看到的“没接触敌人却莫名受损”,实际上是因为你在按 Q。Q 默认是排辐能键,战斗中会频繁按下。
## 已确认这段代码在发行版 jar 里
`src` 目录的时间戳是 9/18,jar 是 10/29,二者不同步,所以我直接查了字节码,而不是只信源码:
| 检查项 | 结果 |
|---|---|
| `jars\CjyToyBox.jar` → `data/hullmods/CTBMotherModuleHullMod$listener.class` | 存在 |
| 常量池含 `applyDamage` / `isKeyDown` | ✅ 都有 |
| float 常量 `1000.0f`(字节 `44 7A 00 00`) | 出现 **1 次**,偏移 **2522** |
| `bipush 16`(KEY_Q = 16) | 出现 1 次 |
即当前运行的 jar **确实带着这段调试伤害**。另外 `CjyToyBox_HSI 1.7.0.jar` 没被 `mod_info.json` 的 jars 列表加载,不用管它。
## 修复方案 A:改键位(零风险,立刻生效)
游戏内 **选项 → 控制**,把「排辐能 / Vent Flux」从 **Q** 改到别的键。调试代码只认 Q,所以改完就再也不会触发。
代价只是需要改一下肌肉记忆。想先验证判断是否成立,也可以:战斗中对着利刃模块按一下 Q,看它是不是掉一截血。
## 修复方案 B:把伤害改成 0(保留 Q 键)
需要**管理员 PowerShell**,先关游戏:
```powershell
$jar = "C:\Program Files (x86)\Starsector\mods\CjyToyBox\jars\CjyToyBox.jar"
Copy-Item -LiteralPath $jar -Destination "$jar.bak" -Force
Add-Type -AssemblyName System.IO.Compression.FileSystem
$zip = ::Open($jar,'Update')
$name = 'data/hullmods/CTBMotherModuleHullMod$listener.class'
$e = $zip.GetEntry($name)
$ms = New-Object System.IO.MemoryStream
$s = $e.Open(); $s.CopyTo($ms); $s.Close()
$b = $ms.ToArray()
$b=0; $b=0; $b=0; $b=0 # 1000.0f -> 0.0f
$e.Delete()
$ne = $zip.CreateEntry($name)
$ns = $ne.Open(); $ns.Write($b,0,$b.Length); $ns.Close()
$zip.Dispose()
```
校验(应显示 `after : 00 00 00 00`):
```powershell
$zip2 = ::OpenRead($jar)
$e2 = $zip2.GetEntry($name)
$ms2 = New-Object System.IO.MemoryStream; $s2=$e2.Open(); $s2.CopyTo($ms2); $s2.Close()
$b2 = $ms2.ToArray()
"after : {0:X2} {1:X2} {2:X2} {3:X2}" -f $b2,$b2,$b2,$b2
$zip2.Dispose()
```
原理:类里 `1000.0f` 这个 float 常量只出现一次,就是那次伤害调用。把它改成 `0.0f`,`applyDamage` 仍然会被调用,但伤害为 0,不改变任何其他逻辑(停靠、放飞、修复、辐能转移全部不受影响)。
## 注意事项
1. **更新 mod 会覆盖补丁**,重新装 `CjyToyBox` 后要复查一次。
2. 作者源码里这段也还在(`src` 第 131 行),意味着下个版本很可能继续带着——建议反馈给 cjy4312,说明「`CTBMotherModuleHullMod` 里 KEY_Q 的 1000 点自伤调试代码被打包进了 release」。
3. 如果你确认自己**从不按 Q**,那这次的损伤另有来源(比如放飞/回收时落点与母舰碰撞),可以再给我一次复现描述,我按那个方向查。
要不要我改成方案 A 的思路,帮你把控制配置里的排辐能键改掉?那个是纯配置文件,不需要提权。
AAA燃料虾 发表于 2026-11-5 03:01
已经找到原因,复现方法按Q,模块就掉血,目前三艘无畏舰都这样,AI分析如下
我没有改动任何文件(提权被 ...
了解,这是测试功能漏删了,下次更新修复
fateaster 发表于 2026-11-3 18:11
新版怎么没有残骸提交选项了?
有的,没有改动过这方面内容
传说旅行人 发表于 2026-11-2 18:21
大佬们,大型轨道温室这个建筑有什么用啊
产出晶体矿石的
1111111111111
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 25
at com.fs.starfarer.combat.entities.ship.A.if.render(Unknown Source)
at com.fs.starfarer.combat.entities.Ship.render(Unknown Source)
at com.fs.starfarer.combat.entities.Ship.render(Unknown Source)
at com.fs.starfarer.combat.entities.BaseEntity.render(Unknown Source)
at com.fs.graphics.LayeredRenderer.renderExcluding(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.render(Unknown Source)
at com.fs.starfarer.combat.CombatState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
com.fs.starfarer.combat.entities.ship.A.if 是武器类(javap 可见其实现 WeaponAPI、含 render 方法);渲染时按「动画当前帧」从长度为 WeaponSpec.getNumFrames() 的 Sprite[] 取图。本次数组长度 = 25、索引 = -1,即该武器动画帧被设成了 -1。
扫描全部安装(原版 + 68 个 mod,含 jar 内数据):只有 ctb_revolver2(「超级老乔治」转轮臼炮) 的 numFrames = 25;其 turretSprite / hardpointSprite 对应 ctb_revolver2_*_base00.png ~ base24.png 共 25 帧,文件齐全。
该武器使用 data.scripts.weapons.CTBRevolverWeaponEffectV2,其中帧号计算:
java
if (reloading > 0) {
...
reloading -= Math.max(0, reloadRate * amount); // reloadRate = 2
current = (int) Math.min((reloading * (rotateFrame1 + 1)), rotateFrame1);
}
...
weapon.getAnimation().pause();
weapon.getAnimation().setFrame(current); // current 可能 < 0
当单帧 amount 很大(低帧率 + 高加速倍率)时,reloading 会一步越过 0 变负,current 可算出 -1(或更小);setFrame 不检查下界,原版渲染直接 sprites → 数组越界闪退。
一句话总结:更新日志中 0.5.7c-pre 曾修复「老乔治 转轮榴弹炮 在高加速倍率与低帧率综合作用下导致帧计算溢出而闪退」;0.5.8a 新增的 V2「超级老乔治」疑似重新引入了同类问题(V1 的 reload 路径同样缺少下界保护)。
想看