halsheep01 发表于 2026-4-19 19:02:09

[0.98]星舰传奇 Starship Legends

本帖最后由 halsheep01 于 2026-4-20 17:14 编辑

论坛经典mod星舰传奇的0.98适配版,汉化自英文论坛starship v2.6.0版。
由于没有新增内容,汉化文本绝大部分迁移自@ASIIark的汉化版本【0.97*】星舰传奇 2.5.0*,以使适配 远行星号0.98 的 starship v2.6.0 的版本,中文论坛的玩家也能玩上。
mod介绍与注意事项参考绅士猫原贴:【0.9.1】星舰传奇 1.4.3

0.98下载:

       译者是一名新人翻译者,星舰传奇是我第二个汉化的具有一定体量的mod,一开始是打算汉化啦,不过比对过2.6.0和2.5.0的内容以后就发现几乎没有需要我汉化的地方,遂完整迁移了前汉化者的文本,并略微补充了少许汉化。这次汉化的真正问题是打包作者的源文件,作为一个无java基础的译者,ai教了我好几天并同时排查问题,最后才完成。不过这引入一个我暂时无法解决的问题,那就是需要lazylib作为前置依赖才能使用星舰传奇,而原本的星舰传奇不需要任何前置,不过我想这不会有什么问题,所以就上传啦。感谢@艾贝路斯 和@宙祭司 的指导和uaf汉化群的小伙伴的测试和交流。感谢作者sundog的汉化许可,感谢@ASIIark 的汉化文本使用许可
汉化日志:4.20 修复了一个因%s错误导致的报错
作者授权:







mwssm 发表于 2026-4-19 19:08:32

我记得这也是叠叠乐套餐中的一个。

zzzdragon 发表于 2026-4-19 19:20:23

棒棒 給你個讚

贝石米粉 发表于 2026-4-19 19:54:43

和097版本有什么不同吗

MMMhy 发表于 2026-4-19 19:54:55

{:tieba_43:}{:tieba_43:}{:tieba_43:}

halsheep01 发表于 2026-4-19 19:56:45

贝石米粉 发表于 2026-4-19 19:54
和097版本有什么不同吗

嗯,适配0.98算吗{:5_124:}

天地残霞光 发表于 2026-4-19 23:36:28

利好巨舰大炮,小船难过。赢的越多越强,死的越多越弱,小船很容易爆掉-吃负面-更容易炸循环。战列无畏可以存活,此一赢,活下来吃正面buff,此二赢,有buff更容易赢,此三赢,偶尔一输很容易再赢回来,此四赢。赢赢赢赢无穷尽也,所以巨舰大炮赢。

龙眠喵 发表于 2026-4-19 23:49:03

火速下载开始享受叠叠乐

宙祭司 发表于 2026-4-20 09:18:23

叠叠乐必备套餐{:tieba_12:}

叠韵双声 发表于 2026-4-20 10:00:46

昨天还在想星舰传奇什么时候098

Scrooge 发表于 2026-4-20 10:27:39

本帖最后由 Scrooge 于 2026-4-20 10:30 编辑

