|
|
发表于 2026-11-6 09:09:51
|
显示全部楼层
kickis 你好!
有玩家给我发了一份天工联合船舶设计局 2.5.8 的崩溃日志,我查了一下原因:同时安装 DRAPE 模组时,天穹舰队(CFU_pantuFleet)生成时会导致游戏直接崩溃。
原因:
CFU_pantuFleet.spawn() 用 createEmptyFleet() 以 "pirates" 势力创建舰队,所以 fleet.getInflater() 为 null。执行 system.spawnFleet()(CFU_pantuFleet.java:387)时,DRAPE 的 reportFleetSpawned() 识别到这是海盗舰队,调用了 fleet.getInflater().getQuality(),抛出空指针异常,游戏崩溃。因为崩溃发生在生成计数之前,之后会不断重试,同一个存档会反复崩溃。
我也对比过原版中文 2.5.8,代码完全相同,所以不是翻译造成的。DRAPE 那边也应该加空值检查,不过没有 inflater 的海盗舰队也可能影响其他依赖它的模组。
可能的修复方法(在 spawnFleet 之前加入):
DefaultFleetInflaterParams p = new DefaultFleetInflaterParams();
p.factionId = FACTION_ID;
p.quality = 1f;
p.persistent = true;
p.seed = new Random().nextLong();
p.mode = FactionAPI.ShipPickMode.PRIORITY_THEN_ALL;
p.timestamp = Global.getSector().getClock().getTimestamp();
fleet.setInflater(new DefaultFleetInflater(p));
fleet.setInflated(true); // 防止手动配置的武器被自动重新配装
CFU_artificerGuardFleet 的舰队也是用同样方式创建的,建议一起加上。
请问你是打算在下次更新中自己修复,还是允许我在我做的英文翻译版里加一个小补丁?如果可以的话,我会注明原作者,并且只改动这两个舰队生成的文件。两种方式我都可以!
感谢制作这个模组。
a\graphics\armaa\factions\armaa_logo01_crest.png]
1594873 [Thread-3] WARN org.lazywizard.lazylib.ui.LazyFont - Character 'ä' is not defined in font data
1594874 [Thread-3] INFO kmlib.starsector.ui.font.SettledFaceMemo - Text asking for orbitron20aa against [MOD_STRINGS, PLACE_NAMES] draws in graphics/fonts/insignia15LTaa.fnt
1594910 [Thread-6-FR-Render] INFO com.genir.renderer.bridge.context.TextureManager - Texture loading time: 44.03ms
1622586 [Thread-3] INFO variants_lib.scripts.FleetRandomizer - trying to modify Explorarium Directory
1622587 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - $fleetType $salvageSeed $spawnFPMult $justToggledTransponder $abyssalDepth $abyssalDepthUncapped $onOrAt $locationId $id $transponderOn $name $fullName $inHyperspace $relativeStrength $isHostile $fleetPoints $isStation $supplies $fuel $knowsWhoPlayerIs $sawPlayerTransponderOn $nex_canMine
1622587 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - refused to modify fleet because faction is not registered
1622647 [Thread-3] INFO variants_lib.scripts.FleetRandomizer - trying to modify Explorarium Superdirectory
1622647 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - $fleetType $salvageSeed $spawnFPMult $justToggledTransponder $abyssalDepth $abyssalDepthUncapped $onOrAt $locationId $id $transponderOn $name $fullName $inHyperspace $relativeStrength $isHostile $fleetPoints $isStation $supplies $fuel $knowsWhoPlayerIs $sawPlayerTransponderOn $nex_canMine
1622647 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - refused to modify fleet because faction is not registered
1622654 [Thread-3] INFO variants_lib.scripts.FleetRandomizer - trying to modify Explorarium Superdirectory
1622654 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - $fleetType $salvageSeed $spawnFPMult $justToggledTransponder $abyssalDepth $abyssalDepthUncapped $onOrAt $locationId $id $transponderOn $name $fullName $inHyperspace $relativeStrength $isHostile $fleetPoints $isStation $supplies $fuel $knowsWhoPlayerIs $sawPlayerTransponderOn $nex_canMine
1622654 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - refused to modify fleet because faction is not registered
1622705 [Thread-3] INFO variants_lib.scripts.FleetRandomizer - trying to modify Explorarium Directory
1622705 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - $fleetType $salvageSeed $spawnFPMult $justToggledTransponder $abyssalDepth $abyssalDepthUncapped $onOrAt $locationId $id $transponderOn $name $fullName $inHyperspace $relativeStrength $isHostile $fleetPoints $isStation $supplies $fuel $knowsWhoPlayerIs $sawPlayerTransponderOn $nex_canMine
1622706 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - refused to modify fleet because faction is not registered
1622716 [Thread-3] INFO exerelin.campaign.CovertOpsManager - Starting covert warfare event creation
1622757 [Thread-3] INFO variants_lib.scripts.FleetRandomizer - trying to modify Explorarium Subdirectory
1622757 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - $fleetType $salvageSeed $spawnFPMult $justToggledTransponder $abyssalDepth $abyssalDepthUncapped $onOrAt $locationId $id $transponderOn $name $fullName $inHyperspace $relativeStrength $isHostile $fleetPoints $isStation $supplies $fuel $knowsWhoPlayerIs $sawPlayerTransponderOn $nex_canMine
1622757 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - refused to modify fleet because faction is not registered
1622760 [Thread-3] INFO variants_lib.scripts.FleetRandomizer - trying to modify Explorarium Superdirectory
1622760 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - $fleetType $salvageSeed $spawnFPMult $justToggledTransponder $abyssalDepth $abyssalDepthUncapped $onOrAt $locationId $id $transponderOn $name $fullName $inHyperspace $relativeStrength $isHostile $fleetPoints $isStation $supplies $fuel $knowsWhoPlayerIs $sawPlayerTransponderOn $nex_canMine
1622760 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - refused to modify fleet because faction is not registered
1622767 [Thread-3] INFO variants_lib.scripts.FleetRandomizer - trying to modify Explorarium Superdirectory
1622767 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - $fleetType $salvageSeed $spawnFPMult $justToggledTransponder $abyssalDepth $abyssalDepthUncapped $onOrAt $locationId $id $transponderOn $name $fullName $inHyperspace $relativeStrength $isHostile $fleetPoints $isStation $supplies $fuel $knowsWhoPlayerIs $sawPlayerTransponderOn $nex_canMine
1622767 [Thread-3] DEBUG variants_lib.scripts.FleetRandomizer - refused to modify fleet because faction is not registered
1622813 [Thread-3] INFO data.scripts.DRAPE_FleetTransmogrifier - null
1623050 [Thread-3] ERROR com.fs.starfarer.combat.CombatMain - java.lang.NullPointerException: Cannot invoke "com.fs.starfarer.api.campaign.FleetInflater.getQuality()" because the return value of "com.fs.starfarer.api.campaign.CampaignFleetAPI.getInflater()" is null
java.lang.NullPointerException: Cannot invoke "com.fs.starfarer.api.campaign.FleetInflater.getQuality()" because the return value of "com.fs.starfarer.api.campaign.CampaignFleetAPI.getInflater()" is null
at data.scripts.DRAPE_FleetTransmogrifier.transmogrifyPirates(DRAPE_FleetTransmogrifier.java:210) ~[?:?]
at data.scripts.DRAPE_FleetTransmogrifier.reportFleetSpawned(DRAPE_FleetTransmogrifier.java:88) ~[?:?]
at com.fs.starfarer.campaign.CampaignEngine.reportFleetSpawned(Unknown Source) ~[starfarer_obf.jar:?]
at com.fs.starfarer.campaign.BaseLocation.addObjectReal(Unknown Source) ~[starfarer_obf.jar:?]
at com.fs.starfarer.campaign.BaseLocation.addObject(Unknown Source) ~[starfarer_obf.jar:?]
at com.fs.starfarer.campaign.BaseLocation.spawnFleet(Unknown Source) ~[starfarer_obf.jar:?]
at data.scripts.world.fleets.CFU_pantuFleet.spawn(CFU_pantuFleet.java:387) ~[?:?]
at data.scripts.world.fleets.CFU_pantuFleet.advance(CFU_pantuFleet.java:271) ~[?:?]
at com.fs.starfarer.campaign.CampaignEngine.advance(Unknown Source) ~[starfarer_obf.jar:?]
at com.fs.starfarer.campaign.CampaignState.advance(Unknown Source) ~[starfarer_obf.jar:?]
at com.fs.starfarer.BaseGameState.traverse(Unknown Source) ~[starfarer_obf.jar:?]
at com.fs.state.AppDriver.begin(Unknown Source) ~[fs.common_obf.jar:?]
at com.fs.starfarer.combat.CombatMain.main(Unknown Source) [starfarer_obf.jar:?]
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source) [starfarer_obf.jar:?]
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source) [starfarer_obf.jar:?]
at java.base/java.lang.Thread.run(Thread.java:1552) [?:?]
[FR Resource Cache] summary: 130044 requests, 0 hits (0 B), 0 misses (0 B read from source), 130044 bypasses, 0 stale, 0 corrupt, 0 unstable(actively-changing), 0 indexed resources, pack size n/a
Press any key to continue . . . |
|