[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错误导致的报错
作者授权:
我记得这也是叠叠乐套餐中的一个。 棒棒 給你個讚 和097版本有什么不同吗 {:tieba_43:}{:tieba_43:}{:tieba_43:} 贝石米粉 发表于 2026-4-19 19:54
和097版本有什么不同吗
嗯,适配0.98算吗{:5_124:} 利好巨舰大炮,小船难过。赢的越多越强,死的越多越弱,小船很容易爆掉-吃负面-更容易炸循环。战列无畏可以存活,此一赢,活下来吃正面buff,此二赢,有buff更容易赢,此三赢,偶尔一输很容易再赢回来,此四赢。赢赢赢赢无穷尽也,所以巨舰大炮赢。 火速下载开始享受叠叠乐 叠叠乐必备套餐{:tieba_12:} 昨天还在想星舰传奇什么时候098 本帖最后由 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
酒馆和军官喝酒直接跳出,还好没闪退
相同的问题,英文版不会报错 Scrooge 发表于 2026-4-20 10:27
报错:
修了一下,感谢反馈 Scrooge 发表于 2026-4-20 11:58
相同的问题,英文版不会报错
修了一下 叠韵双声 发表于 2026-4-20 10:00
昨天还在想星舰传奇什么时候098
{:5_127:} 进酒馆接受提议点了无效 tai1229004 发表于 2026-4-22 02:58
进酒馆接受提议点了无效
请问下载的是新版本bugfix1么,有报错日志么 halsheep01 发表于 2026-4-22 04:25
请问下载的是新版本bugfix1么,有报错日志么
是最新的0.98版本,我点接受提议之后酒馆界面就闪没了,然后左边提示mod报错请告知作者 tai1229004 发表于 2026-4-22 16:48
是最新的0.98版本,我点接受提议之后酒馆界面就闪没了,然后左边提示mod报错请告知作者 ...
报错是Format specifier%/s 本帖最后由 喵了个咪的鱼 于 2026-4-22 21:47 编辑
halsheep01 发表于 2026-4-22 04:25
请问下载的是新版本bugfix1么,有报错日志么
是的,你没更新4.20这汉化版本之前我都不知道有这个mod,所以我也只下载了这个页面的mod,报错和楼上一样
以下附图
本帖最后由 喵了个咪的鱼 于 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)
喵了个咪的鱼 发表于 2026-4-22 21:46
附上个触发的短视频,以及日志中关于这段代码的报错
472394 ERROR starship_legends.ModPlugi ...
感谢,我试着排查一下 喵了个咪的鱼 发表于 2026-4-22 21:42
是的,你没更新4.20这汉化版本之前我都不知道有这个mod,所以我也只下载了这个页面的mod,报错和楼上一样
...
一样的报错
多谢分享 [游戏日志]
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 的实时属性刷新,从根源避免并发修改冲突。
但是我没找到这个选项,请问是在哪个文件里啊? 飞将奉先 发表于 2026-5-11 12:42
[游戏日志]
7299655 INFOdata.campaign.econ.industries.SupplyReductionHullMod- --- End ...
看起来是星舰传奇与高质量舰长冲突了,不过这应该不是汉化导致的问题,另外星舰传奇的文件settings.json中并没有enableHullModDynamicUpdate这一项,我也不知道他可能在什么文件中 halsheep01 发表于 2026-5-13 19:41
看起来是星舰传奇与高质量舰长冲突了,不过这应该不是汉化导致的问题,另外星舰传奇的文件settings.json ...
收到!感谢大佬!不过我没能解决问题,只能下了星舰传奇玩了。
页:
[1]