找回密码
 初始化身份识别芯片
搜索
查看: 13|回复: 0

写MOD的时候发现了一个崩溃异常,然后AI在修复的时候顺便扫描出了一下别人MOD的问题

[复制链接]

巡洋大副

发表于 1 小时前 | 显示全部楼层 |阅读模式
Mod Bug汇报
待解决
游戏版本: 0.98
Mod中文名:
Mod版本:
游戏日志:
ERROR com.fs.starfarer.combat.CombatMain - java.util.UnknownFormatConversionException: Conversion = '。'
at java.util.Formatter.parse → java.lang.String.format
at com.fs.starfarer.ui.impl.StandardTooltipV2Expandable.addPara
at com.fs.starfarer.ui.impl.StandardTooltipV2$12.createImpl ← 这就是「船插 tooltip」
... 后面是 CampaignState / refit(ModWidget)的 UI 事件分发
    复现步骤:
    机理(都用 javap -c 在 starfarer_obf.jar 上实证):
    • StandardTooltipV2$12 是船插 tooltip,它恒构造 new String[10](逐个调 getDescriptionParam(0..9, …)),再把 desc 和这个数组交给 addPara;
    • addPara 的分支是「参数数组非空 → String.format(text, params)」,数组恒 10 个元素 → 船插描述恒被 String.format;
    • 所以 hull_mods.csv 的 desc 里裸写百分号会当场抛异常,鼠标一悬停就崩整局。日志报的字符就是「第一个非法 % 紧跟的那个字符」。
    元凶:caldari_chimera_refit「加达里海军奇美拉级改装套件」,desc 结尾是 受到的护盾伤害 -4%。 → Conversion = '。'。同一批还有 7 个是雷(;×4、(×2,另 1 个也是 ;),只是你这次先悬停到奇美拉那个。第 12 轮那 8 个改装套件/增强器全部中招,只有凤凰级的感应增强器安全(它的 % 是合法占位符 {%s})。
    定位没有靠猜:我写了两个工具让真 JDK 判(grep '%。' 会误判 —— %500%、%-30% 在 Java 里都是合法格式串):
    全库船插描述「格式串」危险清单(真 JDK 探针,2026-10-10)
    生成:work\collect_format_strings.py + work\FormatProbe.java,扫描 starsector-core\data + 143 个已装 MOD 的 全部 hull_mods.csv / descriptions.csv / wing_data.csv(371 个 CSV / 2634 条含 % 的候选串)。
    判据:按 10 个参数跑真 String.format(与 StandardTooltipV2$12 给船插 desc 的调用完全一致)。 抛异常 = 鼠标一悬停在那个船插上就崩游戏。
    hullmod id字段抛出的字符所属 MOD状态



    A_S-F_integratedRangefindersdesc效Amazigh锻船厂第三方,仍会崩
    aEP_FighterArmordesc}FSF_MilitaryCorporation第三方,仍会崩
    FSD_RLIntranetdesc%s(参数下标超 10 个)FarsightDrive第三方,仍会崩
    indEvo_ghost_ship_plaguedesc,IndEvo第三方,仍会崩
    kyeltziv_rangefinders_suojusdesc,Kyeltziv Technocracy_1.10.7_zh第三方,仍会崩
    MSS_Militarizeddesc的Mayasuran Navy第三方,仍会崩
    A_S-F_integratedRangefindersshort效Amazigh锻船厂第三方,short 路径未证实
    vice_supercruise_enginesshort空格Emergent Threats第三方,short 路径未证实
    ix_improved_supercruiseshort空格Emergent Threats-IX Revival第三方,short 路径未证实
    MSS_LastStandshort空格Mayasuran Navy第三方,short 路径未证实
    sce_lg_fightershort%Strike Craft Expansion第三方,short 路径未证实
    XHAN_CronososTechshort标志位与转换符不匹配XhanEmpire第三方,short 路径未证实
    mimikko_kasutariri_radiant_mainship_hullmodshort,mimikko098v0.762第三方,short 路径未证实
    zg_zsjtzz / zg_nmxfxt / zg_sjxbctshort时知识管理者第三方,short 路径未证实

    说明:
    • desc 字段是已证实的崩溃路径:StandardTooltipV2$12(船插 tooltip,javap -c 实证)恒把 desc 与 10 个 getDescriptionParam(...) 值交给 addPara(),而 addPara() 只要参数数组非空 就跑 String.format(),数组恒为 10 个元素 → 恒格式化。上表 desc 行 = 悬停必崩。
    • short 字段的格式化路径没有证据(Emergent Threats 这类常用 MOD 的 short 有裸 % 也一直没人报崩), 所以那 8 条只当作"待观察",不要照本表去改别人的 MOD。

    *滑块验证:

    本版积分规则

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

    GMT+8, 2026-10-10 05:38

    Powered by Discuz! X3.5

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

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