报错:
40018628 INFO com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetRouteManager - Added trade fleet route from Athulf 到 Nortia
40029598 INFO pigeonpun.bionicalteration.inventory.ba_inventoryhandler - Finish compress
40142180 INFO pigeonpun.bionicalteration.inventory.ba_inventoryhandler - Finish compress
40721508 INFO pigeonpun.bionicalteration.inventory.ba_inventoryhandler - Finish compress
41087743 INFO pigeonpun.bionicalteration.inventory.ba_inventoryhandler - Finish compress
41100648 INFO pigeonpun.bionicalteration.inventory.ba_inventoryhandler - Finish compress
41215201 INFO pigeonpun.bionicalteration.inventory.ba_inventoryhandler - Finish compress
41314003 ERROR starship_legends.ModPlugin - Format specifier '%s'
    java.base/java.util.Formatter.format(Unknown Source)
    java.base/java.util.Formatter.format(Unknown Source)
    java.base/java.lang.String.format(Unknown Source)
    com.fs.starfarer.ui.newui.String.addPara(Unknown Source)
    com.fs.starfarer.ui.newui.String.addPara(Unknown Source)
    starship_legends.events.OwnCrewBarEvent.optionSelected(OwnCrewBarEvent.java:957)
    starship_legends.events.OwnCrewBarEvent.init(OwnCrewBarEvent.java:758)
    com.fs.starfarer.api.impl.campaign.intel.bar.BarEventDialogPlugin.init(BarEventDialogPlugin.java:31)
    com.fs.starfarer.api.impl.campaign.rulecmd.missions.BarCMD.optionSelected(BarCMD.java:355)
    com.fs.starfarer.ui.newui.o0Oo$1.o00000(Unknown Source)
    com.fs.starfarer.ui.newui.OoOO.actionPerformed(Unknown Source)
    com.fs.starfarer.ui.n.buttonPressed(Unknown Source)
    com.fs.starfarer.ui.int.new(Unknown Source)
    com.fs.starfarer.ui.int.processInput(Unknown Source)
    com.fs.starfarer.ui.W.o00000(Unknown Source)
    com.fs.starfarer.BaseGameState.traverse(Unknown Source)
    com.fs.state.AppDriver.begin(Unknown Source)
    com.fs.starfarer.combat.CombatMain.main(Unknown Source)
    com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
    com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
    java.base/java.lang.Thread.run(Unknown Source)

反编译class检查,问题代码:
   public void init(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
      try {
         super.init(dialog, memoryMap);
         this.done = false;
         if (this.ship == null || this.ship.getVariant() != null && this.subEvent == starship_legends.events.OwnCrewBarEvent.OptionId.REMOVE_DMOD && DModManager.getNumDMods(this.ship.getVariant()) == 0) {
            this.subEvent = starship_legends.events.OwnCrewBarEvent.OptionId.INVALID;
         }

         if (this.subEvent != starship_legends.events.OwnCrewBarEvent.OptionId.INVALID) {
            dialog.getVisualPanel().showFleetMemberInfo(this.ship);
            this.chooseStrings();
            TextPanelAPI var10000 = dialog.getTextPanel();
            String var10001 = this.ship.getShipName();
            var10000.addPara("你去到 " + var10001 + " " + this.officerTypeStr + "中凑热闹. 一些级别较低的军官似乎对他们的老板在休憩时光中加入感到不安 但在你买了一轮酒并声称可以暂时忽视舰上的规矩 后放松了下来.");
         }

         this.optionSelected((String)null, this.subEvent);
      } catch (Exception e) {
         ModPlugin.reportCrash(e);
      }

   }


AI分析结论:


这段代码就是导致你上次崩溃的**核心位置**(OwnCrewBarEvent.init 方法)。

### 问题出在哪里(精确分析)
错误发生在这一行附近:

```java
TextPanelAPI var10000 = dialog.getTextPanel();
String var10001 = this.ship.getShipName();
var10000.addPara("你去到 " + var10001 + " " + this.officerTypeStr + "中凑热闹. 一些级别较低的军官似乎对他们的老板在休憩时光中加入感到不安 但在你买了一轮酒并声称可以暂时忽视舰上的规矩 后放松了下来.");
```

然后紧接着调用 `this.optionSelected(...)`,里面又会继续 `addPara`(崩溃栈显示在第 957 行)。

**根本原因**:
这个中文字符串是**硬编码**在 mod 里的(或来自不完整的中文汉化)。
Starship Legends 在构造对话文本时,使用了类似 `String.format("... %s ...", 参数)` 的方式,但汉化后的字符串里**缺少对应的格式占位符**(比如 `%s` 被直接替换成了固定文字,却没有调整后面的参数数量),或者 `officerTypeStr`、`shipName` 等变量在某些情况下为 `null`,导致格式化失败,抛出 **Format specifier '%s'** 异常。

你提供的这段是 **decompiled**(反编译)后的代码,里面已经混入了中文翻译,但翻译质量/完整性有问题(尤其是 `officerTypeStr` 这个变量很可能在某些船员类型下没有被正确赋值)。

### 推荐修复方案(从易到难)

