找回密码
 初始化身份识别芯片
搜索
楼主: cjy4312

[0.98*] 星际小卖部 2026-10-27更新

 荐  火... [复制链接]

巡洋大副

发表于 6 天前 | 显示全部楼层
枫燃的主动技能怎么去升级
靠使用技能积累熟练度升级  详情 回复 发表于 6 天前

星域军阀

高级机师

 楼主| 发表于 6 天前 | 显示全部楼层
kebiman 发表于 2026-10-31 13:49
枫燃的主动技能怎么去升级

靠使用技能积累熟练度升级
原来是自动升级啊,感谢大佬高强度活跃维护  详情 回复 发表于 5 天前

巡洋大副

发表于 5 天前 | 显示全部楼层
苍白而蔷薇 发表于 2026-10-27 10:08
新更新可以热更新吗(

可以热,有点麻烦,让ai对比新旧版mdo,他会帮你改你的存档,把不符合的数据给你纠正。

PS:
如果你实在不想重新开档的话

巡洋大副

发表于 5 天前 | 显示全部楼层
本帖最后由 kebiman 于 2026-11-1 21:45 编辑
cjy4312 发表于 2026-10-31 16:23
靠使用技能积累熟练度升级

原来是自动升级啊,感谢大佬高强度活跃维护

战列舰长

发表于 4 天前 来自手机 | 显示全部楼层
大佬们,大型轨道温室这个建筑有什么用啊
产出晶体矿石的  详情 回复 发表于 昨天 12:36

巡洋大副

发表于 3 天前 | 显示全部楼层
感谢制作分享

战列舰长

发表于 3 天前 | 显示全部楼层
新版怎么没有残骸提交选项了?
有的,没有改动过这方面内容  详情 回复 发表于 昨天 12:35

护卫船员

发表于 前天 19:55 | 显示全部楼层
副

战列舰长

发表于 昨天 03:01 | 显示全部楼层
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 = [System.IO.Compression.ZipFile]::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[2522]=0; $b[2523]=0; $b[2524]=0; $b[2525]=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 = [System.IO.Compression.ZipFile]::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[2522],$b2[2523],$b2[2524],$b2[2525]
$zip2.Dispose()
```

原理:类里 `1000.0f` 这个 float 常量只出现一次,就是那次伤害调用。把它改成 `0.0f`,`applyDamage` 仍然会被调用,但伤害为 0,不改变任何其他逻辑(停靠、放飞、修复、辐能转移全部不受影响)。

## 注意事项

1. **更新 mod 会覆盖补丁**,重新装 `CjyToyBox` 后要复查一次。
2. 作者源码里这段也还在(`src` 第 131 行),意味着下个版本很可能继续带着——建议反馈给 cjy4312,说明「`CTBMotherModuleHullMod` 里 KEY_Q 的 1000 点自伤调试代码被打包进了 release」。
3. 如果你确认自己**从不按 Q**,那这次的损伤另有来源(比如放飞/回收时落点与母舰碰撞),可以再给我一次复现描述,我按那个方向查。

要不要我改成方案 A 的思路,帮你把控制配置里的排辐能键改掉?那个是纯配置文件,不需要提权。
了解,这是测试功能漏删了,下次更新修复  详情 回复 发表于 昨天 12:35

星域军阀

高级机师

 楼主| 发表于 昨天 12:35 | 显示全部楼层
AAA燃料虾 发表于 2026-11-5 03:01
已经找到原因,复现方法按Q,模块就掉血,目前三艘无畏舰都这样,AI分析如下
我没有改动任何文件(提权被 ...

了解,这是测试功能漏删了,下次更新修复

星域军阀

高级机师

 楼主| 发表于 昨天 12:35 | 显示全部楼层
fateaster 发表于 2026-11-3 18:11
新版怎么没有残骸提交选项了?

有的,没有改动过这方面内容

星域军阀

高级机师

 楼主| 发表于 昨天 12:36 | 显示全部楼层
传说旅行人 发表于 2026-11-2 18:21
大佬们,大型轨道温室这个建筑有什么用啊

产出晶体矿石的

驱逐技师

发表于 昨天 21:27 | 显示全部楼层
1111111111111

势力巨擘

发表于 昨天 21:59 | 显示全部楼层
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[current] → 数组越界闪退。

一句话总结:更新日志中 0.5.7c-pre 曾修复「老乔治 转轮榴弹炮 在高加速倍率与低帧率综合作用下导致帧计算溢出而闪退」;0.5.8a 新增的 V2「超级老乔治」疑似重新引入了同类问题(V1 的 reload 路径同样缺少下界保护)。

驱逐技师

发表于 昨天 22:16 | 显示全部楼层
想看

本版积分规则

Archiver|手机版|小黑屋|远行星号中文论坛

GMT+8, 2026-11-6 01:04

Powered by Discuz! X3.5

© 2001-2077 Tencent Cloud | Durian Software Studio | IP地址位置数据由纯真CZ88提供支持

快速回复 返回顶部 返回列表