1. **最推荐:更新 Starship Legends + 汉化补丁**
   这个 bug 在中文环境下很常见,通常是老版本汉化没跟上 mod 更新导致的。
   - 去 **fossic.org** 的星舰传奇专帖,下载**最新版 Starship Legends + 最新汉化**(优先找 2025 或 2026 年更新的版本)。
   - 完全覆盖安装(先备份旧 mod 文件夹)。
   - 重启游戏后,再去酒吧测试。

2. **临时切换语言规避**
   在游戏启动器里把界面语言改成 **English**,然后加载存档去酒吧。
   如果英文下不崩,基本确认是汉化冲突。等汉化更新后再切回中文。

3. **手动简单修复(如果你愿意编辑文件)**
   - 找到路径:`mods/Starship Legends/data/strings/` 或 `data/config/starship_legends/`(也可能在 jar 里)。
   - 搜索包含“你去到”或“凑热闹”的文件(通常是 .json 或 .csv 汉化文件)。
   - 把那段长中文字符串**临时改短**,比如改成:
   `"你去到 " + this.ship.getShipName() + " 的船员中凑热闹。"`
   (去掉后面复杂的部分,避免潜在的格式问题)
   - 保存后重启测试。
   (注意:如果字符串在 jar 里,需要解压 jar 修改后再打包回去,比较麻烦。)

4. **彻底方案**
   - 暂时**禁用 Starship Legends**,确认是否只剩这个 mod 出问题。
   - 如果你装了很多修改酒吧事件的 mod(比如 Nexerelin、某些任务 mod),可以尝试逐个禁用测试冲突。

### 额外建议
- 这个事件是“和自己舰船的船员一起喝酒”相关的 bar event。崩溃时你很可能点进了这个选项。
- 以后遇到类似酒吧/对话崩溃,先把语言切英文,能大大降低概率。
- 确认你的 **Starsector 版本** 和 **Starship Legends 具体版本**(mod_info.json 里能看到),新版通常对中文支持更好。

你现在可以先试 **更新 mod + 切换英文** 这两步,看看是否还崩。
如果更新后还是有问题,把新的崩溃 log(或你修改后的代码)再贴给我,我继续帮你看具体哪一行需要调整。

这个 mod 的中文适配一直有点小毛病,但更新通常就能解决。坚持一下,很快就能修好!




forrevenge 发表于 2026-4-20 11:43:23


酒馆和军官喝酒直接跳出,还好没闪退

Scrooge 发表于 2026-4-20 11:58:14

forrevenge 发表于 2026-4-20 11:43
酒馆和军官喝酒直接跳出,还好没闪退

相同的问题,英文版不会报错

halsheep01 发表于 2026-4-20 17:01:51

Scrooge 发表于 2026-4-20 10:27
报错:




修了一下,感谢反馈

halsheep01 发表于 2026-4-20 17:08:03

Scrooge 发表于 2026-4-20 11:58
相同的问题,英文版不会报错

修了一下

halsheep01 发表于 2026-4-20 18:01:22

叠韵双声 发表于 2026-4-20 10:00
昨天还在想星舰传奇什么时候098

{:5_127:}

XXXXXA 发表于 2026-4-22 02:58:15

进酒馆接受提议点了无效

halsheep01 发表于 2026-4-22 04:25:16

tai1229004 发表于 2026-4-22 02:58
进酒馆接受提议点了无效

请问下载的是新版本bugfix1么,有报错日志么

XXXXXA 发表于 2026-4-22 16:48:19

halsheep01 发表于 2026-4-22 04:25
请问下载的是新版本bugfix1么,有报错日志么

是最新的0.98版本,我点接受提议之后酒馆界面就闪没了,然后左边提示mod报错请告知作者

XXXXXA 发表于 2026-4-22 18:13:32

tai1229004 发表于 2026-4-22 16:48
是最新的0.98版本,我点接受提议之后酒馆界面就闪没了,然后左边提示mod报错请告知作者 ...

报错是Format specifier%/s

喵了个咪的鱼 发表于 2026-4-22 21:42:20

本帖最后由 喵了个咪的鱼 于 2026-4-22 21:47 编辑

halsheep01 发表于 2026-4-22 04:25
请问下载的是新版本bugfix1么,有报错日志么
是的,你没更新4.20这汉化版本之前我都不知道有这个mod,所以我也只下载了这个页面的mod,报错和楼上一样
以下附图

喵了个咪的鱼 发表于 2026-4-22 21:46:27

本帖最后由 喵了个咪的鱼 于 2026-4-22 21:49 编辑

喵了个咪的鱼 发表于 2026-4-22 21:42
是的,你没更新4.20这汉化版本之前我都不知道有这个mod,所以我也只下载了这个页面的末端,报错和楼上一 ...
附上个触发的短视频,以及日志中关于这段代码的报错

472394 ERROR starship_legends.ModPlugin- Format specifier '%s'
    java.base/java.util.Formatter.format(Formatter.java:2760)
    java.base/java.util.Formatter.format(Formatter.java:2698)
    java.base/java.lang.String.format(String.java:4742)
    com.fs.starfarer.ui.newui.String.addPara(Unknown Source)
    com.fs.starfarer.ui.newui.String.addPara(Unknown Source)
    starship_legends.events.OwnCrewBarEvent.optionSelected(OwnCrewBarEvent.java:957)
    starship_legends.events.OwnCrewBarEvent.init(OwnCrewBarEvent.java:758)
    com.fs.starfarer.api.impl.campaign.intel.bar.BarEventDialogPlugin.init(BarEventDialogPlugin.java:31)
    com.fs.starfarer.api.impl.campaign.rulecmd.missions.BarCMD.optionSelected(BarCMD.java:355)
    com.fs.starfarer.ui.newui.o0Oo$1.o00000(Unknown Source)
    com.fs.starfarer.ui.newui.OoOO.actionPerformed(Unknown Source)
    com.fs.starfarer.ui.n.buttonPressed(Unknown Source)
    com.fs.starfarer.ui.int.new(Unknown Source)
    com.fs.starfarer.ui.int.processInput(Unknown Source)
    com.fs.starfarer.ui.n.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.OOOo.processInput(Unknown Source)
    com.fs.starfarer.ui.interfacenew.dispatchEventsToChildren(Unknown Source)
    com.fs.starfarer.ui.interfacenew.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.newui.OoOO.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.OOOo.processInput(Unknown Source)
    com.fs.starfarer.ui.g$Oo.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.OOOo.processInput(Unknown Source)
    com.fs.starfarer.ui.interfacenew.dispatchEventsToChildren(Unknown Source)
    com.fs.starfarer.ui.interfacenew.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.g.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.OOOo.processInput(Unknown Source)
    com.fs.starfarer.ui.interfacenew.dispatchEventsToChildren(Unknown Source)
    com.fs.starfarer.ui.interfacenew.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.oo0O.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.newui.o0Oo.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.OOOo.processInput(Unknown Source)
    com.fs.starfarer.ui.interfacenew.dispatchEventsToChildren(Unknown Source)
    com.fs.starfarer.ui.interfacenew.processInputImpl(Unknown Source)
    com.fs.starfarer.ui.OOOo.processInput(Unknown Source)
    com.fs.starfarer.campaign.CampaignState.processInput(Unknown Source)
    com.fs.starfarer.BaseGameState.traverse(Unknown Source)
    com.fs.state.AppDriver.begin(Unknown Source)
    com.fs.starfarer.combat.CombatMain.main(Unknown Source)
    com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
    com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
    java.base/java.lang.Thread.run(Thread.java:1516)

halsheep01 发表于 2026-4-22 22:17:10

喵了个咪的鱼 发表于 2026-4-22 21:46
附上个触发的短视频,以及日志中关于这段代码的报错

472394 ERROR starship_legends.ModPlugi ...

感谢,我试着排查一下

9.29赫兹 发表于 2026-4-26 23:42:26

喵了个咪的鱼 发表于 2026-4-22 21:42
是的,你没更新4.20这汉化版本之前我都不知道有这个mod,所以我也只下载了这个页面的mod,报错和楼上一样
...

一样的报错

hehe_kk 发表于 2026-4-27 12:54:00

多谢分享

飞将奉先 发表于 2026-5-11 12:42:16

[游戏日志]

7299655 INFOdata.campaign.econ.industries.SupplyReductionHullMod- --- End of values after attempting LunaSettings load (end of try block) ---
7299656 INFOsound.O- Cleaning up music with id
7299661 INFOsound.O- Cleaning up music with id
7299739 ERROR com.fs.starfarer.combat.CombatMain- java.util.ConcurrentModificationException
java.util.ConcurrentModificationException: null
        at java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:1024) ~[?:?]
        at java.base/java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:1047) ~[?:?]
        at com.fs.starfarer.loading.specs.HullVariantSpec.updateStatsForOpCosts(Unknown Source) ~
        at com.fs.starfarer.loading.specs.HullVariantSpec.computeWeaponOPCost(Unknown Source) ~
        at dal.impl.campaign.skills.CaptainsOrdnanceExpertise$Level1.getOPFromStats(CaptainsOrdnanceExpertise.java:95) ~[?:?]
        at dal.impl.campaign.skills.CaptainsOrdnanceExpertise$Level1.apply(CaptainsOrdnanceExpertise.java:36) ~[?:?]
        at dal.impl.campaign.skills.CaptainsSupportDoctrine$Level1.apply(CaptainsSupportDoctrine.java:76) ~[?:?]
        at com.fs.starfarer.campaign.CharacterStats.applyFleetwideToStats(Unknown Source) ~
        at com.fs.starfarer.campaign.fleet.FleetMember.updateStats(Unknown Source) ~
        at starship_legends.RepRecord.updateRepHullMod(RepRecord.java:345) ~[?:?]
        at starship_legends.CampaignScript.reportPlayerClosedMarket(CampaignScript.java:362) ~[?:?]
        at com.fs.starfarer.campaign.CampaignEngine.reportPlayerClosedMarket(Unknown Source) ~
        at com.fs.starfarer.campaign.CampaignState.dialogDismissed(Unknown Source) ~
        at com.fs.starfarer.ui.oo0O.dismiss(Unknown Source) ~
        at com.fs.starfarer.ui.newui.M.dismiss(Unknown Source) ~
        at com.fs.starfarer.ui.newui.o0Oo.advanceImpl(Unknown Source) ~
        at com.fs.starfarer.ui.OOOo.advance(Unknown Source) ~
        at com.fs.starfarer.ui.interfacenew.advanceImpl(Unknown Source) ~
        at com.fs.starfarer.ui.OOOo.advance(Unknown Source) ~
        at com.fs.starfarer.campaign.CampaignState.advance(Unknown Source) ~
        at com.fs.starfarer.BaseGameState.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(Thread.java:1516) [?:?]
7299799 INFOsound.O- Creating streaming player for music with id


大佬好,查询AI得知
方案 2(不想禁用任何 MOD)
打开远行星号 mods 文件夹
找到 Starship Legends 文件夹
进入 config 文件夹
打开 settings.json
找到这一行:
json
"enableHullModDynamicUpdates":true
改为:
json
"enableHullModDynamicUpdates":false
保存,重启游戏
这个设置会关闭舰船传奇 MOD 的实时属性刷新,从根源避免并发修改冲突。
但是我没找到这个选项,请问是在哪个文件里啊?

halsheep01 发表于 2026-5-13 19:41:50

飞将奉先 发表于 2026-5-11 12:42
[游戏日志]

7299655 INFOdata.campaign.econ.industries.SupplyReductionHullMod- --- End ...

看起来是星舰传奇与高质量舰长冲突了,不过这应该不是汉化导致的问题,另外星舰传奇的文件settings.json中并没有enableHullModDynamicUpdate这一项,我也不知道他可能在什么文件中

飞将奉先 发表于 2026-5-13 20:45:01

halsheep01 发表于 2026-5-13 19:41
看起来是星舰传奇与高质量舰长冲突了,不过这应该不是汉化导致的问题,另外星舰传奇的文件settings.json ...

收到!感谢大佬!不过我没能解决问题,只能下了星舰传奇玩了。
页: [1]
查看完整版本: [0.98]星舰传奇 Starship Legends